Lost & Found Web Platform
A full-stack lost-and-found platform built as my college graduation project. Node.js and Express on an MVC architecture, EJS + Bootstrap frontend, and a MySQL database — with user authentication, item reporting with photo uploads, and email notifications. Designed and developed end to end.
Timeline
Nov 2023 — May 2024
Role
Design + Full-stack Development
Deployed on
Railway
Stack
Node.js
Express
EJS
Bootstrap
MySQL
MVC
Architecture
Full-stack
Node · MySQL

Preview
project description
Overview
Lost & Found Web Platform was my college graduation project (Nov 2023 – May 2024) and my first full-stack build end to end — I designed the UI/UX and then developed the whole thing. It's a place to report and recover lost belongings: people sign up, post a lost or found item with a photo and a category, and browse what others have reported. The backend follows the MVC pattern on Node.js and Express, with EJS views, a Bootstrap-based responsive frontend, and a MySQL database. Authentication runs on hashed passwords and sessions, image uploads go through Multer, and Nodemailer handles email.
For a long time it only ran locally against a MAMP database — so the most recent chapter of the project was actually getting it online: moving the database to a hosted MySQL, swapping every hardcoded credential for environment variables, and deploying the Node app to the web. It's the project where the full picture — design, backend, database, and deployment — came together for the first time.
What's inside
Features & pages
Auth & accounts
Sign-up and login with hashed passwords and session-based authentication
Report items
Post a lost or found item with details and a category
Photo uploads
Item images handled with Multer and served back in the listings
Email notifications
Account and item emails sent through Nodemailer
Responsive UI
Bootstrap-based interface designed and built end to end across devices
Problems solved
Challenges & solutions
Problem
As a full graduation project it needed a clean structure that separated data, logic, and presentation instead of one tangled codebase.
Solution
Applied the MVC pattern — models for MySQL queries, controllers for logic, routes for endpoints, and EJS views for rendering — so each concern stayed on its own.
Problem
User accounts required secure sign-up and login rather than storing plaintext passwords.
Solution
Hashed passwords with bcryptjs and managed authenticated sessions with express-session and JWT, guarding protected routes behind a login check.
Problem
Users report items with photos, so the app had to accept, store, and serve uploaded images.
Solution
Handled multipart uploads with Multer, saved the files server-side, and rendered them back into the item feed.
Problem
The project originally ran only on my machine against a local MAMP MySQL database, so it couldn't be deployed as-is.
Solution
Moved the database to a hosted MySQL on Railway, replaced every hardcoded localhost credential with environment variables, and deployed the Node app to Railway alongside the database.
Built with
Tech stack
Node.js
Backend runtime
Express
Server framework
EJS
Server-side views
Bootstrap
Frontend styling
MySQL
Database (mysql2)
bcryptjs + JWT
Auth & sessions
Multer
Image uploads
Nodemailer
Railway
App + database hosting
More work
Other dev projects
Luxe Noir — Shopping Cart
A luxury dark-theme fashion storefront built with Next.js 16 and TypeScript. Products are fetched from the DummyJSON API, grouped by collection, and managed through a React Context cart with a slide-in drawer. Built as part of The Odin Project React curriculum.
Memory Card Game
A Pokémon-themed memory game built with Next.js 16 and TypeScript. Twelve cards are fetched live from the PokeAPI, reshuffle after every click, and track your current and best score. Built as part of The Odin Project React curriculum.
CV Builder
A dynamic CV builder built with React 19 and Vite. Fill in your details across six sections, watch an A4 preview update in real time, and export a clean single-page PDF with one click via html2pdf.js. Built as part of The Odin Project React curriculum.