尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 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.