Build logs
Working notes from inside the studio.
What we tried, what the numbers said, what changed, what broke. Lower polish, higher signal. Posted as we ship.
-
One dependency that couldn't launch took the whole app down with it
collimer ·A Chrome process wired as a permanent child of the root supervisor exhausted its restart budget when it failed to launch, and the exit cascaded into shutting down scans, dashboards, the API, and background jobs together.
-
Two fixes that were quietly guessing, corrected the same week
collimer ·A database-pool fix and a marketing-attribution default were both confidently wrong in the same shape: each cited its own rationale, and nobody had checked that rationale against the actual code.
-
Naming Profound, and choosing to go slower on purpose
Collimer's second launch-post cycle made two real decisions: name a real competitor directly instead of gesturing at 'tools in the market,' and recontextualize the original ten-design-partner ambition instead of quietly replacing it.
-
A content skill you hand to the client is a different design problem than one you keep
Building a content skill meant to run inside a client's own repository, without us in the room, taught three disciplines an internal-only tool can skip. The first correction it got wrong taught us the most.
-
An operating scorecard that runs itself
sandcastlelabs ·We moved the studio's operating scorecard onto a Neon database and a scheduled tick, and a traffic anomaly proved why that mattered.
-
The output was built for the generator, not the reader
chronicle ·Our pitch machine produced a correct artifact in the wrong shape, which meant it failed at the only job that mattered: surviving a handoff between two people.
-
Three green checks and nothing shipped
chronicle ·A daily rebuild, a scheduled workflow, and an agent all reported success last week while producing nothing at all. Each one behaved exactly as documented.
-
A bug only someone else's machine could find
chronicle ·The first real week of dripping build logs instead of bursting on Monday also surfaced a portability bug our mining tool had been hiding.
-
Build logs are not commit lists: a depth pass for the content machine
sandcastlelabs ·The chronicle's own pipeline learned to rank stories by archetype and scale build-log volume to how eventful the week actually was.
-
Warming up a days-old domain: the cheap SEO that compounds
sandcastlelabs ·A low-token SEO audit of two days-old sites found a 3-hop redirect, a dateless sitemap, a thin page, and short guide descriptions.
-
The audit right after the rebuild
brand ·We rebuilt sandcastlelabs.ai on a new brand system, then audited it the same day and caught a leftover internal codename still live.
-
Two a week: giving Collimer its own content engine
collimer ·Collimer had no working weekly draft loop, so we gave it the same pitch-to-publish rhythm as this site and committed to two posts a week.
-
We built an A/B test before we had anyone to test on
Collimer ·The homepage now leads with recommendations, not a score. We built EXP-01 to measure the reframe before real traffic arrived.
-
Did we make anything up? Auditing our own site before we launched
collimer ·Two days before launch we fact-checked our own site and found real mistakes, including 126 stray instances of a habit we ban on our own team.
-
Launching Collimer to ten hand-picked design partners, not the world
collimer ·Collimer went live July 9: one LinkedIn post, 661 impressions, a handful of DMs, two design partners in and a third coming. Plus the numbers we cut before posting, and the competitor one-liner that did not survive our own fact-check.
-
How to keep a marketing site in sync with the product it describes (ours wasn't)
collimer ·Collimer's site and app live in separate repos, so we made the product's own pricing config the single source of truth pricing and engine claims sync from.
-
Running an agent-native studio like a series of small bets
sandcastlelabs ·We built the agent-native studio workflow behind our operating plan and scoreboard before hiring anyone, so progress gets measured, not guessed.
-
How to tell if AI crawlers are reading your site (ours weren't)
collimer ·Our GEO crawler signal read zero for two reasons, and both were bugs in our own instrumentation, not a lack of real crawlers.
-
Dropping GitHub Actions when the bill came
Our GitHub Actions billing lapsed. We replaced it with a pre-push hook. The machine that ships is now the machine that checks.
-
Wiring Center Pane so a non-technical editor can publish without touching the repo
The content pipeline worked fine for people who live in git. A designer coming on board does not. We built a hub round-trip so non-technical collaborators can revise and publish from Center Pane, with a GitHub Action running Claude headless to do the repo work.
-
Five posts shipped, analytics rebuilt for two sites, and the draft flag we forgot
The first full multi-post week went out end to end: five W25 build logs pitched, drafted, edited, and published with a real author/editor split. The same week, the analytics package broke free of its hard-coded site name and learned to serve both Sandcastle Labs and Collimer.
-
Lookout: a marketing analytics scorecard that refuses to fabricate trends
We built Lookout, an operator analytics scorecard for both marketing sites. It reads PostHog, assesses what's working with volume-aware confidence, and renders a graph-rich HTML report. Its one design principle: if the numbers are too small to say something real, it says nothing.
-
Minimum viable legal, deferred lawyer
Privacy Policy and Terms for two static marketing sites, built without a lawyer. Here is the threshold we think we hit, and what would change that.
-
A geo-gated consent banner without a database
GDPR consent banner built with Vercel's edge IP headers and about 150 lines of Astro middleware. No database, no flag service, no third-party CMP.
-
Launching Collimer's marketing site in a week
Collimer went from a coming-soon page to a full marketing site in five days. Then we deleted a third of it. That was the right call.
-
We sent back 59KB of react-dom for a hamburger menu
Astro 6, Tailwind v4, Motion, PostHog reverse-proxied through Vercel, and a three-package monorepo underneath. Every piece has one line of defense. Here is what it is.
-
Why image generation kept giving us squares, and how we made it cool
Every hero image came out a 1024x1024 square because one API parameter was silently ignored. The bug was small. The lesson about working with AI image generation was not.
-
The Chronicler runs itself now (and the point was not automation)
We taught the publishing pipeline to schedule posts on a static Astro site, mine its own week, and send the newsletter unattended. The goal was never hands-off. It was staying organized.
-
Stretching the vertical
Collimer ·A scan in a second vertical revealed how SaaS-coded our probes were. The fix made us question whether 'alternatives' is even a real category for local services.
-
How we built an MVP with parallel Claude Code agents in three days
Collimer ·Parallel Claude Code agents built the Collimer MVP end to end in about three days and 67 commits. The pace is only the headline. The point is what kept it from being a pile of code.
-
A clickable mockup in an afternoon
Collimer ·An afternoon of Phoenix LiveView produced fourteen connected screens. The clickable mockup is the cheapest discovery tool we have for an AI product.
-
Week one: V1 of the site, and the parts that are not done
sandcastlelabs.ai ·What shipped in week one of sandcastlelabs.ai: aurora hero, mobile nav, brand tokens, PostHog A/B. And the parts we left visibly unfinished on purpose.
-
Three providers, one methodology card
Collimer ·We wired three LLM providers through one probe runner. The output is a methodology card that shows exactly how each answer was produced.
-
Recommendations are the secret
Collimer ·Every GEO tool ships a beautiful dashboard. We bet the value is the recommendation, and rebuilt Collimer so every rec is shippable as written.