flutter
Flutter는 wger용 피트니스·운동 앱입니다
간단하고 무료인 모바일 웹 앱으로 매일 운동을 기록하고, 하루 3회 목표와 색상 캘린더로 진행 상황을 확인합니다
A simple, free phone web app for daily exercise: check off what you did, aim for at least 3 a day, and see your progress on a color calendar. No sign-up, data stays on your device.
스포츠·피트니스JavaScript · CSSGitHub @mayskii온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Free phone web app for daily exercise: checklist, color calendar, streaks and stats. Plain HTML/CSS/JS, your data stays on your device.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A simple, free phone web app for daily exercise: check off what you did today, aim for at least 3 exercises a day, and see your progress on a color calendar.
Live: https://mayskii.github.io/moy-den-sporta/ (works best on a phone: install it to your home screen and it works offline)
Screens with demo data. The app has light and dark themes and follows your phone's setting.
Almost every workout app I found wanted a paid subscription. I wanted something simple and free that I could use every day and share with others. No sign-up, no ads, no subscription.
Your data stays only in your own browser (localStorage) and is never sent anywhere. The app loads nothing from other servers: even the font (Onest, SIL Open Font License) is included in fonts/. Because the data lives in the browser, use Backup before clearing site data or changing phones.
I built this app during Anthropic's AI Fluency course, using Claude Code for the code and Claude Design for one screen.
What I learned: the more clearly I describe what I want, including how I will test it, the less Claude has to guess. Checking the result is harder than describing the task, and every check makes the next description better. Some things did not go to plan: building it "in an hour" was unrealistic, and file backup didn't work inside a Claude artifact, so I moved the project to my own files and GitHub Pages.
This is only the beginning. Next, I want to give the app to a few people, listen to what is confusing or missing, and improve it based on their feedback, keeping it free.
Plain HTML, CSS and JavaScript with ES modules: no frameworks and no build step. Hosted on GitHub Pages.
index.html the page
style.css styles, light and dark theme
app.js the interface: draws the tabs and reacts to taps
js/logic.js day colors, goal history, streaks, stats, backup checks (no page, no storage)
js/dates.js day keys like "2026-10-23", adding days, Monday of a week
js/storage.js saving to localStorage
sw.js service worker: offline copy of the app
tests/ tests for js/logic.js and js/dates.js
The logic gets the data and today's date as inputs instead of reading them itself, so the tests can check any situation: "today is Friday, the goal changed on Thursday, Tuesday was half done".
Tests. 46 tests with Node's built-in test runner (node:test), no test libraries. GitHub Actions runs them and ESLint on every push. Writing them found real bugs in backup restore: a hand-edited backup file could bring in goals as text (so the + button turned 3 into 31) or goals that were all invalid, which made the app crash on every open. The restore code now cleans such files.
Accessibility. Lighthouse gives 100, but it only looks at the first screen. So I also ran axe (the checker inside Lighthouse) on every tab and state in both themes, and went through the app with the keyboard only. That found two real problems:
Buttons also tell screen readers what they belong to ("Move Walk up", not just "Move up"), and calendar days say the weekday, the date and how the day went.
PWA. manifest.webmanifest describes the app (name, icons, colors) so phones can install it. The service worker sw.js asks the network first, so all files always come from the same version, and keeps a copy of each file for when there is no internet.
Lighthouse (live site, mobile, October 2026): Performance 97–100 (varies between runs) · Accessibility 100 · Best Practices 100 · SEO 100. On a simulated mid-range phone with slow 4G, the main content appears in about 1.2 s.
Browsers don't load modules from a file opened directly, so start a small server:
python3 -m http.server
Then open http://localhost:8000. To run the tests and ESLint (needs Node.js):
npm install
npm test
npm run lint