School Info Display System
A multi-tenant Progressive Web App I designed, built and shipped entirely solo. Schools manage their LCD display screens through an admin dashboard; a Vue.js 3 single-page app fetches live data from a REST API and renders 20+ modules in real-time.
This Vue.js 3 simulation mirrors what schools see on their LCD screens. The production app fetches all data from /api/{school_code} and updates modules independently via a flag-based system.
Each school enables only the modules it needs, with custom titles and display settings stored as JSON per school.
10-day forecast via Open-Meteo API. Auto-refresh every 6 hours with Turkish weather descriptions.
Daily teacher duty assignments per location. Excel import for bulk entry.
Student duty assignments with name, class, and station. Excel import supported.
Celebrates student birthdays with canvas-based confetti animation. Paginated for many birthdays on one day.
News carousel with images and dates. RSS feed import available for bulk content.
Scrolling announcement ticker pinned to the bottom. Priority-based ordering.
Auto-rotating image gallery with configurable transition intervals and captions.
Full class schedule with live countdown to next lesson. Active lesson highlighted in real-time.
Historical events for the current date in a carousel. Bulk import via external API.
One motivational quote per day. Bulk import via JSON for year-round pre-loading.
Monthly recognition with photo upload and animated celebration using canvas confetti.
School name, logo and live clock persistently visible. Per-school branding via template config.
All data scoped to school_code. One deployment serves unlimited schools. Per-school JSON templates control module visibility and theming.
Static assets cached on install. API uses network-first with stale fallback. Display screens continue running during network loss.
Each module tracks a flag_updated_at timestamp. Vue frontend polls /api/.../flags and re-fetches only changed modules — minimal traffic on slow networks.
Clean endpoints: /api/{school_code} for all data, /api/{school_code}/{module} for individual modules. Stateless, JSON-only.
PhpSpreadsheet for Excel (duty rosters, lesson times). RSS for news. External APIs for weather and historical data. JSON bulk import for quotes.
Full CRUD for 20+ modules. DataTables with server-side processing, modal forms, role-based access, email/SMS verification.
Get in touch to discuss a demo, a deployment, or what this kind of engineering could look like in your organisation.