Blog
Notes from the build
You know your business better than we ever will. This is the other half — how the web side actually works, in plain English, written from inside the build.
Latest · What visitor identification actually matchesVendor demos show 80 to 90 percent company match. Production traffic runs 30 to 65. The gap is not a bug, it is the sales process working as designed.Read it →
The CPM panic nobody bothered to checkEvery agency deck says Meta CPMs are climbing. The largest managed-spend dataset in the business says they fell 3 percent. Here is what actually moved.470 pages of local SEO from one data libraryHow we built a 470-page site for a residential contractor, with 417 structured sub-service pages that each map to something homeowners actually search.88 videos, zero third-party bytesHow we built an 88-video library where no YouTube code loads until a visitor presses play, with structured data so search engines still see them.Flying visitors over a photorealistic 3D townA digital archive for a historic town: camera flights over a photorealistic 3D model, record cards anchored to real coordinates, and a graceful 2D fallback.A distributor map with no API keysHow we put 89 distributor locations on an interactive map with zero API keys and zero monthly bill: geocode once at build time, then serve static JSON.A privacy policy that matches the codeLegal pages written as typed data that mirrors what the site actually does: if the policy says nothing tracks before consent, the render tree enforces it.AI search is the new front pageMore buyers ask AI engines and read one answer instead of ten links. The plumbing we ship so clients get cited: entity graphs, llms.txt, answer-shaped pages.AI writes the code. Humans hold the bar.Our stance on AI-assisted engineering: the model writes the code, and nothing ships without green builds, full-page review, and screenshot verification.Answer-shaped writing: copy an answer engine can liftHow we write copy that answer engines can quote: one idea per section, honest question headings, plain definitions first, and a technical version on demand.Bento beats bullets: why every grid needs a featured tileWhy we turn flat lists into bento grids with one featured tile: hierarchy tells a visitor what matters first. An equal-weight grid is a decision nobody made.Buyers search problems, not SKUsPlant-floor buyers type "leak" and "rust", not product codes. How hand-built synonym maps and static search indexes meet them where they are.Claude 2 to Claude 5: what actually changedA working history of Claude 2, 3, 3.5, 4, and 5: how each public generation changed production web work, from autocomplete to whole features.A static site the client edits liveHow a 109-product industrial catalog stays a fast static site while the client edits it live through our portal, with changes on the page in seconds.Dark is a design language, not an inversionDark-first design done properly: surfaces lifted off pure black, cool undertone ramps, AA-tuned text tiers, and why inverted light sites always feel wrong.Designing in the browserChapter nine of the archive: how designing in the browser reshaped the work, from class naming systems to style guides and component thinking.Designing reverence: a church site outside our comfort zoneWhy we built a warm ivory and serif design system for a church, and a liturgical season engine that re-themes the whole site from pure date math forever.Engineering the first secondThe LCP levers that survived production: CSS keyframe hero entrances, per-role image quality, priority preloads, and the over-compressed hero trap.Going fully customChapter 15 of the archive. The move to fully custom code: what owning the whole stack makes possible, what the safety rails cost, and what still decides.Goodbye, Universal Analytics: the GA4 migrationChapter six: Universal Analytics gets a shutdown date, GA4 turns sessions into events, dashboards break, and analytics becomes something you must own.Handing clients the keysChapter eleven of the archive: client handoff in the Webflow era, where the Editor separated content from design and ended broken-layout calls.Hierarchy from size, not decorationThe most important thing on the page should simply be the biggest. One featured element leads, supporting pieces follow, and nothing begs for attention.How people browse nowHow people actually find and judge websites now: assistant answers, phone-first browsing, and split-second trust, and what that demands of site structure.How we stopped losing leadsHoneypots that fake success to bots, per-IP rate limits, and forms that fail loud with a phone number. How we made lead delivery fail-closed.JSON-LD that tells the truthStructured data as an honesty exercise: entity graphs generated from the same typed data the pages render, and a hard rule against fake star ratings.Living in DiviChapter one of the archive: life inside the Divi builder, the speed a visual builder gave a small studio, and the lock-in it quietly charged for it.Mobile is its own design, not a squeezed desktopA phone layout is a deliberate design, not a shrunken desktop. Single-column heroes, thumb-size targets, safe-area gutters, and proof at a real viewport.Most cookie banners are theaterMost consent banners sit on top of trackers that already fired. Ours gate structurally: no script, no request, no cookie until opt-in, and GPC is honored.Motion that earns its placeAnimation guides the eye or it gets cut. How we gate every effect behind reduced motion, and why we just slowed our own homepage marquee to a third speed.Moving 460 pages off Webflow without losing oneHow we moved an entire Webflow CMS into a typed data layer: 893 records, 1,507 re-hosted assets, and a build that fails if one old CDN URL survives.No stock photos: real photography or nothingA stock photo pretending to be your team erodes trust on sight. How we source, verify, and place real project photography, and what we do when none exists.One form to rule every CTAEvery call to action on our sites opens the same multi-step wizard. Why scattering five contact options loses leads, and how one path converts.Opening the field notesWe have spent years shipping custom-coded, AI-assisted sites and writing almost none of it down. Today we publish the backlog, and weekly from here.Own your accessibility layerWe built our accessibility widget in-house: 7 one-click profiles, 23 adjustments, contrast that remaps design tokens, shipped as code the client owns.A pixel-for-pixel re-platform, measured from the live DOMHow we cloned Prime Coat's live Webflow site onto Next.js by measuring the real DOM, 132 pages with matching slugs, so the cutover needs no redirects.Product data is the real websiteWhy our 400-page catalogs stay maintainable: typed data pipelines, fail-loud build guards, and gap reports that surface missing specs instead of guessing.Redirects are SEO insuranceRedirect hygiene for replatforms: every legacy URL 301s in exactly one hop, redirect maps live as typed data, and slug parity can erase the problem.Search starts answeringChapter 13 of the archive. Google's SGE becomes AI Overviews, the answer box starts eating clicks, and the first answer-engine playbook takes shape.Security headers for small businessesWhy contractor sites deserve enterprise posture: full security-header suites, per-directive reasoning, rate-limited APIs, and honeypots that fake success.SEO when Google gets helpfulChapter four of the archive: Google's Helpful Content era, the death of thin doorway pages, and the doctrine that every page must earn its existence.Templates, wireframes, libraries, or scratchChapter ten of the archive: a working framework for choosing between templates, wireframes, component libraries, and building from scratch, by goal and budget.The ceiling of no-codeChapter 14 of the archive. The no-code ceiling arrives: CMS limits, logic in embeds, rented data, and a pattern that feels exactly like leaving WordPress.The day ChatGPT landedChapter twelve of the archive: ChatGPT arrives, the industry splits into panic and pasting, and a first honest read on AI content and quality.The Reels pivot: short video eats small-business marketingChapter five: short video takes over small-business marketing, privacy changes hobble paid social, and the founder bets on showing real work on camera.The road hereThe whole road in one chapter: what WordPress, Webflow, custom code, and AI each taught, and why this archive speaks in the voice of every era it covers.The tells of an AI template siteBlue-to-violet gradients, round 100% stats, em-dash copy, stock desk photos: how to spot an AI template site, and the details expert work gets right.The thirty-plugin stackChapter two of the archive: the classic WordPress plugin stack, update-night anxiety, the white screen of death, and the rule about Friday updates.The three-second scan: our first law of layoutNever ship a wall of text. Every section has to survive a three-second scan, and prose past three paragraphs gets restructured, never rewritten or cut.Twenty-four designs, one brandInstead of one mockup, we built a client 24 complete homepage directions on a single route, each production-grade, and let them flip through live and pick.Web trends 2022 to 2026: what died and what stuckPreloader curtains, scroll-jacking, glass on everything, AI gradients: a look back at the web trends of 2022 to 2026 that died, and the ones that stuck.Webflow ate my plugin folderChapter eight: an inventory of the WordPress plugin folder and the Webflow features that replaced it natively, from forms and redirects to SSL and hosting.Welcoming the AI crawlers: a robots file that says yesHow we made a contractor site readable to the machines that answer: 18 named AI crawlers welcomed, an llms.txt companion, and IndexNow pings on deploy.What a real Lighthouse 100 actually takesLab scores drift, Chrome's LCP heuristics have traps, and animated pages trade points for character. What a genuine 100 takes, and when we accept a 96.What AI can't fake: integrity as strategyAnyone can generate a plausible website in an afternoon now. Verifiable truth is the differentiator: every number traces to a real build, or it does not ship.When custom got cheapAI-assisted engineering flips the old build math: fully custom starts to cost what templates once did, and the quality bar matters more than the tool.Why I left WordPress for WebflowChapter seven: the move from WordPress to Webflow, what triggered it, what felt risky about leaving the ecosystem, and what got better immediately.Why industrial catalogs should be staticWe render 200 to 500 page industrial catalogs as fully static files. The case for speed, resilience, and zero CMS attack surface, with real numbers.Why we standardized on ClaudeWhat we compared when we standardized on Claude, why long-context code quality and instruction-following won, and what one model family changed.WordPress to Next.js without losing GoogleHow we re-platformed a federal IT contractor from WordPress to Next.js with 301 middleware that catches every legacy URL, Yoast sitemaps included.Chasing Yoast green lightsChapter three of the archive: chasing Yoast green dots, what the focus keyphrase really measured, and the metadata discipline the habit left behind.Zero hydration: one small island, no framework taxServer components by default plus one small vanilla JS island for reveals and hovers. Main-thread blocking measured at zero, no animation library needed.
The first pieces
Get notified when the first pieces go live
The opening articles are being written now. Leave an email and we'll send the first ones the day they publish — that's the only thing it's for.
Let's build something great.
Start your project
Free, no-pressure consult — let's talk.
