Digital Clock
Remix/React application installable as a PWA, built around a configurable seven-segment clock, with timezone, 12/24h, local weather, stopwatch, timer, alarms, fullscreen, and mobile gestures.

Core stack
The challenge
The challenge was turning a simple time display into a useful experience across different screens: correct timezone, an adaptive seven-segment display, persistence of preferences, multiple time-measurement modes, and PWA/mobile behaviors without cluttering the main interface.
The solution
The solution uses Remix + React for UI and routing, a ClockContext for shared settings, localStorage for preferences and alarms, custom CSS for the digital segments, and native browser APIs for fullscreen, notifications, geolocation, and gestures. The PWA is configured with Vite/Workbox, and an Express server adds endpoints for alarms and Web Push. Critical functions remain gracefully degradable: the clock, timer, and stopwatch work client-side, and weather or push do not block the base display when they are unavailable.
Notable complexity
Digital Clock is a personal project that extends a full-screen digital clock into an installable web utility. The main screen renders the time on a seven-segment display built from React components and CSS, updated every second and configurable for 12/24h format, date format, timezone, size, color theme, and animation. Preferences are persisted in localStorage and propagated through a shared ClockContext.
The product has four modes on the same surface: Clock, Stopwatch, Timer, and Alarm. The stopwatch measures minutes, seconds, and hundredths, the timer accepts hours/minutes/seconds and triggers a local notification at the end, and the Alarm mode allows multiple alarms, labels, enabling/disabling, and daily repeat. Alarms are kept locally and synced to an Express API that maintains an in-memory copy.
The experience is designed for desktop and mobile: controls rearrange responsively, double-tap toggles fullscreen, swipes change the mode, and a shake gesture cycles through the available themes. A screensaver can move the display across the viewport with a bounce effect and configurable speed. The code also includes support for Wake Lock, although the hook is not actually wired into the main analyzed flow.
In Clock mode, the app can request the browser's geolocation, uses Nominatim for reverse geocoding and Open-Meteo for the current temperature, then refreshes the information periodically. If geolocation or the requests fail, the weather component hides itself without blocking the main clock function.
The app is configured as a PWA via Remix + Vite and @vite-pwa/remix, with a manifest, icons for multiple platforms, declared screenshots, fullscreen/standalone mode, a service worker, and a NetworkFirst strategy. The root registers the service worker, checks for updates, and attempts to maintain a Web Push subscription associated with a local userId.
The custom Express server exposes endpoints for syncing alarms, reading alarms, checking active ones, registering push subscriptions, and publishing the VAPID key. A server-side interval checks the current minute and attempts to send notifications via web-push. In the analyzed snapshot, however, state is kept only in in-memory Maps, VAPID keys are regenerated on restart, the timezone selected in the UI is not sent to the server, and the custom service worker attempts to use localStorage — unavailable in a Service Worker context. For these reasons, the background alarm part must be considered an experimental implementation, not a persistent production scheduler.
Deployment is prepared for Node/cPanel hosting: the Remix build produces a client/server bundle, loader.cjs starts the custom server, and the repository includes an FTP script that uploads the build to a subdirectory. The snapshot contains no CI/CD workflows or automated tests. There is also security debt in the deployment area: the repository contains hardcoded FTP credentials and VAPID keys, which must be revoked and moved to secret management before reuse.
Key results
- Web application with four integrated modes: Clock, Stopwatch, Timer, and Alarm
- Custom seven-segment display built from React and CSS, with real-time updates
- Configuration for 12/24h, date format, timezone, three sizes, five themes, and four animation modes
- Persistence of preferences and alarms in localStorage
- Timezone list generated from Intl.supportedValuesOf and display conversion to the selected zone
- Local weather via the Geolocation API, Nominatim reverse geocoding, and Open-Meteo
- Mobile interactions for fullscreen, mode switching via swipe, and theme switching via shake
- Screensaver with bounce movement and configurable speed
- Timer with a local notification and sound at the end, and alarms with a label / daily repeat
- PWA manifest, multi-platform icons, service worker, and a Workbox NetworkFirst strategy
- Express API for syncing alarms and Web Push subscriptions, plus implemented server-side sending
- Build + FTP upload script for deployment into a hosting subdirectory
Related projects
- CreativeSys AutoA custom online store with simple and variable products, a dynamic catalog and filters, checkout, EuPlătesc payments, commercial documents, full administration, and a separate quoting flow for car paint.
- Ghici Cine (Guess Who)A multiplayer browser party game with private rooms, words submitted by participants, real-time synchronized turns, per-player filtered state, and reconnection to the active session.
- Vedete & Inițiale (Celebrities & Initials)A multiplayer web app for TOMAPAN (categories/initial-letter) rounds in private rooms, with an access code, configurable categories, a shared letter, a timer, scoring for unique or duplicate answers, and real-time synchronization between players.
Want something similar?
Start with the estimate wizard — answer a few questions and get a realistic price range and timeline.