FOMO is an academic ticket marketplace platform developed for Laboratório de Engenharia de Software. It connects three main actors: administrators, event promoters/vendors, and buyers.
The current version focuses on the complete platform flow without real payment integration. Checkout is simulated so that the project can validate orders, ticket generation, capacity control, QR code creation, and user flows without depending on Stripe, PayPal, or another external provider.
- Diogo Estriga
- Dinis Monteiro
- Browse approved events
- View event details
- Register and log in
- Add tickets to cart on the frontend
- Complete a simulated checkout
- View personal tickets
- Receive generated tickets with unique QR codes
- Register as a vendor
- Wait for administrator approval
- Log in only after approval
- Create events
- View own events
- Request edits to existing events
- View vendor statistics
- Update vendor profile
- View platform overview metrics
- Manage users
- Approve or reject vendors
- Approve or reject events
- Approve or reject vendor edit requests
- Review audit logs generated by administrative actions
| Layer | Technology |
|---|---|
| Frontend | Angular |
| Backend | NestJS |
| Database | PostgreSQL |
| ORM | Drizzle ORM |
| Authentication | JWT + Passport |
| Validation | class-validator / DTOs |
| Security | Helmet, rate limiting, guards and role-based access |
| Tests | Jest, Supertest, Angular test runner |
| Images | Optional ImgBB integration |
| Emails | Optional Gmail/Nodemailer integration |
FOMO/
├── backend/ # NestJS REST API
│ ├── src/ # Backend source code
│ ├── test/ # Backend e2e tests
│ └── README.md # Backend-specific documentation
├── frontend/ # Angular application
│ ├── src/app/ # Components, services, guards and routes
│ └── README.md # Frontend-specific documentation
├── docs/ # Project documentation
│ └── overview.md
│
├── GETTING_STARTED.md # Setup and execution guide
├── start.sh # Linux/macOS startup helper
├── start.bat # Windows startup helper
└── README.md # General project documentation
GET /api/healthGET /api/db-healthPOST /auth/registerPOST /auth/loginGET /auth/profileGET /eventsGET /events/:idPOST /eventsPUT /events/:id/request-editPOST /orders/checkoutGET /tickets/meGET /admin/overviewPATCH /admin/vendors/:id/approvePATCH /admin/events/:id/approve
For a full setup guide, see GETTING_STARTED.md.
cd backend
npm install
cp .env.example .env
npx drizzle-kit push
npx tsx src/db/seed.ts
npm run start:devBackend runs on http://localhost:3000.
Swagger documentation is available at http://localhost:3000/api.
cd frontend
npm install
npm run startFrontend runs on http://localhost:4200.
cd backend
npm run testcd backend
npm run test:e2eThe e2e suite covers health endpoints, authentication, users, vendors, events, orders, tickets and admin flows using mocked service dependencies. This keeps the tests deterministic and independent from a local PostgreSQL instance.
cd backend
npm run buildcd frontend
npm run buildcd frontend
npm run testAfter running the seed, all demo accounts use the password:
fomo2026
Useful accounts:
| Role | Notes | |
|---|---|---|
| Admin | admin@fomo.pt | Main administrator |
| Buyer | john@fomo.pt | Regular active buyer |
| Buyer | blocked@fomo.pt | Blocked account for login validation |
| Approved vendor | lx@fomo.pt | Approved vendor |
| Approved vendor | algarve@fomo.pt | Approved vendor |
| Pending vendor | coimbra@fomo.pt | Pending vendor for approval tests |
- Real payment processing is not integrated.
- Checkout is simulated by the backend.
- Tickets are generated internally and include unique QR codes.
- Email delivery depends on valid Gmail/Nodemailer credentials.
- Image upload depends on a valid ImgBB API key.
- JWT tokens are stored by the frontend for academic/development purposes; for production, HttpOnly cookies would be preferable.