Blog...
A blog posts...
The content for a blog post is loading...
A blog posts...
The content for a blog post is loading...
How I build apps now, or, how to replace all your traditional prod/eng saas with markdown
Aug 20, 2025
We've all done the monolith. It shipped fast - until it didn’t. Tight coupling, scary deploys, one blast radius. Team pace slowed. Collaboration suffered.
Then we swung to microservices. Now it’s N repos, N pipelines, version drift, glue code, and a calendar full of “deploy alignment meetings.” The blast radius shrank; the coordination cost exploded. Team pace also slowed. Collaboration also suffered.
A Turborepo is maybe best of both: one repo, many boundaries. Shared code, types, and rails, faster buidlers, etc. Or not. It's up to you.
But in 2025 it's not just about that anymore. Soon the primary contributors to the codebase won't be human. They'll be agents.
And turborepo brings together what agents are starved for: Context - the atomic unit of agent collaboration.
It turns the repo into the collaboration surface—for humans and agents.
Here’s how I use it: start by building context before code, raise high guardrails, ship with preview‑driven development, and keep docs as the agent contract—inside the repo.
Agents begin in product, not in code.
I'm kicking off every feature with research agents, not drawing/typing/searching tools. I'm looking for the best-in-class implementation research report. With that I'll do the same for a repo-aware refinement pass. The goal is clarity on options and trade-offs and a phased intent you’d be proud to bring into a design/eng room.
The output is a "PRD" that either can go to something like v0.app or a code agent for further refinement.
Here's an example of a real research chat
Code agents/LLMs forget all context as they rabbit-hole. High walled guardrails make them rediscover affected areas instantly. The "higher the walls" the less likely they are to get lost.
I think it's extremely important to have a single source of truth for types, so the compiler turns that into a map that explodes when the agent messes up. Because we're all ultimately working with the web, then to achieve that our only option is typescript. So we need a single source of truth from DB to UI.
any", "no eslint-disable", "no ts-ignore", eagerly encode all learnings as ESlint rules so the agents see they mess up often. Eg, I have a rule that bans shadow- on elements without bg- in react native.The idea is to let the agent know when it's veering off course. Allowing yourself to easy discard the ones that messed up to much and "choose your own adventure" to success.
You can get a sense of from my agent instructions -- though it's not a perfect example.
A lot of people have discovered the CLI agents seem to perform better than the IDE agents. But I think they have a fatal flaw: they painfully process tokens in serial.
It's hard (for a multitude of reasons) to run them in parallel. Conductor.build is the only one I've seen attempting this well. You need to bootup a sandboxed environment that's isolated and the best/fastest/most integrated version of that I've seen are microVMs in the cloud. Codex web and Vercel's preview builds connected via github is the ultmate way to scale this out infinitely.
Every viable branch ships to a Preview URL with its own logs. Gate previews on correctness, then click-test behavior and pick a winner quickly.
All context matters and most of it is split in tools because we have weird habits build for a different era. With disposible intelligence, we cannot isolate context we need to expose it.
We need the agent to find relevant context and hiding it in Jira, or Figma, or Linear, or Google Docs, is prioritizing Human-first dev not ai-first dev.
All of those tools are just well organized markdown files with a dashboard. Throw the dashboard away and keep the markdown. Get as much content as you can in the markdown file it so a "junior dev on a plane with no Wi-Fi" has what they need to ship phase 1. Keep it beside the code and keep it current.
/project-plan/feature-name.md using a repo template.__mocks__/feature-name/ (e.g., v0 output) and say “match look/flows; integrate with our types.”Stop scattering context across SaaS silos. Collapse planning, mocks, docs, and code into the monorepo so humans and agents operate in one coherent world. The less surface-switching, the faster the compounding.
/docs, and your site as an app in apps/.packages/validators for Zod from the DB; packages/ui with .web/.native twins; packages/api for tRPC routers.Agents aren’t magical coworkers; they’re only as good as the repo you hand them. Put research, prompts, types, tests, and docs in one place and let the monorepo be the app. Ship Skateboard → ATV → Cadillac, keep previews fanned out, and merge the best behavior—not the prettiest diff. If a junior on airplane Wi‑Fi can land phase 1 from your repo, your agents will too. Intelligence gets cheaper every quarter; integration is what compounds.
Make the repo legible, and everything else accelerates.