Most AI features are demos.We ship the other kind.
The hype is loud; shipping is the quiet part. Northerly is a full-stack engineering shop in Leeds. The discipline came before the AI — tests, types, small reversible changes — and the AI is designed in on top of it, with agents in our own delivery loop.
Three things we do with AI.
Create
Design AI into the product.
Where it earns its place and where it doesn't. Model choice, prompt and eval design, and a working prototype early enough to change your mind about.
Implement
Ship it to production.
Retrieval, tool use, guardrails, observability and the eval suite that keeps it honest. The unglamorous half that decides whether it survives contact with real users.
Drive
Run AI in our own loop.
Agents in the codebase, in review and in delivery. It's why a team this size ships like a bigger one, and why one of the three of us is an agent.
What we build with, and why it's in the list.
- AI
- Claude
- Claude Agent SDK
- MCP
- Evals
Claude for the model layer, MCP for tools, and an eval suite per feature. Nothing AI-shaped ships without one.
- Language
- TypeScript
- Node
- Bun
Strict everywhere. Bun where it's allowed to be, Node where it isn't.
- Interface
- React
- Next.js
- Astro
- Tailwind
Server-rendered by default. Client JS is a decision each time, not a starting position.
- Data
- PostgreSQL
- pgvector
- Drizzle
- tRPC
One schema, inferred all the way up. If the shape changes, the build tells you before the user does.
- Ship
- Vite
- Playwright
- GitHub Actions
- Vercel
Every commit builds, type-checks and runs the tests. Main is always deployable.
Opinions we've earned the hard way, written down so they can be argued with.
- 01
Evals before vibes.
AI made it cheap to build the wrong thing quickly. We write the eval first, so "it seems better" becomes a number somebody can check.
- 02
Ship small.
A change nobody can review is a change nobody can trust. Small, continuous, reversible — every time.
- 03
Type the seams.
Most production bugs live at a boundary. Make the boundary say what it means and the class of bug goes away.
- 04
Boring is a feature.
We pick the dull, well-understood option for anything load-bearing, and spend the novelty budget where it's actually visible.
- 05
Fast is accessible.
Performance and accessibility are the same discipline wearing different hats: respect for the person on the other end of the connection.
Three of us. One is a dog.
- Adam AndersonLead
Seasoned full-stack engineer. Ships the interfaces and the systems behind them.
- OliveTeam dog
Enforces the walk that ends most arguments about architecture.
- ClaudeAgent
Works in the codebase daily — building, reviewing, and keeping this site current.
Tooling we're stress-testing.
northerly.dev ↗
liveThis site — the console you're using. Astro + Tailwind on Bun; the whole site is one terminal, built end to end by an agent from a spec. The AGENTS.md in the repo is the interesting artefact, not the HTML.
How this site is built.
Versions are read straight from package.json at build time, so they can't drift from what's actually running.
- Astro7.3.2
- Static output. Components on the server, nothing shipped to the client it doesn't need.
- Tailwind4.3.3
- CSS-first config. The palette lives in one @theme block.
- TypeScript5.9.3
- Strict, and checked in CI before anything builds.
- Bun
- Package manager and task runner.
- General Sans & Zodiak
- Type by Indian Type Foundry, self-hosted and preloaded.
- Vercel
- Static hosting, deployed from main.