Cover art
- Added high-quality AniList cover art on Watchlist cards, public profiles, detail screens, and related anime
- Added LRU cache for AniList covers with a maximum of 200 records and `lastAccessedAt` tracking
- Added AniList cover pre-warming when opening the app and after adding anime
- Added cover pre-loading when loading public profiles
- Added AsyncStorage cache for AniList covers with automatic sweep on startup
- Fixed missing cover art on related anime cards
- Added shimmer placeholder while cover art loads for smoother transitions
Related anime
- Added related anime on detail screens, including prequels, sequels, and spin-offs
- Applied prequel detection to Genre Discovery results
- Added first-unwatched-series-entry recommendations in For You and Roulette
- Added progressive per-card loading in Genre Discovery
- Added missing metadata when adding anime from related entries
Notifications
- Added in-app notification panel for sequel announcements and alerts
- Added swipe-to-dismiss for individual notifications
- Added notification count limit and 30-day pruning for old records
- Added FCM push notifications for sequel announcements
- Added server-side sequel announcement detection and push delivery
- Added startup route probe for notification bell endpoints
- Updated notification text
- Fixed layout issues to display all notifications correctly
Sequel notifications
- Improved sequel notifications so users are not notified about sequels they already have in their collection, regardless of status
- Fixed sequel notification timing so alerts are sent at the user’s configured notification time instead of being triggered by server restarts
- Sequel notification delivery now uses the same minute-based scheduler as airing reminders, with a 5-minute grace window for short server downtime
- Improved sequel notifications to only alert when a sequel has useful airing information, such as a known season/year, premiere date, or currently airing status
- Sequel alerts no longer trigger for finished sequels or related entries with no airing information
- Added smarter sequel airing tracking so users can be notified when a sequel moves from unknown timing to a confirmed season, date, or airing state
- Planning entries can now still receive sequel airing updates when premiere information becomes available
- Updated sequel notification copy to use specific airing messages instead of generic “has been announced” wording
Notification drawer
- Fixed notification drawer gestures so notification cards can now be dismissed with a horizontal swipe
- Added drag-to-close support for the notification drawer using the top handle and header area
- Improved notification drawer animations with smoother native sheet and backdrop transitions
- Fixed gesture conflicts between notification scrolling, swipe-to-dismiss, and drawer drag-to-close
- Fixed modal layout on Android
- Adjusted modal padding to accommodate safe area insets
- Adjusted bottom sheet spacing for better visibility on mobile devices
Metadata & filters
- Added metadata chips on private Watchlist cards: Format, Season/Year, Airing Status, Studio
- Added metadata chips on public profile cards and detail modal
- Added metadata fields on the detail screen with a full-width layout below the hero image
- Applied the same layout to the Edit screen
- Added Studio filter to the Watchlist filter panel
- Tapping a studio chip now filters the Watchlist
- Added Format, Season/Year, and Airing Status filters to the Watchlist
- Added status accent border color on Watchlist and public profile cards
- Made ratings visible on public profile grid cards
- Added genre tags to public profile list cards
- Added missing anime metadata to public profiles
Add anime & completed dates
- Improved how anime is added when marked as Completed
- Added Completed on date selection when adding anime as Completed
- Fixed Completed anime added manually or through MAL import sometimes missing their completion date
- Completed entries now always store a completion date, so the Edit screen shows the correct Completed on value
Stats
- Added Studios section on the Stats screen with top 3 studios and a show-more toggle
- Limited studio display to top 3 with expandable button
- Added a monthly stats overview below the main stats grid, with month navigation and quick chips for Completed, Episodes, Hours, and Top Genre
- Added a yearly Wrapped card showing the current year’s Completed anime, Episodes, Hours, top-rated anime, dominant genre, and most active month
- Monthly and yearly stats now use completion dates, so completed anime history is reflected more accurately
Profile
- Redesigned Profile with a cleaner 4-tab layout for Profile, Settings, Privacy, and Account
- Moved profile settings into clearer sections, including anime titles, themes, notifications, tags, public profile, security, support, legal, signed-in devices, and Danger Zone
- Improved Profile organization while keeping existing flows like MAL import, Manage Tags, session details, and account deletion
Anime cards & search
- Added rating prompt, synopsis display, and clear search functionality
Visuals & layout
- Fixed gradient display on different platforms for the app
- Improved gradient rendering by ensuring unique IDs
- Fixed visual alignment issues on Android by adjusting button styling
Bundling & performance
- Bundled OG-image Inter fonts locally without relying on Google CDN
- Reduced API server bundle size from 8.5 MB to 1.43 MB
- Added bundle size guard with a 3 MB limit
- Audited dependencies across artifacts for devDeps vs deps
Infrastructure
- Added safety checks in database migrations
Device sessions & security
- Added signed-in device management with a list of active sessions and device details
- Added approximate location display for each signed-in device
- Added first sign-in date for each device
- Added per-device session table where each row represents one device
- Immediately signs out other devices after password changes using `token_version`
- Added hashed refresh tokens in the database to reduce risk after a database leak
- Added constant-time token comparison in `verifyAccessToken`
- Added background cleanup for expired session rows
- Limited null-deviceId sessions per user
- Fixed duplicate session rows for the same device
Password reset & deep links
- Added deep links so password reset opens the installed app using Universal Links and App Links
- Added `aegami://auth/reset-password` and `https://aegami.com/reset-password`
- Added ability to open the Aegami app from the password reset web page
Profile & account
- Added Support contact card on Profile with prefilled email details including app version and device info
- Added in-app Privacy Policy and Terms of Service as native screens
- Opened external links through the in-app browser
- Added show/hide password toggle on Profile
- Added About the Author page and profile link
- Opens About the Author page in the system browser
Title language
- Added English anime title support with a new `title_english` field for every anime
- Added option to show English titles as primary titles or subtitles based on user preference
- Added Title Language setting: Original / English
- Added setting to hide English subtitles
- Applied English title preference across Watchlist, Dashboard, MAL search, Discover, public profiles, and Add/Edit screens
- Added dual-title search on the Watchlist tab
- Applied title preference to airing reminder notifications
Preferences & themes
- Added cloud sync for preferences: theme, light/dark mode, and title language
- Added preference sync when the app returns to foreground
- Pushes preferences on sign-in: mode choice, title language, and accent theme
- Added Light mode for all themes with a Light / Dark / System toggle
- Fixed Light mode on remaining screens
- Android navigation bar now matches the active theme color
- Status bar background now matches the navigation bar
Watchlist
- Added collapsible filters that combine genres, sorting, tags, and badges into one Filters panel
- Pinned filters to the top while scrolling
- Added expand/collapse animation for the filter panel
- Added one-tap Clear button in pinned filter summary and Discover filter bars
- Added status badge on every Watchlist card; tapping it filters the list
- Added quick status switch buttons on anime cards
- Added undo snackbar after quick status changes
- Added quick Rewatch button on completed cards
- Added undo support for the Watchlist quick Rewatch button
- Added private watch links for streaming services per anime
- Added streaming service detection and native-app deep links
Metadata
- Added metadata fields: Year, Season, Format, Studio, Episode Duration, Airing Status
- Imported MAL demographics and themes as tags when adding anime
- Added studio autocomplete on Add and Edit screens
- Added missing genre options
Discover & public profiles
- Added People tab in Discover and moved public profiles there
- Added filtering, sorting, searching, and genre filters for public profiles
- Added URL persistence for filters, sorting, search, and genres on public profiles
- Added friendly error screen for invalid `/public/` URLs
Guest mode
- Added Guest mode with demo collection for signed-out users and guest banner on Home
Web & SEO
- Added `/about` landing page with hero, features, screenshots, Google Play QR code, and FAQ
- Added `/delete-account` web page for Google Play compliance
- Moved `/privacy` and `/terms` pages to the Express server
- Added prerendering for `/about`, `/privacy`, and `/terms` for SEO
- Added `/changelog` page with caching and in-app link
- Fixed white strip at the bottom of `/about` on mobile web
Google Play & builds
- Added Google Play feature graphic at 1024×500
- Added separate preview build ID for Google Play publishing
- Enabled Android edge-to-edge to fix Play Console deprecation warning
Notifications
- Added delivery result tracking for airing reminder notifications
Fixes
- Fixed false “Not signed in” alert when changing password
- Added backend tests for `POST /api/auth/change-password`
- Fixed rank-up toast triggering on app load
- Fixed native fullscreen splash on Android
Genre badges & achievements
- Added genre badges on public profiles: Bronze, Silver, Gold
- Genre badges can now be tapped to filter a profile by that genre
- Added badges to the user’s own collection
- Added progress bar toward the next genre achievement level
- Added toast notification when a genre badge tiers up
- Added tier legend on public profiles
Rewatch
- Added Rewatch support with rating after completion
- Automatically opens rating after finishing a rewatch
- Added add, edit, and delete support for past rewatch records
- Added rewatch history on the anime detail screen
- Added calendar-based rewatch date picker
- Added quick “Log a past rewatch” shortcut for completed anime
- Added undo after “End rewatch without rating”
Watch history
- Added completion date for first-time watches
Discover
- Added Seasonal tab in Discover for current-season anime
- Added season picker with year, season, genre filter, and result count
- Added Explore tab with genre filter chips and result count
- Added recently added public profiles to Discover
Watchlist & discovery cards
- Added synopsis previews on Watchlist cards with tap-to-expand
- Added synopsis previews to Discover Seasonal and Explore cards
Public profiles & SEO
- Added public profile discovery directory
- Added SEO support for public profiles: robots.txt, sitemap.xml, JSON-LD
- Redesigned OG link preview image
Fixes
- Fixed genre pill clipping, Android filter chips, and the white strip on the Add/Edit screen
Rebrand & visual identity
- Renamed the app from Nimori to Aegami across UI, deep links, emails, and OG previews
- Added new `artifacts/aegami` directory structure
- Added new artwork, splash screens, and launcher icons for the Aegami visual identity
- Added themed splash screens with animations, particles, and wordmark based on the selected theme
- Improved splash transition with a smooth fade instead of a hard cut
- Added per-theme logo support in the app and on public profiles
- Enlarged the login screen logo to 280×280
Domain & email
- Migrated the project to the custom domain aegami.com
- Verified the domain for password reset email delivery
Notifications
- Added Firebase Cloud Messaging push notifications
Build & infrastructure
- Added EAS build configuration for Android development builds
- Added CI typecheck workflow
- Standardized the codebase on `zod/v4`
- Added workspace-wide typecheck validation
- Added database migrations on API server start and publish
- Added automatic recovery from database outages
Fixes
- Fixed public profile rewatch badges, synopsis, and reviews
- Fixed link previews on development URLs
Themes & personalization
- Added 8 anime-inspired color themes: Shinigami (dark purple), Seiran (blue), Senku (green), Kurenai (red), Raijin (yellow), Kitsune (orange), Sakura (pink), and Kage (black)
- Added cloud sync for the selected theme across devices
Watchlist
- Added custom anime tags, shown directly on anime cards
- Added Watchlist sort chips: Recent, A-Z, Rating, MAL
- Added ascending/descending sort direction toggle
Authentication & security
- Added a secure token system with expiring access tokens and refresh tokens
- Added forgot password and email-based password reset
- Added Resend SMTP configuration for real emails
- Invalidated other device sessions after password changes
Public profiles
- Added dynamic OG images for shared profiles
- Added public profiles that work without signing in through the server-side API
- Added Share Profile button to profile settings
Fixes
- Fixed missing database columns for themes and tags