Dawloom

Tools and the stack we run on

There are two different answers to “what’s your stack,” depending on which stack you’re asking about. One is what we build client work in. The other is what runs our own site, which we treat as a working example rather than a marketing page.

What we build client work in

The frameworks and languages we use on client projects are documented on /stack/: React, Next.js, Svelte, Astro, React Native, .NET MAUI, Tauri, Electron, .NET, Node, Bun, Go, and Python. Which one we pick depends on the project itself rather than a house preference we apply everywhere, and the stack pages explain when each one makes sense.

The AI-specific side of our work, models, agent frameworks, and integration patterns, lives on /ai/: OpenAI, Anthropic, the Vercel AI SDK, OpenRouter, and MCP servers. That page covers what we reach for when a client project needs AI features rather than a general web or mobile build.

Our own site is the reference build

dawloom.com is built with Astro 7 and Svelte 5 islands, and it ships as static files served from Cloudflare Workers rather than rendering pages on request. It deploys automatically from GitHub on every push, so what’s live is always what’s in the repository. On mobile, it scores around 97 on Lighthouse performance.

We lint and format it with oxlint and oxfmt instead of the heavier JavaScript toolchains most teams default to, mainly because they’re fast enough to not think about. Analytics run through PostHog, and that includes server-side tracking of which pages AI crawlers request and what they get back, which we’ve used to find pages worth writing before anyone asked for them directly. Every page on the site is also available as plain markdown to AI agents that request it, on top of the normal HTML. We wrote up the reasoning behind both of those decisions in why this site loads in under a second and how to get recommended by ChatGPT, if you want the full detail instead of the summary.

Supply chain protection

Packages install through pnpm with a 15-day minimum release age: a freshly published version can’t reach our machines until the ecosystem has had two weeks to catch it if it’s poisoned. Dependency install scripts stay blocked unless we approve them one by one. The reasoning is written up in the npm attack post.

We use AI tools daily, and we don’t hide it

Claude Code is part of how we write software here, alongside the rest of the AI tooling covered on /ai/. We’re not precious about admitting that, because pretending otherwise would be a worse look than the tools themselves.

The rule that goes with it is simple: AI can accelerate the work, but it doesn’t get to own any of it. Every claim we publish and every line we ship is something a person here has checked and is willing to stand behind. If a tool wrote the first draft of a paragraph or a function, that’s fine. If nobody on the team verified it before it went out, that’s not.

Default infrastructure for client projects

Absent a reason to do otherwise, we default to PostgreSQL as the database. Hosting is Cloudflare unless the client already has a preference or a constraint that points somewhere else. And the client owns every account involved, the hosting, the database, the domain, the third-party services, starting on day one rather than waiting for a handover meeting at the end. How that ownership gets set up and confirmed is covered on how projects run.

None of this is meant to be exotic. It’s meant to be checkable, which is why it’s written down instead of left as something you’d only find out by asking.

Got something to build?

Tell us what you need. An engineer replies, not a sales team.

Search the whole site