Press a button, get a topic you did not choose, and talk.
Role
Solo
Year
2026
Status
Live
Category
Web
An Arabic site for practising impromptu speaking. It deals a random topic from 800 hand-written prompts, then runs a countdown while you talk. No backend, no account, and it works offline.
Overview
People practising for interviews or public speaking spend their time choosing a topic instead of talking, and they unconsciously pick topics they already know. The practice ends up with no pressure and no surprise.
Irtajil takes the choice away. Pick a mode, quick-fire or deep-dive, and a category, everyday or out of your comfort zone. Press for a topic, read it, then press start. The topic is only counted as used when you commit to it.
The whole site is one static Astro page with a single interactive island. All four topic banks ship inside the bundle and all state lives in localStorage, so there is nothing to run and nothing to break.
Users should not see a topic they already spoke on. Storing the topic text in history is wasteful, but storing only its position breaks the moment the topic list changes.
Solution
A topic is identified by bank key and index, and the banks are append-only: no deletes, no reordering, no edits. A check script enforces it, failing on count changes, duplicates across banks, and blank or too-short lines. The history is the only source of truth, and the used set is derived from it on load.
A timer that does not drift
Problem
Browsers throttle setInterval in background tabs, so a countdown that counts ticks finishes late as soon as you switch away from it.
Solution
The remaining time is computed from the difference in Date.now(), and the interval only redraws. A 60-second timer ends within a second of 60 even when the tab was hidden.
Offline with zero dependencies
Problem
A service worker plugin would be the only dependency besides Astro, and a hand-written cache list goes stale the moment a hashed file name changes.
Solution
A small build script walks the final output and generates the cache list from the real hashed file names. The Arabic font is served locally, so after the first visit the site works fully offline.
Results
800 original Arabic topics across four banks, with no duplicates.
Installable and fully usable offline.
No backend, no database, and no dependencies besides Astro.