Under the hood
The ShareWell stack.
Boring where it should be, sharp where it counts. One language front to back, one runtime, one file for state, and a fleet of Claude agents on top.
Claude agents
the performers
The app · SvelteKit + Svelte 5
the web app
Bun
runtime · packages · tests
Drizzle ORM
the data layer
SQLite + PostgreSQL
the stores
▪ the tower conducts itself from the top
The pieces
Twelve tools. No spares.
Each one earns its place. None of it is here because a template put it there.
Svelte 5 + SvelteKit
Remote functions and runes: the UI talks to the server with no API layer to design, version or drift.
Bun
Runtime, package manager, test runner and SQLite driver in one binary. Four toolchains retired.
TypeScript
One language front to back. Agents never switch context, and neither do you.
Tailwind CSS v4
Design tokens live in CSS. Every product in the suite shares one visual system.
Drizzle ORM
Typed queries over a self-creating store. The database appears on first boot, and the schema lives in code.
SQLite
The local store, via bun:sqlite. Zero setup, zero ops, one file to back up.
PostgreSQL
The system of record behind the product. Boring, durable, correct.
Python + uv
The backend APIs and Releaser. uv makes every install deterministic for humans and agents alike.
Claude
The performers. Fleets of coding agents, one per worktree, conducted and never merging.
Grafana + OTEL
The otel-lgtm container: logs, traces and metrics for every agent in one pane on :3000.
Sentry
Errors arrive as tasks with the trace attached, so the report and the fix share a page.
GitHub
Issue sync, PRs and releases via gh. The public face of a deterministic pipeline.
plus uv and OpenTelemetry doing quiet, load-bearing work.
Why it works
Why the stack is the way it is.
01 —
Uniform repos make fleets possible.
Every repo looks the same to an agent: bun or uv, conventional commits, releaser to ship. An agent dropped into any worktree already knows where everything is. That sameness is what buys the throughput.
02 —
No seams for drift to live in.
Remote functions replace the REST layer between UI and server. The schema lives in code next to the queries. When there is no gap between the layers, there is nothing to fall into it.
03 —
Boring on purpose.
A SQLite file, a systemd user service, one observability container. The stack has fewer moving parts than the fleet it conducts, which is exactly the ratio you want.