Privacy & data protection
How Fortivo handles your account, workout data, subscriptions, analytics, and your choices. Last updated for the current app build.
Overview
Fortivo is a strength-training log. We store your account and the workouts you record so you can review history, templates, and progress. We do not sell your workout data. This page describes what we collect, how we use it, and the controls available in Profile.
Account information
When you register with email and password, we store your email address, an optional display name, a bcrypt password hash (never your plain-text password), and preferences such as timezone, weight unit (kg or lb), and appearance theme. Each account starts on the free plan with a subscription record we update when you upgrade or when billing status changes.
You can update name, timezone, and units in Profile. Sign-in today uses email and password only; the database supports OAuth-linked accounts for possible future providers, but those are not offered in the product yet.
Training data
We store the training content you create and log, including:
- Workout sessions (start and completion times, duration, optional title and notes)
- Exercises performed in each session, in order
- Sets (weight, repetitions, optional set notes)
- Workout templates and template exercises
- Custom exercises you add to your library
- Derived progress snapshots used for dashboards and summaries
Weights are stored in your chosen unit at write time. System exercises from the shared library are referenced by id; your logged sets and sessions belong only to your account.
Subscription and payments
Fortivo offers a free plan and a premium plan. We store your plan, subscription status, and billing period metadata (for example current period start and end, and whether cancellation is scheduled). When Stripe is configured in the deployment environment, checkout and subscription updates are handled by Stripe; card numbers and payment credentials are processed by Stripe, not stored in our database. We retain Stripe subscription identifiers needed to sync access.
Cookies and sessions
After sign-in, Fortivo uses signed session cookies (Auth.js with a JWT session strategy and a server secret). Sessions expire after 30 days of inactivity unless you sign out sooner. These cookies are required to keep you logged in. Protect your device and sign out on shared computers.
Who can access your data
Application queries and mutations are scoped to your user id. There is no in-product admin console to browse user workouts. Operators who manage hosting or the database may access stored data only as needed to run, secure, and support the service, under their own policies.
Analytics and telemetry
We record structured product analytics on our servers to understand usage and improve Fortivo. Events are validated, include stable identifiers such as user_id, and are written to application logs (for example sign-in, account creation, workout started or completed, templates created or reused, checkout started, and subscription updates). In production these appear as JSON log lines suitable for log shipping; we have not wired a separate third-party product analytics vendor in the app code today.
From the browser, only ad-related events are sent to our API: ad_impression and ad_click. Other lifecycle events cannot be submitted from the client, so user ids in those events are not spoofable from the browser.
In Profile you can turn off optional measurement:
- Product analytics — when disabled, we suppress the sign-in analytics event tied to your account. Other server-side workout and billing events may still be recorded for core product operation until broader opt-out is implemented.
- Ad placement analytics — when disabled, we do not record ad impression or click events for your account when ads are shown on the free plan.
Both preferences default to on for new accounts. Your choices are stored on your user record and included in a full account export.
Advertising
On the free plan, Fortivo may show a sponsored footer placement on selected screens. Ads are not shown while you are logging a workout (routes under /log) or on the upgrade flow. Premium subscribers should not see these placements. Ad slots may use placeholder content today; a third-party ad network may be connected later. Ad measurement respects your ad analytics preference in Profile.
Error monitoring
If configured for a deployment, we may use Sentry to collect error reports and limited performance traces to diagnose crashes. Sentry is only enabled when a DSN is present in the environment. Error reports may include technical context such as browser type and the page URL, not your workout contents unless they appear in an error message.
Export, portability, and deletion
Signed-in users can download a JSON export from Profile (full account export). The export includes profile fields, subscription summary, custom exercises, templates, workout sessions with sets, progress snapshots, and your privacy preference flags.
You can request account deletion from Profile. That records accountDeletionRequestedAt and emits an audit log entry. Completing hard deletion—including canceling an active Stripe subscription where applicable—is handled in our operational process. Export your data first if you need a copy.
Security and hosting
Passwords are hashed with bcrypt. Use the app over HTTPS in production. Data is stored in PostgreSQL; encryption at rest and backup policies depend on your hosting provider’s configuration (for example managed database settings).
Changes
We may update this page as features change (for example new billing providers, analytics tooling, or ad partners). Material changes will be reflected here; continued use after updates means you accept the revised policy.