<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Olli Angermann</title>
    <description>The latest articles on DEV Community by Olli Angermann (@olli_angermann_2e001d1fe2).</description>
    <link>https://dev.to/olli_angermann_2e001d1fe2</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3844520%2Fd0150b91-4808-48bd-a2aa-3c129f55d524.png</url>
      <title>DEV Community: Olli Angermann</title>
      <link>https://dev.to/olli_angermann_2e001d1fe2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/olli_angermann_2e001d1fe2"/>
    <language>en</language>
    <item>
      <title>I built a PWA fitness tracker with AI that supports 86 sports — as a solo developer</title>
      <dc:creator>Olli Angermann</dc:creator>
      <pubDate>Thu, 26 Mar 2026 10:19:04 +0000</pubDate>
      <link>https://dev.to/olli_angermann_2e001d1fe2/i-built-a-pwa-fitness-tracker-with-ai-that-supports-86-sports-as-a-solo-developer-35ip</link>
      <guid>https://dev.to/olli_angermann_2e001d1fe2/i-built-a-pwa-fitness-tracker-with-ai-that-supports-86-sports-as-a-solo-developer-35ip</guid>
      <description>&lt;p&gt;Eight months ago I was frustrated. I do strength training, &lt;br&gt;
running, and BJJ — and I needed three different apps to &lt;br&gt;
track everything. Strava for runs, Strong for weights, &lt;br&gt;
and a spreadsheet for BJJ. None of them talked to each &lt;br&gt;
other, and none could give me a complete picture of my &lt;br&gt;
training.&lt;/p&gt;

&lt;p&gt;So I built BASE.&lt;/p&gt;

&lt;h2&gt;
  
  
  What BASE does
&lt;/h2&gt;

&lt;p&gt;BASE is a Progressive Web App that tracks 86 sports in &lt;br&gt;
one app — from powerlifting to archery to swimming. &lt;br&gt;
Instead of generic "sets and reps" fields, each sport &lt;br&gt;
has its own tracking schema. Archery tracks distance, &lt;br&gt;
arrows, and accuracy. Swimming tracks laps, time, stroke &lt;br&gt;
style, and pace.&lt;/p&gt;

&lt;p&gt;And if your sport isn't in the list? The AI Form Builder &lt;br&gt;
lets you describe what you want to track in plain text, &lt;br&gt;
and it generates a custom tracking form in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Vanilla JavaScript + Tailwind CSS (PWA)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Firebase (Auth, Firestore, Cloud Functions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Google Gemini API for 5 AI systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; Netlify&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Languages:&lt;/strong&gt; 7 (including Arabic with full RTL support)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No React, no Next.js, no framework. Just a single-page &lt;br&gt;
app that works offline, syncs to the cloud, and installs &lt;br&gt;
on any device without an app store.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 AI systems
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI Coach&lt;/strong&gt; — Analyzes your complete training history 
across all sports and gives personalized recommendations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Form Builder&lt;/strong&gt; — Describe your sport, get a custom 
tracking form generated instantly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training Plan Generator&lt;/strong&gt; — Input your goal, days per 
week, and duration — AI creates a periodized plan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-Hab&lt;/strong&gt; — Injury prevention recommendations before 
each session based on your training load&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ZNS Readiness&lt;/strong&gt; — Estimates nervous system fatigue to 
tell you if you're ready for max effort&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I learned building this solo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PWAs are underrated.&lt;/strong&gt; No app store review process, no &lt;br&gt;
30% fee, instant updates, works on every device. The &lt;br&gt;
install experience is slightly worse than native, but &lt;br&gt;
the development speed is 10x faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Firebase is great for MVPs.&lt;/strong&gt; Auth, database, hosting, &lt;br&gt;
and cloud functions in one ecosystem. The free tier &lt;br&gt;
covers everything until you hit serious scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI features need rate limiting.&lt;/strong&gt; I learned this the hard &lt;br&gt;
way when my Gemini API bill spiked. Free users now get &lt;br&gt;
3 AI calls per day, PRO users get unlimited.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offline-first is harder than expected.&lt;/strong&gt; Service workers &lt;br&gt;
are powerful but debugging them is painful. Worth it &lt;br&gt;
though — gym WiFi is notoriously terrible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers (honest)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Under 100 active users (early beta)&lt;/li&gt;
&lt;li&gt;86 sports with custom schemas&lt;/li&gt;
&lt;li&gt;7 languages&lt;/li&gt;
&lt;li&gt;Works completely offline&lt;/li&gt;
&lt;li&gt;Free to use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm not pretending this is a rocket ship yet. But every &lt;br&gt;
week the numbers grow a little, and the feedback from &lt;br&gt;
multi-sport athletes has been incredible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;BASE is free and works in any browser: &lt;br&gt;
&lt;strong&gt;&lt;a href="https://base-app.tech" rel="noopener noreferrer"&gt;base-app.tech&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No signup required to explore. I'd love honest feedback — &lt;br&gt;
especially from developers who can roast the technical &lt;br&gt;
decisions. What would you have done differently?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm a solo developer building BASE in public. If you &lt;br&gt;
have questions about the PWA architecture, Firebase setup, &lt;br&gt;
or AI integration, ask in the comments — I'll answer &lt;br&gt;
everything.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pwa</category>
      <category>ai</category>
      <category>webdev</category>
      <category>fitness</category>
    </item>
  </channel>
</rss>
