An enterprise-grade boilerplate for modern web applications based on .NET 9 and Vue 3
- About the Project
- Features
- Technology Stack
- System Requirements
- Installation
- Development
- Deployment
- Configuration
- API Documentation
- Contributing
- License
Full Stack Boilerplate designed to accelerate the development process of modern web applications. Utilizing a .NET 9 backend and Vue 3 frontend, this platform enables developers to build SaaS applications quickly and securely.
- π― Rapid Development: Quickly start projects with a ready-to-use infrastructure.
- π Security: JWT Authentication, Role-based authorization.
- π Scalability: Multi-tenant architecture and a microservice-ready foundation.
- π¨ Modern UI/UX: Responsive design with Vue 3 + Vuetify.
- π§ DevOps Ready: Support for Docker and CI/CD pipelines.
- ποΈ Clean Architecture: Based on Domain-Driven Design principles.
- π Authentication & Authorization: JWT Bearer Token, Role-based access.
- π’ Multi-Tenancy: Tenant management with Finbuckle.MultiTenant.
- π Background Jobs: Background processing with Hangfire.
- πΎ Database Support: Support for PostgreSQL & SQL Server.
- π§ Email Service: Email sending with MailKit.
- π Export/Import: Data transfer with Excel files.
- π API Documentation: Swagger/OpenAPI integration.
- π Monitoring & Logging: Structured logging with Serilog.
- β‘ Caching: Performance optimization with Redis.
- π Localization: Multi-language support.
- π Real-time Communication: SignalR integration.
- β‘ Modern Framework: Vue 3 + Composition API.
- π¨ UI Framework: Material Design with Vuetify 3.
- ποΈ Build Tool: Fast development with Vite.
- π± Responsive Design: Mobile-first approach.
- π State Management: Centralized state management with Pinia.
- π Internationalization: Multi-language support with Vue I18n.
- π Charts & Visualization: ApexCharts integration.
- π§ TypeScript: Type-safe development.
- π― Auto-import: Automatic imports with Unplugin.
- π§ͺ Testing: Playwright + Vue Test Utils.
- π³ Docker: Multi-stage Dockerfiles.
- π Docker Compose: Development and production environments.
- π¦ Database Migrations: Entity Framework migrations.
- π§ Health Checks: Application health monitoring.
- π Monitoring: PostgreSQL + Redis health checks.
| Technology | Version | Description |
|---|---|---|
| .NET | 9.0 | Core framework |
| ASP.NET Core | 9.0 | Web API framework |
| Entity Framework Core | 9.0 | ORM and database migrations |
| PostgreSQL | 15+ | Primary database |
| Redis | Alpine | Cache and session store |
| Hangfire | 1.8.18 | Background job processing |
| SignalR | 9.0 | Real-time communication |
| MediatR | 12.5 | CQRS pattern implementation |
| FluentValidation | 12.0 | Request validation |
| Mapster | 7.4 | Object mapping |
| Serilog | Latest | Structured logging |
| JWT Bearer | 9.0 | Authentication |
| Swagger/NSwag | Latest | API documentation |
| Technology | Version | Description |
|---|---|---|
| Vue.js | 3.5.21 | Progressive framework |
| Vuetify | 3.10 | Material Design components |
| TypeScript | 5.9 | Type-safe JavaScript |
| Vite | 5.4 | Build tool and dev server |
| Pinia | 3.0 | State management |
| Vue Router | 4.5 | SPA routing |
| Vue I18n | 11.1 | Internationalization |
| Axios | 1.12 | HTTP client |
| ApexCharts | 1.8 | Data visualization |
| VeeValidate | 4.15 | Form validation |
| Technology | Description |
|---|---|
| Docker | Containerization |
| Docker Compose | Multi-container orchestration |
| Make | Build automation |
| ESLint | JavaScript/TypeScript linting |
| Prettier | Code formatting |
| StyleLint | CSS/SCSS linting |
| Playwright | End-to-end testing |
- Operating System: Windows 10+, macOS 10.15+, Ubuntu 18.04+
- .NET SDK: 9.0.300+
- Node.js: 22.x LTS
- Docker: 20.10+
- Docker Compose: 2.0+
- Git: 2.30+
- CPU: 2+ cores
- RAM: 4GB+ (8GB recommended)
- Disk: 20GB+ available space
- Network: HTTP/HTTPS access
git clone [https://github.com/evrendev/starter.evren.dev.git](https://github.com/evrendev/starter.evren.dev.git)
cd starter.evren.dev# Start the development environment
make dev
# Alternatively:
docker compose -f docker-compose.yml -f docker-compose.override.yml up -d# Start the production environment
make up
# Alternatively:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d# Check your .NET SDK installation
dotnet --version
# Install dependencies
dotnet restore BackendBoilerplate.sln
# Configure database settings (see Configuration)
# Run the migrations
dotnet ef database update --project src/backend/PublicApi
# Run the backend
dotnet run --project src/backend/PublicApi/PublicApi.csprojcd src/frontend
# Install dependencies
npm install
# Start the development server
npm run dev
# Build for production
npm run build# Display the help menu
make help
# Start the development environment
make dev
# Build and deploy for production
make build
make up
# View logs
make logs
make logs-backend
make logs-frontend
# Check container status
make status
# Cleanup
make clean- Feature Branch:
git checkout -b feature/new-feature - Development: Start the local environment with
make dev - Coding: Backend:
src/backend/, Frontend:src/frontend/ - Testing:
npm run test(frontend),dotnet test(backend) - Commit: Use Conventional Commits
- Pull Request: Create a merge request to the main branch
- Backend: Automatic reload with
dotnet watch - Frontend: Instant updates with Vite HMR
- Database: Schema updates with EF Core migrations
# Build production containers
make build
# Start the production environment
make up
# Health check
curl http://localhost:5001/healthSet the following environment variables for production deployment:
# Database
ASPNETCORE_ENVIRONMENT=Production
DatabaseSettings__ConnectionString=<your_connection_string>
DatabaseSettings__DbProvider=PostgreSQL
# Cache
CacheSettings__RedisURL=<redis_connection>
# Security
JwtSettings__SecretKey=<your_secret_key>
JwtSettings__Issuer=<your_issuer>
JwtSettings__Audience=<your_audience>
# Email
MailSettings__Server=<smtp_server>
MailSettings__Port=587
MailSettings__UserName=<smtp_username>
MailSettings__Password=<smtp_password>Backend configurations are managed with JSON files in the src/backend/PublicApi/Configurations/ directory:
{
"DatabaseSettings": {
"ConnectionString": "Host=localhost;Port=5432;Database=evrendev-sass;Username=postgres;Password=P@s5w0rd.123;Include Error Detail=true",
"DBProvider": "PostgreSQL"
}
}{
"CacheSettings": {
"RedisURL": "localhost:6379",
"SlidingExpiration": "00:15:00"
}
}{
"CorsSettings": {
"Angular": "http://localhost:4200",
"Blazor": "https://localhost:5002",
"React": "http://localhost:3000",
"Vue": "http://localhost:5173"
}
}// src/frontend/.env.local
VITE_API_URL=http://localhost:5001// src/frontend/src/assets/styles/admin/variables/_vuetify.scss
// Custom theme configurations- Development:
*.development.jsonfiles - Docker:
*.Docker.jsonfiles - Production: Overridden by environment variables
Once the backend is running, you can access the Swagger UI at:
- Development:
http://localhost:5001/swagger - Production:
https://your-domain.com/swagger
POST /api/identity/login
POST /api/identity/register
POST /api/identity/refresh-token
POST /api/identity/logout
GET /api/identity/users
POST /api/identity/users
PUT /api/identity/users/{id}
DELETE /api/identity/users/{id}
GET /api/catalog/products
POST /api/catalog/products
PUT /api/catalog/products/{id}
DELETE /api/catalog/products/{id}
# Run unit tests
dotnet test
# Generate coverage report
dotnet test --collect:"XPlat Code Coverage"cd src/frontend
# Run unit tests
npm run test:unit
# Run E2E tests
npm run test:e2e
# Playwright tests
npx playwright testThe application includes the following security headers by default:
- Content Security Policy (CSP)
- X-Frame-Options
- X-Content-Type-Options
- Referrer-Policy
- Permissions-Policy
- Login: Obtain a JWT token with Username/Password.
- Authorization: Access the API with a Bearer token.
- Refresh: Token refresh mechanism.
- Logout: Token invalidation.
- Memory Cache: For frequently accessed data.
- Redis Cache: For distributed caching.
- HTTP Cache: For static resources.
# Set log levels
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning"
}
}- Database connectivity
- Redis availability
- External service dependencies
- Fork and clone the repository.
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'feat: add amazing feature' - Push your branch:
git push origin feature/amazing-feature - Create a Pull Request.
- Backend: Microsoft C# coding conventions.
- Frontend: ESLint + Prettier.
- Commits: Conventional Commits format.
- Documentation: In-code documentation is required.
This project is licensed under the MIT License. See the LICENSE file for details.
Evren YeniuΔur
- Website: evren.dev
- LinkedIn: evrenyeniev
- GitHub: @evrendev
β If you find this project useful, don't forget to give it a star!
π For questions, please use the Issues section.