A simple full‑stack example with an Angular frontend and a .NET 9 Minimal API backend. Authentication uses JWT. Books are stored in memory (no database).
BooksApi/– .NET 9 Minimal API (JWT auth, CRUD at/api/books)books-app/– Angular 20 SPA (login, books list/create/edit/delete, quotes, dark mode)
- Node.js + npm
- .NET 9 SDK
- Angular CLI (
npm i -g @angular/cli)
- User authentication (login/register with JWT)
- Books & Quotes CRUD with ownership
- Toast notifications for user feedback
- Responsive UI with dark/light mode
- Deployed full-stack (Vercel + Render)
Backend
cd BooksApi
dotnet run --urls "http://localhost:5000"Frontend
cd books-app
npm install
ng serveApp: http://localhost:4200
Now supports both:
- Demo account:
admin/pass123 - Registered users: Create your own account via Register page
- All CRUD endpoints require a valid JWT.
- CORS is enabled for local dev and for the deployed frontend.
- Production frontend should set
src/environments/environment.ts→apiBaseto the deployed API URL.
- Frontend: Vercel (Root Directory:
books-app, Build:ng build --configuration production, Output:dist/books-app/browser) - Backend: Render Web Service (Root Directory:
BooksApi, Build:dotnet publish -c Release -o out, Start:dotnet out/BooksApi.dll). Set env vars:ASPNETCORE_URLS=http://0.0.0.0:${PORT}ASPNETCORE_ENVIRONMENT=ProductionJwt__Key=<at least 32 chars>
