smooth-app
전 세계 식품의 성분·영양·정보를 자유롭게 협업하고 공개하는 데이터베이스
오프라인 우선 설치형 PWA로 데이터를 직접 보관하며 루틴 작성·세트 기록·CSV·JSON 내보내기 지원
Own-your-data workout logger: an offline-first, installable PWA to build routines, log sets, and export CSV/JSON. Zero dependencies, zero build step, data stays on your device.
건강JavaScript · CSSGitHub @delharp231온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A workout logger you own and run from your phone. Build routines, log sets and
cardio at the gym, export clean data when you want to review it. No accounts,
no ads, no subscription — and your training data never leaves the device.
It's a zero-build, zero-dependency Progressive Web App: plain HTML/CSS/JS,
installed to your home screen, storing everything in IndexedDB on the phone.
The only thing hosted anywhere is the app's code (static files); nobody but
you ever sees a single set you logged. See SPEC.md for the full design and
GATES.md for the QA checklist.README 전문 보기 ↗A workout logger you own and run from your phone. Build routines, log sets and cardio at the gym, export clean data when you want to review it. No accounts, no ads, no subscription — and your training data never leaves the device.
It's a zero-build, zero-dependency Progressive Web App: plain HTML/CSS/JS,
installed to your home screen, storing everything in IndexedDB on the phone.
The only thing hosted anywhere is the app's code (static files); nobody but
you ever sees a single set you logged. See SPEC.md for the full design and
GATES.md for the QA checklist.
npm test
That's node --test under the hood — no install step, this repo has zero
dependencies. It covers the pure logic: formatting, the exercise catalog,
progression (last time, pre-fill, Up next), workout finish rules, the schema
and its v1 → v2 migration, the Cycle 1 seed, CSV/JSON export and import, and a
guard that every app file is cached for offline use.
Serve the folder with any static file server and open it in a browser. For example:
python -m http.server 5055
then visit http://localhost:5055. A service worker needs HTTPS or
localhost to register, so this is enough to test everything except real
offline behavior — for that, see the Pixel/PWA gates in GATES.md.
Note: the app's service worker serves files cache-first, so in a plain local
server it will keep running old code after you edit files. Either unregister
it (DevTools → Application → Service workers) and hard-reload after each
change, or serve the folder with a server that returns 404 for
/service-worker.js and sends Cache-Control: no-store.
Once the app is deployed (Vercel, over HTTPS — see vercel.json):
Everything you log lives in IndexedDB on the phone. There is no server copy. If Chrome's site data gets cleared, or the phone is lost or reset, that data is gone — there's no other copy anywhere.
The Backup screen's JSON export is the only backup. Get in the habit of exporting it regularly, and keep the file somewhere safe (cloud drive, email it to yourself, whatever you'll actually keep). A JSON backup re-imports losslessly, replacing or merging with what's on the device.
Use Export CSV separately when you want to review your training in a spreadsheet — it's one row per set (or cardio entry), plain and pivotable, but it's for reading, not for restoring the app's state. Treat JSON as the backup and CSV as the report.
Some updates change how data is stored (Phase 3 moves from schema v1 to v2). The app upgrades your data automatically in a single step: either the whole upgrade succeeds or nothing is changed, and if it ever fails you get a screen with a Download backup button. Still, download a JSON backup from the Backup tab before the new version is deployed — it's your only copy.
Once a phone has run a version that upgrades the data, don't roll the site back to an older build: the older code can't open the upgraded database and shows a blank screen. Fix forward instead — your data stays intact.
For development, tests/fixtures/load-v1-db.js recreates a v1 database in the
local preview (synthetic, or from a real v1 backup saved as
tests/fixtures/real-v1.json, which git ignores) so the upgrade can be tested
before it ships. See GATES.md → Upgrade.
Right now the exercise library ships with a small placeholder seed — enough
lifts and cardio modalities to use the app on day one. A later, separate
project will curate a real, evidence-backed exercise library from research
and output it as exercises.seed.json. The Backup screen already has the
import path for that file today (Import JSON… merges an exercise list
into your library by name, without touching or duplicating anything you've
already added or edited). That import is the entire connection between the
two projects — Phase 1 doesn't otherwise depend on Phase 2 existing.