Allure+
Live on iOS · Android in progressTraining and performance tracking app. I created it on iOS. The Android port is in progress. The showcase site presents the features and news.
allureplus.app (new tab)Work
An application I created, a few demonstrators published on GitHub, and a case study of porting the application to a second platform.
Applications
Training and performance tracking app. I created it on iOS. The Android port is in progress. The showcase site presents the features and news.
allureplus.app (new tab)Open source
Short tools, written to be read and reused. The code is on GitHub, with documentation in French and English.
An Azure project base and two reusable libraries.
Minimal API that publishes events to Azure Service Bus. Pure domain, tests, Bicep and CI, no secrets (managed identity and RBAC).
Base class for writing typed REST and GraphQL clients in .NET. HTTP errors are a result, not an exception. Retries with backoff, idempotency keys, pagination, controlled redirects (credentials never leave the origin of the call) and OpenTelemetry traces. A test package comes with the library.
.NET helpers extracted from production services. Log-safe masking of sensitive data (secrets, URIs, cards, IBAN, French NIR, SIREN, SIRET), redaction in free text, check digits (Luhn, IBAN, RIB), constant-time comparison and case conversions.
Taken from the Allure+ calculators and rewritten in C#, with their tests.
TSS, TRIMP, fitness (CTL, ATL, TSB), GPX tracks and triathlon race plans.
Cycling speed from power, gradient, wind and altitude (numerical solver), plus gear calculations.
Critical swim speed (CSS) from three protocols, in metres or yards, with SWOLF, Stroke Index and pace zones.
VMA and VO₂max from field tests (Cooper, Léger-Bouchard, Vaussenat…), race time prediction (Riegel) and running zones.
Heart rate zones (Karvonen), FTP estimated from the protocol and level, Coggan power zones.
Recovery from HRV: personal baseline by median, score, status and safeguards against noisy readings.
Two small command-line tools.
Generates the srcset sizes (JPEG and WebP) of a photo, with a JSON manifest for the site.
Transposes chords, lines and grids, and converts horn parts to F. Dependency-free JavaScript.
Lessons learned
The context, the choices and the current status.
Allure+ started as an iOS app written in SwiftUI, and is now published on the App Store. The Android port lives in a separate repository, and the iOS code is never modified to make it possible. iOS remains the reference: the behaviour must be the same on both platforms.
allureplus.app (new tab)The iOS domain (calculators, plan and workout generators) keeps changing during the port. It must be carried over faithfully, without chasing a moving target.
Calculators, reference tools, profile, onboarding and the Training tab are ported (plans, calendar, reminders, exports). Remaining: Google Play Billing and publication.