The stack and every dependency
The runtime dependencies
Every package in dependencies, and the one job it does:
| Package | Version | Its job in Travole |
|---|---|---|
next |
16.2.0 | The framework: routing, server components, server actions, the build |
react, react-dom |
19.2.1 | The UI. react-dom/server also renders the PDF’s HTML |
drizzle-orm |
^0.45 | Type-safe SQL. The schema in lib/db/schema.ts is the single source of truth |
@neondatabase/serverless |
^1.0 | The Postgres driver that speaks HTTPS to Neon |
better-auth |
^1.5 | Email and password accounts, sessions, the signup hook |
@aws-sdk/client-s3 |
3.726.1 | Upload, download and delete receipts in R2, which speaks the S3 API |
exceljs |
^4.4 | Writes the .xlsx export |
playwright |
1.62.1 | Launches a headless Chromium to print the PDF report |
swr |
^2.3 | Client-side fetching with cache, for the few interactive widgets |
radix-ui |
^1.6 | Accessible primitives (dialogs, menus, tabs) |
lucide-react |
^0.556 | Icons |
class-variance-authority, clsx, tailwind-merge |
— | Compose CSS class names without conflicts |
The development dependencies
| Package | Its job |
|---|---|
typescript |
Types. bun run typecheck runs tsc --noEmit |
tailwindcss 4, @tailwindcss/postcss |
Styles. The tokens live in .brand/tokens.css |
drizzle-kit |
Generates SQL migrations from the schema and applies them |
vitest |
Unit tests (bun run test) |
@playwright/test |
End-to-end tests in a real browser (bun run e2e) |
pdfjs-dist |
Reads the generated PDF back in the tests, to check what it says |
eslint, eslint-config-next |
Lint |
The scripts
bun run dev # local server on http://localhost:3000
bun run build # production build
bun run test # unit tests
bun run e2e # end-to-end tests
bun run db:generate # write a migration after you change lib/db/schema.ts
bun run db:migrate # apply migrations to DATABASE_URL
bun run db:seed # insert the categories and the 230 countries
The outside services, and their free tiers
| Service | What Travole stores there | Free tier covers a personal install? |
|---|---|---|
| Neon | every row: users, trips, expenses | yes |
| Cloudflare R2 | receipt PDFs | yes |
| Vercel | the running app | yes, for personal use |
One dependency to watch
playwright prints the PDF by launching Chromium. On your machine that works after
bunx playwright install chromium. A Vercel function does not ship a Chromium binary, so the
PDF export needs extra work there (step 7 covers it). The Excel export has no such dependency.
The gate · a reading check closes this stepweight 2 of Σw 14
Check what you read in “The stack and every dependency”
The questions are public; scoring them needs an account. They were generated once for this step, and the key never leaves the server.
Loading the check…