尚未检测到更新。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 |