Skip to content

Things I've made

I design, build and ship my own products. That means the idea, the interface, the code, the payments, the launch and the support inbox. These five are the ones I'm working on right now.

My client work lives at Cascadia Digital, my Statamic studio. This page is about the products.

Stepglow on an iPhone Lock Screen showing today's step count and a goal reached notification

Stepglow

Live on the App Store

Your steps, right on your Lock Screen.

iPhone app. Swift, SwiftUI, WidgetKit, HealthKit, StoreKit.

The problem

I was walking a lot on a trip and every time I wanted my step count I had to open the Health app and scroll for it. The number sits a few taps deep, and there is no widget to bring it to the surface.

What I built

A free iPhone app with Home Screen and Lock Screen widgets in several styles, a daily goal with a small celebration when you hit it, streaks and badges, and week and month views. Steps come from Apple Health, so Apple Watch steps count too. Plus is a one-time upgrade that adds extra themes and your full history.

What I owned

Product, design, Swift code, the Plus purchase, App Store listing and search optimization, and the marketing site.

Decisions worth mentioning

  • Everything stays on the phone. There are no accounts, no tracking and no ads.
  • Plus is a one-time purchase with no subscription. The free app has to be good on its own, because reviews and rankings from free users are the marketing.
  • I tested my keyword plan against Apple's search API instead of trusting a hunch. "Lock screen steps" turned out to be open, while "step widget" is held by the big pedometer apps, so the subtitle is where the open term goes.
  • The first icon used the same walking-figure symbol as most step counters. I replaced it with an original sneaker mark and shipped it as 1.1.

Status

Live on the App Store since October 2026. Version 1.1 added the new icon and a listing that leads with the Lock Screen.

Daylight Glow widget on an iPhone Home Screen showing minutes of daylight lost since yesterday and the sunset time

Daylight Glow

Coming soon to the App Store

Every minute of daylight.

iPhone app. Swift, SwiftUI, WidgetKit, GlowKit (shared Swift package).

The problem

Through the long dark months I wanted to watch the light come back. Other apps show sunrise and sunset times. I wanted one number in a widget: how much daylight you gained or lost since yesterday.

What I built

A Home Screen widget with daylight gained or lost, sunrise, sunset, day length and a sunset countdown, for your location or any city you search. Free includes the small widget. Plus is a one-time upgrade for every widget size, the Lock Screen, golden hour, a solstice countdown, more places and themes.

What I owned

The sun calculations, the shared GlowKit package, the purchase flow, App Store submission and the marketing site.

Decisions worth mentioning

  • The sun is worked out on the phone from the chosen place. I never see anyone's location, and there are no accounts or tracking.
  • The sun math is tested against published sunrise and sunset times.
  • It is the first app on GlowKit, a shared Swift package I pulled out of Stepglow with the widgets, themes and Plus purchase. The plan is to move Stepglow onto it in a 2.0 update.
  • Plus is a one-time purchase, same as Stepglow, so the free version has to stand on its own.

Status

Not in the App Store yet. The submission is in preparation, aimed at the November 1 clock change.

Stillread showing a folder of notes in a sidebar next to a calmly typeset Markdown page

Stillread

Live, direct download

A calm place to read Markdown on your Mac.

Mac app. Native macOS, Quick Look, Sparkle updates, Polar licensing, Cloudflare.

The problem

Markdown usually gets read inside tools built for writing, with gutters and tabs and line numbers. I wanted to browse a folder of notes as a calm page, and I wanted pressing Space on a .md file in Finder to show something better than raw text.

What I built

A folder sidebar, a typeface drawn for long passages, a choice of line widths, Focus Mode, a Quick Look preview, tables, task lists, footnotes, GitHub alerts and Mermaid diagrams. The page updates in place when a file changes on disk. Press ⌘E and the page becomes its Markdown, so you can fix something without losing your place. It also opens Obsidian vaults.

What I owned

The Mac app, signing and notarization, Sparkle updates, licensing, the download pipeline and the marketing site.

Decisions worth mentioning

  • Reading is free. Editing is a one-time unlock at $9.99 with no subscription, and the refund promise stands in for a trial.
  • It ships as a direct download rather than through the App Store. The app is signed with a Developer ID, notarized, and updates itself with Sparkle. I tested the update path on a practice account before launch.
  • Editing writes your file back exactly as it was apart from what you typed. If another app changes the note while you are editing, Stillread asks which version to keep.
  • A small Cloudflare Worker counts downloads by day without storing any visitor data, and the privacy page says so.

Status

Live since October 20, 2026. Version 1.1 added optional tabbed windows. Requires macOS 14 Sonoma or later.

Hat Trick's sales page artwork with the line Draw names. Keep the secret. and a fan of face-down cards

Hat Trick

Live

Draw names. Keep the secret.

Web app. Laravel, Livewire, Flux, Paddle, Postmark, Laravel Cloud.

The problem

My family had been using drawnames.com for our gift exchange, which is about eight to ten people. I wanted a replacement that follows the rules we already use, like partners never drawing each other and nobody getting last year's match, with an organizer who can't see who has whom.

What I built

An organizer starts a group and invites people, then runs the secret draw. Everyone gets a wish list and an anonymous chat with their giver, and the group has a bulletin board. It is free for one group with events of up to eight people. A Pro pass covers bigger events and more groups for a year.

What I owned

The rules and product design, the Laravel build, Paddle billing, email delivery, hosting and launch.

Decisions worth mentioning

  • The organizer can't see the pairings by default. One deliberate "Are you sure?" screen shows them. The emailed match name is hidden, and in the app it stays blurred until you tap it.
  • Pro is a yearly pass through Paddle and nothing renews automatically.
  • Sign-up is protected with Cloudflare Turnstile, rate limits and daily pruning of unverified accounts. Email goes through Postmark with bounce and complaint suppression.
  • Tests run on SQLite and on Postgres. A query that passed every SQLite test once broke the event pages in production, and that is why.

Status

Live. Sign-up and Pro checkout opened to the public at the end of October 2026.

PokerFriday artwork showing friends playing cards around a table

PokerFriday

Live

Your home game. Your real club.

Web app (SaaS). Laravel, Inertia, React, Stripe (Cashier), Postmark, Laravel Forge.

The problem

I was running a real poker club over a group text and a leaderboard I filled in by hand on a printed spreadsheet. I wanted one place for the schedule, the RSVPs and the results.

What I built

Game nights with date, time, location and buy-in, email invites that players answer straight from the message, a member roster, a stats page for every player, a season leaderboard, a chat thread for each game and a blind clock. Free covers one club with up to 20 members. Pro adds seasons, scheduling polls, automated reminders, more clubs and managers.

What I owned

Product, design, the full-stack build, Stripe billing, hosting and the public launch.

Decisions worth mentioning

  • Member limits and extras like seasons and reminders are the line between Free and Pro.
  • Seat limits per table stay a soft, informational field. Home games are loose, and I did not want a rigid cap blocking a friend.
  • The blind clock keeps its state on the server and each browser counts down locally, with light polling to stay in sync. Websockets are the planned upgrade if the polling stops being enough.
  • Billing runs through Laravel Cashier and Stripe, with Postmark for transactional email.

Status

Live since the 2026 public launch. Free to start, with Pro at $19 a month.

Two men in black T-shirts standing on a stage in front of a red screen, one gesturing with a microphone, during a pitch at Laracon
Pitching PokerFriday on stage at Laracon with Aaron Francis. Read the story →

Working on something?

I'm always glad to talk with product teams and collaborators. If you need a website built or migrated, that's what Cascadia Digital, my Statamic studio, is for. You can also follow along in the newsletter or read the blog.