Work / Art Mutt
Art Mutt
A daily art app that picks one contemporary artwork each day and adds AI-written commentary on technique, context and what to notice.
- Role
- Product, design and engineering
- Status
- Beta
- Stack
- Expo, React Native, Next.js, Supabase

The problem
People who are curious about contemporary art rarely have a habit of looking at it. Museum archives hold plenty of work, but without a daily prompt or the context a casual viewer needs. Art Mutt sends one piece a day with enough background to make it worth a closer look.
What I did
- •An Expo Router app with Today, Explore, Favourites, category and artwork screens, onboarding and a pinch-to-zoom gallery.
- •A Next.js backend and marketing site with artwork, category, push token and account deletion APIs, plus generated OpenGraph images.
- •One source layer over WikiArt, the Art Institute of Chicago and the Met, with a crawler covering about 38 contemporary styles.
- •AI commentary for each artwork (a hook, technique, history, what to notice and a fun fact), generated from the image and its metadata.
- •Daily push notifications sent by a scheduled job in batches of 100, with dead tokens pruned automatically.
How it works
A monorepo with a Next.js app for the API and site and an Expo app for iOS and Android. Each day's artwork is picked deterministically from a date-based seed, falling back to the museum APIs. Commentary uses the Vercel AI SDK's structured output, validated with Zod, and is stored one section per row. GitHub Actions build and submit releases with EAS and ship over-the-air updates when the app changes.
Decisions and trade-offs
- •Commentary for around 14,000 artworks is refreshed lazily when someone opens one, since a bulk refresh would cost hundreds of dollars for art nobody views.
- •An App Store rejection for minimum functionality led to a deliberate rework: no dead taps, saving from the Today screen, clearly labelled AI insights and in-app account deletion.
- •Moved sign-in from self-hosted to hosted Supabase, and caught release builds shipping the retired key before it broke every login.
Where it stands
Live on the App Store with an Android build linked from the site. Recent work answered App Store review feedback and added a profile screen.
Need this on your team?
I take contract roles as a senior product engineer. Tell me about the team and the work.