Inspiration
I like reading books, listening to music, watching movies, and listening to podcasts. The media I consume often stays with me long after I close a book, leave a cinema, finish an album, or stop a podcast. However, those experiences are usually scattered across different platforms, watchlists, listening histories, screenshots, and notes, which also have unnecessary socializing functions. That is why I wanted to develop a desocialized APP for myself to track my own media journal and record my feelings.
That idea became Aftertone: a personal media journal designed around memory, reflection, and the emotional traces left by books, films, music, podcasts, and so on.
What It Does
Aftertone allows users to keep a daily journal of their media experiences.
Users can:
- Log books, films, music, and podcasts
- Search for media and automatically retrieve available metadata
- Add covers, creators, genres, dates, and runtime information
- Record reading or listening time
- Give daily ratings and calculate an average rating over time
- Write thoughts and revisit notes from previous days
- Track books across multiple reading sessions
- Mark items as finished and view a completion summary
- Organize media using editable genres and custom colors
- Review weekly and monthly activity through analytics
- Explore completed items through interactive genre charts
- Personalize monthly journal titles and backgrounds
- Use light and dark appearances
- Navigate through the calendar to revisit past media memories
Books are treated differently from one-time experiences such as films or individual songs. An active book can appear repeatedly, allowing users to record new reading sessions, ratings, and thoughts as their experience develops.
The Core Idea
Aftertone is not intended to be another watchlist or productivity tracker.
It focuses on a question that matters to me:
What did this experience leave behind?
A rating can change. Thoughts can evolve. A book may take weeks to finish, and each reading session may feel different. Aftertone preserves that journey instead of reducing the experience to a single completed item.
How I Built It
Without any background in developing an APP, I was recommended by my friends to start with Codex. Therefore, Aftertone was built as a native iOS application using:
- Swift
- SwiftUI
- SwiftData
- Xcode
- URLSession
- Google Books API
- TMDB API
- iTunes Search API
- Public podcast metadata and RSS feeds
- PhotosUI
SwiftUI was used to build the interface and reusable components. SwiftData manages media items, journal entries, ratings, time records, genres, and customization settings locally.
Each media category has slightly different behavior:
- Books support repeated daily reading sessions
- Movies are recorded as individual viewing experiences
- Music distinguishes between singles and albums
- Podcasts can represent a show or a specific public episode
The application combines results from several metadata providers because no single public source covers every type of media consistently.
The analytics system aggregates journal activity by date, category, time, and genre. It supports weekly and monthly views and updates when new journal entries are saved.
Design Approach
I wanted Aftertone to feel light, reflective, and personal rather than technical or productivity-focused.
The interface uses:
- Soft, airy backgrounds
- Gentle translucent surfaces
- A restrained accent palette
- Customizable genre colors
- Clear typography and generous spacing
- Calendar-based navigation
- Consistent light and dark appearances
Users can customize individual monthly boards with their own titles, background colors, or uploaded images. This allows each month to feel like a separate chapter of the journal.
The name Aftertone refers to the feeling or impression that remains after an experience has ended.
Challenges I Faced
Combining Multiple Metadata Sources
Books, movies, music, and podcasts all return different data structures. Titles, creators, covers, runtimes, release types, and identifiers are not represented consistently.
I had to normalize these results into a shared media model while preserving category-specific information.
Music Search and Duplicate Results
Music searches can return a song and an album with the same title and artwork. This created confusing duplicate results.
I developed matching and deduplication logic and added a choice when the same work can reasonably be logged as either a single or an album.
Podcast Metadata
Podcast links and public feeds do not always expose complete information. Some links redirect through platform-specific pages, and episode duration is not always available from the first response.
The app therefore combines public metadata, podcast search results, and RSS information when possible while still allowing manual editing.
Modeling Ongoing Books
Books required a different flow from other media. A book may remain active for many days, but it should not make every calendar day appear completed.
I separated the media item from its daily journal entries. The calendar only reflects days with real activity, while the book remains available for future sessions.
Daily Ratings
A user’s opinion of a book may change while reading it. I added daily ratings and calculated the final average using only the days on which a rating was actually provided.
Note: Rating-only changes do not count as journal activity.
Saving and Editing Notes
Notes needed to remain connected to their original dates, even when edited later. I also needed to prevent saved notes from repeatedly appearing as unfinished drafts.
This required careful state management between the editor, saved entries, and the previous-notes section.
Immediate Analytics Updates
Analytics initially did not always refresh immediately after saving a new item, particularly for podcasts. I revised the data flow so that all media categories trigger consistent updates after their journal entries are saved.
Performance
Loading several media records, custom backgrounds, metadata, and analytics at launch caused noticeable delays during development.
I improved the startup flow by reducing unnecessary work, avoiding repeated calculations, and loading expensive information only when its screen requires it.
Accomplishments That I Am Proud Of
I am especially proud that Aftertone has grown into a working native iOS prototype with a coherent experience across four very different media categories.
Some of my favorite parts are:
- The calendar that reflects genuine journal activity
- Ongoing book sessions with time, thoughts, and evolving ratings
- Completion summaries that celebrate finishing an item
- Search flows that retrieve and organize media metadata
- Editable genre lists with personalized colors
- Interactive analytics and genre breakdowns
- Podcast episode discovery
- Custom monthly journal boards
- A consistent light and dark visual system
Most importantly, the app now feels less like a database and more like a personal journal. Seeing an idea that once existed only in my head come to life with the help of Codex and GPT-5.6 gave me a genuine sense of achievement. It might not be the most innovative and exciting idea, but it is a milestone for my personal learning path.
What I Learned
This project taught me that small product decisions can have significant effects on the data model and user experience.
For example, “marking a book as finished” is not only a visual state. It affects:
- Which dates display it
- How its rating is calculated
- When its final summary appears
- How its journal entries are organized
- How analytics classify the activity
I also learned how important it is to design around differences between media types rather than forcing every category into the same workflow.
From a technical perspective, I gained experience with SwiftUI state management, SwiftData relationships, asynchronous metadata searches, API normalization, media imports, custom theming, analytics, and performance debugging.
Most importantly, this experience also made me realize the power of AI. Whenever a new idea comes to mind, I can turn to ChatGPT and Codex to explore what is possible and find a practical path toward bringing it to life.
What’s Next
Experience Journals
I would like to expand Aftertone beyond digital and published media by introducing an Experiences category.
This category could include:
- Concerts
- Art exhibitions
- Theatre performances
- Festivals
- Museum visits
- Other cultural events
For each experience, users could:
- Record the event name, venue, date, and location
- Select an experience type
- Add a custom cover
- Upload photos and short videos
- Write thoughts and memorable moments
- Give the experience a rating
- Create a visual album attached to that day
- Revisit the complete memory through the calendar
The first version would focus on a cover, a small photo collection, and short video clips. Cloud storage and full-resolution media synchronization could be introduced later.
Improved Sharing and Imports
I would also like to make logging even faster by expanding the iOS sharing workflow. A user could share a book, film, song, album, or podcast directly from another application and open it in Aftertone with the relevant information already prepared.
Cloud Sync and Backup
A future version could support secure synchronization across devices, data export, and personal backups while keeping the journal private by default.
Deeper Insights
Future analytics could reveal:
- Which genres create the most notes
- Reading and listening patterns
- Monthly emotional highlights
- Long-term relationships with particular creators or subjects
On a personal level, this project also made me think more carefully about how to decide whether an idea is truly worth pursuing. I am naturally curious and have new ideas every day, but generating ideas is only the beginning. The greater challenge is identifying which ones solve a meaningful problem and deserve the time, energy, and computational resources required to bring them to life.
Accessibility and Localization
I would like to continue improving Dynamic Type support, VoiceOver descriptions, contrast, keyboard navigation, and localization so that Aftertone can be used comfortably by a wider audience.
Final Reflection
Aftertone began as a simple media log, but it gradually became something more personal: a way to preserve the relationship between media, time, and memory.
It does not only record what someone watched, read, or heard.
It records the aftertone.
Log in or sign up for Devpost to join the conversation.