Skip to content

alexmchughdev/campus-navigation-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Smart Campus Navigation System

A Python Dash web application for campus navigation and administration. Users get room-to-room routing with step-by-step directions and distance. Admins manage users, send notifications, view system logs, and monitor analytics, all backed by CSV-based persistent storage with no external database dependency.

Built as an MSc Computer Science project exploring graph algorithms, design patterns, role-based access control, and reactive web application development.

Features

  • Room-to-room navigation: fastest and accessible route options using Dijkstra's algorithm across a weighted building graph
  • Step-by-step directions: turn-by-turn instructions with outdoor distance in metres
  • Role-based access control: student, staff, and admin roles with role-appropriate UI rendering
  • Notification system: global broadcast (ALL) and individual user notifications with delivered/pending status
  • Admin user management: create, update, and delete users with CSV persistence
  • Admin notification management: create, update, delete, and send notifications
  • Analytics dashboard: bar chart of notification delivery status, pie chart of user role breakdown (Plotly)
  • System audit log: all admin actions logged with a live log viewer in the dashboard
  • CSV persistence: data stored in data/locations.csv, data/users.csv, data/notifications.csv

Tech stack

Layer Technology
Framework Python Dash
Charts Plotly (go.Figure, px)
Routing Strategy pattern (FastestRouteStrategy, AccessibleRouteStrategy)
Algorithm Dijkstra's shortest path on weighted building graph
Logging Custom Logger class
Data storage CSV files
Language Python

Project structure

├── app.py                        # Main application, layout and all callbacks
├── data/
│   ├── locations.csv             # Campus rooms and floors
│   ├── users.csv                 # Users (id, name, role)
│   └── notifications.csv        # Notifications (id, user_id, message, delivered)
└── scns/
    ├── models/
    │   ├── location.py           # Location model
    │   ├── user.py               # User model
    │   └── notification.py      # Notification model
    ├── data_loader.py            # CSV loading functions
    ├── functions/
    │   └── routing_functions.py  # Graph construction helpers
    └── patterns/
        ├── fastest_route.py      # FastestRouteStrategy
        ├── accessible_route.py   # AccessibleRouteStrategy
        └── logger.py             # Audit logger

Getting started

Prerequisites

  • Python 3.8+
  • pip

Install and run

git clone https://github.com/AlexMcHugh1/campus-navigation-system.git
cd campus-navigation-system
pip install -r requirements.txt
python app.py

The application will be available at http://127.0.0.1:8050

Login

Select an existing user from the dropdown to log in. Authentication is identity-based against the users CSV.

Role permissions

Feature Student Staff Admin
Navigation Yes Yes Yes
Own notifications Yes Yes Yes
Analytics No Yes Yes
User management No No Yes
Notification management No No Yes
System logs No No Yes

Routing

Routes are computed across a weighted building graph. Within the same building, floor-based navigation is used directly. Between buildings, the selected strategy (fastest or accessible) finds the optimal path using Dijkstra's algorithm, returning an ordered list of hops with distances.

The strategy pattern allows new routing modes to be added without modifying the core routing logic.

Architecture decisions

  • Strategy pattern for routing: FastestRouteStrategy and AccessibleRouteStrategy share a common interface, making alternative routing modes easy to add
  • CSV storage: chosen over a database to keep the application self-contained and portable, all writes are synchronous to maintain consistency
  • Dash callbacks: reactive UI state managed through Dash's callback system using dcc.Store for session data (user ID and role)
  • Audit logging: all admin mutations (create, update, delete) are logged via Logger for accountability

Why I built this

MSc Computer Science project exploring practical application of graph algorithms, software design patterns, and reactive web development. The CSV-over-database constraint was deliberate, to focus on data modelling and algorithmic correctness rather than infrastructure.

License

MIT

About

Python Dash web app for campus navigation with Dijkstra routing, role-based access, admin CRUD, audit logging, and Plotly analytics.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages