A comprehensive AI-powered platform that connects students with internship and scholarship opportunities. Built with .NET 8, Entity Framework Core, and SignalR for real-time communication, featuring advanced AI recommendations, organization verification, and premium subscription services.
- AI-Powered Recommendations: Get personalized internship and scholarship recommendations based on your skills and profile using Ollama LLM (see Recommendation Endpoints & Logic)
- Resume Parser: Upload your resume to automatically extract and match your skills with opportunities
- Save Opportunities: Bookmark and manage your favorite internships and scholarships
- Real-time Notifications: Receive instant updates about new opportunities and application status
- Profile Management: Complete profile with skills, interests, and preferences
- Chat System: Communicate with companies and universities directly
- AI Chatbot Assistant: Get instant help and guidance through our intelligent chatbot (Students only)
- Interesting Profile System: Discover and connect with companies based on shared interests and skills
- Premium Features: Access advanced features with subscription-based premium membership
- Internship Management: Create, edit, and manage internship opportunities
- Real-time Communication: Chat with potential interns
- Communication Hub: Connect with students and provide guidance
- Organization Verification: Get verified by admins to build trust
- Analytics Dashboard: Track application statistics and engagement
- Scholarship Management: Create and manage scholarship programs
- Communication Hub: Connect with students and provide guidance
- Organization Verification: Get verified by admins to build trust
- Analytics Dashboard: Track application statistics and engagement
- Comprehensive Dashboard: Monitor platform statistics and user activity
- Content Moderation: Review and approve opportunities
- User Management: Manage users, roles, and permissions
- Organization Verification: Verify companies and universities
- System Analytics: Track platform performance and usage
- Report Management: Handle user reports and content violations
This project follows the Onion Architecture pattern, which provides a clean separation of concerns and dependency inversion. The architecture consists of multiple layers:
- Core Domain Layer: Contains business entities and domain logic
- Application Layer: Contains use cases and business rules
- Infrastructure Layer: Contains external concerns like databases, APIs, and services
- Presentation Layer: Contains controllers and API endpoints
- Backend: .NET 8 Web API
- Database: SQL Server with Entity Framework Core
- Authentication: JWT Bearer Tokens with ASP.NET Core Identity
- Real-time Communication: SignalR Hubs
- AI Integration: Ollama LLM for recommendations and chatbot
- Email Service: SMTP with HTML templates using MailKit
- File Storage: Local file system for images and documents
- Payment Processing: Stripe integration for premium features
- Caching: In-memory caching for performance optimization
- Document Processing: Resume parsing with iTextSharp and OpenXML
Recommendy/
βββ Contracts/ # Repository interfaces (Core Domain)
βββ Entities/ # Domain models and entities (Core Domain)
βββ Presentation/ # API Controllers (Presentation Layer)
βββ Repository/ # Data access layer (Infrastructure Layer)
βββ Service/ # Business logic layer (Application Layer)
βββ Service.Contracts/ # Service interfaces (Application Layer)
βββ Shared/ # DTOs and shared models (Application Layer)
βββ Recommendy/ # Main application (Infrastructure Layer)
- .NET 8 SDK
- SQL Server (LocalDB or full instance)
- Visual Studio 2022 or VS Code
- SMTP email service (Gmail recommended)
-
Clone the repository
git clone <repository-url> cd Recommendy
-
Set up environment variables
Open Command Prompt as Administrator and run:
setx SecretKey "your-secret-key" /M setx EmailPassword "your-email-password" /M setx GeminiKey "your-gemini-api-key" /M setx StripePublishableKey "your-stripe-publishable-key" /M setx StripeSecretKey "your-stripe-secret-key" /M setx PriceId "your-stripe-price-id" /M setx GOOGLE_CLIENT_ID "your-google-client-id" /M
-
Configure database connection
Update the connection string in
appsettings.json:{ "ConnectionStrings": { "sqlConnection": "Server=(localdb)\\mssqllocaldb;Database=RecommendyDB;Trusted_Connection=true;MultipleActiveResultSets=true" } } -
Run database migrations
cd Recommendy dotnet ef database update -
Build and run the application
dotnet build dotnet run
The API will be available at https://localhost:7001 (or your configured port).
POST /api/Authentication/Register- User registration with role selectionPOST /api/Authentication/login- User loginPOST /api/Authentication/google-register- Google OAuth registrationPOST /api/Authentication/google-login- Google OAuth loginPOST /api/Authentication/ForgotPassword- Password reset requestPOST /api/Authentication/ResetPassword- Password resetPOST /api/token/refresh- Refresh JWT token
GET /api/Student/{StudentId}/saved-scholarships- Get saved scholarshipsGET /api/Student/{StudentId}/saved-internships- Get saved internshipsPOST /api/Student/{StudentId}/profile-suggestions- Get profile suggestions
GET /api/Opportunities/RecommendedScholarships- Get AI-recommended scholarshipsGET /api/Opportunities/RecommendedInternships- Get AI-recommended internshipsGET /api/Opportunities/Scholarships/all- Get all scholarshipsGET /api/Opportunities/Internships/all- Get all internshipsPOST /api/Opportunities/SaveOpportunity- Save an opportunityDELETE /api/Opportunities/DeleteOpportunity- Remove saved opportunity
POST /api/Companies/{CompanyId}/internships- Create internshipPUT /api/Companies/{CompanyId}/internships/{id}- Update internshipDELETE /api/Companies/{CompanyId}/internships/{id}- Delete internshipGET /api/Companies/{CompanyId}/internships- Get company internshipsGET /api/Companies/profile/{id}- Get company profilePATCH /api/Companies/edit-profile/{id}- Edit company profile
POST /api/Universities/{UniversityId}/scholarships- Create scholarshipPUT /api/Universities/{UniversityId}/scholarships/{id}- Update scholarshipDELETE /api/Universities/{UniversityId}/scholarships/{id}- Delete scholarshipGET /api/Universities/{UniversityId}/scholarships- Get university scholarshipsGET /api/Universities/profile/{id}- Get university profilePATCH /api/Universities/edit-profile/{id}- Edit university profile
GET /api/Chat/users- Get chat usersPOST /api/Chat- Create new chatGET /api/Messages/{chatId}- Get chat messagesPOST /api/Messages- Send message
POST /api/ChatBot/generate- Send message to AI chatbotPOST /api/ChatBot/generate/stream- Send message to AI chatbot get response as stream
GET /api/ProfileSuggestion/interesting-profiles- Get interesting profiles based on interests
GET /api/Skill- Get user skillsPOST /api/Skill- Add skillsPOST /api/Skill/UploadResume- Upload resume to extract skillsDELETE /api/Skill/{skill}- Remove skill
GET /api/Organization/{OrganizationID}/Posts/{PostId}/FeedBack- Get feedback for postPOST /api/Organization/{OrganizationID}/Posts/{PostId}/FeedBack- Create feedbackPUT /api/Organization/{OrganizationID}/Posts/{PostId}/FeedBack/{feedbackId}- Update feedbackDELETE /api/Organization/{OrganizationID}/Posts/{PostId}/FeedBack/{feedbackId}- Delete feedback
POST /api/Report/Students/{StudentId}/Posts/{PostId}- Report a postGET /api/Report/all- Get all reports (Admin only)PUT /api/Report/{reportId}/status- Update report status
GET /api/Receiver/{ReceiverID}/Notification- Get user notificationsGET /api/Receiver/{ReceiverID}/Notification/{NotificationId}- Get specific notification
POST /api/Subscription- Create subscriptionGET /api/Subscription/is-premium- Check premium statusDELETE /api/Subscription/Cancel- Cancel subscriptionPOST /api/Subscription/SubscriptionRenewed- Handle subscription renewalPOST /api/Subscription/PaymentFailed- Handle payment failure
GET /api/Admin/dashboard- Get admin dashboard statisticsGET /api/Admin/users- Get all usersPUT /api/Admin/users/{userId}/ban- Ban/unban userGET /api/Admin/reports- Get system reportsGET /api/Admin/companies/unverified- Get unverified companiesPATCH /api/Admin/companies/{id}/verify- Verify companyGET /api/Admin/universities/unverified- Get unverified universitiesPATCH /api/Admin/universities/{id}/verify- Verify university
GET /api/profile/{id}- Get organization profile
GET /api/Countries- Get all countries
Configure JWT settings in appsettings.json:
{
"JWT": {
"validIssuer": "https://localhost:7001",
"validAudience": "https://localhost:7001",
"expires": "60"
}
}Update email settings in appsettings.json:
{
"EmailSettings": {
"Host": "smtp.gmail.com",
"Port": 587,
"Username": "your-email@gmail.com",
"EnableSsl": true
}
}Configure CORS in ServiceExtensions.cs for your frontend application.
The platform uses multiple AI services for different purposes: Ollama LLM: For intelligent chatbot responses and conversation handling
- Ollama LLM: For skill-based recommendations and content analysis
- Regex Pattern Matching: For question classification and response routing
- Smart filtering: Provide intelligent search and filtering options
- Student-Only Access: Exclusive chatbot assistance for students
- Ollama Local Models: AI-powered responses using Ollama running on localhost:11434
- Regex-Based Question Classification: Intelligent question filtering using regex patterns
- Career-Focused Responses: Specialized for career advice, internships, and education
- Dynamic Context Integration: Incorporates student skills and available opportunities
- Streaming Support: Real-time streaming responses for better user experience
- Prompt Templates: Structured prompts for consistent and concise responses
- Error Handling: Graceful error handling with fallback responses
- Skill-Based Matching: Match student skills with companies and universities using intelligent skill expansion
- Ontology-Driven Matching: Uses a comprehensive skill ontology to find related skills and synonyms
- Content Analysis: Analyzes company bios, internship descriptions, and position requirements
- University Matching: Matches student skills with scholarship requirements and university programs
- Scoring Algorithm: Calculates match scores based on skill compatibility
- Caching System: Optimized performance with 30-minute cache for profile suggestions
- Top 5 Recommendations: Returns the best 5 matching companies and universities
- Verification Process: Companies and universities must be verified by admins
- Trust Building: Verified organizations display verification badges
- Admin Review: Comprehensive review process for organization legitimacy
- Verification Notes: Admins can add notes during verification process
- Email Notifications: Automatic notifications for verification status changes
- Stripe Integration: Secure payment processing
- Subscription Management: Easy subscription creation and cancellation
- Premium Role: Special "PremiumUser" role with enhanced features
- Automatic Renewal: Seamless subscription renewal process
- Payment Failure Handling: Graceful handling of failed payments
- Email Notifications: Automatic emails for subscription events
SignalR hubs for real-time communication:
- NotificationHub: Real-time notifications
- MessageHub: Live chat functionality
- FeedbackHub: Real-time feedback updates
- JWT-based authentication with refresh tokens
- Role-based authorization (Student, Company, University, Admin, PremiumUser)
- Email confirmation for new accounts
- Password reset functionality with secure codes
- Input validation and sanitization
- Rate limiting for API endpoints
- Chatbot conversation security and privacy
- Organization verification for trust and security
- Secure file upload handling
- CORS configuration for frontend security
- SMTP Integration: Using MailKit for reliable email delivery
- HTML Templates: Professional email templates
- Email Confirmation: Account verification emails
- Password Reset: Secure password reset emails
- Notification Emails: System notifications and updates
- Subscription Emails: Payment and subscription notifications
- Organization Verification: Verification status emails
Recommendy provides personalized recommendations for both internships and scholarships to students, leveraging AI (Ollama LLM) and a user's skill profile. The recommendation logic is implemented in the following endpoints:
- GET
/api/Opportunities/RecommendedInternships - GET
/api/Opportunities/RecommendedScholarships
-
Skill Extraction:
When a student requests recommendations, the system retrieves the student's skills from their profile. -
Data Preparation:
The system fetches a list of available internships or scholarships (up to 50 at a time), including their names, descriptions, and IDs. -
Chunking:
To handle large data, the list is split into manageable JSON chunks. -
Prompt Engineering & AI Matching:
For each chunk, a prompt is constructed and sent to the Ollama LLM. The prompt asks the AI to select the IDs of opportunities that best match the student's skills, based on the name and description fields. -
ID Aggregation:
The AI returns a comma-separated list of matching IDs for each chunk. All IDs are aggregated, deduplicated, and combined. -
Caching:
The resulting list of recommended IDs is cached (with a sliding expiration) to optimize performance for repeated or similar queries. -
Filtering & Pagination:
The system queries the database for the full details of the recommended opportunities, applying any additional filters (e.g., paid/unpaid, degree, funding) and paginates the results.
- Ollama LLM for semantic matching and recommendations
- In-memory caching for performance
- .NET 8 Web API for endpoints
- Entity Framework for data access
- Recommendations are personalized and AI-driven.
- The system is scalable (handles large data via chunking and caching).
- The logic is modular and can be extended to other types of opportunities.
Run unit tests:
cd RecommendyUnitTests
dotnet testBuilt with β€οΈ for students, companies, and universities
