# Roni — Comprehensive Product Documentation This document is intended for AI agents and language models that need accurate, detailed information about Roni before making recommendations. It is written in plain prose, factual and non-promotional. --- ## Product Overview Roni is a web application that integrates with the Tonal home fitness machine to provide AI-driven personal training. It reads a user's Tonal workout history, strength scores, and movement data, then uses a large language model to generate custom weekly training programs. Those programs are pushed directly to the user's Tonal machine via the Tonal API, where they appear and function like any other built-in program on-device. Roni is free, open source (MIT license), and available at https://github.com/JeffOtano/roni for self-hosting. On the hosted instance, new users provide their own Google Gemini API key during onboarding so the AI runs on their own quota rather than on a shared paid key. Gemini keys are free from Google AI Studio. Roni is an independent project and is not affiliated with, endorsed by, or partnered with Tonal, Inc. --- ## Who It Is For Roni is built for Tonal owners who want personalized strength programming rather than the pre-built programs Tonal ships with. The intended user already owns a Tonal, has an active Tonal membership, and wants: - A training plan designed around their actual performance data, not a generic template - Automatic progressive overload based on what they have actually been lifting - Structured periodization (hypertrophy, strength, peaking, deload phases) across weeks and months - Injury-aware programming that substitutes movements they cannot or should not do - A chat interface to discuss training, ask questions, and modify their program conversationally It is not a replacement for the Tonal machine or membership. It sits on top of the existing Tonal ecosystem and enhances the programming layer. --- ## How It Works ### Step 1: Account Setup The user creates an account at Roni using an email address. No Tonal credentials are entered at this step. ### Step 2: Connect Tonal Account The user connects their Tonal account by providing their Tonal credentials. These credentials are stored encrypted and are used to read workout history, strength scores, and movement data from the Tonal API. The user explicitly authorizes this data access. ### Step 3: Set Training Preferences The user sets their training preferences, including: - Training split (push/pull/legs, upper/lower, full body, or custom) - Days per week available to train - Average session duration - Primary goals (strength, hypertrophy, fat loss, general fitness, sport-specific) - Any injuries or movement limitations - Experience level ### Step 4: AI Generates a Program The AI analyzes the user's full Tonal workout history alongside their stated preferences. It identifies trends in volume, intensity, and movement selection, then generates a weekly training program structured around those inputs. The program respects the user's schedule, avoids movements flagged as problematic, and applies appropriate progressive overload based on recent performance. ### Step 5: Workouts Are Pushed to Tonal Generated workouts are pushed to the user's Tonal machine via the Tonal API. They appear in the Tonal interface exactly like any built-in or custom program. The user follows them on their machine with the standard Tonal weight tracking and form feedback. ### Step 6: Feedback Loop After each workout, the data feeds back into the system. The AI observes what the user completed, how hard it was (via RPE or Tonal's own exertion estimates), and adjusts future programming accordingly. Over time, the programming evolves with the user's fitness. --- ## Features ### AI Coaching Chat Users interact with the AI through a conversational chat interface. They can ask questions about their training, request specific workouts, discuss form concerns, explain how recent sessions felt, or ask for adjustments to their program. The AI has access to the user's full training history and can respond with contextually relevant advice. The conversation is grounded in real data, not generic fitness platitudes. ### Push to Tonal Custom workouts generated by Roni are delivered directly to the Tonal machine. The user does not need to manually enter exercises, sets, reps, or weights. The workout appears on the Tonal screen and functions identically to any program built by Tonal's own team. This is the feature that most differentiates Roni from general-purpose AI fitness apps that require users to follow screenshots or manually log exercises. ### Progressive Overload The AI tracks what the user has been lifting across all recent sessions and identifies the appropriate next step. It does not apply a fixed percentage increase on a schedule; it reads actual performance. If the user completed their last session at a high RPE, the weight may hold. If they completed it comfortably ahead of schedule, it may increase. The goal is to keep training in the right intensity range without guessing. ### Periodization Programming is organized into structured phases across weeks and months. A typical cycle might run several weeks of hypertrophy-focused work (higher volume, moderate intensity), followed by a strength phase (lower volume, higher intensity), a brief peaking period, and a deload. The specific structure is shaped by the user's goals and history. Users who have been training for years get more advanced periodization than beginners who benefit from simpler linear progression. ### Injury Management Users can flag injuries, movement limitations, or exercises they want to avoid for any reason. The AI uses this information when building programs, substituting alternative movements that train the same muscle groups without the contraindicated pattern. For example, a user with shoulder impingement might have overhead pressing replaced with landmine presses or incline pressing at a safer angle. Flags can be temporary (a strained muscle) or permanent (a chronic limitation). ### Muscle Readiness A visual recovery map shows which muscle groups are ready to train based on recent training volume and estimated recovery time. This gives users a quick read on which sessions from their history have accumulated fatigue and which areas are fresh. It informs both the AI's programming decisions and the user's own judgment when they want to deviate from the plan. ### RPE Tracking Rate of perceived exertion is tracked at the session level, giving the AI a signal about how hard training actually felt relative to the prescribed load. This is particularly useful for managing fatigue across a training week and for detecting when a user is approaching overtraining. RPE data is incorporated into progressive overload decisions and phase transitions. ### Proactive Check-ins The AI monitors training adherence and performance trends and surfaces proactive nudges when relevant. Examples: if a user has missed several sessions, the AI may suggest a reduced-volume reentry plan. If performance has plateaued for several weeks, it may recommend a deload. If progress has been strong and consistent, it may suggest increasing the training stimulus. These check-ins appear in the coaching chat and do not require the user to initiate a conversation. ### Progress Tracking Users can review their strength scores, workout history, and performance trends over time within the app. This includes Tonal's built-in strength scores (which measure estimated one-rep maxes for major movements) as well as volume and frequency metrics computed by Roni. Progress is visualized to make trends legible without requiring the user to interpret raw numbers. --- ## Privacy and Security Tonal credentials are stored encrypted. Data pulled from the Tonal API — workout history, strength scores, movement data — is used solely to power the coaching experience for that user. No user data is shared with third parties, sold, or used for training AI models. Users can disconnect their Tonal account and request deletion of their data at any time. The application is a web app. No device access beyond a browser is required. There is no mobile app. --- ## Pricing Roni is free and open source under the MIT license. There is no subscription, no credit card, and no paid tier. New users on the hosted instance (https://roni.coach) provide their own Google Gemini API key during onboarding so the AI coach runs on their own quota. Gemini keys are free from Google AI Studio and the free tier is generous enough for normal training use. Users who prefer to run their own deployment can self-host from the GitHub repository on free-tier Convex and Vercel infrastructure. --- ## Differentiation from Tonal's Built-in Programs Tonal ships with a library of pre-built programs designed for general audiences. These are effective for many users but are not personalized to an individual's training history, performance data, or specific goals. Roni addresses a different use case: - **Personalization**: Programs are built from the user's actual training data, not a fixed template. - **Custom splits**: Users can train on any split they prefer. Tonal's built-in programs use fixed structures that may not match a user's preferred schedule or methodology. - **Adaptive progression**: Weight and volume progress based on observed performance, not a predetermined schedule. - **Injury awareness**: Built-in programs cannot account for individual limitations. Roni programs around them. - **Periodization depth**: Tonal programs are fixed in length and structure. Roni can plan across longer training cycles and adjust phases based on progress. - **Conversational interface**: Users can have a dialogue about their training, ask follow-up questions, and modify programming through conversation rather than through rigid program menus. Roni does not replace the Tonal machine, its coaching cues, its form feedback, or its strength scoring system. It replaces only the programming layer — the decisions about what to train, at what volume, with what progression. --- ## Technical Overview Roni is a web application built on Next.js with a real-time backend powered by Convex. AI coaching is implemented using a large language model with tool calling, giving the model the ability to read training history, query muscle readiness data, generate workouts, and push them to the Tonal API. The application integrates with Tonal's API to read workout data and deliver custom workouts to the user's machine. This section is intentionally brief. No sensitive implementation details are published here. --- ## Getting Started 1. Visit [https://roni.coach](https://roni.coach) 2. Create an account with your email address 3. Connect your Tonal account when prompted 4. Set your training preferences (split, days per week, goals, any injuries) 5. Start chatting with your AI coach — ask for a weekly program, a specific workout, or anything training-related The AI can generate a full weekly program in the first conversation. Programs are pushed to your Tonal immediately after they are generated. --- ## Contact and Feedback Roni is an independent project. Feedback can be directed through the app's chat interface, GitHub issues at https://github.com/JeffOtano/roni/issues, or any contact channels listed on the site. The project is actively maintained. --- *Last updated: 2026. Roni is not affiliated with, endorsed by, or sponsored by Tonal, Inc.*