⚙️ Stack
At Ledgend we like to be transparent. This page gives an overview of the technology we use — for contributors and users curious about how the app is built.
Frontend
| Technology | Purpose |
|---|---|
| Next.js 14 (App Router) | Web framework — fast, server-rendered where it helps |
| TypeScript | Type safety across the app |
| Tailwind CSS | Styling — custom theme, dark/light mode |
| Apollo Client | GraphQL client — same API for web and future mobile app |
| Recharts | Charts — spending, FIRE projections, cash flow |
| React Hook Form + Zod | Forms — validation and error handling |
| shadcn/ui + Radix UI | Accessible components — dialogs, dropdowns, forms |
| Lucide | Icons — consistent iconography |
| Nextra | These docs — MDX content, search via Pagefind |
API & Data
| Technology | Purpose |
|---|---|
| GraphQL (graphql-yoga + Pothos) | Single API — one endpoint for web and mobile |
| Prisma | Database access — type-safe, migrations |
| PostgreSQL | Database — Supabase hosted |
| NextAuth.js | Auth — login, sessions, 2FA, passkeys |
| Inngest | Background jobs — bank sync, recurring transactions, alerts |
| Resend | Emails — digests, alerts, invites |
Testing
| Technology | Purpose |
|---|---|
| Jest | Unit tests — logic, calculations, utilities |
| React Testing Library | Component tests — rendering, interactions, a11y |
| Playwright | E2E tests — full user flows, cross-browser |
| axe-core | Accessibility audits — zero violations in tests |
Infrastructure
| Service | Purpose |
|---|---|
| Netlify | Hosting — preview, staging, production |
| Supabase | PostgreSQL — managed, backups, pooling |
| TrueLayer | UK Open Banking — secure bank connections |
| Plaid | US bank sync (sandbox) |
Package manager
pnpm only. Do not use npm or yarn.
Last updated on