Read it, then pass the check at the end to open step 5.
The stack and every dependency
Updated
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.
Check what you read in “The stack and every dependency”
Three questions drawn from a larger pool, so no two papers are quite the same. Two right passes it and opens the next step. The questions are public; scoring them needs an account, and the key never leaves the server.
Loading the check…