The idea
In early 2020 I emailed Goodberry’s with a simple ask: create a public calendar for the Flavor of the Day so customers could subscribe on their phones. They never responded. So I built one myself.
Who it’s for
- The daily checker. Wants to know what today’s flavor is before making the drive. Asks Alexa, checks the dashboard, or runs a Siri shortcut. Needs a fast answer.
- The planner. Subscribes to the calendar so they can see next week’s flavors on their phone. Wants to know when their favorite is coming back.
- The data nerd. Cares about frequency charts, gap tracking, and trend analysis. Wants to know how many times Banana Pudding has appeared since 2020.
- The notifier. Sets up email alerts for specific flavors. Doesn’t want to check every day, just wants a ping when it matters.
Manual Google Calendar
Problem: There was no easy way to know what flavor was coming up. You had to check social media, call the store, or just show up and hope.
Solution: I started manually typing each day’s flavor into a Google Calendar that anyone could subscribe to.
Outcome: It worked, but keeping it updated by hand was tedious. I wrote a blog post about it in 2020, and it’s still my most-trafficked page. Turns out a lot of people searching for my site are actually just looking for custard flavors.
iOS Shortcuts for data entry
Problem: Manually typing flavors into a Google Calendar every month was slow and error-prone.
Solution: Built iOS Shortcuts to speed up the process. First to populate the calendar directly, then to generate a public JSON file on GitHub that another Shortcut could read to return the flavor via Siri.
Outcome: The data entry got faster, and the JSON file gave me a programmatic source I could build other things on top of.
Goodberry’s goes public
Problem: I was still the bottleneck. If I didn’t update the calendar, nobody got flavor data.
Solution: In fall 2023, Goodberry’s finally launched their own public Google Calendar. I wrote a Python script to sync their calendar into mine automatically. The script runs three sync operations: adding missing events, replacing “NEW FLAVOR” placeholders with actual names when they’re published, and detecting corrections or backfills on existing entries. It authenticates via a Google Service Account and syncs to both a destination calendar and a custom flavor API with exponential backoff retry logic.
Outcome: The flavor pipeline became fully automated. The script runs every 6 hours via GitHub Actions (00:00, 06:00, 12:00, 18:00 UTC), and handles edge cases like mid-month flavor changes and late backfills. A pytest suite mocks the Google Calendar and flavor API to validate all three sync operations.
Web dashboard
Problem: A calendar subscription tells you what’s coming, but I wanted stats: frequency charts, gap tracking, trend analysis. And I wanted it to feel like a real product, not a spreadsheet.
Solution: Built a React 19 dashboard on Supabase with SWR for data fetching and Recharts for visualization. User accounts with password recovery, a customizable card layout (drag-and-drop reordering, show/hide cards), dark mode with system preference detection, and PWA support so it feels native on mobile. Added an iOS “Add to Home Screen” prompt for Safari users. Deployed to Cloudways via GitHub Actions with SFTP.
Outcome: The dashboard tracks every flavor since July 2020. Logged-in users can configure their layout and get notified when their favorites are coming up.
Email notifications
Problem: Checking the dashboard every day is fine for power users, but most people just want to know when a specific flavor shows up.
Solution: Built a Supabase Edge Function that sends personalized HTML emails via SMTP2Go. Four notification types: first_this_year (flavor hasn’t appeared yet this calendar year), first_ever (completely new flavor), first_this_season (seasonal flavor returning based on 30%+ historical appearances in that season), and on_day (user subscribed to a specific flavor). The detection logic analyzes the full flavor history to calculate seasonal distributions across winter, spring, summer, and fall.
Outcome: Subscribers get branded emails when their flavors come up. No need to check the dashboard unless you want to.
Alexa skill
Problem: Sometimes you just want to ask “what’s the flavor today?” without opening a browser.
Solution: Built an Alexa skill (“Custard Addict”) backed by an AWS Lambda function that queries the flavor API. Five intents: today’s flavor, tomorrow’s flavor, yesterday’s flavor, flavor on a specific date, and “when is [flavor] coming back?” Deployed to three regions (US, EU, Asia-Pacific) with the ASK SDK.
Outcome: The skill is published on the Alexa store. Ask “Alexa, ask custard addict what’s today’s flavor?” and it reads it back.
Apple Shortcut
Problem: Alexa covers the kitchen counter, but I wanted flavor lookups on iPhone, iPad and Apple Watch too.
Solution: Built an Apple Shortcut that scrapes Goodberry’s website directly for the Flavor of the Day. Supports calendar subscription prompts, a date picker toggle for custom date lookups, and an auto-update check that notifies when a new version is available. Works through Siri, the Shortcuts app, or as a widget.
Outcome: Quick lookups on any Apple device without opening a browser. The shortcut handles its own versioning so users know when to update.
AI topping suggestions
Problem: You know the flavor, but what do you put on it?
Solution: Added a “Today’s Fix” card to the dashboard powered by a Supabase Edge Function that calls the Anthropic API. It suggests topping combinations for whatever today’s flavor is, with client-side rate limiting, suggestion variety logic to prevent repetitive results, and a suggestion history so you can scroll back through past recommendations.
Outcome: A fun addition that makes the dashboard feel more useful on game day. Check your Canes promos, then check your custard toppings.
Sharing and public pages
Problem: Users wanted to share today’s flavor with friends, and returning users had no way to see what changed.
Solution: Added a share button for today’s flavor on the dashboard. Built a public page for the Alexa skill section. Added a subtle repeating logo background pattern and a changelog page so returning users can see what’s new.
Outcome: The app feels more complete with social sharing and a visible update history.