A comprehensive full-stack application for tracking personal learning progress, managing courses, setting learning goals, and monitoring educational achievements.
- Add & Track Courses: Support for various course types (Videos, Books, Articles, Workshops, Certifications, Tutorials, Podcasts, Documentation)
- Progress Tracking: Monitor completion percentage and time spent
- Course Status Management: Track courses as Not Started, In Progress, Paused, Completed, or Abandoned
- Priority System: Organize courses by priority levels (Low, Medium, High, Urgent)
- Difficulty Levels: Categorize courses by difficulty (Beginner, Intermediate, Advanced, Expert)
- Goal Setting: Create and manage learning objectives
- Progress Monitoring: Track goal progress with visual indicators
- Deadline Management: Set and monitor target completion dates
- Category Organization: Organize goals by categories
- Category Management: Create custom categories with colors and icons
- Advanced Filtering: Filter courses by status, type, priority, and search terms
- Sorting Options: Sort courses by various criteria
- Rating System: Rate completed courses and write reviews
- Notes & Reviews: Add personal notes and detailed reviews
- Time Tracking: Log study time and monitor learning progress
This application follows Clean Architecture principles with clear separation of concerns:
- API Layer: RESTful API with controllers, exception handling, and health checks
- Application Layer: Business logic, CQRS with MediatR, DTOs, and validation
- Domain Layer: Core entities, value objects, enums, and domain events
- Infrastructure Layer: Data access, Entity Framework Core, SQL Server integration
- Component-based Architecture: Modular and reusable UI components
- Services: HTTP client services for API communication
- Reactive Programming: RxJS for handling asynchronous operations
- Responsive Design: Tailwind CSS for modern, mobile-first UI
- SQL Server: Robust relational database with Entity Framework Core
- Migrations: Database versioning and schema management
- Health Checks: Database connectivity monitoring
- .NET 9: Latest .NET framework for high-performance APIs
- Entity Framework Core: Object-relational mapping and database access
- MediatR: CQRS and mediator pattern implementation
- FluentValidation: Input validation and business rule enforcement
- Swagger/OpenAPI: API documentation and testing interface
- SQL Server: Primary database system
- Angular 18: Modern web framework with TypeScript
- Tailwind CSS: Utility-first CSS framework for styling
- RxJS: Reactive programming library for handling async operations
- Angular CLI: Development and build tooling
- Docker: Containerization for all services
- Docker Compose: Multi-container orchestration
- Health Checks: Service monitoring and reliability
- CORS Configuration: Secure cross-origin resource sharing
Before running this project, ensure you have the following installed:
- Docker Desktop (latest version)
- Git for version control
- .NET 9 SDK (for local development)
- Node.js 18+ and npm (for local frontend development)
- SQL Server (optional, for local development without Docker)
-
Clone the repository:
git clone https://github.com/othmanTeffahi99/PersonalCourseTracker.git cd PersonalCourseTracker -
Start all services:
docker-compose up -d
-
Wait for services to be ready (approximately 2-3 minutes for first startup)
-
Access the application:
- Frontend: http://localhost:4200
- API Documentation: http://localhost:5000/swagger
- Health Check: http://localhost:5000/health
- .NET 8 SDK
- Node.js 18+ and npm
- SQL Server (or use Docker for database only)
# Start only the database
docker-compose -f compose.dev.yaml up -d-
Navigate to API project:
cd PersonalCourseTracker.Api -
Restore dependencies:
dotnet restore
-
Update database connection in
appsettings.Development.json(if not using Docker database) -
Run database migrations:
dotnet ef database update
-
Start the API:
dotnet run
API will be available at: http://localhost:5198
-
Open a new terminal and navigate to Angular project:
cd PersonalCourseTracker.WebApp -
Install dependencies:
npm install
-
Start development server:
npm start
Frontend will be available at: http://localhost:4200
You can also run some services in Docker and others locally:
# Database only
docker-compose -f compose.dev.yaml up -d
# Or database + API
docker-compose up -d sqlserver api
# Then run frontend locally
cd PersonalCourseTracker.WebApp
npm start{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=PersonalCourseTracker;Trusted_Connection=true;TrustServerCertificate=true;"
},
"DatabaseProvider": "SqlServer"
}- Development:
src/environments/environment.ts - Production:
src/environments/environment.prod.ts
All services are configured via Docker Compose with:
- SQL Server: Port 1433 with automatic initialization
- API: Port 5000 with health checks
- Frontend: Port 4200 with nginx serving
GET /api/courses- Get all courses with filteringGET /api/courses/{id}- Get specific course detailsPOST /api/courses- Create new coursePUT /api/courses/{id}- Update courseDELETE /api/courses/{id}- Delete coursePOST /api/courses/{id}/progress- Update progressPOST /api/courses/{id}/start- Start coursePOST /api/courses/{id}/pause- Pause coursePOST /api/courses/{id}/resume- Resume coursePOST /api/courses/{id}/complete- Complete coursePOST /api/courses/{id}/abandon- Abandon coursePOST /api/courses/{id}/rate- Rate course
GET /api/categories- Get all categoriesPOST /api/categories- Create new category
GET /api/goals- Get all learning goalsPOST /api/goals- Create new goalPUT /api/goals/{id}/progress- Update goal progress
# Run all tests
dotnet test
# Run specific test project
dotnet test PersonalCourseTracker.Application.Test
dotnet test PersonalCourseTracker.Domain.Test- Navigate to the course management section
- Click "Add New Course"
- Fill in course details (title, type, description, etc.)
- Set priority and difficulty level
- Assign to a category (optional)
- Save the course
- Select a course from your list
- Click "Update Progress"
- Enter completion percentage and time spent
- Add notes about your learning session
- Save progress
- Go to the Goals section
- Click "Create New Goal"
- Define your learning objective
- Set target completion date
- Assign to a category
- Track progress over time
The application includes comprehensive health checks:
- Database connectivity: Ensures SQL Server is accessible
- API health: Monitors API service status
- Frontend availability: Checks Angular application status
Access health check endpoint: GET /health
Docker containers not starting:
# Check container logs
docker-compose logs
# Restart specific service
docker-compose restart apiDatabase connection issues:
# Check SQL Server container
docker-compose logs sqlserver
# Restart database
docker-compose restart sqlserverFrontend build issues:
# Clear npm cache
npm cache clean --force
# Reinstall dependencies
rm -rf node_modules package-lock.json
npm install# Reset database
docker-compose down -v
docker-compose up -d