<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Brian Rossen · Blog</title>
    <link>https://brianrossen.com/blog/</link>
    <atom:link href="https://brianrossen.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Brian Rossen, a filmmaker and app developer, writing about filmmaking, new tech and building apps.</description>
    <language>en-us</language>
    <lastBuildDate>Thu, 08 Oct 2026 12:00:00 +0000</lastBuildDate>
    <image><url>https://brianrossen.com/apple-touch-icon.png</url><title>Brian Rossen · Blog</title><link>https://brianrossen.com/blog/</link></image>
    <item>
      <title>Timeline by BSR</title>
      <link>https://brianrossen.com/blog/timeline/</link>
      <guid isPermaLink="true">https://brianrossen.com/blog/timeline/</guid>
      <pubDate>Thu, 08 Oct 2026 12:00:00 +0000</pubDate>
      <description>For wedding filmmakers and photographers: the planner&#x27;s timeline as a clean shooting schedule, counting down on your Lock Screen.</description>
      <content:encoded><![CDATA[<p><img src="https://brianrossen.com/blog/timeline/og-image.jpg" alt=""></p>
<div class="post-header">
      <p class="eyebrow"><time datetime="2026-10-08">Oct 8, 2026</time> · <span style="text-transform: none">iPhone</span></p>
      <h1>Timeline <em>by BSR</em></h1>
      <p class="lede">For wedding filmmakers and photographers. It turns the planner's timeline into a clean shooting schedule, with what's next always in view.</p>
      <div class="divider"></div>
    </div>

    <div class="prose">
      <p>I used Timeline at a recent wedding with my buddy Kris, and having a live countdown on the Lock Screen was super handy. One look at my phone showed what was coming up next.</p>

      <h2>What it is</h2>
      <p>A planner's timeline has a lot of moving parts: vendor arrivals, venue notes, seating, load-in. <a class="app-link" href="https://brianrossen.com/timeline-by-bsr/">Timeline</a> reads the document they sent and pulls out the moments you film, like getting ready, the first look, the ceremony, toasts, dances and the send-off.</p>
      <p>Bring in a PDF from Mail, Messages or Safari, a Word or Excel file, a screenshot, or text pasted from an email. Before anything is saved you see what was kept and what was tucked away, and the planner's lines are always one tap away.</p>

      <div class="shots">
        <figure>
          <img src="https://brianrossen.com/blog/assets/timeline-paste-planner.jpg" alt="Paste the planner's timeline: a sample planner PDF for Jordan &amp; Priya, with a moved-up first look circled, flowing into Timeline's import review on an iPhone" width="720" height="1564" loading="lazy" style="border: 0; box-shadow: none; border-radius: 18px; width: min(100%, 340px); display: block; margin: 0 auto">
        </figure>
      </div>
      <p>On the day, the next moment counts down at the top. Start a Live Activity and it counts down on your Lock Screen, in the Dynamic Island and on Apple Watch too, down to the second. Golden hour and sunset are worked out for the venue, and every Instagram handle in the timeline is ready to copy for tagging.</p>

      <div class="shots">
        <figure>
          <div class="device" style="width: min(100%, 220px)"><img class="device-frame" src="https://brianrossen.com/apps/images/iphone-18-pro-frame.svg" alt="" loading="lazy"><img class="product-screen" src="https://brianrossen.com/blog/assets/timeline-schedule.jpg" alt="Timeline schedule for a sample wedding, Avery &amp; Jonah, showing the first look, wedding party photos and family photos with times" width="620" height="1348" loading="lazy"><span class="dynamic-island" aria-hidden="true"></span></div>
          <figcaption>Just what you shoot</figcaption>
        </figure>
        <figure>
          <div class="device" style="width: min(100%, 220px)"><img class="device-frame" src="https://brianrossen.com/apps/images/iphone-18-pro-frame.svg" alt="" loading="lazy"><img class="product-screen" src="https://brianrossen.com/blog/assets/timeline-import.jpg" alt="Timeline import review: 56 moments to film, 4 planner lines hidden, 8 Instagram handles found" width="620" height="1348" loading="lazy"><span class="dynamic-island" aria-hidden="true"></span></div>
          <figcaption>Import what the planner sent</figcaption>
        </figure>
        <figure>
          <div class="device" style="width: min(100%, 220px)"><img class="device-frame" src="https://brianrossen.com/apps/images/iphone-18-pro-frame.svg" alt="" loading="lazy"><img class="product-screen" src="https://brianrossen.com/blog/assets/timeline-lock-screen.jpg" alt="iPhone Lock Screen at 7:59 with a Timeline Live Activity: Toasts in 5:24, then the Father / Daughter Dance at 8:20 PM" width="620" height="1348" loading="lazy"><span class="dynamic-island" aria-hidden="true"></span></div>
          <figcaption>Never miss a second</figcaption>
        </figure>
      </div>

      <h2>Why I built it</h2>
      <p>I'm a wedding filmmaker. The planner's timeline is written for everyone working the wedding, so the moments I film sit in between valet hours, vendor meals and the seating chart. I wanted their plan seen from my side: just what I'm shooting next, and how long until it starts.</p>

      <h2>How I built it</h2>
      <p>Timeline is a native iPhone app written in SwiftUI. Everything happens on the phone: PDFs, Word and Excel files are read on the device, and screenshots are read with Apple's text recognition, so the planner's document never leaves your phone.</p>
      <p>Every planner lays out a timeline differently, so I tested the importer against real planner timelines from past weddings until it kept the moments that matter and set the logistics aside. The sample wedding in the app and in these pictures is made up.</p>
      <p>It's free for two new weddings a month. Timeline Pro adds unlimited weddings for $3.99 a month, $29.99 a year, or $49.99 once.</p>
      <p>Timeline 1.0 is in App Store review now. I'll add the App Store link here as soon as it's out.</p>

      <div class="links">
        <a class="btn" href="https://brianrossen.com/timeline-by-bsr/">Timeline by BSR page →</a>
      </div>

      <a class="back" href="https://brianrossen.com/blog/">← All posts</a>
    </div>]]></content:encoded>
    </item>
    <item>
      <title>Sprig 1.5: Make what matters stand out</title>
      <link>https://brianrossen.com/blog/sprig-1-5/</link>
      <guid isPermaLink="true">https://brianrossen.com/blog/sprig-1-5/</guid>
      <pubDate>Tue, 06 Oct 2026 12:00:00 +0000</pubDate>
      <description>Make any item bigger, smaller, bold or highlighted. Just hold it and slide.</description>
      <content:encoded><![CDATA[<p><img src="https://brianrossen.com/blog/sprig-1-5/og-image.jpg" alt=""></p>
<div class="post-header">
      <p class="eyebrow"><time datetime="2026-10-06">Oct 6, 2026</time> · <span style="text-transform: none">iPhone</span></p>
      <h1>Sprig 1.5: Make what matters stand out</h1>
      <p class="lede"><a class="app-link" href="https://brianrossen.com/sprig/">Sprig 1.5</a> lets you make any item in a list bigger, smaller, bold, bold italic or highlighted. You just hold the item and slide it.</p>
      <div class="divider"></div>
    </div>

    <div class="prose">
      <h2>Hold, slide, swipe</h2>
      <p>Hold any item, then slide it left or right. Keep your finger down and swipe up or down to change how it looks. You see the change right away, and it only sticks when you let go.</p>
      <ul>
        <li><strong>Text size:</strong> slide left, then swipe down for bigger text or up for smaller. The row grows and shrinks with it.</li>
        <li><strong>Style:</strong> slide right, then swipe to step through bold and bold italic.</li>
        <li><strong>Highlight:</strong> slide right and keep pushing to highlight an item.</li>
        <li><strong>Back to normal:</strong> slide all the way left and the item goes back to how it started.</li>
      </ul>

      <div class="shots">
        <figure>
          <img width="320" class="product-screen" src="https://brianrossen.com/blog/assets/sprig-15-trip.jpg" alt="A trip plan for Oct 18 to 23 in Asheville in the Autumn theme, each day's heading in smaller bold italic between the plans" width="620" height="1348" loading="lazy">
          <figcaption>Days as small bold italic headers</figcaption>
        </figure>
        <figure>
          <img width="320" class="product-screen" src="https://brianrossen.com/blog/assets/sprig-15-update.jpg" alt="The Sprig 1.5 update list, each slide gesture written out and shown in the look it makes" width="620" height="1348" loading="lazy">
          <figcaption>Every slide, shown in its own look</figcaption>
        </figure>
      </div>

      <p>I use the smaller bold italic for the days in a trip plan, with the plans in normal text under each day. It makes a long trip list a lot easier to read.</p>

      <h2>Settings</h2>
      <p>In Settings → List Looks you can pick how highlights look (Theme bright, Inverted or Highlighter) and what each slide does.</p>
      <p>List titles get their own size, separate from the items, and the default list look now has its own title font and size too.</p>
      <p>Sprig also opens straight to the list you were last using.</p>

      <h2>The 1.5 update list</h2>
      <p>Sprig 1.5 adds a list called "Sprig 1.5 update" with one line for each slide. Each line is already styled the way that slide makes it look, so you can see what they all do.</p>
      <p>The slides are part of Sprig Pro. It's a one-time purchase, and it also unlocks every theme, per-list looks and all the app icons.</p>

      <div class="links">
        <a class="btn" href="https://apps.apple.com/us/app/sprig-to-do-checklists/id6805633027" target="_blank" rel="noopener">App Store</a>
        <a class="btn ghost" href="https://brianrossen.com/sprig/">Sprig page →</a>
      </div>

      <a class="back" href="https://brianrossen.com/blog/">← All posts</a>
    </div>]]></content:encoded>
    </item>
    <item>
      <title>Greens: Mini-golf</title>
      <link>https://brianrossen.com/blog/greens/</link>
      <guid isPermaLink="true">https://brianrossen.com/blog/greens/</guid>
      <pubDate>Wed, 30 Sep 2026 12:00:00 +0000</pubDate>
      <description>Classic mini golf, seen from above. Pull back, let go, and see how many holes you can ace.</description>
      <content:encoded><![CDATA[<p><img src="https://brianrossen.com/blog/greens/og-image.jpg" alt=""></p>
<div class="post-header">
      <p class="eyebrow"><time datetime="2026-09-30">Sep 30, 2026</time> · <span style="text-transform: none">iPhone</span> · <span style="text-transform: none">iPad</span></p>
      <h1><em>Greens</em>: Mini-golf</h1>
      <p class="lede">Classic mini golf, seen from above. Pull back, let go, and see how many holes you can ace.</p>
      <div class="divider"></div>
    </div>

    <div class="prose">
      <h2>What it is</h2>
      <p>It looks like a real course from above, with green felt, cream rails and a little red flag. To take a shot, drag anywhere on the course and pull back like a putter. A line of dots shows where the ball will go at first, including off the rails and down slopes. Let go and it rolls.</p>
      <p>You start on the classic courses. Meadow teaches one idea per hole, Lakeside mixes them up and ends at the windmill, and Village Green is a little harder. The theme courses come after that, and each one sticks to one idea, like every hole on ice, lava that carries the ball, or gravity that flips halfway through a hole.</p>
      <p>Par earns a bronze medal, under par earns silver, and a hole in one earns gold. The Daily Three gives everyone the same three holes each day, and you get one try. A ghost ball replays your best run on each hole so you can race it. Each person in the family can have their own player, with their own medals and streak.</p>
      <p><a class="app-link" href="https://brianrossen.com/greens/">Greens</a> launched with 72 holes on eight courses. Version 1.1 doubles that to 144 holes on sixteen courses and adds iPad.</p>

      <div class="shots">
        <figure>
          <img src="https://brianrossen.com/blog/assets/greens-windmill.jpg" alt="Greens hole 18 from above: a red windmill turning across the fairway, with aiming dots leading up from the ball" width="620" height="1347" loading="lazy">
          <figcaption>Lakeside finishes at the windmill</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/greens-inferno.jpg" alt="Greens Inferno course: the ball crossing a glowing lava flow on a green hole set in dark rock" width="620" height="1347" loading="lazy">
          <figcaption>Inferno: the lava carries the ball</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/greens-space.jpg" alt="Greens Space Station course: the ball coming out of a wormhole near the cup on a purple hole" width="620" height="1347" loading="lazy">
          <figcaption>Space Station: in one wormhole, out the other</figcaption>
        </figure>
      </div>

      <h2>What's new in 1.1</h2>
      <p>Version 1.1 is out now. It adds eight new courses and 72 new holes:</p>
      <ul>
        <li><strong>Village Green</strong>: a third Classic Course, with a little more bite. Opens when you finish Lakeside.</li>
        <li><strong>Inferno</strong>: lava flows carry the ball. Ride the river around a wall, get slung around a swirling pool, or fight the current.</li>
        <li><strong>Dunes</strong>: sand bunkers slow you down; quicksand swallows a ball that bogs down, so hit it firmly.</li>
        <li><strong>Crystal Caverns</strong>: pull and push crystals bend every putt. Curve around them like a comet.</li>
        <li><strong>Castle</strong>: drawbridges, portcullis gates, moats and secret stairs.</li>
        <li><strong>Pirate Cove</strong>: cannons fire you across the harbor, sea caves and currents carry you to the treasure.</li>
        <li><strong>Toy Room</strong>: you're tiny: block walls, pencil bridges, book ramps and toy trains.</li>
        <li><strong>Space Station</strong>: gravity that turns and flips, airlocks, wormholes and launch pads.</li>
      </ul>
      <p>Also new:</p>
      <ul>
        <li><strong>Players</strong>: everyone in the family gets their own medals, streak and ghosts, and the House Leaderboard shows who's best on your iPhone or iPad.</li>
        <li><strong>Your Stats</strong>: tap the numbers at the top of the clubhouse for holes played, lifetime strokes, every hole in one and every medal, hole by hole.</li>
        <li><strong>Play a Round</strong>: every course in one place, with the next one to play ready to go.</li>
        <li>The Front and Back Nine are now Meadow and Lakeside.</li>
        <li>Bigger holes in landscape.</li>
        <li>Pausing mid-hole keeps your ball where it lies, so you pick up from your last shot.</li>
        <li>Ten ball colors to earn, and race the ghosts of everyone who plays on your iPhone or iPad.</li>
        <li>15 new achievements, and every player can see theirs in the app.</li>
        <li>Challenge friends through Game Center on the Daily Three or any course, and jump straight into a course from the Games app.</li>
        <li>Greens now plays on iPad, with a two-column clubhouse and the whole hole big on the screen.</li>
        <li>A quick windmill intro when Greens opens.</li>
        <li>Earn an achievement and it pops up right away, badge and all.</li>
        <li>Your Stats folds into neat sections, so everything's one tap away.</li>
      </ul>

      <h2>Why I built it</h2>
      <p>Mini golf is a game almost everyone already knows how to play, so there's nothing to explain.</p>
      <p>A lot of golf games on the App Store are full of ads between holes, coins, energy meters and in-game stores. I wanted a simple one: a calm course and a good putt. You pay once, and that's it.</p>

      <h2>How I built it</h2>
      <p>Greens is a native SwiftUI app, built with Claude Code. From the first commit to App Store approval took about a week.</p>

      <div class="links">
        <a class="btn" href="https://apps.apple.com/us/app/greens-mini-golf/id6815742588" target="_blank" rel="noopener">App Store</a>
        <a class="btn ghost" href="https://brianrossen.com/greens/">Greens page →</a>
        <a class="btn ghost" href="https://brianrossen.com/apps/">What I'm building next →</a>
      </div>

      <a class="back" href="https://brianrossen.com/blog/">← All posts</a>
    </div>]]></content:encoded>
    </item>
    <item>
      <title>TripStub</title>
      <link>https://brianrossen.com/blog/tripstub/</link>
      <guid isPermaLink="true">https://brianrossen.com/blog/tripstub/</guid>
      <pubDate>Mon, 21 Sep 2026 12:00:00 +0000</pubDate>
      <description>Snap a receipt, add it to a trip, and send a finished PDF expense report.</description>
      <content:encoded><![CDATA[<p><img src="https://brianrossen.com/blog/tripstub/og-image.jpg" alt=""></p>
<div class="post-header">
      <p class="eyebrow"><time datetime="2026-09-21">Sep 21, 2026</time> · <span style="text-transform: none">iPhone</span>, <span style="text-transform: none">iPad</span> &amp; <span style="text-transform: none">Mac</span></p>
      <h1>Trip<em>Stub</em></h1>
      <p class="lede">Snap a receipt, add it to a trip, and send a finished PDF expense report.</p>
      <div class="divider"></div>
    </div>

    <div class="prose">
      <h2>What it is</h2>
      <p><a class="app-link" href="https://brianrossen.com/tripstub/">TripStub</a> is an expense tracker for business trips and local reimbursements. Make a trip and add each expense to it. Take a photo of the receipt and it reads the total and date for you, right on your phone. When the trip is over, one tap makes a PDF report with the receipts attached, ready to send.</p>
      <p>You can also add an expense with Siri, which is the feature I use most.</p>

      <div class="shots">
        <figure>
          <img src="https://brianrossen.com/blog/assets/tripstub-trips.jpg" alt="TripStub trip list showing several trips with running totals and submitted badges" width="620" height="1348" loading="lazy">
          <figcaption>Every trip, at a glance</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/tripstub-detail.jpg" alt="A single TripStub trip with expenses grouped by category and a running total" width="620" height="1348" loading="lazy">
          <figcaption>Categorized as you go</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/tripstub-report.jpg" alt="A finished TripStub PDF expense report with category breakdown and receipt image" width="620" height="1348" loading="lazy">
          <figcaption>A report, ready to send</figcaption>
        </figure>
      </div>

      <h2>Why I built it</h2>
      <p>I travel for video shoots, so I end up with parking, food, hotels, rides and a pocket full of receipts. I used to put them into a spreadsheet weeks later, and some always got lost along the way.</p>
      <p>I wanted logging an expense to take a few seconds, right when it happens.</p>

      <h2>How I built it</h2>
      <p>TripStub is built with SwiftUI and SwiftData, and it runs on iPhone, iPad and Mac from one codebase. Receipt scanning uses Apple's Vision framework, so nothing leaves your device. I built the PDF report layout myself so it looks clean.</p>
      <p>Two parts were harder than I expected: syncing receipt photos between devices, and making the Mac version feel like a real Mac app, with proper windows and drag and drop from Finder.</p>
      <p>There's also a little receipt character named Stub on the trip list. He doesn't do anything useful, but he's my favorite part.</p>

      <div class="links">
        <a class="btn" href="https://apps.apple.com/us/app/tripstub/id6805745240" target="_blank" rel="noopener">App Store</a>
        <a class="btn ghost" href="https://brianrossen.com/tripstub/">TripStub page →</a>
      </div>

      <a class="back" href="https://brianrossen.com/blog/">← All posts</a>
    </div>]]></content:encoded>
    </item>
    <item>
      <title>ScorePad: Game Points Tracker</title>
      <link>https://brianrossen.com/blog/scorepad/</link>
      <guid isPermaLink="true">https://brianrossen.com/blog/scorepad/</guid>
      <pubDate>Wed, 16 Sep 2026 12:00:00 +0000</pubDate>
      <description>Keeps score for the game on the table: cards, dice, Catan, pickleball and more, with the real rules built in.</description>
      <content:encoded><![CDATA[<p><img src="https://brianrossen.com/blog/scorepad/og-image.jpg" alt=""></p>
<div class="post-header">
      <p class="eyebrow"><time datetime="2026-09-16">Sep 16, 2026</time> · <span style="text-transform: none">iPhone</span></p>
      <h1>Score<em>Pad</em>: Game Points Tracker</h1>
      <p class="lede">A scorekeeper for the games you play at the table, like cards, dice, Catan and pickleball. It already knows the scoring rules.</p>
      <div class="divider"></div>
    </div>

    <div class="prose">
      <h2>What it is</h2>
      <p>Pick the game, pick the players, and enter each round with a few taps. <a class="app-link" href="https://brianrossen.com/scorepad/">ScorePad</a> adds up the totals and knows the rules, like bags in Spades, shooting the moon in Hearts and the upper-section bonus in Yahtzee.</p>
      <p>Some games are scored round by round, and some, like pickleball and Catan, change as you play. ScorePad handles both, and it comes with 24 games.</p>
      <p>Everything stays on your phone. There's no account or sign-in, it works without a signal, and if you fix a round later, the totals and the winner update.</p>

      <div class="shots">
        <figure>
          <img src="https://brianrossen.com/blog/assets/scorepad-games.jpg" alt="ScorePad new game screen listing Skyjo, Spades, Yahtzee and Catan with player counts" width="620" height="1348" loading="lazy">
          <figcaption>Pick the game on the table</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/scorepad-scorecard.jpg" alt="A Yahtzee scorecard in ScorePad with per-category scores for three players" width="620" height="1348" loading="lazy">
          <figcaption>Real rules, real scorecards</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/scorepad-stats.jpg" alt="ScorePad player stats showing games played, wins, win rate, streaks and a score-over-time chart" width="620" height="1348" loading="lazy">
          <figcaption>Stats that accumulate</figcaption>
        </figure>
      </div>

      <h2>Why I built it</h2>
      <p>Game night at home usually means a scrap of paper that goes missing, or a debate about the math. The scorekeeping apps I tried were either a blank grid where I had to do the rules myself, or they wanted me to make an account.</p>
      <p>I wanted an app that already knows the games, so entering a round only takes a few seconds. After a few months of game nights, you also get records and head-to-head stats, which makes it more fun.</p>

      <h2>How I built it</h2>
      <p>ScorePad is a SwiftUI app with SwiftData, built for the iOS 26 Liquid Glass look, with big buttons and undo everywhere. Undo turned out to be important, since people mis-tap while holding cards.</p>
      <p>Each game has its own scoring rules, so each one is its own little scoring engine. Round games and live games work differently enough that I kept them separate.</p>

      <div class="links">
        <a class="btn" href="https://apps.apple.com/us/app/scorepad-game-points-tracker/id6805911812" target="_blank" rel="noopener">App Store</a>
        <a class="btn ghost" href="https://brianrossen.com/scorepad/">ScorePad page →</a>
      </div>

      <a class="back" href="https://brianrossen.com/blog/">← All posts</a>
    </div>]]></content:encoded>
    </item>
    <item>
      <title>Sprig: To-Do &amp; Checklists</title>
      <link>https://brianrossen.com/blog/sprig/</link>
      <guid isPermaLink="true">https://brianrossen.com/blog/sprig/</guid>
      <pubDate>Tue, 01 Sep 2026 12:00:00 +0000</pubDate>
      <description>Paste in messy text or snap a photo of a note, and it turns it into a clean checklist.</description>
      <content:encoded><![CDATA[<p><img src="https://brianrossen.com/blog/sprig/og-image.jpg" alt=""></p>
<div class="post-header">
      <p class="eyebrow"><time datetime="2026-09-01">Sep 1, 2026</time> · <span style="text-transform: none">iPhone</span></p>
      <h1>Sprig: To-Do &amp; Checklists</h1>
      <p class="lede">Turn messy text into a checklist. Paste a long text or take a photo of a handwritten note, and <a class="app-link" href="https://brianrossen.com/sprig/">Sprig</a> makes it into a list you can check off.</p>
      <div class="divider"></div>
    </div>

    <div class="prose">
      <h2>What it is</h2>
      <p>Sprig is a checklist app. You can type items in like any list app, but you can also paste in a paragraph, a screenshot or a photo of a note, and Sprig pulls out the items for you.</p>
      <p>It runs on your iPhone with Apple Intelligence, so nothing gets uploaded. You can also pick colors and fonts for each list, so your grocery list and your packing list don't have to look the same.</p>

      <div class="shots">
        <figure>
          <img src="https://brianrossen.com/blog/assets/sprig-lists.jpg" alt="Sprig home screen showing several named lists in a green theme" width="553" height="1200" loading="lazy">
          <figcaption>Your lists, your colors</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/sprig-paste.jpg" alt="Sprig parsing a pasted paragraph of messy text into individual checklist items" width="620" height="1348" loading="lazy">
          <figcaption>Messy in, checklist out</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/sprig-themes.jpg" alt="Sprig theme picker showing a long list of named color themes" width="620" height="1348" loading="lazy">
          <figcaption>Themes, fonts, the lot</figcaption>
        </figure>
      </div>

      <h2>Why I built it</h2>
      <p>People send me lists that aren't really lists, like one text asking me to grab eggs, oat milk, bananas and napkins. Other to-do apps made me retype every item on a tiny keyboard in the middle of the store.</p>
      <p>Now that the AI to do this runs right on the phone for free, it made sense to build it.</p>

      <h2>How I built it</h2>
      <p>Sprig is a SwiftUI app for iOS 26. Apple's on-device Foundation Models read the text and find the items.</p>
      <p>Before anything is saved, Sprig shows you what it found, so you can fix an item, remove one, or cancel.</p>
      <p>I spent a lot of time on the themes too. I wanted every list to look nice enough that you want to keep it open.</p>

      <div class="links">
        <a class="btn" href="https://apps.apple.com/us/app/sprig-to-do-checklists/id6805633027" target="_blank" rel="noopener">App Store</a>
        <a class="btn ghost" href="https://brianrossen.com/sprig/">Sprig page →</a>
      </div>

      <a class="back" href="https://brianrossen.com/blog/">← All posts</a>
    </div>]]></content:encoded>
    </item>
    <item>
      <title>Type Attack</title>
      <link>https://brianrossen.com/blog/type-attack/</link>
      <guid isPermaLink="true">https://brianrossen.com/blog/type-attack/</guid>
      <pubDate>Tue, 18 Aug 2026 12:00:00 +0000</pubDate>
      <description>Shoot the falling words before they land. Thirty levels, ships to unlock, and typing practice that feels like an arcade game.</description>
      <content:encoded><![CDATA[<p><img src="https://brianrossen.com/blog/type-attack/og-image.jpg" alt=""></p>
<div class="post-header">
      <p class="eyebrow"><time datetime="2026-08-18">Aug 18, 2026</time> · <span style="text-transform: none">Mac</span></p>
      <h1>Type <em>Attack</em></h1>
      <p class="lede">Shoot the falling words before they land. It's typing practice that plays like an arcade game.</p>
      <div class="divider"></div>
    </div>

    <div class="prose">
      <h2>What it is</h2>
      <p>In <a class="app-link" href="https://brianrossen.com/type-attack/">Type Attack</a>, words fall from the top of the screen, and you destroy them by typing them. If too many land, you lose a life. There are 30 levels, 12 ships to unlock, upgrades like slow motion, achievements and a leaderboard.</p>
      <p>There are no ads and nothing to buy, and it's family friendly. It's a Mac app because typing games need a real keyboard.</p>

      <div class="shots wide">
        <figure>
          <img src="https://brianrossen.com/blog/assets/type-attack-title.jpg" alt="Type Attack title screen with sector select grid and play button" width="1000" height="646" loading="lazy">
          <figcaption>Thirty sectors, novice mode for the kids</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/type-attack-gameplay.jpg" alt="Type Attack gameplay with words falling through a purple nebula and a laser firing upward" width="1000" height="646" loading="lazy">
          <figcaption>Letter streaks, multipliers, and a rising panic</figcaption>
        </figure>
        <figure>
          <img src="https://brianrossen.com/blog/assets/type-attack-ships.jpg" alt="Type Attack ships screen listing unlockable ships with descriptions" width="1000" height="646" loading="lazy">
          <figcaption>Ships unlock by total words destroyed</figcaption>
        </figure>
      </div>

      <h2>Why I built it</h2>
      <p>My kids needed to learn to type, and most typing programs are pretty boring.</p>
      <p>So I made a game instead. You're not practicing the home row, you're just trying to hit the word before it lands, and you get faster along the way.</p>
      <p>Novice mode is there for younger kids who are just getting started.</p>

      <h2>How I built it</h2>
      <p>Type Attack is built with web technology and packaged for the Mac App Store, since it's a 2D game made of text. I wrote most of it in Cursor.</p>

      <div class="links">
        <a class="btn" href="https://apps.apple.com/us/app/typing-attack/id6785087832?mt=12" target="_blank" rel="noopener">Mac App Store</a>
        <a class="btn ghost" href="https://brianrossen.com/type-attack/">Type Attack page →</a>
      </div>

      <a class="back" href="https://brianrossen.com/blog/">← All posts</a>
    </div>]]></content:encoded>
    </item>
  </channel>
</rss>
