尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证MedicineTracker is a clean, dark theme, senior-friendly medicine tracking web and mobile application built to help you stay on top of your daily medicines, build lasting healthy habits, and monitor your consistency over time.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A medicine reminder and pill identification app for elderly users. Runs in the browser, backed by Supabase (Postgres, Auth, Realtime, Storage). Only the person taking the medicines has an account - a helper never signs up at all, they just enter a code.查看完整 README ↗A medicine reminder and pill identification app for elderly users. Runs in the browser, backed by Supabase (Postgres, Auth, Realtime, Storage). Only the person taking the medicines has an account - a helper never signs up at all, they just enter a code.
It solves three problems:
A helper's edits reach the elder's phone within a few seconds, live - no exporting or importing a file. See docs/architecture.md for how.
The app asks one question on first run - "Who uses this phone?" - and becomes a different app depending on the answer.
| Simple (the person taking medicines) | Supporter (the person helping) | |
|---|---|---|
| Sees | Today, Fill the box, Settings | Today, Calendar, Medicines, Box, Settings |
| Does | Marks doses done, checks photos | Adds medicines, photos, times; follows the day |
| Account | Signs in with Google, once | None. Enters a code from the simple person's Settings screen |
| Interface | Warm dark canvas, 17px text floor, 44px target floor, 54–64px primary actions | Cool grey canvas, 13–16px text, denser lists and forms |
The simple side is built around one claim: marking a dose is one tap from the first screen. No calendar tab, no cycling controls, no confirm dialogs - undo is always one tap away in the same place the mark was made. See docs/ui.md for the rules behind that and what they cost.
The simple person's Google account owns the household and its share code. A supporter's device holds only that code - nothing about a supporter is ever stored server-side. That's a deliberate tradeoff at this app's scale (a handful of households): lower friction for the helper, at the cost of not knowing which supporter made a given edit, and a code rotation cutting off everyone who had the old one, not just one person. See docs/architecture.md for the reasoning.
The mode can be changed at any time in Settings, and is not hidden behind a gesture.
Both phones and the daily routine are in docs/flow.md, written to be read aloud over a call.
The short version: the elder installs the app and signs in with Google. Settings shows their code. The helper installs the app, chooses "I help someone", and enters that code - no account needed. From then on, anything the helper adds or changes appears on the elder's phone automatically.
The app needs a Supabase project behind it - see docs/setup.md for the complete, step-by-step one-time setup (Supabase project, Google OAuth, migration, VAPID keys, deploying). js/config.js holds the public project URL and keys; see the comment there for why those are safe to commit.
Still no build step, no npm install, no node_modules for the frontend itself.
python3 -m http.server 8000
Then open http://localhost:8000/. Service workers and IndexedDB both work on localhost without HTTPS. You'll need js/config.js pointing at a real Supabase project (see above) for sign-in and sync to do anything.
One thing to know while working on the UI: the service worker serves js/ and css/ network-first with a 2.5s timeout, so an edit normally reaches a reload - but a stale cache can still win, and then you are debugging code that is not running. If a change seems not to apply, unregister the worker and clear its caches from DevTools (or in the console: navigator.serviceWorker.getRegistrations().then(r => r.forEach(x => x.unregister())), then caches.keys().then(k => k.forEach(c => caches.delete(c)))) and reload twice.
Push to main and point GitHub Pages at the repository root, same as always - the frontend is still a static site with relative paths. js/config.js's values are safe to commit, so there's nothing to inject at deploy time.
The service worker fetches network-first, so a deploy reaches the phone on the next open with no cache version to bump and nothing to clear.
Free at this app's scale (a handful of households): Supabase's free tier covers the database, auth, storage, and Edge Function calls with room to spare, and GitHub Pages hosting stays free. The one thing worth watching: Supabase free projects pause after 7 days with zero activity - the reminder cron running every few minutes should prevent that in practice, but it's worth confirming rather than assuming.
display=swap. Offline, or before it arrives, the app renders in the system stack - a visual downgrade, not a functional one, since nothing is hidden and the fallback's metrics are close enough not to reflow the cards. This reverses the earlier "no webfont" rule; docs/ui.md has the reasoning.| File | What is in it |
|---|---|
| docs/flow.md | Start here. What both people do, step by step, and what to do when something goes wrong |
| docs/architecture.md | How it works: data model, the rules that must not be broken |
| docs/repo-structure.md | What every file does |
| docs/ui.md | Every screen, and the design rules behind them. Current as of the v4 elder-first redesign |
| docs/notifications.md | Every push the app sends: when it fires, what it says, and where to change the wording |
| docs/phase-3-plan.md | Historical: organiser mode, the plan and what it got wrong. Shipped; the screens have since been redrawn |
| docs/medicine-tracker-plan-v3.md | Historical: the original local-only build spec, superseded by the online-sync design above |
| docs/next-steps.md | Everything deliberately deferred (reminders and two-way sync are now done) |
| docs/setup.md | Start here if you're standing this up. Backend setup, step by step: Supabase project, Google OAuth, migration, VAPID keys, deploying |