الانتقال إلى المحتوى الرئيسي
رجوع
React 19ViteTypeScriptOffline-FirstPrivacy by Designi18n / RTL

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

البناء

مكدس التقنيات

ViteReact 19strict TypeScriptHand-written service workerWeb Crypto (shuffle bag)Vitest (unit / component / a11y / offline)Playwright (Chromium e2e)pnpm 10.33 · Node 22.16
  • 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