MyStoryWithData is a modular ASP.NET 8 full-stack application designed to showcase a personal portfolio featuring blog articles, Power BI reports, machine learning models, services, and user feedback.
This project is composed of three main layers:
- MyStoryWithData.Client — Frontend built with React (Vite)
- MyStoryWithData.Server — ASP.NET Core 8 API (Controllers, Middleware, ApplicationDbContext)
- MyStoryWithData.Auth — Identity-based authentication and authorization layer (AuthDbContext, JWT, IdentityServer ready)
- ASP.NET Core 8
- Entity Framework Core 8 (PostgreSQL)
- React (Vite)
- PostgreSQL
- JWT Authentication
- Docker (optional)
- Identity with custom
ApplicationUser - Swagger (with JWT support)
User authentication is managed through ASP.NET Core Identity with JWT-based access. It includes:
- Registration & Login
- Email confirmation (ready)
- Admin seeding and role creation
- Role-based access control
- 📚 Blog Section — Add/edit articles (public or premium)
- 📊 Power BI Reports — Embeddable reports with metadata
- 🤖 Machine Learning Models — Versioned models with metadata
- 💼 Services — Display your offered services
- ⭐ Feedback — Public ratings and comments
- 📬 Contact — Send messages via a form
- 🔐 JWT Middleware — Injects authenticated user info in requests
- 📝 Request Logging — Logs HTTP requests to file
- .NET 8 SDK
- PostgreSQL
- Node.js (for the React client)
Ensure you have a PostgreSQL database with the following:
- Host:
localhost - Database:
MyStoryWithDataDB - User:
user - Password:
pwd
Or change the credentials in appsettings.json.
# Apply migrations
dotnet ef database update --context ApplicationDbContext --project MyStoryWithData.Server --startup-project MyStoryWithData.Server# Backend
cd MyStoryWithData.Server
dotnet run
# Frontend
cd MyStoryWithData.Client
npm install
npm run devYou can build the full system with:
docker compose build
docker compose upSet the environment variable USE_DOCKER_DB=true if you want to use the containerized PostgreSQL connection string.
MyStoryWithData-v2/
├── MyStoryWithData.Auth/ # Identity & Auth logic
├── MyStoryWithData.Server/ # API + Database + Middleware
├── MyStoryWithData.Client/ # React frontend
├── README.md
- Security Improvements: Enhanced password policies, account lockout, security headers
- API Versioning: Implemented versioning support for future API changes
- Health Checks: Added comprehensive health monitoring for PostgreSQL
- Rate Limiting: Implemented to prevent abuse and ensure fair usage
- Global Exception Handling: Centralized error handling with proper HTTP status codes
- CORS Configuration: Properly configured for React frontend
- Unit Tests: Added testing framework with xUnit and Moq
- CI/CD Pipeline: GitHub Actions for automated testing and deployment
- Input Validation: Enhanced with DTOs and validation attributes
- API Documentation: Comprehensive API documentation
- Code Quality: Fixed nullable reference warnings and improved null safety
- Logging: Structured logging with file output
- Docker Support: Full containerization with PostgreSQL
- Swagger Integration: Interactive API documentation
- JWT Security: Secure token-based authentication
- Entity Framework: Code-first database approach
- Email confirmation workflow
- Role management in frontend
- Production deployment (Azure/AWS)
- Email service integration
- Performance monitoring
- Caching implementation
Apache License 2.0
Built with ❤️ by Geovany Batista Polo Laguerre | Data Science & Analytics Engineer