diff --git a/docs/recommendation-architecture.md b/docs/recommendation-architecture.md index 7abc012..c2a8434 100644 --- a/docs/recommendation-architecture.md +++ b/docs/recommendation-architecture.md @@ -1,16 +1,19 @@ # Recommendation Architecture -This document defines the long-term shape of the `For You` discovery system. +This document defines the long-term shape of the `Top Pick for You` +recommendation system. The goal is to keep the current implementation simple enough to operate inside the existing Go application while preserving a clean path toward a larger recommender system. ## Current Serving Model -The current `For You` implementation is a bounded hybrid ranker: +The current `Top Pick for You` implementation is a bounded hybrid ranker: - builds weighted seeds from user watch history - uses Jikan recommendation edges as collaborative candidates +- uses watchlist-derived genres, themes, studios, and demographics as profile + search candidates - excludes anime already present in the watchlist - boosts candidates that match user taste signals - reranks the final list to reduce genre pileups @@ -19,10 +22,11 @@ The online request path stays intentionally small: 1. load recent watchlist state 2. derive strong seeds -3. fetch bounded candidate set -4. score candidates -5. rerank for diversity -6. return top results +3. build a weighted taste profile from those seeds +4. fetch bounded collaborative and profile-search candidate sets +5. score candidates +6. rerank for diversity +7. return top results ## Target System Shape diff --git a/static/schedule_board.ts b/static/schedule_board.ts index 8b70dd5..79b04c8 100644 --- a/static/schedule_board.ts +++ b/static/schedule_board.ts @@ -1,8 +1,4 @@ -import { - isJstTimezone, - normalizeWeekday, - parseHHMM, -} from "./shared/broadcast"; +import { isJstTimezone, normalizeWeekday, parseHHMM } from "./shared/broadcast"; export {}; diff --git a/templates/base.gohtml b/templates/base.gohtml index 7c5b5c0..d8a3a8a 100644 --- a/templates/base.gohtml +++ b/templates/base.gohtml @@ -74,6 +74,7 @@ + diff --git a/templates/discover.gohtml b/templates/discover.gohtml index 11f6231..3dd1e37 100644 --- a/templates/discover.gohtml +++ b/templates/discover.gohtml @@ -34,17 +34,6 @@ - {{/* For You Section */}} -
-
-

For You

- Based on your watchlist -
-
- {{template "discover_skeleton"}} -
-
- {{/* Upcoming Section */}}
@@ -85,30 +74,6 @@
{{end}} -{{define "discover_row"}} -
- {{range .Animes}} - {{template "anime_card" dict "Anime" . "WithActions" true "IsWatchlist" (index $.WatchlistMap .MalID)}} - {{end}} -
-{{end}} - -{{define "discover_for_you_section"}} -{{if gt (len .Animes) 0}} -
-
-

For You

- Based on your watchlist -
-
- {{range .Animes}} - {{template "anime_card" dict "Anime" . "WithActions" true "IsWatchlist" (index $.WatchlistMap .MalID)}} - {{end}} -
-
-{{end}} -{{end}} - {{define "discover_skeleton"}}
{{range (seq 8)}} diff --git a/templates/index.gohtml b/templates/index.gohtml index cacebe8..1e04ecb 100644 --- a/templates/index.gohtml +++ b/templates/index.gohtml @@ -5,6 +5,10 @@
{{template "continue_watching_skeleton"}}
+ +
+ {{template "top_pick_for_you_skeleton"}} +
{{end}}
@@ -36,6 +40,37 @@ {{end}} +{{define "top_pick_for_you_section"}} + {{if gt (len .Animes) 0}} +
+
+

Top Pick for You

+ + Explore more + + +
+
+
+ {{range .Animes}} +
+ {{template "anime_card" dict "Anime" . "WithActions" true "IsWatchlist" (index $.WatchlistMap .MalID)}} +
+ {{end}} +
+ + + + +
+
+ {{end}} +{{end}} + {{define "catalog_section"}} {{if eq .Section "Continue"}} {{if .ContinueWatching}} @@ -61,6 +96,26 @@
{{end}} +{{define "top_pick_for_you_skeleton"}} +
+
+
+
+
+
+
+ {{range (seq 6)}} +
+
+
+
+
+ {{end}} +
+
+
+{{end}} + {{define "continue_watching_skeleton"}}

Continue Watching