A modern full-stack notes management app built with NestJS for the backend and Angular v20+ for the frontend. Includes authentication, profile management, file uploads, and full CRUD functionality — all wrapped in a responsive UI.
The Notebook Application allows users to:
- ✅ Register and log in securely
- 👤 Manage personal profile info (including image upload via Cloudinary)
- 📝 Create, read, update, and delete personal notes
- 📧 Use password recovery features via email
- 📱 Enjoy a responsive UI built with Tailwind CSS
This monorepo contains two main folders:
notebook-app/
├── notebook-backend/ # NestJS-based REST API
└── notebook-frontend/ # Angular frontend SPA
- Framework: NestJS (v11+)
- Language: TypeScript
- Database: PostgreSQL
- ORM: Prisma
- Authentication: JWT + Passport.js + bcrypt
- Email Service: Nodemailer + Handlebars
- File Storage: Cloudinary
- Validation: class-validator & class-transformer
- API Docs: Swagger UI (@nestjs/swagger)
- Framework: Angular (v19+)
- Language: TypeScript
- Styling: Tailwind CSS
- HTTP Client:
@angular/common/http(withprovideHttpClient()) - Forms: Angular Reactive Forms
- Routing: Angular Router
- Architecture: Standalone Components + Route Guards
Make sure the following are installed:
-
Node.js
v18+ -
npm or Yarn
-
Angular CLI:
npm install -g @angular/cli
-
PostgreSQL (running locally or remotely)
-
Cloudinary account
-
SMTP provider (e.g. GMAIL or Mailtrap.io for dev)
cd notebook-backendFollow these steps:
-
Install backend dependencies:
npm install
-
Configure environment variables:
- Create a
.envfile (see backend README for full template)
- Create a
-
Run database migrations:
npx prisma migrate dev --name init_and_user_models
-
Start the NestJS dev server:
npm run start:dev
📍 Backend will run on http://localhost:3000
Open a new terminal, then:
cd notebook-frontend-
Install frontend dependencies:
npm install
-
Set API endpoint: Update
src/environments/environment.ts:export const environment = { production: false, apiUrl: 'http://localhost:3000', };
-
Start the Angular dev server:
ng serve -o
📍 Frontend will open at http://localhost:4200
Once both servers are running:
-
Open your browser to
http://localhost:4200 -
You’ll be redirected to
/loginif not authenticated -
From here you can:
- 🔐 Register or log in
- 📝 Access your notes dashboard
- 👤 Update profile details and image
- 🔑 Change your password
- ❓ Use "Forgot Password" to reset credentials via email
- 🚪 Log out anytime from the navbar
Swagger UI is available at:
Use it to:
- View all backend routes and DTOs
- Test endpoints directly in the browser
- Understand response structures and headers (especially for JWT use)
This project is a great starting point to learn full-stack TypeScript development. Feel free to:
- Fork the repo
- Improve components, add features, or fix bugs
- Submit pull requests for enhancements