Take
Koder Take — Cinéfilo Social Network
- *rea:*Suite
- *ector:*Social
- *ath:*
suite/take - *ind:*B2C SaaS — audiovisual diary, ratings, lists, recommendations, social graph
Role in the stack
Koder Take is the Suite product slot for the audiovisual social network vertical — the Letterboxd / Trakt / TVTime equivalent inside the Koder Stack. It covers films, series (episodelevel), documentaries, anime, standup, reality — anything narrative on a screen. Its job in the stack is the *ersonal layer* where the user logs what they watched, rates it, builds lists, follows accounts, and answers "what should I watch tonight?".
Take is positioned at the intersection of three audiences:
| Mode | Audience | Status |
|---|---|---|
| *iary + ratings* | Casual viewers who want to remember what they watched | v1 — flagship |
| *inéfilo social* | Power users who follow critics, curate lists, write reviews | v1 — flagship |
| *ecommendation hub* | Anyone tired of "what should I watch tonight?" | v1 — flagship |
It is deliberately *eparate from Koder Cine*(which is a B2B engine for cinema operations). Take and Cine integrate via welldefined seams (Cine ticket purchase → Take diary entry) but ship, brand, and reach independently. This follows the engineproduct pattern documented in engine-product-pattern.md.
Status
*esign (Phase 0) — landing live.*Architecture ratified in take-RFC-001. Module scaffold (README.md, koder.toml) created on 20260427 with 15 tickets opened in backlog/pending/. On 20260428: product icon (TAKE2) and landing page (TAKE3) shipped — landing deployed at take.koder.dev on s.forge via koderjet, with OG image, dark/light theme, and the scorebreakdown / "similarto" / dualaudiotrailer features highlighted in the hero mockup. Implementation of the platform and capture/discover layers begins after `lockkoder-play` archives.
Primary couplings
| Module | Relationship |
|---|---|
foundation/id |
Identity — Take is a tenant in Koder ID; one Person ↔ one Take account |
foundation/billing |
Premium tier subscription (R$19,90/mo target) |
foundation/reporter |
Error reporting via KoderErrorReporter |
data/kdb |
Catalog (take.titles), ratings, diary, watch-status, lists, social graph |
data/mq |
Event bus for cross-product seams (PlayTuneCine → Take) |
data/search |
Title / person / list search backend |
data/blob |
User-uploaded list covers, profile avatars |
ai/recsys |
All recommendation logic — Take is a thin client over recsys |
ai/runtime |
Embedding computation (used by recsys for "similar to") |
core/apis |
Shared error codes, request/response shapes |
suite/play |
End |
suite/tune |
Same end |
suite/cine |
Ticket |
engines/sdk/koder_kit |
Flutter widget kit (sign |
engines/sdk/koder_web_kit |
Landing page widgets (theme toggle, etc.) |
External (non-Koder) integrations:
| Source | Purpose | Method |
|---|---|---|
| TMDb | Title metadata, cast/crew, posters, trailers | Official API |
| Trakt | Aggregate watched/rating signal for cold-start | Official API |
| JustWatch | "Where to watch" links per region | Partial API |
| Letterboxd | Personal viewing history import | Per-user CSV upload (no API) |
IMDb and Rotten Tomatoes are *ot*scraped (ToS). Their values are surfaced indirectly via TMDb's external_ids / vote_average proxy where available.
Architecture
products/horizontal/take/
├── platform/ ← Go SaaS — catalog, ratings, diary, lists, social graph
├── app/
│ ├── mobile/ ← Flutter — iOS + Android (primary surface)
│ └── desktop/ ← Flutter — Linux + Windows + macOS (companion)
└── site/ ← landing page at take.koder.devThe backend is a thin orchestrator over kdb (storage), recsys (intelligence), and external catalogs (metadata). Most "complexity" of a recommender lives in ai/recsys; Take's valueadd is the interface (multiaspect "similar to" anchoring, score breakdown UX, filter DSL) and the social graph that feeds collaborative-filtering signals.
Differentiators
What Take does that Letterboxd / Trakt / TVTime don't:
- *ulti-aspect "similar to"*— pick anchor titles AND specify what kind of similarity (action, tone, pacing, theme, archetype) with weighted sliders, plus negative anchors ("like Bourne but no torture"). Implemented as weighted projection over the recsys embedding space.
- *core breakdown, never single number*— RT / IMDb / Letterboxd / Take shown side
byside, always. Cinéfilos want divergence; this is a brand-defining choice. - *ative cross
product wiring*— Play/Tune automark watched at ≥90%; Cine ticket purchase pre-fills a diary entry; same Koder ID is the social account. - *railer in suggestions*— every recommended title surfaces its official trailer with both audio tracks (original/subtitled and dubbed) side
byside.
Interfaces
Public API surface (planned per RFC § Service boundaries):
| Subsystem | Endpoints |
|---|---|
| Catalog | GET /titles/{id}, GET /search?q=, GET /search/persons?q= |
| Ratings | POST /ratings, PATCH /ratings/{id}, DELETE /ratings/{id}, GET /users/{id}/ratings |
| Watch status | POST /watch-status, GET /users/{id}/watch-status?title_id= |
| Diary | POST /diary, GET /users/{id}/diary, PATCH /diary/{id}, DELETE /diary/{id} |
| Discover | POST /discover/feed, POST /discover/similar, POST /discover/filter, GET /discover/presets |
| Lists | POST /lists, GET /lists/{id}, POST /lists/{id}/items |
| Social | POST /follow, GET /users/{id}/feed, GET /users/{id}/profile |
| Webhooks | POST /webhooks/end-of-video (Play, Tune via mTLS) |
Phase plan
| Phase | Scope | Locks |
|---|---|---|
| 0 | RFC + scaffold + initial backlog (15 tickets) | lock-koder-take (this) |
| 1 | TMDb sync, title page, score breakdown UI | TBD |
| 2 | Capture (rating, diary, watch |
After lock-koder-play |
| 3 | Discover (feed, similar-to, filter DSL) | After Phase 2 |
| 4 | Social (follow graph, lists, reviews, Cine seam) | After Phase 3 |
| 5 | Premium tier + billing + ads + Letterboxd CSV import | After Phase 4 |
Refs
products/horizontal/take/README.md— product READMEproducts/horizontal/take/koder.toml— configtake-RFC-001— full architecture- Naming — Brand score 85 (Great)
docs/stack/engine-product-pattern.md— Take is a product; recsys is its engine