playtranslate
Real-time screen translation app for Android for both language learners and casual gamers
Return to your next ayah, protect what you memorized, and keep trusted Qur'an guidance, duas, and private reflection in one daily routine.
EducationTypeScript · CSSGitHub @akmalmuhammedOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Hifzer is a Qur'an-centered web app with one signed-in home and multiple connected lanes: Qur'an reading, hifz review, memorization support, dua, private journaling, practice drills, fluency work, milestones, reminders, and support tools.
The product is no longer a narrow hifz tracker. The current app is better described as a Qur'an companion with hifz at the center and reading continuity around it.
Live user-facing surfaces:
Dashboard
Post-auth home with quick actions, streaks, review health, recent practice, and Qur'an continuity.Qur'an
Hub, reader, progress, bookmarks, glossary, official enrichment, official audio/reciters, and grounded AI explanation.Hifz
Session engine, SRS review, quality gates, weak-transition repair, and progress.Practice
Rescue sessions, mushabihat radar, seam trainer, and meaning-linked support.Fluency
Listening-led loops, hesitation cleanup, transition smoothing, and retest flow.Dua
Guided dua modules, user-managed custom duas, and deck ordering.Journal
Private notes with ayah/dua links, account sync, and safe degraded fallback.Milestones, Notifications, Settings, Billing, Support
The rest of the operating surface around the core app.Public routes:
//compare/changelog/motivation/pay/quran-preview/welcome/legal/legal/privacy/legal/terms/legal/refund-policy/legal/sources/unsubscribeAuth routes:
/login/signup/forgot-passwordOnboarding routes:
/onboarding/welcome/onboarding/start-point/onboarding/assessment/onboarding/fluency-check/onboarding/plan-preview/onboarding/permissions/onboarding/completeMain app routes:
/dashboard/hifz/hifz/progress/session -> redirect alias to /hifz/quran/quran/read/quran/bookmarks/quran/glossary/quran/progress/quran/surah/[id]/quran/juz/[id]/dua/dua/[moduleId]/dua/[moduleId]/deck/journal/practice/fluency/fluency/lesson/[id]/fluency/retest/milestones/notifications/ramadan/roadmap/settings/settings/account/settings/display/settings/language/settings/plan/settings/quran-foundation/settings/reciter/settings/reminders/support/billing/upgrade/billing/manage/billing/success/billing/thank-youLegacy namespace retained for compatibility:
/legacy/*/app and /app/* redirect into /legacy/*/sign-in redirects to /legacy/sign-inImportant:
/today page./dashboard.Top-level code map:
src/app
App Router route groups, layouts, and API routes.src/hifzer
Product/domain services.src/components
App shell, landing, Qur'an UI, settings, billing, providers, and primitives.workers/ai-gateway
Cloudflare Worker for grounded Qur'an AI.prisma/schema.prisma
Persistence model.Key domain modules:
src/hifzer/quransrc/hifzer/srssrc/hifzer/recitationsrc/hifzer/bookmarkssrc/hifzer/journalsrc/hifzer/quran-foundationsrc/hifzer/dashboardsrc/hifzer/streaksrc/hifzer/aisrc/hifzer/ramadansrc/hifzer/profilesrc/hifzer/audioClerk is the primary auth layer. Quran.com is an optional linked account, not a replacement auth system.
Recommended redirect contract:
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/loginNEXT_PUBLIC_CLERK_SIGN_UP_URL=/signupNEXT_PUBLIC_CLERK_SIGN_IN_FORCE_REDIRECT_URL=/dashboardNEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/dashboardNEXT_PUBLIC_CLERK_SIGN_UP_FORCE_REDIRECT_URL=/dashboardNEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=/dashboardRunbook:
docs/clerk-reset-runbook.mdHifzer uses Prisma v7 + Postgres/Neon.
Core persisted areas include:
Useful commands:
pnpm db:generate
pnpm db:migrate
pnpm db:deploy
pnpm db:studio
Current live integration:
/dashboard, /quran, and /settings/quran-foundationCurrent limitation:
activity_day, streak.read, goal.read, reading_session, collection, and notePreferred env names:
QF_OAUTH_CLIENT_IDQF_OAUTH_CLIENT_SECRETQF_USER_TOKEN_ENCRYPTION_SECRETQF_CONTENT_CLIENT_IDQF_CONTENT_CLIENT_SECRETQF_OAUTH_REDIRECT_URIQF_BOOKMARK_MUSHAF_IDQF_CONTENT_TRANSLATION_RESOURCE_IDQF_CONTENT_TAFSIR_RESOURCE_IDBackward-compatible fallback names still work:
QF_CLIENT_IDQF_CLIENT_SECRETQF_TOKEN_ENCRYPTION_SECRETFirst status check:
curl https://your-app-domain.com/api/quran-foundation/status
curl https://your-app-domain.com/api/quran-foundation/overview
The current AI explanation path is:
POST /api/quran/ai-explainworkers/ai-gatewayhttps://mcp.quran.ai)Key app env vars:
HIFZER_AI_GATEWAY_URLHIFZER_AI_GATEWAY_TOKENHIFZER_AI_GATEWAY_TIMEOUT_MS optionalKey worker env vars:
AI_GATEWAY_SHARED_SECRETAI_PROVIDER=gemini defaultGEMINI_API_KEYGEMINI_MODELQURAN_MCP_URLOptional worker vars for Groq:
GROQ_API_KEYGROQ_MODELGROQ_FORMAT_MODELRunbooks:
workers/ai-gateway/README.mddocs/ai-gateway-cloudflare-setup.mdResend handles application delivery, while the configured Zoho mailbox remains the visible sender and reply address.
Key env vars:
EMAIL_PROVIDER=resendRESEND_API_KEYEMAIL_FROMEMAIL_REPLY_TOEMAIL_UNSUBSCRIBE_SIGNING_SECRETCRON_SECRETNEXT_PUBLIC_APP_URLInvitation campaign workflow:
# Resolve Clerk names/emails and review the eligible audience. Sends nothing.
pnpm email:invitation:preview -- --limit=53
# Send only after reviewing the preview output.
pnpm email:invitation:send -- --limit=53 --confirm=latest-product-update-2026-07
The campaign resolves each recipient's first name from Clerk, falls back to a
non-personalized greeting when no name exists, and excludes unverified,
suppressed, or unsubscribed accounts. CAMPAIGN_APP_URL can temporarily
override NEXT_PUBLIC_APP_URL when testing the protected route locally.
Paddle powers upgrade/support flows.
Key env vars:
NEXT_PUBLIC_PADDLE_CLIENT_TOKENQur'an audio is local-first with Quran.com fallback:
NEXT_PUBLIC_HIFZER_AUDIO_BASE_URLNEXT_PUBLIC_HIFZER_DEFAULT_RECITER_IDRunbook:
docs/r2-first-time-setup.mdCurrent observability stack:
Operational runbook:
docs/operational-troubleshooting.mdMain checked-in data files:
src/hifzer/quran/data/ayahs.full.jsonsrc/hifzer/quran/data/quran-data.jssrc/hifzer/quran/data/surah-index.tssrc/hifzer/quran/data/translations/en.sahih.by-ayah-id.jsonUseful generation commands:
node scripts/generate-surah-index.mjs
pnpm quran:translation:sahih
More details:
src/hifzer/quran/data/SOURCES.mdInstall and run:
pnpm install
pnpm dev
Useful commands:
pnpm lint
pnpm test
pnpm test:e2e
pnpm test:e2e:routing
pnpm audit:clicks
pnpm audit:mobile:overflow
pnpm ai:worker:dev
pnpm ai:worker:deploy:dry
Progress simulation harnesses:
pnpm test:progress:week
pnpm test:progress:14d
pnpm test:progress:failures
Check:
/login/signupdocs/clerk-reset-runbook.mdExpected:
/login/dashboardCheck:
curl -i https://your-app-domain.com/api/dashboard/overview
Likely causes:
401503500Check:
curl https://your-app-domain.com/api/quran-foundation/status
Look for:
userApiReadycontentApiReadystatedetailCommon causes:
Smoke tests:
curl "https://your-app-domain.com/api/quran/content-panel?ayahId=1"
curl "https://your-app-domain.com/api/quran/audio-source?ayahId=1&reciterId=alafasy"
Common causes:
Smoke tests:
curl -X POST https://your-app-domain.com/api/quran/ai-explain \
-H 'content-type: application/json' \
--data '{"ayahId":1}'
If the app route is configured, then verify the Worker directly:
curl https://your-worker.your-subdomain.workers.dev/health \
-H "authorization: Bearer YOUR_SHARED_SECRET"
Common causes:
HIFZER_AI_GATEWAY_URL missingHIFZER_AI_GATEWAY_TOKEN mismatchGEMINI_API_KEYCheck:
curl -I https://your-audio-domain.com/alafasy/000001.mp3
Common causes:
NEXT_PUBLIC_HIFZER_AUDIO_BASE_URL unsetAGENTS.mddocs/README.mddocs/HIFZER_PROJECT_HANDOFF.mddocs/operational-troubleshooting.mdImportant:
docs/audits/**, docs/mobile-ui-audit-report.md, and docs/performance-mobile-audit.md are historical snapshots. They are useful for background, but they are not current product truth.