GitHub - mohammedfirdouss/MindfulVerse · GitHub
Skip to content

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MindfulVerse

A quiet app for reflecting on the Qur'an. Read verses with translation and commentary, sit with a short guided reflection, count your dhikr, and keep a private journal.

It works in the browser, needs no sign up, and works offline. This is an early version. It is free.

Live at mindfulverse.vercel.app

Features

  • Daily check-in. A verse for today, a gentle mood picker, and a place to journal.
  • Tadabbur sessions. 20 short guided reflections. Each one has a theme, a few verses, and a prompt.
  • Dhikr and breath. A breathing circle paced to remembrance, with tap counting.
  • Read. All 114 surahs with Arabic, English translation, and Ibn Kathir's commentary.
  • Search and topics. Search the translation, or find verses by topic and jump into the reader.
  • Journal. Your reflections, saved on your device, with the verse they were written about.
  • Accounts & sync. Optional sign-in (email or Google) backs up your journal and progress across devices.
  • Daily reminder. A push notification with the verse of the day, at a time you choose.

All Qur'an text, translation, and commentary are shown exactly as they are. The app never rewrites or generates religious content.

Screenshots

Home Reader Daily check-in
Home Reader Daily check-in
Tadabbur sessions Browse by theme Dhikr and breath
Tadabbur sessions Browse by theme Dhikr and breath

Run it

The repo is an npm workspaces monorepo. Run everything from the root:

npm install
npm run build:data   # writes apps/web/public/data
npm run dev          # web app dev server
Command What it does
npm test The whole vitest suite: packages/core, apps/web, and functions/
npm run build Typechecks packages/core (no DOM), then builds the web app to apps/web/dist
npm run preview Serves the production build
npm run typecheck Typechecks packages/core only
npm run test:e2e Playwright smoke test in apps/web/e2e (skips without E2E_EMAIL/E2E_PASSWORD)

.env / .env.local stay at the repo root; the web app reads them from there.

How it is built

React, TypeScript, and Vite, with a service worker for offline use. All Qur'an data is bundled and the journal lives in your browser first; the only server component is an optional InsForge backend for account sync and reminders (see "Accounts & sync" below).

packages/core/        shared logic, no DOM: data loaders, journal, progress,
                      analytics, divisions, sync engine + merge, InsForge
                      client, account context (@mindfulverse/core)
apps/web/             the Vite PWA: pages, components, service worker, and the
                      web side of the core's platform seams (src/setup.ts)
apps/web/public/data/ generated Qur'an, tafsir, themes, sessions, emotions
functions/            InsForge edge functions (daily reminder)
migrations/           InsForge SQL migrations
scripts/              build-data.mjs, which turns raw datasets into app data
raw-data/             source datasets, not committed

The core never touches browser APIs directly. A host app wires it up once at startup — configureInsforge, configureData, configureSyncTriggers, and configureAnalytics — and provides localStorage and crypto.randomUUID. See docs/superpowers/plans/2026-10-06-rn-phase1-extraction.md.

To change the data, update the files in raw-data/ and run npm run build:data again.

Acknowledgments

The Qur'anic datasets come from the Quranic Universal Library by Tarteel. This app would not exist without their work.

The English translation is ClearQuran by Talal Itani, used under the CC BY-NC-ND 4.0 license. The Arabic typeface is the KFGQPC Uthmanic Hafs script from the King Fahd Glorious Qur'an Printing Complex in Madinah.

Accounts & sync (v1)

Signing in is optional — the whole app works signed-out, offline, on-device. An account only backs up your journal and progress so they follow you to another device. Auth, storage, and Postgres are provided by InsForge; there is no other server.

Env var Used for
VITE_INSFORGE_URL The InsForge project's base API URL
VITE_INSFORGE_ANON_KEY Public anon key for unauthenticated/auth requests
VITE_VAPID_PUBLIC_KEY Public key for the daily verse reminder (Web Push)

Set these in .env (or .env.local) for local development — see .env.example. On Vercel, add all three under Project → Settings → Environment Variables for both Production and Preview, then redeploy; they are VITE_* so Vite inlines them at build time, not at runtime.

Backend setup — SQL migrations live in migrations/, and the reminder/push edge functions live in functions/; both are applied to the InsForge project directly (see the InsForge CLI), not run from this repo.

The merge story, in three sentences: everything is written to localStorage first, so the app never blocks on the network; signing in, reconnecting, or returning to the tab triggers a sync that pulls the account's remote journal and progress and merges them with what's on this device — journal entries by union-by-id with soft-delete tombstones, progress by per-key max / earliest-completion / latest-read / set-union — then pushes back only the resulting diff. Every merge is deliberately commutative and idempotent — running it twice, or on two devices at once, converges to the same state rather than duplicating or clobbering entries.

Good to know

  • The translation renders the divine name as "God". It is shown word for word, as the license requires.
  • Ibn Kathir wrote commentary on passages, so some verses share a note with a neighboring verse.
  • Recitation audio, payments, and more languages are planned for later. See ROADMAP.md.

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages