01 / THE BRIEF
The problem
School websites need to serve several audiences at once: parents looking for admissions and contact information, students checking updates, and staff maintaining public content. Important information can become difficult to find when pages and updates are managed separately.
02 / APPROACH
How I approached it
Build a responsive public website around clear information architecture, then support recurring school updates through a protected administration area. Keep public records and draft or unapproved content separate.
03 / IMPLEMENTATION
What I built
- Organised public information pages covering the school, admissions, facilities, staff, student information, gallery, videos and contact details.
- Worked across the React/Vite frontend and the Express/MongoDB backend.
- Implemented management flows for notices, admission resources, faculty profiles and gallery content.
- Added enquiry handling, with optional Google Sheets synchronisation and a retry path for failed syncs.
- Applied server-side validation, file-signature checks for PDFs, protected admin sessions, rate limiting, a CORS allow-list and security headers.
04 / DESIGN & TECHNICAL DECISIONS
Why it works this way
Public and admin experiences
Public visitors see published information; unverified or draft faculty and resources remain behind admin access.
Content that changes over time
Notices and admission resources are managed as records with publication and expiry states rather than being hard-coded into the page.
Resilient enquiry flow
Enquiries are stored in MongoDB first; the optional Sheet sync is tracked separately so a sync failure does not pretend the enquiry was lost or successfully mirrored.
05 / MEDIA
Project gallery
Select any preview to bring it into the large viewing frame. Replace the illustrative visuals with authorised project screenshots as they become available.
06 / OUTCOME
What’s delivered
A deployed full-stack school website with public information pages and administrative workflows. No traffic, enquiry-conversion or performance figures are claimed because verified analytics were not available in the public repository.
07 / NEXT IMPROVEMENTS
What I’d improve next
For a production handover, confirm the school’s content and contact details, use durable object storage for uploaded media, verify all public claims with the school, and complete deployment smoke tests against the live environment.