Where to Go From Here
You’ve built and deployed a full-stack application. The skills you used — REST APIs, authentication, database persistence, React integration, CI/CD — are the foundation of most web development work. Here’s what to learn next and why.
Upgrade the database: PostgreSQL
Section titled “Upgrade the database: PostgreSQL”SQLite is perfect for learning and solo projects, but most production applications use a client-server database like PostgreSQL (or MySQL):
- Multiple concurrent writers (SQLite has write locks)
- Handles large datasets efficiently
- Required by most cloud platforms (Railway natively supports PostgreSQL)
Migration path: replace better-sqlite3 with pg (the Node.js PostgreSQL driver) or an ORM like Prisma that works with both.
Add an ORM: Prisma
Section titled “Add an ORM: Prisma”Writing raw SQL by hand works, but an ORM adds:
- Type-safe queries — TypeScript knows the shape of your data at the query level
- Migrations — version-controlled schema changes with
prisma migrate - Relations — queries across joined tables without writing JOIN manually
Prisma is the dominant choice in the Node.js ecosystem and works with SQLite, PostgreSQL, and MySQL.
Learn testing
Section titled “Learn testing”Bulletin has no tests. Adding them:
- Unit tests (Vitest or Jest): test pure functions and hooks in isolation
- Integration tests: test Express routes against a real (test) database
- End-to-end tests (Playwright): control a real browser and verify user flows
Start with integration tests for your API routes — they give you the most confidence for the least setup.
Deepen TypeScript
Section titled “Deepen TypeScript”You used TypeScript throughout the course, but there’s more:
- Generics: write functions and types that work across multiple types
- Discriminated unions: model state machines cleanly (e.g.,
{ status: 'loading' } | { status: 'error', message: string } | { status: 'success', data: Post[] }) - Utility types:
Partial<T>,Pick<T, K>,Omit<T, K>for building types from other types
Production patterns
Section titled “Production patterns”For a real production app, explore:
| Topic | What to learn |
|---|---|
| Refresh tokens | Short-lived access tokens + long-lived refresh tokens — avoid the 24-hour logout problem |
| File uploads | multer for multipart form data; S3 or Cloudflare R2 for storage |
nodemailer for transactional email (registration confirmation, password reset) | |
| Rate limiting | You already have it in Bulletin — learn express-rate-limit internals |
| Logging | pino for structured JSON logs; ship logs to a service like Logtail or Datadog |
| Caching | Redis for caching expensive queries; node-cache for simple in-memory caching |
Next courses on this platform
Section titled “Next courses on this platform”- SQL and Databases — relational modeling, indexes, queries, migrations, and PostgreSQL
- Testing with Vitest and Playwright — unit, integration, and end-to-end testing for the full stack
- Advanced TypeScript — generics, utility types, type guards, and type-level programming
Exercise
Section titled “Exercise”Pick one “where to go from here” item that sounds interesting to you and spend 15 minutes researching it:
- Find the official documentation or a reputable tutorial.
- Identify one specific thing you’d add to Bulletin using that technology.
- Write it down — even a sentence. Having a concrete next project makes learning stick.
- SQLite → PostgreSQL is the natural database upgrade path.
- Prisma adds type-safe queries and schema migrations.
- Testing (unit, integration, E2E) is the highest-leverage skill to add to a working app.
- TypeScript generics and discriminated unions are worth learning after the basics.
- The architecture you learned here — REST API + auth + frontend + deploy — applies to almost every web project.