Quick Start
- Serve this folder from a local web server and open
index.htmlto browse the library, ortoday.htmlto use the app preview. - For the complete kit, link
assets/style.cssand load the supplied GSAP dependencies followed byassets/script.js. - For one component, link
assets/tokens.css,assets/base.css,assets/base.jsand that component folder’s stylesheet/script. Copy itsspecimen.htmlfragment. Components with include directives need the referenced component markup too; the assembled screen pages demonstrate the resolved result.
The catalogue rail, search and index sheet live in catalogue.css and catalogue.js; they are demo furniture and are not required by an app. All root HTML pages and component source folders are included.
What’s Included
Controls, inputs, navigation, activity and training displays, feedback layers, fitness sections and connected screens. The app tabs are Today, Train, Progress, Crew and You; Session, Chat and onboarding are linked from those tabs.
Foundations
Cool graphite, lime and an athletic type ramp. Every component reads the same tokens.
| Component | Folder | Root | Keyboard |
|---|---|---|---|
| Colour roles | components/colors/ |
.k-colors |
Native keyboard controls; visible focus |
| Typography | components/typography/ |
.k-typography |
Native keyboard controls; visible focus |
| Icons | components/icons/ |
.k-icons |
Native keyboard controls; visible focus |
| Layout & spacing | components/layout/ |
.k-layout |
Native keyboard controls; visible focus |
Controls
Made for a thumb between sets: clear labels, generous targets, short motion.
| Component | Folder | Root | Keyboard |
|---|---|---|---|
| Buttons | components/button/ |
.k-button |
Native keyboard controls; visible focus |
| Icon buttons | components/icon-button/ |
.k-icon-button |
Native keyboard controls; visible focus |
| Switches | components/switch/ |
.k-switch |
Native keyboard controls; visible focus |
| Choice controls | components/checkbox-radio/ |
.k-checkbox-radio |
Native keyboard controls; visible focus |
| Segmented control | components/segmented-control/ |
.k-segmented-control |
Native keyboard controls; visible focus |
| Stepper | components/stepper/ |
.k-stepper |
Native keyboard controls; visible focus |
| Slider | components/slider/ |
.k-slider |
Native keyboard controls; visible focus |
| Filter chips | components/chip/ |
.k-chip |
Native keyboard controls; visible focus |
| Effort rating | components/rating/ |
.k-rating |
Native keyboard controls; visible focus |
Inputs
Log the details of a session, find an exercise, or set the next goal.
| Component | Folder | Root | Keyboard |
|---|---|---|---|
| Text fields | components/text-field/ |
.k-text-field |
Native keyboard controls; visible focus |
| Search bar | components/search-bar/ |
.k-search-bar |
Native keyboard controls; visible focus |
| Date picker | components/date-picker/ |
.k-date-picker |
Native keyboard controls; visible focus |
| Training tags | components/tag-input/ |
.k-tag-input |
Enter or comma adds; Backspace removes the last tag; Tab reaches remove buttons |
| Workout form | components/form-layout/ |
.k-form-layout |
Native keyboard controls; visible focus |
| Photo attachment | components/photo-picker/ |
.k-photo-picker |
Native keyboard controls; visible focus |
Navigation
Five app tabs, real destinations, and controls that stay within the handset.
| Component | Folder | Root | Keyboard |
|---|---|---|---|
| App shell | components/app-shell/ |
.k-app-shell |
Native keyboard controls; visible focus |
| Navigation bar | components/nav-bar/ |
.k-nav-bar |
Native keyboard controls; visible focus |
| Tab bar | components/tab-bar/ |
.k-tab-bar |
Native keyboard controls; visible focus |
| Page stack | components/page-stack/ |
.k-page-stack |
Native keyboard controls; visible focus |
| Scrollable tabs | components/tabs/ |
.k-tabs |
Native keyboard controls; visible focus |
| Page indicator | components/page-indicator/ |
.k-page-indicator |
Native keyboard controls; visible focus |
| Action toolbar | components/toolbar/ |
.k-toolbar |
Native keyboard controls; visible focus |
Activity & training
Numbers with context: today’s movement, training sets and the week behind you.
| Component | Folder | Root | Keyboard |
|---|---|---|---|
| Workout cards | components/workout-card/ |
.k-workout-card |
Native keyboard controls; visible focus |
| Exercise list | components/exercise-list/ |
.k-exercise-list |
Native keyboard controls; visible focus |
| Daily activity | components/activity-ring/ |
.k-activity-ring |
Native keyboard controls; visible focus |
| Rest timer | components/timer/ |
.k-timer |
Native keyboard controls; visible focus |
| Set logger | components/set-list/ |
.k-set-list |
Native keyboard controls; visible focus |
| Avatars | components/avatar/ |
.k-avatar |
Native keyboard controls; visible focus |
| Badges | components/badge/ |
.k-badge |
Native keyboard controls; visible focus |
| Progress | components/progress/ |
.k-progress |
Native keyboard controls; visible focus |
| Activity chart | components/bar-chart/ |
.k-bar-chart |
Native keyboard controls; visible focus |
| Workout history | components/workout-history/ |
.k-workout-history |
Native keyboard controls; visible focus |
Feedback & overlays
Sheets, alerts and empty states share the same focus and dismissal behaviour.
| Component | Folder | Root | Keyboard |
|---|---|---|---|
| Confirmation dialog | components/dialog/ |
.k-dialog |
Native keyboard controls; visible focus |
| Toasts | components/toast/ |
.k-toast |
Native keyboard controls; visible focus |
| Action sheet | components/action-sheet/ |
.k-action-sheet |
Native keyboard controls; visible focus |
| Goal sheet | components/bottom-sheet/ |
.k-bottom-sheet |
Native keyboard controls; visible focus |
| Action menu | components/menu/ |
.k-menu |
Native keyboard controls; visible focus |
| Empty states | components/empty-state/ |
.k-empty-state |
Native keyboard controls; visible focus |
| Loading states | components/skeleton/ |
.k-skeleton |
Native keyboard controls; visible focus |
| Banners | components/banner/ |
.k-banner |
Native keyboard controls; visible focus |
App sections
Fitness-specific compositions for a daily check-in, a workout and a crew conversation.
| Component | Folder | Root | Keyboard |
|---|---|---|---|
| Daily header | components/daily-header/ |
.k-daily-header |
Native keyboard controls; visible focus |
| Week strip | components/week-strip/ |
.k-week-strip |
Native keyboard controls; visible focus |
| Hydration log | components/hydration/ |
.k-hydration |
Native keyboard controls; visible focus |
| Workout header | components/workout-header/ |
.k-workout-header |
Native keyboard controls; visible focus |
| Crew feed | components/crew-feed/ |
.k-crew-feed |
Native keyboard controls; visible focus |
| Crew chat | components/chat-thread/ |
.k-chat-thread |
Native keyboard controls; visible focus |
| Crew challenge | components/challenge/ |
.k-challenge |
Native keyboard controls; visible focus |
| Athlete profile | components/profile-header/ |
.k-profile-header |
Native keyboard controls; visible focus |
| Settings | components/settings-group/ |
.k-settings-group |
Native keyboard controls; visible focus |
| Onboarding | components/onboarding-pager/ |
.k-onboarding-pager |
Native keyboard controls; visible focus |
Clickable app
Open Today to use the app. Each screen is composed from the components in this library.
| Component | Folder | Root | Keyboard |
|---|---|---|---|
| Today | components/today-screen/ and today.html |
.k-today-screen |
Native keyboard controls; visible focus |
| Train | components/train-screen/ and train.html |
.k-train-screen |
Native keyboard controls; visible focus |
| Session | components/session-screen/ and session.html |
.k-session-screen |
Native keyboard controls; visible focus |
| Progress | components/progress-screen/ and progress.html |
.k-progress-screen |
Native keyboard controls; visible focus |
| Crew | components/crew-screen/ and crew.html |
.k-crew-screen |
Native keyboard controls; visible focus |
| Crew chat | components/chat-screen/ and chat.html |
.k-chat-screen |
Native keyboard controls; visible focus |
| You | components/profile-screen/ and profile.html |
.k-profile-screen |
Native keyboard controls; visible focus |
| Get started | components/onboarding-screen/ and onboarding.html |
.k-onboarding-screen |
Native keyboard controls; visible focus |
Themes and Typography
assets/tokens.css owns both themes and the UI, display and numeric roles. Set data-theme="dark" or data-theme="light" on the document. Manrope is deliberately used for clear, expressive numbers and sentence-case headings; Barlow keeps long labels and ordinary app copy readable. The broad sans-serif shapes avoid the condensed gym-poster look. Both are open fonts served by Google Fonts with system fallbacks; self-host them for an offline build.
Motion and Reduced Motion
GSAP 3.15.0 core, Draggable and InertiaPlugin load from jsDelivr. The sheet and page stack use Draggable; the sheet snaps between detents. The floating frosted-glass navigation dock has a magnetic selection pill that follows pointer and keyboard focus. Progress uses an elastic period indicator; the working-weight stepper rolls individual digits; training tags spring in and collapse out. These adapt the Magnetic Pill Nav, Elastic Segmented Switch, Quantity Stepper Roll and Tag Input Chips elements to the kit tokens. The Session stepper updates unfinished sets for the current exercise, and workout tags save with the plan. Reduced motion uses immediate states. The rest timer tracks elapsed time independently from animation and updates its display only while visible.
Accessibility and Keyboard
Controls have visible focus and phone-sized targets. Native inputs retain their keyboard behaviour. Segmented controls, tabs and effort ratings support arrows; sliders retain Home/End and arrow keys. A screen’s tab bar uses real links. Every overlay uses the shared Escape handler, focus trap and focus return. The goal sheet can expand using its handle button and close without a gesture; page-stack details have a Back button as well as edge swipe. Theme changes work with a layer open. Live regions announce actions without reading a timer every second.
Local Demo State
Sample steps, activity history and crew members are fictional. The kit includes no sensor access, health guidance, authentication, backend or real messaging. Local storage remembers settings, water, set rows, saved sessions, kudos, comments and the chat thread where available. Clearing the browser’s storage resets the demo. A storage-disabled browser still renders the components, with persistence unavailable. Connect your own application services to the component events and runtime helpers when building a product.
Photography
Bundled WebP derivatives are cropped and toned from Pexels photographs. Replace the files in assets/img/ to use your own imagery. assets/img-manifest.json records the regeneration inputs; in the Vault source repository run bun scripts/build-template-assets.ts rep-fitness-app-ui-kit to rebake them.
- Gym training: https://www.pexels.com/photo/39219675/ — Pexels licence.
- City runners: https://www.pexels.com/photo/4853112/ — Pexels licence.
The photographs illustrate workout content; the depicted people are not the fictional crew members.
Dependencies
Modern browser, GSAP core and the listed plugins. No framework, build process or backend is required to use the assembled files. Serve through HTTP for the most consistent page navigation and local storage behaviour.
Worked examples, the events and programmatic API, and the class reference ship with the download, alongside the full source.