Divan — Open Day
Divan is a bilingual Persian-poetry experience built for a Persian Society Open Day stall. A visitor selects Hafez or Rumi, holds an intention, and receives a single reviewed verse with its English translation, source attribution, and optional recitation. It is offline-first and privacy-first by construction, no cookies, trackers, backend, or visitor input, so it runs reliably on a venue's unreliable network while collecting nothing about the people who use it.
01. مشکل
A public Open Day stall needs a fast, delightful cultural experience that works on unreliable venue Wi-Fi, respects visitor privacy completely, and treats Persian poetry with cultural and scholarly integrity, no hallucinated verses, no rasterized calligraphy, no data collection.
02. بررسی راهکار
- Curated exactly 60 Hafez + 60 Rumi verses (120 total), each bound to an immutable edition with documented, verifiable source provenance
- Made the whole app offline-first with a hand-written service worker so the stall keeps working with no network
- Selected verses fairly with a Web Crypto shuffle bag entirely on-device — no server, no record of what anyone drew
- Rendered live Nastaliq typography and per-poet art direction for cultural authenticity instead of flattened images
- Built accessibility in from the start: bilingual/RTL markup, bidirectional isolation, live regions, forced-colors and reduced-motion support
پیادهسازی
پشته فناوری
- • Reviewed bilingual corpus: exactly 60 Hafez + 60 Rumi = 120 verses, each bound to an immutable edition with documented source provenance
- • Fair, unbiased verse selection via a Web Crypto shuffle bag — computed entirely on-device with no server involvement
- • Offline-first: a hand-written service worker with integrity verification keeps the stall running on flaky venue networks
- • Culturally distinct art direction per poet with live Nastaliq typography (real Persian script, never rasterized images)
- • Bilingual markup with directional text handling, bidirectional isolation, live regions, forced-colors and reduced-motion support
امنیت
- Privacy by construction: no cookies, identifiers, trackers, or visitor input; nothing is transmitted
- No backend, database, or analytics infrastructure — a purely static client
- Only public release/poem IDs persisted in sessionStorage; motion preference stored locally only
- Production compiler rejects synthetic/test data before deployment
- Source-bound attribution with rights verification (MIT for code; poetry and translations retain their own licenses, e.g. CC BY-SA)
- Delivered as a static container behind an outbound tunnel — no inbound surface
03. اثبات و تایید
ادعاهای تایید شده
- >Zero data collection: no cookies, trackers, or backend — only public poem IDs in sessionStorage
- >Runs fully offline after first load via the integrity-verified service worker
- >A production compiler rejects synthetic test data before deployment, so only the reviewed corpus ever ships
- >Tested across unit, component, accessibility, offline, share, performance, and security suites (Vitest) plus Playwright Chromium e2e