Changelog
What we shipped, when we shipped it.
April 16, 2026
Speech-to-text dictation on asset captions
Dictate context notes with your phone mic. Comma-separated descriptors, cursor-aware insertion. Chrome + Safari supported via Web Speech API.
Service entity + GBP category intelligence
6–8 service tiles auto-derived from your brand playbook, anchored to Google Business Profile categories for local SEO. Services appear on the /work page and each gets a /services/[slug] detail page with schema.org markup.
Free GBP category diagnostic
Public tool at /tools/gbp-diagnostic. Enter your business type, get primary + additional GBP category recommendations with reasoning. No signup required.
TracPost marketing site
New marketing site scaffold at next.tracpost.com. 14-section homepage, pricing page, 8 industry landing pages, ROI calculator, live network feed, auto-populated case studies.
April 15, 2026
Image replace-in-place
Referenced assets can no longer be force-deleted. Instead, upload a replacement — bytes overwrite the existing R2 object at the same URL, so every reference (blog body, OG images, social posts) keeps working. HEIC auto-converts to JPEG. Cloudflare edge cache purges instantly.
Media library sort fix
Oldest/newest sort now selects from the correct end of the dataset. Project filter moved into SQL so narrow project views show all matching assets regardless of library size.
HEIC cleanup pipeline
Original HEIC files are now deleted from R2 after JPEG conversion. Orphan cleanup script reclaimed 384 MB from existing uploads.
Cloudflare CDN cache purge
Replace and delete operations now purge the Cloudflare edge cache for the affected URL. New images appear immediately instead of serving stale bytes for up to 24 hours.
April 14, 2026
Centralized marketing with 6-slot page model
Every tenant marketing site now runs on ISR with variant dispatch. Six stable page slots (home, about, work, blog, projects, contact) with per-slot variant selection. SaaS and service-business variants for home, about, work, and contact.
TracPost as tenant of itself
TracPost's public site renders through the same centralized tenant engine as every other customer. Blog, projects, and marketing pages all served from the same codebase.
Phase 3 cleanup
Removed the legacy static-site deploy pipeline (website spinner). 2,393 lines of dead code deleted. Copy generator moved to lib/tenant-site/.
April 13, 2026
Route refactor complete
Migrated from subdomain-based routing (blog.*, projects.*) to path-based routing (/blog/*, /projects/*). Custom domain resolution via middleware. Preview subdomain for stakeholder previews with automatic 301 graduation post-DNS-cutover.