AI-Powered Skills Tracking and Learning Recommendation Platform
SkillSync is a modern full-stack web application that helps developers and professionals track their learning journey, get AI-powered recommendations, and automatically sync their GitHub activity to discover new skills.
- π Skills Management - Track and manage your technical skills with proficiency levels
- π Activity Tracking - Log learning activities (courses, projects, practice sessions)
- π― Milestone Planning - Set and track learning goals with deadlines
- π Analytics Dashboard - Visualize progress with interactive charts
- π€ AI Recommendations - Get personalized learning paths powered by Google Gemini
- π GitHub Integration - Automatically sync repositories and detect programming languages
- π§ Email Notifications - Weekly summaries and milestone reminders
- β° Background Jobs - Automated data synchronization with Hangfire
- Modern Architecture - Clean, maintainable codebase following best practices
- Responsive Design - Beautiful UI built with TailwindCSS and MudBlazor
- Real-time Updates - Dynamic charts and live data visualization with ApexCharts
- Secure Authentication - JWT-based auth with refresh tokens
- Comprehensive Testing - Unit and integration tests with automated CI/CD
- API Documentation - Interactive documentation with Scalar
Backend:
- ASP.NET Core 10 Web API
- Entity Framework Core 10
- SQL Server
- Hangfire (Background Jobs)
- Google Gemini AI (gemini-2.5-flash-lite)
- JWT Authentication
- Serilog (Logging)
- FluentValidation
Frontend:
- Blazor WebAssembly
- TailwindCSS
- MudBlazor
- Blazor-ApexCharts
- Blazored LocalStorage
- Markdig (Markdown rendering)
Infrastructure:
- GitHub Actions (CI/CD)
- xUnit (Testing)
- Moq & FluentAssertions
- Octokit (GitHub API)
SkillSync/
βββ SkillSync.Api/ # Backend Web API
β βββ Controllers/ # API endpoints
β βββ Services/ # Business logic
β β βββ Activities/ # Activity management
β β βββ AI/ # AI recommendation service
β β βββ Analytics/ # Analytics & reporting
β β βββ Auth/ # Authentication & authorization
β β βββ BackgroundJobs/ # Hangfire background jobs
β β βββ GitHub/ # GitHub integration
β β βββ Milestones/ # Milestone management
β β βββ Notifications/ # Email notifications
β β βββ Skills/ # Skills management
β βββ Data/ # Database entities & DbContext
β βββ DTOs/ # Data transfer objects
β βββ Validators/ # FluentValidation rules
β βββ Migrations/ # EF Core migrations
βββ SkillSync.Web/ # Blazor WebAssembly Frontend
β βββ Pages/ # Razor pages
β βββ Services/ # API client services
β βββ Models/ # Frontend models
β βββ Auth/ # Authentication providers
β βββ Layout/ # Layout components
β βββ wwwroot/ # Static assets
βββ Tests/
β βββ SkillSync.Tests.Unit/ # Unit tests
β βββ SkillSync.Tests.Integration/ # Integration tests
βββ .github/
βββ workflows/ # CI/CD pipelines
- .NET 10 SDK
- SQL Server or SQL Server LocalDB
- Node.js (for TailwindCSS)
- Visual Studio 2022 or VS Code
- Git
-
Clone the repository
git clone https://github.com/bykeny/SkillSync.git cd SkillSync -
Configure Database
Update connection string in
SkillSync.Api/appsettings.json:{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=SkillSyncDb;Trusted_Connection=true;MultipleActiveResultSets=true;TrustServerCertificate=true" } } -
Configure API Keys
Add your API keys to
SkillSync.Api/appsettings.json:{ "Gemini": { "ApiKey": "your-gemini-api-key", "Model": "gemini-2.5-flash-lite" }, "GitHub": { "ClientId": "your-github-client-id", "ClientSecret": "your-github-client-secret", "RedirectUri": "https://localhost:7065/api/github/callback" }, "Email": { "SmtpHost": "smtp.gmail.com", "SmtpPort": 587, "SmtpUsername": "your-email@gmail.com", "SmtpPassword": "your-app-password", "FromEmail": "skillsync@gmail.com", "FromName": "SkillSync" }, "JwtSettings": { "Secret": "your-jwt-secret-key-min-32-chars", "Issuer": "SkillSyncAPI", "Audience": "SkillSyncWeb" } }π‘ Tip: Use User Secrets for development:
dotnet user-secrets set "Gemini:ApiKey" "your-key" -
Apply Database Migrations
cd SkillSync.Api dotnet ef database update -
Build TailwindCSS
cd ../SkillSync.Web npm install npm run css:build -
Run the Application
In Visual Studio:
- Set multiple startup projects (SkillSync.Api + SkillSync.Web)
- Press F5
Or via command line:
# Terminal 1 - API cd SkillSync.Api dotnet run # Terminal 2 - Web cd SkillSync.Web dotnet run
-
Access the Application
- Frontend: https://localhost:7074
- API: https://localhost:7065/scalar/v1 (Scalar API Docs)
- Hangfire Dashboard: https://localhost:7065/hangfire
-
Register an Account
- Navigate to https://localhost:7074
- Click "Sign up" and create your account
-
Add Your First Skill
- Go to Skills page
- Click "Add Skill"
- Enter skill details (name, proficiency level, target level)
- Select a category
-
Track Activities
- Navigate to Activities
- Log learning activities (courses, projects, practice)
- Link activities to skills
-
Get AI Recommendations
- Go to Recommendations
- Click "Learning Path" and select a skill
- Get personalized step-by-step guidance powered by Google Gemini
- Generate weekly schedules and gap analysis
-
Connect GitHub
- Navigate to GitHub page
- Click "Connect with GitHub"
- Authorize the app
- View your repositories and language stats
- Skills are auto-created from detected languages
-
View Analytics
- Check the Analytics dashboard
- View progress charts, skill radar, and activity timeline
- Filter by date range (7, 14, 30, or 90 days)
dotnet testdotnet test Tests/SkillSync.Tests.Unitdotnet test Tests/SkillSync.Tests.Integrationdotnet test --collect:"XPlat Code Coverage"For production deployment, use environment variables instead of appsettings.json:
ConnectionStrings__DefaultConnection="your-connection-string"
JwtSettings__Secret="your-jwt-secret"
JwtSettings__Issuer="SkillSyncAPI"
JwtSettings__Audience="SkillSyncWeb"
Gemini__ApiKey="your-gemini-key"
Gemini__Model="gemini-2.5-flash-lite"
GitHub__ClientId="your-github-client-id"
GitHub__ClientSecret="your-github-client-secret"
Email__SmtpHost="smtp.gmail.com"
Email__SmtpPort="587"
Email__SmtpUsername="your-email@gmail.com"
Email__SmtpPassword="your-app-password"The application uses JWT with refresh tokens:
- Access Token: 15 minutes
- Refresh Token: 7 days
- Tokens are stored in LocalStorage (frontend)
- Refresh tokens are stored in database with rotation
Scheduled jobs run automatically via Hangfire:
- Weekly Summary: Every Monday at 9 AM
- Milestone Reminders: Daily at 8 AM
- GitHub Sync: Daily at 2 AM
You can monitor and manage jobs at https://localhost:7065/hangfire
POST /api/auth/register
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePassword123!",
"confirmPassword": "SecurePassword123!",
"firstName": "John",
"lastName": "Doe"
}POST /api/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePassword123!"
}Response:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "refresh-token-here",
"expiresIn": 900
}POST /api/auth/refresh
Content-Type: application/json
{
"refreshToken": "your-refresh-token"
}All skills endpoints require authentication (Bearer token).
GET /api/skills
Authorization: Bearer {access_token}POST /api/skills
Authorization: Bearer {access_token}
Content-Type: application/json
{
"name": "C# Programming",
"description": "Learning C# and .NET",
"proficiencyLevel": 3,
"targetLevel": 5,
"categoryId": 1
}PUT /api/skills/{id}
Authorization: Bearer {access_token}
Content-Type: application/json
{
"name": "C# Programming",
"proficiencyLevel": 4,
"targetLevel": 5,
"isActive": true
}POST /api/recommendations/learning-path/{skillId}
Authorization: Bearer {access_token}Returns a personalized learning path with steps, resources, and timeline.
For complete API documentation, visit https://localhost:7065/scalar/v1 when running the application.
-
Create Azure Resources
az group create --name SkillSyncRG --location eastus az appservice plan create --name SkillSyncPlan --resource-group SkillSyncRG --sku B1 az webapp create --name skillsync-api --resource-group SkillSyncRG --plan SkillSyncPlan --runtime "DOTNET|10.0" -
Deploy API
cd SkillSync.Api dotnet publish -c Release az webapp deploy --resource-group SkillSyncRG --name skillsync-api --src-path bin/Release/net10.0/publish -
Configure Environment Variables
az webapp config appsettings set --resource-group SkillSyncRG --name skillsync-api --settings \ ConnectionStrings__DefaultConnection="your-connection-string" \ JwtSettings__Secret="your-jwt-secret" \ Gemini__ApiKey="your-gemini-key"
# Dockerfile for API
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY ["SkillSync.Api/SkillSync.Api.csproj", "SkillSync.Api/"]
RUN dotnet restore "SkillSync.Api/SkillSync.Api.csproj"
COPY . .
WORKDIR "/src/SkillSync.Api"
RUN dotnet build "SkillSync.Api.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "SkillSync.Api.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SkillSync.Api.dll"]- β JWT authentication with refresh tokens
- β Password hashing with ASP.NET Identity
- β HTTPS enforcement
- β CORS configuration
- β SQL injection prevention (EF Core parameterized queries)
- β XSS protection (Blazor auto-escaping)
- β Input validation with FluentValidation
- β User Secrets support for local development
- β Rate limiting on authentication endpoints
- Never commit API keys or secrets to version control
- Use User Secrets during development:
dotnet user-secrets - Use environment variables in production
- Rotate JWT secrets regularly
- Enable 2FA for GitHub OAuth
- Keep dependencies updated
- Review security advisories regularly
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow C# coding conventions
- Write unit tests for new features (aim for 70%+ coverage)
- Use FluentValidation for input validation
- Update documentation
- Keep commits atomic and descriptive
- Ensure all tests pass before submitting PR
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2026 Kanan Ramazanov
- Google Gemini - AI-powered recommendations using gemini-2.5-flash-lite
- GitHub - OAuth and API integration via Octokit
- TailwindCSS - Beautiful, responsive styling
- MudBlazor - Comprehensive Blazor component library
- ApexCharts - Interactive data visualization
- Hangfire - Reliable background job processing
- Scalar - Modern API documentation
Kanan Ramazanov
Project Link: https://github.com/bykeny/SkillSync
- Core skills and activity tracking
- AI-powered recommendations with Google Gemini
- GitHub integration with Octokit
- Analytics dashboard with ApexCharts
- Background jobs and email notifications
- CI/CD pipeline with GitHub Actions
- Mobile app (React Native or .NET MAUI)
- Social features (share progress, follow others)
- Gamification (badges, achievements, streaks)
- Team collaboration features
- Learning resource marketplace
- Browser extension for quick activity logging
- Export/import functionality
- Dark mode theme support
Built with β€οΈ using .NET 10 and Blazor WebAssembly