A modern, interactive timetable and campus navigation application designed for Kingston University students. Valdi parses course schedule data and presents it in a user-friendly calendar interface, integrated with a 3D campus map for seamless navigation.
- Interactive Timetable: View your weekly or daily schedule using a robust calendar interface.
- Module Filtering: Select specific modules to customize your timetable view.
- Event Type Filtering: Toggle visibility for Lectures, Labs, Drop-in sessions, and more.
- 3D Campus Map: Explore the campus with an interactive 3D map powered by Mapbox GL JS.
- Room Navigation: Search for room codes (e.g., JG.1003) to get specific walking directions and visual markers.
- Seamless Integration: Jump directly from a calendar event to its location on the map.
- Responsive Design: Optimized for both desktop and mobile devices.
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Calendar: FullCalendar
- Maps: Mapbox GL JS (via react-map-gl)
- Icons: Lucide React
- State Management: React Hooks & Local Storage
- Deployment: GitHub Pages (via GitHub Actions)
Follow these instructions to set up the project locally on your machine.
- Node.js (Version 20 or higher recommended)
- npm (Node Package Manager)
- A Mapbox Access Token (for map functionality)
-
Clone the repository:
git clone https://github.com/JayNightmare/Valdi.git cd Valdi -
Install dependencies:
npm install
Create a .env.local file in the root directory and add your Mapbox token:
NEXT_PUBLIC_MAPBOX_TOKEN=pk.your_mapbox_access_token_hereYou can obtain a free access token by signing up at Mapbox.
-
Run the development server:
npm run dev
-
Open http://localhost:3000 in your browser to view the application.
The main dashboard provides a split view (on desktop) or toggle view (on mobile) between your Timetable and the Campus Map.
- Navigate to the "Select Modules" page or use the sidebar on the dashboard.
- Check the boxes for the modules you are currently enrolled in.
- Your selection is saved locally and persists across sessions.
- Switch to the "Map" view.
- Use the "Find a Room" search bar to enter a room code (e.g.,
SB2025orPR.JG.1003). - The map will fly to the building and provide text directions (e.g., "Go to Sopwith Building, 2nd Floor...").
- Alternatively, click "View on Map" from any calendar event to instantly locate your class.
src/
├── app/ # Next.js App Router pages and layouts
│ ├── dashboard/ # Main application dashboard
│ ├── login/ # Authentication pages
│ └── select-modules/ # Module selection interface
├── components/ # Reusable React components
│ ├── ui/ # Basic UI elements (Buttons, Inputs)
│ ├── Calendar.tsx # FullCalendar integration wrapper
│ └── CampusMap.tsx # Mapbox 3D map component
├── lib/ # Utility functions and types
│ ├── api.ts # Data fetching logic
│ ├── csv-parser.ts # CSV parsing for timetable data
│ ├── room-utils.ts # Room code parsing and direction logic
│ └── types.ts # TypeScript definitions
└── public/
└── data/ # Static CSV data files for timetables
This project is available for personal and educational use.