25 posts · all posts
The Bamboo House Gets Its Own Page
The Tags Were There the Whole Time
Portal mutable state, from JSON files to SQLite (Phase 3a)
Self-hosting the portal on a Mac mini via Cloudflare Tunnel + Access (Phase 3c Tier 1)
Removing orphan content/posts/ from an earlier broken sync (Contentlayer slug gotcha)
Dev command center, macOS Keychain integration, and proactive Xero token refresh
Landing page i18n: Spanish, Portuguese, and Italian translations via an Anthropic-backed CLI
Adding Vercel Web Analytics to the landing pages (two lines, zero dependencies)
Landing page redesign: GoHighLevel layout, SEO metadata, and a conversion copy rewrite
Writing down the landing page update process (and refreshing memory files)
FL 718.111(12)(g) association website and Xero PDF attachments
First pass at honest-cam landing pages
Writing the architecture docs before writing the code
OCR pipeline: structured field extraction from 941 PDFs via native Anthropic PDF support
The Honest CAM platform MVP: Xero sync, billing, reporting, budgets (and a rename from PropCo)
Owner portal: FastAPI + HTMX with magic-link auth and Stripe checkout
Fixing six factually wrong CAM exam questions and expanding the bank to 105
Study portal: mobile quiz UI, browser speech synthesis, and a team-training admin view
Initial scaffold: an AI-first property management monorepo
Swapping Twitter for Substack and giving the sidebar logo a refresh
Allowing Google Tag Manager through the Content-Security-Policy
Fixing a CSP typo: directive names don't take colons
Adding Google Analytics to a Next.js blog the old-fashioned way
A one-line whitespace fix on the gtag script tag
Migrating to GA4, swapping in Google Tag Manager, and renaming the site to steven.ocampo.io