A pastel-themed binary clock project with five runtime options:
- Native Windows desktop widget built with PowerShell + WinForms
- Browser-based web app built with HTML, CSS, and JavaScript
- Native Windows desktop app built with WPF + WebView2
- Native Android app built with Kotlin + WebView
- Native Wear OS watch face built with Kotlin + Canvas Watch Face API
All versions use a compact 4-row binary layout with values 8, 4, 2, 1.
- Compact binary clock display for hours, minutes, and seconds
- 12h / 24h toggle
- Elegant pastel UI style
- Resizable widget window (desktop native versions)
- Drag-to-move header area (native and web widget shell behaviour)
- Tray support for native app (hide/restore)
- Local state persistence (window bounds and preferences)
binary-clock/
├── web/ # Browser-based web app (PWA)
│ ├── index.html # Web app markup
│ ├── styles.css # Web app styles (responsive design)
│ ├── script.js # Web app logic
│ ├── manifest.json # PWA manifest for app installation
│ └── service-worker.js # Offline support & caching
├── powershell/ # Windows desktop widget (PowerShell)
│ ├── native-widget.ps1 # Main Windows desktop widget app
│ ├── launch-clock.cmd # One-click launcher (runs in STA mode)
│ ├── launch-clock.ps1 # PowerShell launcher script
│ └── widget-state.json # Saved runtime state
├── windows/ # Native Windows app wrapper (WPF + WebView2)
│ ├── BinaryBloomClock.Windows.csproj
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ └── README.md
├── android/ # Native Android app wrapper (Kotlin + WebView)
│ ├── app/
│ ├── build.gradle.kts
│ ├── settings.gradle.kts
│ └── README.md
├── wearos-watchface/ # Native Wear OS watch face project
│ ├── app/
│ ├── build.gradle.kts
│ ├── settings.gradle.kts
│ └── README.md
├── LICENSE
└── README.md
- Responsive design for desktop, tablet, and phone
- Installable as PWA (add to home screen on mobile)
- Works offline (service worker caching)
- 12h / 24h toggle
- Elegant pastel UI
- Resizable desktop widget window
- Drag-to-move and corner-resize
- System tray support (hide/restore)
- Always-on-top toggle
- Local state persistence
- WPF + WebView2 wrapper that runs the same
web/app in a native window - Kotlin + WebView Android wrapper that loads local bundled assets
- Kotlin + Canvas Wear OS watch face service
- Windows
- PowerShell 5.1+ (or PowerShell 7 with Windows compatibility)
- .NET WinForms support (System.Windows.Forms, System.Drawing)
- Any modern browser
From the powershell/ folder:
Option 1:
launch-clock.cmdOption 2:
powershell -NoProfile -ExecutionPolicy Bypass -STA -File .\native-widget.ps1Open web/index.html directly in a browser.
From the web/ folder:
python -m http.server 5500Then open: http://localhost:5500/index.html
- Open
web/index.htmlon your phone browser (or access via local network athttp://<your-ip>:5500) - Tap the menu (⋮) → Install app or Add to Home Screen
- The app appears in your app drawer and works offline
From the repo root:
cd windows
dotnet runThe project automatically copies files from ../web into the output folder.
- Open Android Studio.
- Open the folder
android. - Let Gradle sync and install required SDK components.
- Run on an emulator or Android device.
During build, Gradle copies ../../web into app/src/main/assets/web.
- Open Android Studio.
- Open the folder
wearos-watchface. - Let Gradle sync and install required Wear OS SDK components.
- Run on a Wear OS emulator or watch.
- Select Binary Bloom as the active watch face.
Top buttons:
12h/24h: Switch time formatPin: Toggle always-on-topFit: Fit widget to screen boundsTray: Hide to system trayClose: Exit app
Other behaviours:
- Drag header area to move
- Drag edges/corners to resize
- Double-click tray icon to restore
- State is saved to
widget-state.jsonin the project folder. - If PowerShell execution policy blocks startup, run with
-ExecutionPolicy Bypassas shown above.
This project is licensed under the MIT Licence. See the LICENSE file for details.