-
-
Visualize your reading, watching and listening habits with annual stats, rhythm charts and auto-generated interest keywords.
-
Access full cast, synopsis and metadata. Log your watch date, give a rating, and jot down your personal thoughts on any title.
-
Catalog songs, albums, EPs and live recordings, with direct metadata sync from Apple Music and Spotify.
-
Fetch accurate, detailed information from IMDb, Douban, Rotten Tomatoes, Spotify, Apple Books and more — all in one app.
-
Browse full tracklists, artist credits and album background, all pulled from authoritative music metadata sources.
-
Quickly add movies and TV shows to your collection, with metadata from Douban, IMDb and Rotten Tomatoes built in.
-
Track what you're currently watching, reading, and listening. paired with a year progress indicator to mark your ongoing media journey.
-
All your saved films, albums and books in one tidy grid view, with watch/listen status and your ratings visible at a glance.
-
Search and catalog books in seconds. Browse curated suggestions and switch between multiple book database sources.
-
A featured cinematic quote greets you each day, alongside handpicked film, album and book suggestions tailored to your personal media taste.
Liuguang (留光)
Inspiration
Streaming services remember what I played, reading platforms remember what I bought, and movie databases remember what I rated—but none of them remembers why a work mattered to me.
My books, films, and music were fragmented across different apps. Notes lived elsewhere, recommendations repeated things I already knew, and personal memories gradually disappeared beneath activity feeds.
“Liuguang” means keeping the light. I wanted to create a quiet, personal place for preserving the books, films, and music that continue to glow after the experience ends.
During OpenAI Build Week, I used Codex as an ongoing product and engineering partner to turn that idea into a working native iPhone application.
What it does
Liuguang is a local-first cultural journal for books, films, and music.
Users can:
- Record what they want to read, watch, or hear; what they are currently experiencing; and what they have completed.
- Search multiple metadata sources without manually entering titles, creators, covers, release dates, regions, or genres.
- Add ratings, tags, progress, and personal reflections.
- Distinguish albums, singles, songs, EPs, and live recordings.
- Import album track lists and lyrics, then open lyrics in a distraction-free performance mode.
- Receive daily recommendations that exclude works already saved in the library.
- Discover a daily quotation or scene connected to a selected work.
- Review the year through a twelve-month activity rhythm and weighted keyword bubbles generated from recorded content.
- Export, import, or completely erase the local library.
- Continue viewing previously downloaded cover art without fetching it again.
The interface uses Apple’s Liquid Glass system to make the library feel less like a database and more like a living collection of memories.
How I built it
Liuguang is written in Swift 6 using SwiftUI and SwiftData, targeting iOS 26.
A provider-based metadata architecture converts every external result into one shared MediaSnapshot model. Searches can run across multiple sources, normalize inconsistent fields, remove duplicates, and retain fallback artwork and destination links.
The app currently connects to sources including Open Library, Apple Books, Google Books, Douban, IMDb, Rotten Tomatoes, Apple Music, Spotify, and LRCLIB.
Cover artwork is stored through an actor-based disk cache. URLs are hashed with CryptoKit, writes use file protection, and an LRU-style storage limit prevents the cache from growing indefinitely.
The recommendation engine remains local and explainable. It scores candidates using media-type affinity, creators, tags, daily seeds, and recent recommendation history. It balances books, films, and music, avoids excessive repetition, and removes anything already present in the user’s library.
Liquid Glass is implemented with native SwiftUI APIs such as glassEffect, GlassEffectContainer, interactive glass, and matched glass transitions. Core Motion lets the annual keyword bubbles respond to the physical tilt of the device.
How I used Codex
Codex was not a one-click code generator. I used it as a persistent collaborator throughout many small iterations.
It helped me:
- Translate visual and interaction requirements into working SwiftUI components.
- Trace metadata failures across different providers.
- Design a normalized media model that could evolve without rewriting every screen.
- Write regression tests for parsing, recommendation behavior, caching, and media classification.
- Diagnose build errors and repeatedly compile and launch the app on an iPhone Air simulator.
- Review Liquid Glass behavior, animation hierarchy, touch targets, and accessibility fallbacks.
- Refactor features without discarding the user data model or unrelated working code.
The tight loop of requirement, implementation, build, observation, and correction made it possible to move from a broad product idea to a detailed native application.
Challenges
The largest technical challenge was inconsistent metadata. The same work may have different identifiers, titles, artwork sizes, release types, and descriptions across providers. Reliable importing required normalization, fallbacks, source-specific enrichment, and careful deduplication.
Music introduced another layer of complexity. A song, single, album, EP, and live recording can share almost identical metadata while requiring different presentation and import behavior.
The visual challenge was making Liquid Glass meaningful rather than decorative. Glass needed to respond to touch, preserve text contrast, transition naturally, and remain performant when several elements appeared together.
Personalized discovery was also difficult. Recommendations needed to feel fresh without becoming random, and they could never suggest something already recorded by the user.
What I learned
I learned that resilient integrations depend less on the number of APIs and more on normalization, graceful fallbacks, and clear ownership of data.
I also learned that Liquid Glass is not simply a blur effect. It works best when material, movement, hierarchy, and interaction describe the same behavior.
Most importantly, I learned that Codex produces its best work when given concrete acceptance criteria, access to the real codebase, and permission to build, test, and correct its assumptions.
Accomplishments I am proud of
- Building a real native application rather than a static prototype.
- Unifying three very different media types without flattening their differences.
- Keeping the personal library local and user-exportable.
- Creating a recommendation system that respects existing records and recent exposure.
- Turning repeated product feedback into a coherent, reusable SwiftUI architecture.
What is next
Next, I plan to prepare a TestFlight release, add optional iCloud synchronization, build a companion Mac experience, expand the recommendation catalog, and explore an opt-in OpenAI reflection layer that can transform private notes into personal monthly or annual cultural narratives while keeping the underlying library under the user’s control.
Log in or sign up for Devpost to join the conversation.