Full transparency

We'll show you our hand.

Every tool we use, why we chose it, and the honest tradeoffs. If you build with us, you inherit this stack. You should know exactly what that means.

Framework

SvelteKit 2 + Svelte 5

Why we chose it

Runes-based reactivity. Zero virtual DOM. Ships less JS than React. Admin and public site in one repo.

Honest tradeoff

Smaller ecosystem than React, but the DX is meaningfully better.

Bun

Why we chose it

Native TypeScript, 10–25× faster installs than npm. Built-in test runner. Same runtime in dev and prod.

Honest tradeoff

Not Node. Most packages work. A handful don't — we've hit zero blockers so far.

Database

Neon Postgres

Why we chose it

Serverless, HTTP protocol (no long-lived connections), branching for dev. Edge-compatible. $0 to start.

Honest tradeoff

Latency is slightly higher than a co-located Postgres. Acceptable for web; not for sub-ms trading.

Drizzle ORM

Why we chose it

Schema-as-code. Full type inference. Migrations you can read. No magic, no hidden queries.

Honest tradeoff

Less mature than Prisma. The tradeoff is worth it: Drizzle is faster and more predictable.

PGlite (dev)

Why we chose it

In-process Postgres in dev — no Docker, no cloud DB needed. Just clone and run.

Honest tradeoff

No Row-Level Security in dev. We're explicit about tenant IDs in every query instead.

Auth

Better Auth

Why we chose it

Plugin-based: 2FA, magic link, social login, admin roles — all type-safe. No vendor lock-in.

Honest tradeoff

Newer than Auth.js / Lucia. Active maintenance, stable API.

AI / Agent

Compass OS v2

Why we chose it

Our own agent engine: hexagonal architecture, LangChain tools, NATS messaging, skill packs, RAG.

Honest tradeoff

Not off-the-shelf. We built it because nothing else gave us the control we needed.

LangChain.js

Why we chose it

Tool calling, RAG pipelines, model resilience. Abstracts provider differences cleanly.

Honest tradeoff

Can be over-engineered for simple use cases. We only use what we need.

Infrastructure

Cloudflare Pages + Workers

Why we chose it

Deploy globally in 30 seconds. Sub-50ms page loads worldwide. Free tier is genuinely generous.

Honest tradeoff

Worker limits (CPU time, memory). Fine for our workloads. Very different from a traditional server.

NATS.ws

Why we chose it

Real-time everywhere: admin dashboard, agent events, order feeds. No polling. No Firebase.

Honest tradeoff

Requires a NATS server. We run it alongside the app. Self-hosted or managed (Synadia).

Payments + Email

Stripe

Why we chose it

The obvious choice. Checkout Sessions, webhooks, subscriptions. Nothing else comes close.

Honest tradeoff

Fees. 2.9% + 30¢. Worth it for the DX and global coverage.

Resend

Why we chose it

Type-safe email with React/Svelte templates. Developer-first. 100 emails/day free.

Honest tradeoff

Newer than SendGrid / Mailgun. We've found it more reliable.

Styling

Tailwind v4

Why we chose it

CSS-first config. Faster builds. The new @theme syntax is elegant. Same utilities, less config overhead.

Honest tradeoff

v4 is recent. A few plugins haven't caught up. Core utilities are stable.

Why not WordPress / Drupal / Odoo?

Legacy

FTP deploys, security patch treadmill

This stack

git push → global in 30s, done

Legacy

AI as a plugin, brittle and slow

This stack

AI native — first-class Compass OS agent

Legacy

Polling or cron for "real-time"

This stack

NATS.ws — instant fan-out everywhere

Legacy

Zero type safety (PHP)

This stack

End-to-end TypeScript — zero runtime surprises

Legacy

Multi-tenancy via plugin hell

This stack

First-class DB-native, onboard in 5 minutes

Legacy

Google Analytics (consent walls, GDPR risk)

This stack

Owned analytics — your Postgres, GDPR-native

Want to build on this stack?

We deploy the same stack for your business. Your team inherits a clean, modern codebase. No legacy baggage.

See what we build