尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證🌸 Blushme - a gift for my girlfriend in 20/10 to track her period
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Blushme gives estimates based on your own logs. It is not a medical tool and is not a contraceptive. Talk to a doctor if anything worries you.
| Language | Vietnamese by default, English available |
| Platform | Installable web app (PWA) for phone and desktop |
| Accounts | Email and password, powered by Supabase |
| Privacy | Per-user row level security, no ads, no analytics |
| Try it | "Sử dụng tài khoản demo" on the sign-in page, no sign-up needed |
Blushme is a progressive web app (PWA), so there is nothing to download from an app store. Open the site in your browser and add it to your device.
| Device | Browser | Steps | |
|---|---|---|---|
| 🍎 | iPhone / iPad | 🧭 Safari | Tap Share ⬆️, then Add to Home Screen ➕, then Add |
| 🤖 | Android | 🌐 Chrome | Tap the ⋮ menu, then Install app 📲 (or Add to Home screen) |
| 🖥️ | Windows / macOS / Linux | 🌐 Chrome or Edge | Click the install icon ⬇️ at the right of the address bar, then Install |
✅ After installing, Blushme opens in its own window like a native app.
| Area | What you get |
|---|---|
| Today | Cycle ring with one petal per day, current phase, countdown to the next period, greeting by time of day |
| Logging | One-tap mood, "my period started today" shortcut, full log sheet for flow, symptoms, notes and optional BBT, cervical mucus and LH tests |
| Calendar | Logged and predicted periods, optional fertile-window layer, range selection for past periods |
| Insights | Average cycle and period length, regularity, last six cycles, most common symptoms and moods |
| Predictions | Weighted, outlier-aware estimates with a confidence level and a "show the maths" view using your own numbers |
| Accounts | Sign up, sign in, sign out, reset your data, delete your account |
| Design | White and blush palette, botanical illustrations, calm motion that respects reduced-motion settings |
The ring on the Today screen colours each day by phase. The same names are used everywhere in the app (ring, timeline, focus card and the Learn sheet).
| Phase | In the app (vi / en) | Typical length | Ring colour |
|---|---|---|---|
| Menstrual | Kỳ kinh / Menstrual | 3 to 7 days | Rose |
| Follicular | Nang trứng / Follicular | Until ovulation | Green |
| Ovulation | Rụng trứng / Ovulation | About 3 days | Yellow |
| Luteal | Hoàng thể / Luteal | About 14 days | Lavender |
| Tool | Version | Notes |
|---|---|---|
| Bun | 1.x | Package manager and script runner |
| Supabase project | Free tier is enough | Provides auth and the database |
bun install
cp .env.example .env.local
| Variable | Required | Description |
|---|---|---|
VITE_SUPABASE_URL | Yes | Your project URL, from Dashboard, Settings, API |
VITE_SUPABASE_PUBLISHABLE_KEY | Yes | The publishable (anon) key. Never use a service role key here |
VITE_SITE_URL | For deploys | Public origin used by the social share image, for example https://blushme.example.com |
Open the Supabase SQL Editor, paste the contents of supabase/migrations/0001_blush_init.sql and run it once.
| Created | Purpose |
|---|---|
cycle_settings | One row of settings per user |
daily_logs | One row per user per day |
| Row level security policies | A user can only read and write their own rows |
delete_my_account() | Lets the app delete the signed-in user and all their data |
bun run dev
Open the URL printed in the terminal (usually http://localhost:5173).
New accounts must confirm their email before signing in, which is Supabase's default. To skip this while developing, turn off Confirm email under Authentication, Providers, Email.
| Command | What it does |
|---|---|
bun run dev | Start the Vite dev server |
bun run build | Type-check and build for production |
bun run preview | Serve the production build locally |
bun test | Run the unit tests once |
bun run test:watch | Run tests in watch mode |
bun run lint | Lint the codebase |
bun run typecheck | Type-check without emitting |
bun run tokens | Regenerate src/ui/tokens.css from DESIGN.md |
| Layer | Choice |
|---|---|
| UI | React 18, TypeScript (strict), Vite |
| State | Zustand |
| Backend | Supabase (auth and Postgres) |
| i18n | react-i18next (Vietnamese and English) |
| Motion | Framer Motion |
| Dates | date-fns |
| Testing | Vitest |
| PWA | vite-plugin-pwa |
The prediction engine in src/engine/ is pure TypeScript with no React, network or storage code, so every estimate is reproducible from your logs.
| Step | Rule |
|---|---|
| Valid cycles | Cycle lengths outside 21 to 45 days are ignored |
| Outliers | With 5 or more valid cycles, lengths far from the median are dropped |
| Weighting | The last 6 valid cycles count, newest weighted most (0.8 per step back) |
| Early on | With fewer than 3 valid cycles, your stated cycle length is blended in and confidence stays low |
| Ovulation | Temperature shift beats a positive LH test, which beats the calendar estimate |
| Dates | All date maths uses date-fns on YYYY-MM-DD strings to stay safe across DST and leap years |
| Path | Contents |
|---|---|
src/engine/ | Prediction logic and its tests |
src/data/ | Supabase access, settings types, demo data |
src/store/ | Zustand stores for auth, settings, logs and UI |
src/features/ | Screens: auth, onboarding, today, calendar, insights, settings, log |
src/ui/ | Design-system components and botanical illustrations |
src/i18n/ | Vietnamese and English strings (kept key-for-key identical) |
supabase/ | Database migration |
public/ | Icons, fonts and the social share image |
docs/screenshots/ | Images used in this README |
DESIGN.md | Design system source of truth |
Design values live in the frontmatter of DESIGN.md. After editing them, run bun run tokens to regenerate the CSS. See CLAUDE.md for deeper architecture notes.
Build with bun run build and host the dist/ folder on any static host.
| Where | What to set |
|---|---|
| Host environment | VITE_SUPABASE_URL, VITE_SUPABASE_PUBLISHABLE_KEY, VITE_SITE_URL |
| Supabase, Authentication, URL Configuration | Add your deployed URL so confirmation emails redirect correctly |
| Symptom | Likely cause and fix |
|---|---|
"Could not find the table public.daily_logs" | The migration has not been run. Run it in the Supabase SQL Editor |
| Sign-in says the email is not confirmed | Open the confirmation email, or disable Confirm email for development |
| Blank page or "Missing VITE_SUPABASE_URL" | .env.local is missing or the dev server was not restarted after editing it |
| Data does not save and a toast appears | No connection, or the migration is missing. The change is rolled back |
| Social preview image does not show | Set VITE_SITE_URL to an absolute URL and rebuild |
| Topic | Details |
|---|---|
| Data isolation | Row level security restricts every table to the signed-in user |
| Network | The app only talks to your Supabase project |
| Tracking | No analytics or third-party trackers |
| Control | Reset data or delete your account from Settings |
| Demo mode | Sample data stays in memory in your browser and is never saved |