Full Stack Project

A university-wide platform that helps students access and share study materials in an organized, scalable way. Built with Node.js backend and modern frontend technologies to solve real campus challenges.

Brief icon

Brief

Motivation

As a student at the University of Ibadan, I experienced firsthand the challenges of accessing and sharing study materials. Traditional methods like scattered Google Drive links and WhatsApp groups were inefficient and disorganized. Some departments had useful materials that weren't accessible to other departments. I wanted to create a centralized platform that would help students access and share essential course-related resources in an organized, scalable way, like github for students

Challenges

  • Scattered study materials across multiple platforms
  • Difficulty finding relevant resources for specific courses
  • No centralized system for material organization
  • Limited collaboration between students
  • Inefficient resource discovery during critical academic periods

Solutions

  • Created a structured storage system organized by Faculty, Department, and Level
  • Implemented advanced search and filtering capabilities
  • Built a recommendation engine based on user profiles and academic interests
  • Integrated role-based access with student, moderator, and admin roles
  • Added monetization features including blog system and ad management

Impact

UniNav has transformed how students at University of Ibadan access and share study materials. The platform has created a community-driven approach where students actively contribute to a growing knowledge base, making academic resources more accessible and organized than ever before. Most of all uninav vission is to be more than just a study material plateform, we hope to expand it accommodate all activities that makes up a student life, Simplifying Students Academic journey

Architecture icon

Architecture

System Overview

UniNav follows a modern full-stack architecture with a Next.js frontend and NestJS backend. The system is designed for scalability and performance, using PostgreSQL for data persistence and Docker for containerization

System Flow

The application follows a three-tier architecture: Presentation Layer (Next.js), Business Logic Layer (NestJS API), and Data Layer (PostgreSQL). User requests flow through the Next.js frontend to the NestJS API, which processes business logic and interacts with the PostgreSQL database.

Technology Choices

Backend

Node.jsNode.js

Selected for its non-blocking I/O model, efficiency, and ability to handle concurrent requests, making it suitable for a scalable API

NestJSNestJS

For its modular architecture, scalability, and type safety, making it a great fit for a microservices architecture

Deployment

DockerDocker

For containerizing the application, ensuring consistent environments from development to production and simplifying deployment

Vercel

For seamless deployment of the Next.js frontend with automatic scaling and CI/CD integration

Frontend

Next.jsNext.js

Chosen for its excellent SEO capabilities, server-side rendering, and built-in optimization features that are crucial for a content-heavy platform

TypeScriptTypeScript

For type safety, improved code quality, and better maintainability, especially in a growing codebase

Database

PostgreSQLPostgreSQL

For its reliability, feature richness, and strong support for complex queries and data integrity, used it for more optimized searches using pgvector

Key Features

  • Role-based access control system
  • Advanced search and filtering
  • Recommendation engine
  • File upload and management
  • Real-time notifications
  • Monetization system with ads and boosted content
Database Design icon

Database Design

Database Overview

The database design focuses on scalability and performance, with carefully designed relationships between users, materials, and interactions. The schema supports complex queries for the recommendation system while maintaining data integrity.

UniNav Database Schema

The database schema includes tables for users, materials, departments, faculties, interactions, and monetization features. Each table is optimized for specific query patterns and includes proper indexing for performance.

Design Decisions

  • Normalized database design to reduce redundancy and maintain data integrity
  • Strategic indexing on frequently queried columns for optimal performance
  • Soft delete implementation for materials to maintain historical data
  • Separate tables for different interaction types to support analytics
  • Optimized foreign key relationships to support complex queries

Database Tables

users

Student accounts with auth, profile, matric number, role (student/mod/admin)

moderators

Moderator assignments per department/faculty with approval status

faculties

University faculties directory with moderation status

departments

Departments linked to faculties with descriptions

courses

Course catalog with unique course codes and descriptions

department_courses

Junction table mapping courses offered by each department

student_courses

Junction table of students enrolled in courses

materials

Study materials metadata (type, tags, address), counts, status, visibility

collections

User-created material collections with contributors, tags, visibility, restriction

bookmarks

User saves for materials or collections for quick access

adverts

Advertisements linked to materials/collections with pricing and metrics

blogs

Editorial content (articles/guidelines/schemes) with body, likes, clicks

comments

User comments on blog posts

Challenges & Solutions icon

Challenges & Solutions

Challenge Overview

Building UniNav presented several complex challenges that required innovative solutions and deep technical expertise. From handling massive file uploads to implementing real-time features, each challenge pushed the boundaries of what was possible with the chosen technology stack.

1

Role-based Access Control

Implementing a complex permission system where different user types (students, moderators, admins) have varying levels of access to materials and features.

Key Learnings

These challenges taught me the importance of scalable architecture, performance optimization, and user experience design.