A web platform where professors post research opportunities and students can browse and apply. Built with ASP.NET Core MVC (.NET 10), Entity Framework Core, SQLite, and Bootstrap.
Live Demo: https://research-hub.azurewebsites.net
| Layer | Technology |
|---|---|
| Backend | ASP.NET Core MVC (.NET 10) |
| Frontend | Razor Views + Bootstrap 5 |
| Database | SQLite |
| ORM | Entity Framework Core 10 |
| Authentication | ASP.NET Identity (cookie-based) |
- Email + password registration and login
- Role selection during registration (Professor or Student)
- Secure password hashing via ASP.NET Identity
- Role-based authorization on all restricted actions
- Create, edit, and delete research opportunities
- View all applicants for each opportunity
- Accept or reject student applications
- Browse and search research opportunities
- Filter by research field, paid/unpaid, and duration
- Apply with a statement of interest
- Track application status (Pending / Accepted / Rejected)
- .NET 10 SDK installed
- No external database required (SQLite file-based)
# 1. Clone or navigate to the project directory
cd Project
# 2. Restore dependencies
dotnet restore
# 3. Run the application (database is auto-created on first run)
dotnet runThe application will start at http://localhost:5223 (check console output for exact URL).
| Role | Password | |
|---|---|---|
| Professor | professor@university.edu | Professor123! |
| Professor | dr.johnson@university.edu | Professor123! |
| Student | student@university.edu | Student123! |
The SQLite database file (researchhub.db) is created automatically in the project root on first run. To reset the database, simply delete the file and restart the application.
Project/
├── Controllers/
│ ├── AccountController.cs # Auth: register, login, logout
│ ├── ApplicationsController.cs # Student: apply, view applications
│ ├── HomeController.cs # Landing page
│ └── ResearchController.cs # CRUD opportunities, manage applicants
├── Data/
│ ├── ApplicationDbContext.cs # EF Core DbContext with Identity
│ └── SeedData.cs # Seeds roles, users, and sample data
├── Migrations/ # EF Core migrations (auto-generated)
├── Models/
│ ├── Application.cs # Student application entity
│ ├── ApplicationUser.cs # Custom Identity user
│ ├── ErrorViewModel.cs
│ └── ResearchOpportunity.cs # Research opportunity entity
├── ViewModels/
│ ├── ApplyViewModel.cs
│ ├── LoginViewModel.cs
│ ├── RegisterViewModel.cs
│ ├── ResearchCreateViewModel.cs
│ └── ResearchSearchViewModel.cs
├── Views/
│ ├── Account/ # Login, Register, AccessDenied
│ ├── Applications/ # Apply form, My Applications
│ ├── Home/ # Landing page
│ ├── Research/ # Browse, Details, Create, Edit, MyOpportunities, Applicants
│ └── Shared/ # Layout, validation scripts
├── wwwroot/ # Static assets (CSS, JS, Bootstrap)
├── Program.cs # App configuration and startup
├── appsettings.json # Connection string and settings
└── ResearchHub.csproj # Project file with NuGet packages
-
ASP.NET Identity: Used for secure password hashing, cookie authentication, and role management. No custom auth implementation needed.
-
SQLite: Zero-configuration file-based database. Perfect for local development and demo purposes.
-
ViewModel pattern: Separate ViewModels for forms prevent over-posting attacks and keep entity models clean.
-
Cascade delete strategy: Applications cascade-delete when a ResearchOpportunity is deleted, but restrict-delete on the Student side to avoid ambiguous cascade paths.
-
Unique constraint: A composite unique index on
(StudentId, ResearchOpportunityId)prevents duplicate applications at the database level.



