Skip to content

otabek-kholmirzaev/ResearchHub

Repository files navigation

ResearchHub

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.

Screenshots

Home Page

Home Page

Browse Opportunities

Browse Opportunities

Opportunity Details

Opportunity Details

Submit Application

Submit Application

Tech Stack

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)

Features

Authentication

  • 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

Professor Features

  • Create, edit, and delete research opportunities
  • View all applicants for each opportunity
  • Accept or reject student applications

Student Features

  • 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)

Setup & Run

Prerequisites

  • .NET 10 SDK installed
  • No external database required (SQLite file-based)

Quick Start

# 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 run

The application will start at http://localhost:5223 (check console output for exact URL).

Demo Accounts

Role Email Password
Professor professor@university.edu Professor123!
Professor dr.johnson@university.edu Professor123!
Student student@university.edu Student123!

Database

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 Structure

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

Key Architecture Decisions

  1. ASP.NET Identity: Used for secure password hashing, cookie authentication, and role management. No custom auth implementation needed.

  2. SQLite: Zero-configuration file-based database. Perfect for local development and demo purposes.

  3. ViewModel pattern: Separate ViewModels for forms prevent over-posting attacks and keep entity models clean.

  4. Cascade delete strategy: Applications cascade-delete when a ResearchOpportunity is deleted, but restrict-delete on the Student side to avoid ambiguous cascade paths.

  5. Unique constraint: A composite unique index on (StudentId, ResearchOpportunityId) prevents duplicate applications at the database level.

About

A web platform where professors post research opportunities and students can browse and apply.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors