Repository navigation
Pulse: a gym and studio full-stack sample - #6145
Conversation
…ing, engagement Phases 1-3 of the Pulse gym/studio sample: shared model, backend with households and age bands, class booking with waitlist promotion, rotating QR/NFC door passes, walk-ins, trainers and shifts, subscription billing with proration, freezes and a dunning ladder, away periods, fill-a-class and miss-you nudges, social feed and invites, owner dashboard and campaigns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PostgreSQL refused 'metric' in the VARCHAR(4) units column; SQLite took it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The server scores visits, streaks and worn sensors (a strap or watch earns a bonus) into levels and badges. Home leads with the next class on an ink card, a level ring, month tiles, the badge shelf and a strap callout; the timetable shows classes as cards with a colour stripe, capacity meter and inline action. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s with zones and points Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…demo class The trainer's home leads with the class on now, its live view shows each attendee's zone, the desk shows today's classes and who came in, and the owner's timetable, templates and staff read as cards. The watch shows the next class, the door code with a countdown, and points and streak, and no longer makes its labels before the display exists. The dev server seeds a class under way with simulated heart rates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, sweep transaction, e2e fixes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…isting Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
isModified() followed derives without remembering the path, so a state
deriving from its own style (X.pressed { cn1-derive: X; }) or two styles
deriving from each other recursed until StackOverflowError -- only on a
rebuild, since a first build has no checksum cache to compare with.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… polish Backend: the demo studio's zone is configurable (pulse.demo.zone) and every day is the studio's, not UTC's (the desk's day, the class list's start); real names, walk-ins at the desk, friends and profiles for the seeded members, ten guests. Client: front desk scan/fob tiles, pass copy and fob row, owner stat tiles with grouped money and a ranked popular-classes list, timetable day and person pills, workouts and feed lines that no longer wrap, the beat line, a labelled visits chart, the header clear of the notch on every screen. Screenshots and guide text follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cloudflare Preview
|
…-safe Monday Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
|
Compared 231 screenshots: 231 matched. |
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
… prose Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ur-page watch Owner: Insights (retention, busy-hours heatmap, membership over twelve weeks, class fill and no-shows, plan mix, coach ranking), a searchable member list with each member's history, and billing with failed charges. Trainer: the month's classes, check-ins, fill, attendance, regulars and kudos. Watch: next class, door code, week and the classes coming up. A larger seeded history feeds the charts. The user's guide and the website page show every screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nguageTool The Android build refuses the workout token: no record class backs it, so the permission could never be used. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…custom icon The owner gets Accounts: search, staff/flagged/blocked filters, roles, household, history, flag and block. The trainer gets points, levels, streak, rank, coach badges and a leaderboard, shifts with actions on the row, and a fifth watch page while coaching. Sign-out clears the watch. Owner shifts with no location show every site. The members search no longer touches the filter pills. Sheet's close button has an accessible name. The e2e harness walks the component tree on the EDT. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s; guide prose Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 195 screenshots: 195 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows x64Runner CPU: Intel64 Family 6 Model 207 Stepping 2, GenuineIntel (baseline 1 improvement past the baseline (not a failure; rebaseline to lock it in):
Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
A change that moves performance ON PURPOSE records the new baseline in Result: no regression (improved past the baseline: consider rebaselining) |
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows arm64Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 196 screenshots: 196 matched. Benchmark Results
Detailed Performance Metrics
ParparVM vs HotSpot (JDK 25): macOS arm64Runner CPU: Apple M1 (Virtual) (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 210 screenshots: 210 matched. ParparVM vs HotSpot (JDK 25): Linux x64Runner CPU: AMD EPYC 9V45 96-Core Processor (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 210 screenshots: 210 matched. ParparVM vs HotSpot (JDK 25): Linux arm64Runner CPU: Neoverse-N2 (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 192 screenshots: 192 matched. Benchmark Results
Detailed Performance Metrics
|
…cons centred in their circles A lone icon in a round label was pushed off centre by the label's text gap, which CN1 counts even with no text. Wide windows dock the menu, spread the owner dashboards into two columns and open members and accounts beside the list. Accounts with a profile but no sign-in open instead of 404ing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>























Pulse is a full-stack sample for a gym or studio: one app with four roles (member, trainer, front desk, owner) on a Codename One backend. It shows the health and fitness APIs inside an app a real studio could run.
What it covers
Also in this PR
CSSTheme.isModifiedrecursed forever on a derive cycle (X.pressed { cn1-derive: X; }, or two styles deriving from each other). It hitStackOverflowError, and only on an incremental build. Fixed with a visited set;CSSDeriveCycleCacheTestfails on the old code and passes now.Verified locally
scripts/ci/sample-server-tests-on-database.sh).🤖 Generated with Claude Code