For You Recommendation
The For You tab is NeoQN’s personalized content discovery dashboard. It analyzes your reading habits locally and suggests light novels matching your taste without tracking your personal data.
Taste Profile Wizard
When you launch NeoQN for the first time, you are guided through the Taste Profile Wizard to seed your recommendations:
- Tag Selections: Select at least 3 topics of interest (such as Action, Reincarnation, Cultivation, System, or Romance).
- Harem vs. Solo MC Slider: Adjust the slider to tune your preference between Harem stories and Solo Protagonist novels. This value is mapped to your profile's
diversityScore. - Re-tuning: You can rebuild your taste profile at any time. Simply tap the Tune icon in the top bar of the For You screen to reset the wizard and choose new tags.
Recommendation Engine (Backend Specifications)
NeoQN uses a lightweight, privacy-focused recommendation engine that runs entirely on your device.
1. Data Pipeline
The recommendation pipeline reactively combines three data streams using Kotlin Flows:
- Base Profile: The genres and preferences you selected in the Wizard, stored in DataStore (
user_taste_profile). - User Bookmarks: Your bookmarked novels from the Room database. To prevent memory bloat, this is capped at the 200 most recently updated, downloaded, or read books.
- Implicit Interactions: The app tracks user actions (up to 1,000 items) like clicks, reading history, and dismissed recommendations.
2. Tag Affinities & Recency Boost
Every tag you interact with is assigned a TagAffinity consisting of a score (0.0 to 1.0) and a confidence rating (0.0 to 1.0):
- Reading Action: Reading a chapter adds a major boost (
+0.4score) to the novel's corresponding tags. - Click Action: Clicking to view a novel's details adds a minor boost (
+0.15score). - Dismiss Action: Dismissing a card adds the tags to
avoidedTags(with a0.5starting penalty) and removes them from your preferred list. - Recency Multiplier: Tags associated with novels read or downloaded within the last 24 hours receive a
1.2xrecency multiplier, prioritizing your current reading interests.
3. Candidate Indexing & Matching
- Candidate Pool: The
RecommendationPoolManagerruns background sync tasks (PluginSyncWorker) to pull page 1 listings from active provider categories (Popular, Latest, Trending) and save them to the localRecommendationCandidateEntitydatabase table. - Score Calculation: Candidates are scored using the formula:
$$\text{Score} = \frac{\sum \text{Preferred Tag Weights} - \sum \text{Avoided Tag Penalties}}{\sum \text{Total Weights}}$$
- Grouping: Candidates with a match score $> 0.4$ are grouped and presented in horizontal swipe carousels under sections like For You, Top [Genre Name], Highest Rated, and Hidden Gems.