Inspiration
Museums have quietly done something wonderful over the past decade: they released countless masterpieces into the public domain through open-access APIs. But almost nobody outside the art world ever sees them.
I wanted the opposite of doomscrolling — an app you open once a day, spend three calm minutes with one great painting, and leave a little richer. Like a tiny museum that lives in your pocket and grows by one artwork a day.
What it does
- One masterpiece every day. The first time you open the app each day, a new artwork is waiting. It joins your collection permanently — the collection only grows on days you actually show up, which makes it feel earned.
- A personal deck. Every user gets their own seeded shuffle of the deck (with rules like "no same artist within 3 days"), so no two collections grow in the same order.
- See every brushstroke. High-resolution zoom viewer, offline viewing of acquired works, favorites.
- A 3-minute guide for every artwork — who, when, where, and why it matters — available in 9 languages (EN / JA / FR / DE / IT / KO / PT / ZH / ES).
- Monthly features. Long-form curated articles (the first: "Vermeer, and the Light by the Window").
- The collection is curated from open-access records of museums including The Met, the Art Institute of Chicago, the Rijksmuseum, and the Mauritshuis. All images are public domain / CC0.
How we built it
- App: SwiftUI (iOS 17+), GRDB/SQLite cache, XcodeGen. Local notifications for the morning "today's artwork" reminder.
- Content pipeline: a Python CLI (
pm) that harvests museum open-access APIs, scores and curates the collection, processes images into two-resolution WebP, generates the deck, and builds the 9-language commentary set (AI-drafted, then human-reviewed work by work before shipping). - Delivery: Cloudflare R2 + CDN with cache rules — the app syncs a manifest and pulls content incrementally, so new artworks and articles ship without an app update.
- Monetization: RevenueCat (subscriptions) + AdMob rewarded ads, Firebase Analytics/Crashlytics for the funnel.
The monetization design (RevenueCat)
Instead of a hard paywall, commentaries use a rental model:
- Meeting artworks and building the collection is free, forever.
- Full commentaries are free for your first 14 artworks (a welcome gift).
- After that, one short rewarded ad unlocks that artwork's commentary for 24 hours — a fair trade that maps one ad to one clearly-scoped reward.
- Pro (monthly / yearly via RevenueCat, 7-day free trial on yearly) removes ads and unlocks every commentary and featured article while subscribed.
RevenueCat powers the entitlement (pro), the paywall with localized StoreKit prices and trial eligibility, and purchase/restore flows. If an ad can't be served, the app fails open — that day's commentary is free — so monetization never blocks the daily ritual.
Challenges
- Curation at scale: sifting a huge pool of open-access records into a deck that is actually great to meet daily (dedupe, image quality, artist balance, region balance) — and human-reviewing AI-drafted commentaries in 9 languages.
- The daily mechanic: moving from a global shared calendar to per-user seeded decks without breaking existing collections.
- Shipping solo: store review, subscription review, GDPR/UMP consent for the EEA, privacy labels, and a worldwide rollout as a one-person company.
Accomplishments
- Shipped v1.0 worldwide in 9 languages as a solo developer.
- A content pipeline that can ship new artworks and articles daily without app updates.
- A monetization model where the free experience stays genuinely complete.
What's next
- iCloud sync for collections, home-screen widgets, more museums and artworks (the deck is built to grow), more monthly features — and an Android version.

Log in or sign up for Devpost to join the conversation.