A full-stack job application tracker built with:
- Backend: NestJS 11, Prisma, MariaDB/MySQL, JWT authentication
- Frontend: Angular 19
Users can register and authenticate, then create, view, update, and delete their own job applications. The app enforces per-user ownership so one user cannot see or modify another user's data.
Main Page Screenshot
- User registration and login with JWT-based auth
- Secure user-specific job application CRUD
- Application fields include title, company, description, qualifications, status, stage, notes, URL, submission date, and last updated timestamp
- Prisma ORM for database access and migration support
- Angular frontend for a responsive dashboard experience
backend/— NestJS API serverfrontend/— Angular client appbackend/prisma/— Prisma schema and migrationsbackend/src/— Nest modules for applications, auth, users, and Prisma access
- Node.js 20+ or compatible runtime
- npm
- MariaDB or MySQL database
- Install dependencies:
cd backend
npm install- Configure environment variables:
Create a .env file in backend/ with at least:
DATABASE_URL="mysql://user:password@localhost:3306/database_name"
JWT_SECRET="your_jwt_secret"
PORT=3000- Generate Prisma client (runs automatically after install):
npm run postinstall- Run migrations if needed:
npx prisma migrate deploy- Start the backend:
npm run startThe API listens by default on http://localhost:3000.
- Install dependencies:
cd frontend
npm install- Start the Angular development server:
ng serve- Open the app in your browser:
http://localhost:4200
The frontend can be configured to call the backend API on its own origin or a proxied endpoint if needed.
cd backend
npm test
npm run test:e2e
npm run test:covcd frontend
npm testidnameusernameemailpasswordcreatedAtapplications
iduserIdtitlecompanydescriptionqualificationsstatusstagenotesurlsubmissionupdatedAt
- The backend uses
@nestjs/jwtand Passport JWT guards to protect application endpoints. - Prisma is configured with the
@prisma/adapter-mariadbadapter and expectsDATABASE_URLat runtime. - Authentication data is stored in the
Usertable and job application records belong to a specific user.
# backend
cd backend && npm run build
cd backend && npm run lint
# frontend
cd frontend && npm run build