This project is a personal backend refresher build created as I prepare to start my journey as a Junior Software Developer next week. I built it to strengthen my fundamentals in backend development before stepping into real-world work.
The goal was simple: practice the core building blocks of a backend application from scratch using modern tools and clean project structure.
This API demonstrates several backend fundamentals, including:
- Building a REST API with Express and TypeScript
- Creating reusable route and controller structure
- Implementing authentication with JWT and password hashing
- Validating request data with Zod
- Working with PostgreSQL through Prisma ORM
- Designing relational data models for users, movies, and watchlists
- Handling errors and environment configuration cleanly
- User signup, login, and logout
- JWT-based authentication
- Movie creation and retrieval
- Movie removal for authorized users
- Watchlist management for users
- Prisma-powered database access with relational models
- TypeScript
- Node.js
- Express
- Prisma ORM
- PostgreSQL
- JWT
- bcryptjs
- Zod
src/
controllers/ # Request handlers
routes/ # API routes
middleware/ # Auth, validation, and error handling
validators/ # Input validation schemas
config/ # Database configuration
prisma/
schema.prisma # Database schema and models
seed.ts # Seed script for initial data
npm installCreate a .env file in the project root with the following values:
DATABASE_URL=postgresql://<username>:<password>@<host>:<port>/<database>
JWT_SECRET=your-secret-key
NODE_ENV=developmentnpx prisma migrate devnpm run seed:moviesnpm run devThe server will run on:
http://localhost:5001
POST /auth/signupPOST /auth/loginPOST /auth/logout
GET /moviesPOST /moviesDELETE /movies/:movieId
POST /watchlistGET /watchlistDELETE /watchlist/:movieId
This project is part of my personal preparation before starting work as a junior developer. It helped me refresh my understanding of backend concepts, improve my confidence with full-stack-style API development, and build something practical that I can talk about in interviews and on GitHub.
Through this project, I strengthened my understanding of:
- API design
- Authentication flow
- Data modeling
- Database integration
- Error handling
- Clean code structure for backend systems
Some ideas for improving this project further:
- Add unit and integration tests
- Add API documentation with Swagger
- Improve input validation and error responses
- Add role-based access control
- Deploy the API to a cloud service
This project is for learning and personal development purposes.