Vacation REST API
Overview
Vacation REST API was built for the Iconic IT 2024 national competition in the Web Development category. The task was to build an enterprise-style REST API using NestJS with proper modular architecture, TypeScript, and deployment readiness. I built this project solo and ranked 6th nationally — nearly making the top 5 if not for deployment issues on the final day.
Problem
- The competition required an enterprise-grade REST API built with NestJS under deadline pressure
- I had limited experience with NestJS at the time — this was my first deep dive into the framework
- Deployment issues on H-1 nearly derailed the submission
Goal
- Build a modular, production-style REST API with NestJS
- Demonstrate enterprise patterns: guards, decorators, DTOs, and module separation
- Add structured logging with Winston and caching with cache-manager
- Deploy to a live server for competition evaluation
Role
I built the entire backend independently under competition conditions.
Team: Achmad Raihan Fahrezi Effendy (Solo Developer)
Architecture
| Layer | Technology | Purpose |
|---|---|---|
| Framework | NestJS 10 | Modular enterprise structure |
| Language | TypeScript 5 | Type safety across the stack |
| ORM | Prisma | Schema-driven data access |
| Auth | JWT (passport-jwt) | Authentication and authorization |
| Logging | nest-winston + Winston | Structured logging |
| Caching | @nestjs/cache-manager | Response caching |
| Validation | Zod | Schema validation |
| Testing | Jest + Supertest | Unit and integration tests |
| Container | Docker | Reproducible environment |
Key Features
- Modular Architecture — Clean separation of modules, controllers, services, and guards
- Enterprise Patterns — Custom decorators, DTOs with validation, and guard-based authentication
- Schema-Driven Data Access — Prisma for type-safe database operations with migrations and seeding
- Structured Logging — Winston integration for request tracking and debugging
- Response Caching — Cache-manager for frequently accessed data
- Docker Integration — Containerized development and deployment environment
Technical Decisions
- NestJS was chosen because the competition valued enterprise architecture patterns
- Prisma was used for schema-first development and type safety
- Winston was added for production-ready structured logging
- Cache-manager was included to demonstrate performance optimization awareness
- Docker was added to demonstrate production-ready deployment practices
Challenges
- Learning NestJS decorators, dependency injection, and module system under competition pressure
- Deployment server issues on H-1 nearly prevented submission — this taught me the importance of deployment testing early
- Balancing competition features with code quality required strict prioritization
Outcome
Ranked 6th nationally in the Web Development category at Iconic IT 2024. The judges noted the modular architecture and enterprise patterns, though deployment issues prevented a higher ranking.
Final Thoughts
Vacation REST API was the project that proved I could compete at a national level. The deployment failure on the final day was painful, but it taught me that deployment is not an afterthought — it is part of the product. The NestJS proficiency I gained here became the foundation for my internship work at DOT Indonesia.