尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A 3D misbaḥa (99-bead prayer strand) in Three.js: hand-written physics, a turned walnut rod, a Hankin-pattern prayer rug in natural dyes, and a checkable colour system.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A misbaḥa (also subḥa, or tasbīḥ) is a strand of beads for keeping count in dhikr, the remembrance of God, so the heart can stay with the words rather than the numbers. This one hangs in lamplight from a turned walnut rod, over a tiled wall and a prayer rug: ninety-nine amber beads in three thirty-threes, two brass separators and the long imām bead. Press Space or tap, and one bead passes over the rod; the phrase, the count and a ring of ticks follow it, a bell sounds at each thirty-three, and the hundredth closes with the full tahlīl.檢視完整 README ↗
Live: https://jameel7007.github.io/misbaha/
A misbaḥa (also subḥa, or tasbīḥ) is a strand of beads for keeping count in dhikr, the remembrance of God, so the heart can stay with the words rather than the numbers. This one hangs in lamplight from a turned walnut rod, over a tiled wall and a prayer rug: ninety-nine amber beads in three thirty-threes, two brass separators and the long imām bead. Press Space or tap, and one bead passes over the rod; the phrase, the count and a ring of ticks follow it, a bell sounds at each thirty-three, and the hundredth closes with the full tahlīl.
| Counting | Drop: the strand on the rug | On a phone |
|---|---|---|
Everything is rendered live in the browser: every bead is simulated, every pattern is drawn by code, and nothing on screen is a video or a photograph.
prefers-reduced-motion removes the camera moves and makes passes
instant; the count is announced to screen readers.The full account, stage by stage, including the decisions that turned out wrong first, is in docs/architecture.md.
The three phrases after the prayer, each said thirty-three times, and the completion of the hundred with the tahlīl (lā ilāha illa-llāhu waḥdahu lā sharīka lah, lahu-l-mulku wa lahu-l-ḥamdu, wa huwa ʿalā kulli shayʾin qadīr) follow the narration in Ṣaḥīḥ Muslim; the 33 · 33 · 34 form follows another narration. Practice varies, so follow your own teacher.
Three.js r169 (WebGL 2), plain JavaScript ES modules, Vite. Fonts are self-hosted (Amiri and
Instrument Sans via Fontsource). No other runtime dependencies. The checks and captures are Node
scripts driving headless Chrome through playwright-core.
npm install
npm run dev # http://localhost:5173
npm run build # production build → dist/
npm run preview # serve dist/
npm run build:single # one self-contained HTML file → dist-single/index.html
Deployment is a GitHub Actions workflow (.github/workflows/pages.yml) that checks the palette,
runs the tests, builds, and publishes dist/ to GitHub Pages on every push to main. A CI workflow
runs the same checks on pull requests and other branches.
npm run check: the palette rules on the daylight colours, the unit tests and the build (what CI
runs).npm test: the dhikr sets (blocks, bells, completion, a new visit starting at zero, saved choices surviving corrupt data) and
the quality governor (driven by simulated frame times: an iPhone's first guess, a 30 fps cap, a
pixel-bound load, a very slow device, recovery).npm run verify:colour (needs the dev server): renders the scene in headless Chrome on the real
GPU and checks the colour rules on the pixels, including that no hotspot outshines the beads.npm run calibrate:colour: the lamp's white balance, as a colour temperature.| Path | What |
|---|---|
src/physics.js | the simulation: every array, step(), the rod's collider |
src/strand.js | beads, separators, imām, thread and tassel meshes; amber's shader |
src/rod.js | the turned walnut rod, its finial, collar, inlay and star rosette |
src/scene.js | renderer, lamp, wall glow, reflections, rug and wall, camera rig and phone framing |
src/textures.js | procedural textures: wood grain, amber, fringe, the rug, the wall tiles |
src/palette.js | every room colour in OKLCH, the colour rules and their written waivers |
src/main.js | boot, counting and mode controller, frame loop |
src/dhikr.js | the dhikr sets, what to show at each count, what the device remembers |
src/ui.js | title, phrase, tally ring, controls and phone sheet, set picker, About, the hundredth |
src/input.js, src/cursor.js | pointer and keyboard input; the desktop cursor (Pass, Drag, Turn) |
src/audio.js, src/ney/ | clicks, landings, bells; the ney recordings and their phrases |
src/quality.js, src/fill.js, src/dust.js | adaptive quality; bounce fill; dust in the beam |
scripts/ | colour checks and calibration, phrase finding, share image, screen capture |
tests/ | unit tests (node --test) |
docs/ | the architecture notes and README images |
reference/ | the build spec and the single-file page the project started from |
Made by Muhammad Jameel (@Jameel7007). Type: Amiri by Khaled Hosny and Instrument Sans by Rodrigo Fuenzalida, both SIL Open Font License. The ney recordings are from Freesound: ney played by Hamza Zeytinoğlu, recorded by xserra (CC BY 4.0), and recordings by avnonsen, aliaref and KasDonatov (CC0); see src/ney/SOURCES.md.
Code: MIT. The recordings and fonts keep their own licences.