<?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: FightNome</title>
    <description>The latest articles on DEV Community by FightNome (@fightnome).</description>
    <link>https://dev.to/fightnome</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4204555%2F8f716524-388b-46ea-b8f4-25f493da4fbd.png</url>
      <title>DEV Community: FightNome</title>
      <link>https://dev.to/fightnome</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fightnome"/>
    <language>en</language>
    <item>
      <title>Onboarding that ends with a workout you can start, not a feature tour</title>
      <dc:creator>FightNome</dc:creator>
      <pubDate>Wed, 11 Nov 2026 13:56:29 +0000</pubDate>
      <link>https://dev.to/fightnome/onboarding-that-ends-with-a-workout-you-can-start-not-a-feature-tour-11hh</link>
      <guid>https://dev.to/fightnome/onboarding-that-ends-with-a-workout-you-can-start-not-a-feature-tour-11hh</guid>
      <description>&lt;p&gt;&lt;em&gt;I work on FightNome, so this post is about our own app.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;FightNome is a pad-work trainer for boxing, Muay Thai, kickboxing and MMA. A recorded voice calls strikes on the beat of the music and you throw them on a bag, on pads or in the air. The app has a fair amount of depth: a combo editor, sections and rounds, tempo, conditioning between rounds. None of that helps someone who just installed it and wants to hit something tonight.&lt;/p&gt;

&lt;p&gt;So onboarding doesn't explain the features. It asks a few questions and hands back workouts that are ready to play.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five questions
&lt;/h2&gt;

&lt;p&gt;The questions are goal, level, discipline, stance and music style. Each one exists because it changes what the coach says or how the session is put together.&lt;/p&gt;

&lt;p&gt;Discipline is the obvious one. A boxing session and a Muay Thai session shouldn't call the same strikes, and a Muay Thai session that never says "teep" or "knee" would feel wrong in the first minute.&lt;/p&gt;

&lt;p&gt;Stance matters more than I expected. Kicks, elbows and knees are called by name with lead or rear, so the app needs to know which side is which before the first call. Getting that wrong is the kind of thing a user notices right away and doesn't forgive.&lt;/p&gt;

&lt;p&gt;Level and goal decide how much is asked of you. They're also where vocabulary comes in. Pad numbers (1 jab, 2 cross, 3 lead hook and so on) are normal in a lot of gyms, but to a beginner "one, two, three" means nothing. In FightNome only the amateur-fighter persona hears numbers. Everyone else hears the names of the strikes.&lt;/p&gt;

&lt;p&gt;Music style is the soft one. It doesn't change the technique, but it's part of whether the session feels like yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  What comes out
&lt;/h2&gt;

&lt;p&gt;From those answers the app builds four starter workouts, with names like First Fight, Sharp Fundamentals and React &amp;amp; Fire. They're normal workouts, the same kind you'd build yourself in the editor: sections, rounds, rests, and conditioning parts like rope, shadow work and bodyweight between striking rounds. Nothing about them is a special tutorial mode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2g6plfcxy37ez47oqobm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2g6plfcxy37ez47oqobm.jpg" alt="Workout preview and strike palette" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That was a deliberate choice. If the starters were a separate thing, people would have to learn the real app later anyway. Because they're regular workouts, opening one and changing a combo is also the moment you learn how the editor works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not a tour
&lt;/h2&gt;

&lt;p&gt;A tour would have to show screens, and the main point of the app is that you don't look at the screen during a round. The phone goes in a pocket or a waistband and the voice runs the session. Explaining that with screenshots felt backwards. What actually explains it is pressing play and hearing the first round.&lt;/p&gt;

&lt;p&gt;Every workout shows its full plan before you start (every section, every round, every rest), so that preview does the job a tour would do, just for the session you're about to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I keep going back and forth on
&lt;/h2&gt;

&lt;p&gt;The paywall comes after onboarding, and the app doesn't have a free tier. That means the questions have to be worth answering before anyone has heard a single call. Five questions is about where I think patience runs out, but I don't have a clean way to test that without guessing.&lt;/p&gt;

&lt;p&gt;If you've built an onboarding flow that generates content instead of explaining it, I'd like to hear how many questions you ended up with and which one you cut.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to try it
&lt;/h2&gt;

&lt;p&gt;FightNome is on the App Store (iOS 26 and up) and Google Play. It's a paid subscription, and only the yearly plan has a 3-day trial. More at &lt;a href="https://fightnome.app" rel="noopener noreferrer"&gt;https://fightnome.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I used AI assistance to draft this post and edited it myself.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ux</category>
      <category>onboarding</category>
      <category>ios</category>
    </item>
    <item>
      <title>Designing a workout screen that nobody is supposed to look at</title>
      <dc:creator>FightNome</dc:creator>
      <pubDate>Thu, 05 Nov 2026 14:10:23 +0000</pubDate>
      <link>https://dev.to/fightnome/designing-a-workout-screen-that-nobody-is-supposed-to-look-at-3e4h</link>
      <guid>https://dev.to/fightnome/designing-a-workout-screen-that-nobody-is-supposed-to-look-at-3e4h</guid>
      <description>&lt;p&gt;&lt;em&gt;I work on FightNome, so this post is about our own app.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;FightNome is a pad-work trainer for boxing, Muay Thai, kickboxing and MMA. A recorded voice calls strikes on the beat of the music and you throw them. The whole idea only works if your eyes stay on the bag or the pads, so the phone is meant to sit in a pocket or a waistband for the entire round. That puts the app in an odd spot as a design problem. Most of the time the main screen has no audience at all.&lt;/p&gt;

&lt;p&gt;I've written before about timing the voice files and about the combo editor. This one is about everything around the round itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before the bell: show the whole plan
&lt;/h2&gt;

&lt;p&gt;If you can't glance at the phone mid-round, you need to know what's coming before you start. So the workout screen lays out the full plan before you press play: every &lt;br&gt;
section, every round, every rest, in order. A workout is sections (striking or conditioning) made of rounds, and the conditioning parts are rope, shadow work and bodyweight between the striking rounds.&lt;/p&gt;

&lt;p&gt;That screen gets the attention the in-round screen doesn't. People read it once with gloves still off, and after that they listen.&lt;/p&gt;

&lt;h2&gt;
  
  
  During the round: the screen still exists
&lt;/h2&gt;

&lt;p&gt;There is an active-session screen. It shows the round counter, time left, the called combination as strike tiles and a timeline of the tempo. It's there for the moment when someone does pull the phone out, between rounds or to check how long is left. I don't treat it as the main interface, though. If a session only feels right while you're watching the tiles light up, the audio side has failed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhvncwatel5beqs16lpi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhvncwatel5beqs16lpi.jpg" alt="Active session screen and combo editor" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Controls you can reach without the screen
&lt;/h2&gt;

&lt;p&gt;The controls that matter during a round have to work with the phone out of sight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;play and pause from the headphone remote,&lt;/li&gt;
&lt;li&gt;a lock-screen card, so a quick look doesn't mean unlocking,&lt;/li&gt;
&lt;li&gt;workout alarms, where the phone rings at the set time with a short recorded coach line and one tap starts that workout.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The alarm uses AlarmKit on iOS 26. Its permission text says the alarm appears on screen even if a Focus is active, which is the reason we picked it over a regular notification for this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The voice carries the information
&lt;/h2&gt;

&lt;p&gt;Because the screen is out of the loop, everything you need mid-round has to be in the audio. Every strike is a recorded word, and the words are chosen per strike in the editor, so a gym that says "two" and a gym that says "cross" can both get what they're used to. The session ends with a spoken line too ("Breathe. You've earned this."), so you know you're done without checking.&lt;/p&gt;

&lt;p&gt;The stats come after, when you're back to looking at the phone: streak, rank, volume over time, personal records and how many calls you answered in that session. History syncs privately through iCloud. There's no account and no server of ours in between.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm still unsure about
&lt;/h2&gt;

&lt;p&gt;The hardest part is deciding what to say out loud and what to leave on screen. Time left in a round is a good example. Saying it often gets annoying fast, and never saying it makes people pull the phone out, which defeats the point. If you've built anything that's used eyes-free, like a running app, a cooking timer or something for cyclists, I'd like to know how you decided what the voice says and what it leaves out.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to try it
&lt;/h2&gt;

&lt;p&gt;FightNome is on the App Store (iOS 26 and up) and Google Play. It's a paid subscription, and only the yearly plan has a 3-day trial. More at &lt;a href="https://fightnome.app" rel="noopener noreferrer"&gt;https://fightnome.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I used AI assistance to draft this post and edited it myself.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ux</category>
      <category>ios</category>
      <category>a11y</category>
    </item>
    <item>
      <title>A combo editor where every tile is a word someone says out loud</title>
      <dc:creator>FightNome</dc:creator>
      <pubDate>Fri, 30 Oct 2026 14:06:57 +0000</pubDate>
      <link>https://dev.to/fightnome/a-combo-editor-where-every-tile-is-a-word-someone-says-out-loud-1mae</link>
      <guid>https://dev.to/fightnome/a-combo-editor-where-every-tile-is-a-word-someone-says-out-loud-1mae</guid>
      <description>&lt;p&gt;&lt;em&gt;I work on FightNome, so this is about our own app.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;FightNome is a pad-work trainer for boxing, Muay Thai, kickboxing and MMA. A recorded voice calls strikes on the beat of the music and you throw them with the phone in your pocket. In an earlier post I wrote about timing those voice files against the beat. This one is about the screen where people build the combos, which turned out to be the harder design problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  A tile is a sound first
&lt;/h2&gt;

&lt;p&gt;On most workout screens a tile is a picture with a label. Ours is a promise about what you'll hear later, with nobody looking at the phone. So every tile carries two things: the strike (what you do) and the callout (the exact word the coach says).&lt;/p&gt;

&lt;p&gt;Those two are often different. A hook can be called "hook", "lead hook", "rear hook", "three" or "four". An uppercut can be "upper", "lead upper", "rear upper", "five" or "six". Kicks get the most options, 17 words such as low, mid, high, teep, calf, switch and their lead and rear versions. Every preset has its own recorded sample bundled in the app, so picking a word never means falling back to a synthetic voice.&lt;/p&gt;

&lt;p&gt;Keeping strike and word apart matters because gyms don't agree on vocabulary. One coach calls a cross "two", another says "cross", a Muay Thai coach may want "rear" in front of most things. The combo underneath stays the same and only the words on top change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tile menu
&lt;/h2&gt;

&lt;p&gt;Tapping a tile opens a short menu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quick Strike ×2&lt;/strong&gt; makes the strike take half of its beat window, and the tile gets a ×2 badge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edit Callout&lt;/strong&gt; changes the word, from the presets for that strike.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replace with Strike&lt;/strong&gt; swaps the strike and keeps its place in the sequence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rearrange&lt;/strong&gt; puts the grid into jiggle mode so you can drag tiles around.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove from Sequence&lt;/strong&gt; deletes it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The list is short on purpose. Every extra option is one more thing to explain to someone who may already have wraps on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdtr6q3twgd4w6oqiqse9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdtr6q3twgd4w6oqiqse9.jpg" alt="Combo editor with strike tiles and the add-strike palette" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pauses are tiles too
&lt;/h2&gt;

&lt;p&gt;The palette starts with Pause, then Jab, Cross, Hook, Upper, Body, Kick, Elbow, Knee, Slip and Pivot. Putting the pause in the same grid as strikes keeps the rhythm visible. A pause is a beat where the coach says nothing, and it can be cut to half a beat. Real pad work has gaps for resetting and defending, and a combo with no pauses would be one long burst.&lt;/p&gt;

&lt;h2&gt;
  
  
  Section settings
&lt;/h2&gt;

&lt;p&gt;Combos live inside sections. Each section has a duration in 5-second steps, an intensity (half time, normal time, double time), a switch for the backing track and tick, and a preview button. If you turn on tempo control in Settings, there's also one tempo slider for the whole workout. Workouts run at 90 BPM by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating a combo
&lt;/h2&gt;

&lt;p&gt;There's a generate button that rolls a fresh combo. It uses Apple Intelligence on devices where that's available and the app's own combo grammar everywhere else. The grammar is the interesting part: rules for which strike can follow which are easy to write and much harder to make feel like something a coach would actually say.&lt;/p&gt;

&lt;h2&gt;
  
  
  Combo vs reaction
&lt;/h2&gt;

&lt;p&gt;The same screen has a mode switch. Combo mode is a scripted sequence the coach calls on the beat. Reaction mode is random calls you react to. The tile grid is what you edit for combo mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open question
&lt;/h2&gt;

&lt;p&gt;The thing I'm least sure about is discoverability. Long-press menus are familiar on iOS, but a plain tap opening a menu seems easier when your hands are taped. If you've designed for people using a phone with gloves or wraps on, I'd like to hear what worked.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to try it
&lt;/h2&gt;

&lt;p&gt;FightNome is on the App Store (iOS 26 and up) and Google Play. It's a paid subscription, and only the yearly plan has a 3-day trial. More at &lt;a href="https://fightnome.app" rel="noopener noreferrer"&gt;https://fightnome.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I used AI assistance to draft this post and edited it myself.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ios</category>
      <category>ux</category>
      <category>audio</category>
    </item>
    <item>
      <title>Lining up recorded voice callouts with a beat in a boxing training app</title>
      <dc:creator>FightNome</dc:creator>
      <pubDate>Sat, 24 Oct 2026 19:54:56 +0000</pubDate>
      <link>https://dev.to/fightnome/lining-up-recorded-voice-callouts-with-a-beat-in-a-boxing-training-app-2ih1</link>
      <guid>https://dev.to/fightnome/lining-up-recorded-voice-callouts-with-a-beat-in-a-boxing-training-app-2ih1</guid>
      <description>&lt;p&gt;&lt;em&gt;I work on FightNome. This post is about a feature of our own app.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;FightNome calls strikes out loud while you shadowbox or work pads. You hear "jab", you throw a jab. For that to feel right, the word has to land on the beat itself. Here's how we think about that problem, in plain terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The beat grid
&lt;/h2&gt;

&lt;p&gt;Everything hangs off the tempo. One beat lasts 60000 / BPM milliseconds. Our workouts run from 74 to 128 BPM, so the spacing between beats changes a lot:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BPM&lt;/th&gt;
&lt;th&gt;Beat length&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;74&lt;/td&gt;
&lt;td&gt;about 811 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;about 667 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;about 469 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The music bed is a single track recorded at 90 BPM. It gets time-stretched to whatever tempo a section uses, so the grid and the music always agree.&lt;/p&gt;

&lt;h2&gt;
  
  
  One word, one file
&lt;/h2&gt;

&lt;p&gt;Every callout is a separate recording of a person saying one word: jab, cross, hook, upper, body, teep, slip, roll and so on. There are 42 of them in the iOS project at the moment. It's a real voice, not text to speech.&lt;/p&gt;

&lt;p&gt;One word per file keeps the model simple. A combination is a list of words placed on beats, so changing a combo means changing the list and nothing else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting early
&lt;/h2&gt;

&lt;p&gt;A spoken word has an onset, and the part you recognize it by arrives slightly after the file starts playing. A file that starts exactly on the beat would sound late. So each callout starts 40 to 60 ms before its beat, and the word lands on the tick.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsd8p2li04rrl5wzu8vsd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsd8p2li04rrl5wzu8vsd.jpg" alt="Beat grid with the three tempos and their beat lengths in milliseconds" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In pseudocode (a sketch of the idea, not our source):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;beat_ms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60000&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;bpm&lt;/span&gt;
&lt;span class="n"&gt;play_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;beat_index&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;beat_ms&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;head_start_ms&lt;/span&gt;   &lt;span class="c1"&gt;# 40 to 60 ms
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That head start is small next to a beat. At 74 BPM it's between 5 and 7 percent of a beat. At 128 BPM it's between 9 and 13 percent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ways to place the words
&lt;/h2&gt;

&lt;p&gt;In combo mode the words repeat a sequence you built, strike by strike. Placement is predictable, and the editor lets a strike take half of its window ("Quick Strike x2"). At 128 BPM half a beat is about 234 ms, a short slot for any word.&lt;/p&gt;

&lt;p&gt;In reaction mode the app picks words at random, from 6 to 45 calls a minute. At 45 calls a minute you get one call every 1.33 seconds, which at 90 BPM is every two beats. At 6 calls a minute it's one every ten seconds. The same grid rules apply, and only the choice of word changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're still unsure about
&lt;/h2&gt;

&lt;p&gt;Output delay differs between phone speakers, wired earbuds and Bluetooth headphones, and any fixed head start is a compromise across those. If you've dealt with output latency in a simple way, I'd like to hear how.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to try it
&lt;/h2&gt;

&lt;p&gt;FightNome is a paid app: FightNome Pro is $8.99 a month or $49.99 a year (App Store US prices), and the yearly plan has a 3-day trial. There's no free tier. It runs on iOS 26 and up and on Google Play. Search "FightNome" in either store, or go to &lt;a href="https://fightnome.app" rel="noopener noreferrer"&gt;https://fightnome.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I used AI assistance to draft this post and edited it myself.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>audio</category>
      <category>ios</category>
      <category>android</category>
    </item>
  </channel>
</rss>
