A floating island widget + sidebar dashboard for every website. Prayer times, weather, calendar, life tracker, and more — designed for Moroccan users with full Arabic/RTL support.
The main clock loop replaced requestAnimationFrame with a 1-second setInterval and pauses entirely when the tab is hidden (visibilitychange). The clock catches up immediately when you return to the tab. Same visual behavior, far less CPU on laptops.
The "Your Life in Weeks" grid now renders to a single <canvas> instead of thousands of DOM elements (52 × lifeExpect). Memory and layout cost drop dramatically, especially at higher life expectancies.
Island size now defaults to Auto — picks Small on laptops (≤1366px), Medium on typical desktops (≤1680px), and Large on wide screens. Manual override still available in Settings.
Detects prefers-color-scheme at startup. Dark OS → existing deep-glass style. Light OS → warm white background with dark text, no configuration needed.
Press Alt+Ctrl+Space to open a floating search palette. Type to fuzzy-search across all 40 cities, setting toggles, and quick links. Arrow keys navigate, Enter picks, Escape dismisses.
Weather automatically re-fetches when the browser regains network connectivity (window online event).
The animated border glow at prayer time now has a duration timeout: choose Short (3s), Normal (8s, default), or Long (42s). After the chosen duration the glow stops, and won't re-trigger until the next prayer — independent from the existing Glow Speed setting.
A draggable pill-shaped bar at the top of every page:
| Section | Content | Hover Popup |
|---|---|---|
| 🕐 Clock | 12h time with seconds + AM/PM | Google Calendar link |
| 📅 Date | English date (Wednesday, April 1) | Monthly calendar with navigation |
| 🌙 Hijri | Hijri date (computed locally) | Hijri detail card |
| 🕌 Prayer | Next prayer countdown (bidi-safe) | Full prayer times grid |
| ⏳ Age | Live age (compact) | — |
| 🌤️ Weather | Temperature + condition emoji | Full weather popup |
All sections can be individually shown/hidden from Settings → Island Sections.
- Position: Top Center / Top Left / Top Right / Bottom Center
- Scale: Auto (screen-width-based) / Small (0.82×) / Medium / Large (1.18×) / XL (1.38×)
- Font Presets: Default / Digital (Orbitron + Inter + Noto Sans Arabic + Rubik) / Papyrus
- Background: Default dark glass / Custom hex color / Fully transparent
- Blur: Adjustable 0–40px slider
- OS Theme: Automatically light or dark based on system preference
- Emoji toggle: Show/hide section icons
- Lock position: Prevent accidental drag
- Auto-hide: Windows-style — island slides off-screen, reappears when mouse approaches the edge
- Prayer glow: Animated border (white → purple → gold) for a configurable duration after each adhan, with independent speed and duration settings
Toggle with Alt+Ctrl or the close button.
- 35+ Moroccan cities with searchable combobox (Arabic/French/English input)
- AlAdhan API with Habous method (method=21)
- Hijri + Gregorian dates, active prayer highlighted in red
- Countdown to next prayer (bidi-safe RTL formatting)
- Synced with selected prayer city
- Temperature, description, humidity, wind, feels-like
- Weather icons mapped to wttr.in conditions
- Rain alert emoji (🌧️❗) on island when rain detected
- Auto-refresh every 30 minutes; instant refresh on network reconnect
- Monthly view with today highlighted
- Previous/next month navigation
- SVG clock face with hour/minute/second hands
- Digital time display below
- Start/stop/reset with centisecond precision
- Auto-saved textarea via GM_setValue
- "Your Life in Weeks" grid (inspired by Wait But Why and Bryan Braun)
- 52 columns × N rows (one row per year of life expectancy)
- Lived weeks in blue, current week in orange, future in dim
- Decade markers every 10 years
- Stats: current age, weeks lived, weeks left, % elapsed + progress bar
- Adjustable life expectancy (40–120 years)
- Real-time ticking counter:
22y 0m 15d / 14h 32m 07s - Total days alive
- Updates every second via
requestAnimationFrame
- Editable bookmark pills — add name + URL, delete on hover
- Persisted via GM_setValue
| Setting | Type | Default |
|---|---|---|
| Show Island | Toggle | On |
| Show Clock Widget | Toggle | On |
| Show Life Calendar | Toggle | On |
| Show Live Age | Toggle | On |
| Lock Island Position | Toggle | Off |
| Show Island Emojis | Toggle | On |
| Show Hover Popups | Toggle | On |
| Auto-Hide Island | Toggle | Off |
| Island Sections (×6) | Toggles | All On except Age |
| Island Position | Select | Top Center |
| Island Scale | Select | Auto |
| Font Preset | Select | Default |
| Prayer Glow Speed | Select | Normal (3s) |
| Prayer Glow Duration | Select | Normal (8s) |
| Blur | Range 0–40px | 24px |
| Background | Color picker / Hex / Default / Transparent | Default |
| Shortcut | Action |
|---|---|
Alt + Ctrl |
Toggle sidebar |
Alt + T |
Toggle island visibility |
Alt + Ctrl + Space |
Open command palette (search cities, toggles, links) |
- APIs: AlAdhan (prayer times, method=21), wttr.in (weather), Google Fonts (on-demand)
- Storage:
GM_getValue/GM_setValue— all settings persisted per-browser - Rendering: 1-second
setIntervalfor clock/age ticks (paused when tab is hidden), canvas for the life-weeks grid, minute-boundary prayer grid re-renders - Bidi: Arabic prayer names wrapped in
unicode-bidi:isolatespans to prevent RTL/LTR reordering - Compatibility: Tampermonkey / Violentmonkey on all Chromium + Firefox browsers
- Performance: DOM refs cached at init, intervals paused on tab hide, no polling loops
- Theme:
prefers-color-schemeread once at startup; light-mode:rootoverride injected conditionally
- Install Tampermonkey or Violentmonkey
- Click the
.user.jsfile — your script manager will prompt to install - Open any website — the island appears at the top, press
Alt+Ctrlfor the sidebar