---
title: 'Understanding TrainUs'
description: "The why behind the app's choices: local-first, JSON vs database, timers."
slug: 'understanding-trainus'
weight: 4
date: 2026-06-16
---

## Why a Local App?

Many fitness apps run on an account and a central server: convenient for syncing your devices, but it also means a third-party company hosts your data, and the app becomes unusable without a connection — or if the service shuts down one day.

TrainUs makes the opposite choice: everything runs in your browser, your data is stored locally, and nothing is ever sent to a server. This choice has a cost — no automatic sync or backup between devices — but that cost is covered by simple, manual solutions: see the [How-to Guides]({{< relref "guides-pratiques.en.md" >}}) for backup and sync.

## JSON or Database: Which to Choose?

Two ways to export your data, for two different needs:

|             | JSON export                                                  | Database export (SQLite)                 |
| ----------- | ------------------------------------------------------------ | ---------------------------------------- |
| Content     | One or more chosen data types (exercises, sessions...)       | Everything, no exceptions                |
| Typical use | Share a session, back up a subset                            | Full backup, migration to another device |
| On import   | Merge: conflicts resolved one by one, suffix if another user | Total replacement of existing data       |
| File format | Text file, readable, editable with care                      | Binary file, never edit by hand          |

Concretely: a **JSON** file is a plain text file describing your exercises, combos, sessions, or collections in a structured, readable format. A **SQLite** file (`.sqlite3` / `.db`) contains the app's entire database; it can be opened with a specialized tool (DB Browser for SQLite, for example) but should never be edited by hand.

There's a third way to get data out of the app: the HTML export of the home page (see [How-to Guides]({{< relref "guides-pratiques.en.md" >}})). It's also a data export, even though the format differs — except it's one-way: an HTML file can't be re-imported into TrainUs. It isn't meant for backup but for reading by someone else, typically a friend or a coach.

## What Really Happens on Import

Importing a JSON file never deletes your existing data by surprise:

- If it comes from **you** (same user ID): TrainUs compares it with what you already have. For each item that already exists (same ID, or same title if it's a different item), you choose to replace it or keep it, one by one or in bulk.
- If it comes from **another user**: every imported title gets a short suffix you choose ("[JD]"), so it never gets confused with your own data. The suffix is remembered and reused if you import again from the same person. If the suffixed title conflicts with something already imported earlier (typically a new version of the same item, re-exported by the same person), you choose to replace it or keep it, exactly as with your own data.

Either way, a summary screen shows what will change before anything is applied.

By contrast, **restoring a database** (a `.sqlite3` file) replaces everything, with no possible merge — that's intentional: this mechanism is designed for full backup and restore, not selective sharing.

## How the Timers Work (EMOM / AMRAP / TABATA)

The three timed combo types each follow their own logic:

- **EMOM** (_Every Minute On the Minute_): a new exercise starts every minute. The duration you set is divided by the number of exercises in the combo to work out how many rounds to run — each exercise occupies a 60-second slot.
- **AMRAP** (_As Many Rounds As Possible_): a single countdown runs for the whole set duration; you cycle through the exercises in a loop, doing as many rounds as possible.
- **TABATA**: a strict alternation of work and rest phases, repeated a given number of times.

In all three cases, two different sounds guide you without having to watch the screen: a soft beep for intermediate cues, a louder BEEP for phase changes or time running out. For the minute-by-minute detail, see the [Audio Cues]({{< relref "user-guide.en.md" >}}#audio-cues) section of the Reference.

Advancing between exercises or rounds is automatic for all three types — you don't have to confirm anything yourself while the timer is running.

## What About the Statistics?

To be honest, the Statistics screen is the one the app's author has the least personal feedback on — he doesn't use it himself day to day. The current charts (frequency, volume, per-exercise progression) are a reasonable starting point, but if something is missing for you, it's probably true for others too — your feedback is welcome.
