A full-stack dating application built with .NET 9 Web API backend and Angular 21 frontend.
This is a modern dating application featuring user registration, authentication, and member management. The application uses a clean architecture with separate backend and frontend projects.
- Framework: .NET 9.0
- Database: SQLite with Entity Framework Core
- Authentication: Custom password hashing with HMACSHA512
- CORS: Configured for Angular development server
- Framework: Angular 21 (next version)
- Styling: Tailwind CSS with DaisyUI components
- Build Tool: Angular CLI with zoneless change detection
- HTTP Client: Built-in Angular HttpClient for API communication
- User registration with email validation
- User log in with secure password authentication
- Member listing and individual member retrieval
- SQLite database with Entity Framework Core migrations
- CORS configuration for frontend integration
- Modern UI with Tailwind CSS and DaisyUI
- Member listing display
- Responsive design
- HTTPS support for development
DatingApp/
├── API/ # .NET 9 Web API Backend
│ ├── Controllers/ # API Controllers
│ │ ├── AccountController.cs # Authentication endpoints
│ │ ├── MembersController.cs # Member management
│ │ └── BaseApiController.cs # Base controller
│ ├── Data/ # Data layer
│ │ ├── AppDbContext.cs # Entity Framework context
│ │ ├── LoginDto.cs # Login data transfer object
│ │ └── Migrations/ # Database migrations
│ ├── DTOs/ # Data transfer objects
│ │ └── RegistrerDto.cs # Registration DTO (filename may be corrected to RegisterDto.cs)
│ ├── Entities/ # Domain entities
│ │ └── AppUser.cs # User entity
│ ├── dating.db # SQLite database
│ └── Program.cs # Application entry point
├── client/ # Angular 21 Frontend
│ ├── src/
│ │ ├── app/ # Angular application
│ │ │ ├── app.ts # Main component
│ │ │ ├── app.html # Main template
│ │ │ ├── app.css # Component styles
│ │ │ ├── app.routes.ts # Routing configuration
│ │ │ └── app.config.ts # Application configuration
│ │ ├── styles.css # Global styles
│ │ └── main.ts # Application bootstrap
│ ├── public/ # Static assets
│ └── ssl/ # SSL certificates for development
└── DatingApp.sln # Visual Studio solution file
- .NET 9 SDK
- Node.js (v18 or higher)
- Angular CLI (v21)
- EF Core CLI tool (for migrations):
dotnet tool install --global dotnet-ef
-
Navigate to the API directory:
cd API
-
Restore dependencies:
dotnet restore
-
Update the database:
dotnet ef database update
-
Run the API:
dotnet run
The API will be available at https://localhost:5001
.
-
Navigate to the client directory:
cd client
-
Install dependencies:
npm install
-
Run the development server:
npm start
The application will be available at https://localhost:4200
.
POST /api/account/register
- Register a new userPOST /api/account/login
- Log in user
GET /api/members
- Get all membersGET /api/members/{id}
- Get member by ID
Id
(string) - Unique identifierDisplayName
(string) - User's display nameEmail
(string) - User's email addressPasswordHash
(byte[]) - Hashed passwordPasswordSalt
(byte[]) - Password salt for hashing
- The application uses SQLite for the development database
- Password hashing is implemented using HMACSHA512
- CORS is configured to allow requests from Angular development server
- The frontend uses Tailwind CSS with DaisyUI for styling
- SSL certificates are included for HTTPS development
- Secrets: never commit real secrets. Keep
appsettings.Development.json
local; useappsettings.Development.example.json
as a template. - JWT signing key: store securely via environment variables or a secrets provider in production.
- Password hashing: for production, prefer PBKDF2, bcrypt, scrypt, or Argon2 instead of raw HMACSHA512.
- CORS: restrict origins, headers, and methods in production.
- HTTPS: enforce HTTPS redirection and enable HSTS in production.
- Rate limiting: apply on authentication endpoints to mitigate brute-force attacks.
- .NET 9.0
- Entity Framework Core 9.0.8
- SQLite
- ASP.NET Core Web API
- Angular 21.0.0-next.0
- Tailwind CSS 4.1.12
- DaisyUI 5.0.54
- TypeScript 5.9.2
This project is for educational purposes.
- Live demo: add link here when deployed
- API base URL (local):
https://localhost:5001
- Client URL (local):
https://localhost:4200
Place screenshots in client/public/
and reference them here:
- Landing page:
client/public/landing.png
- Members list:
client/public/members.png
- Messaging:
client/public/messages.png
- Backend (
API/appsettings.Development.json
): set connection strings and JWT config. - Frontend (
client/src/app
): update API base URL used by the HTTP client if applicable. - Secrets: never commit real secrets. Use user secrets or environment variables for production.
- Start API:
cd API && dotnet run
- Start Client:
cd client && npm start
- Browse client at
https://localhost:4200
(API must be running for data).
- Run Angular unit tests:
cd client && npm test
- Add EF Core migration:
cd API && dotnet ef migrations add <Name>
- Update database:
cd API && dotnet ef database update
- Backend: add unit tests for services (e.g., token issuance) and controller actions; consider integration tests against a test database.
- Frontend: run unit tests with
npm test
and consider end-to-end tests for critical flows.
- Publish profile from Visual Studio or
dotnet publish -c Release
and deploy artifact. - Set environment variables (e.g., connection strings, JWT options) in Azure.
- Build:
cd client && npm run build
(outputs toclient/dist
). - Deploy
dist
output to a static host (Azure Static Web Apps, Netlify, Vercel, S3+CloudFront). - Ensure the client points to the public API URL.
- Backend configuration lives in
API/appsettings*.json
. Use environment variables or managed secrets in production. - Frontend should reference the API base URL from environment configuration and avoid hardcoding URLs.
- Photo upload and gallery
- Private messaging
- Filtering, sorting, and paging
- JWT authentication and guards
- Real-time presence and notifications with SignalR
- Summarize the problem: modern full-stack app with auth, data, and realtime.
- Highlight your role: API design, Angular UI, security, and deployment.
- Link to the live demo and include 2–3 screenshots.
- Brief bullet points of technical highlights (see Roadmap and Technologies Used).
This project is licensed under the MIT License. See the LICENSE
file for details.