Lightweight countdown app rebuilt with React + Vite for the web and Capacitor for Android builds. It preserves the same UI/UX and functionality while enabling fully local Android Studio builds (no Expo/EAS).
- Local persistence for countdown items and UI preferences using
localStorage. - List or grid layout toggle (responsive two-column grid on mobile).
- Creation-order list with inline up/down arrows to move items (shown when toggling edit mode).
- Per-countdown themes (5 light + 5 dark) with localized names.
- Play, pause/resume, and stop controls with icons on the home cards.
- Time display shows
hh:mm:sswhen idle and collapses tomm:ssorsswhile running. - Full-screen style edit sheet with compact hour/minute/second selectors.
- Edit mode exposes delete buttons with confirmation.
- Detail sheet blocks interaction with the home screen while open.
- Countdown end feedback with vibration (when available) and a brief blink highlight.
- UI language auto-detected (Spanish/English) from the OS.
Each countdown item stores:
name: display name.totalSeconds: configured duration.remainingSeconds: current countdown value.themeId: color theme id.order: creation order (updated when using the move arrows).isRunningandisPaused: runtime state.
Timers update every second using lastTimestamp to reduce drift. When a countdown hits zero it stops automatically and resets its running state.
Preferences stored locally:
viewMode: list or grid.
- Node.js 18+
- npm
npm install# Web dev server
npm run dev
# Web production build
npm run build
# Preview production build locally
npm run previewnpm run devnpm run buildThe static site is generated in dist/.
Repository: dmarcosl/countdowns-webapp
This repo is configured to deploy automatically to GitHub Pages on every push to main.
- Ensure Pages is enabled:
- Repo Settings > Pages > Source: GitHub Actions
- Push to
main:
git add .
git commit -m "Deploy"
git push- Your site will be published at:
https://dmarcosl.github.io/countdowns-webapp/
npm run previewThis project builds locally using Android Studio (no paid cloud build).
npm install
npx cap add androidnpm run androidThis runs a web build, syncs it into the native project, and opens Android Studio.
npm run build
npx cap sync androidnpx cap open androidThen run on a connected device or emulator from Android Studio.
From Android Studio:
- Build > Generate Signed Bundle / APK...
Or via Gradle:
cd android
./gradlew assembleDebug
# or
./gradlew assembleReleaseAPK output:
android/app/build/outputs/apk/debug/app-debug.apkandroid/app/build/outputs/apk/release/app-release.apk
Run the web build and sync again:
npm run build
npx cap sync androidIf you change code/assets and don't see updates:
npm run buildnpx cap sync android- In Android Studio: Build > Rebuild Project
- Uninstall the app from the device and reinstall the APK (launcher caches icons).
- Vibration uses
navigator.vibratewhen supported on Android. - The Android folder is generated by Capacitor and can be deleted/recreated as needed.