Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
9678a62
feat: Add media discovery cold-start demo with TikTok-style engagemen…
bencium Dec 6, 2025
ea888aa
refactor: rename demo.html to index.html for easier serving
bencium Dec 6, 2025
8bc1db5
feat: Expand demo to 8 genres with visual leaderboard
bencium Dec 6, 2025
077c0e2
fix: Update Unsplash image URLs with verified working images
bencium Dec 7, 2025
2a47abe
feat: Add premium Netflix-style animations, remove profile reveal
bencium Dec 7, 2025
796c3c2
fix: Replace broken comedy thumbnail with cinema/theater image
bencium Dec 7, 2025
a8d2b96
Merge branch 'agenticsorg:main' into main
bencium Dec 7, 2025
c46dcba
feat: Add Netflix-style cold-start discovery UI with premium animations
bencium Dec 7, 2025
836422a
fix: Make search bar border animation persistent with focus intensity
bencium Dec 7, 2025
6a340f2
refactor: Simplify to 3-step flow, add time-saved badge to hero
bencium Dec 7, 2025
1e97b62
chore: Add Netlify config for deployment
bencium Dec 7, 2025
cb705c8
feat: Connect cold-start genre selections to content filtering
bencium Dec 7, 2025
5b90f37
docs: Expand PRD with comprehensive product strategy
bencium Dec 7, 2025
e0cfd21
fix: Remove genre labels from discovery grid for pure visual profiling
bencium Dec 7, 2025
d554db0
feat: Portrait thumbnails (9:16) and Skip/Recommendations button
bencium Dec 7, 2025
a043b9c
feat: Add disclosure banner when user skips or doesn't select genres
bencium Dec 7, 2025
b12e7b4
feat: Large centered number badges on thumbnail selection
bencium Dec 7, 2025
6ecf630
docs: Add README and LinkedIn post for hackathon
bencium Dec 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
527 changes: 128 additions & 399 deletions CLAUDE.md

Large diffs are not rendered by default.

218 changes: 218 additions & 0 deletions apps/media-discovery/LINKEDIN_POST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
# LinkedIn Post: Media Discovery Platform

---

## POST 1: Marketing-Focused (Hook + Story)

---

**45 seconds.**

That's how long it takes to understand your movie taste.

Not 45 minutes of questionnaires.
Not weeks of watch history.
Not scrolling paralysis wondering what to watch.

---

We just built something for the TV5MONDE Global Hackathon that challenges how streaming platforms think about the cold-start problem.

**The insight:** Traditional platforms ASK you what you like. We OBSERVE.

When you land on a new streaming service, you're typically faced with:
- "Rate these 20 movies" (homework)
- "Select your favorite genres" (guessing)
- Generic recommendations until you've watched enough

Our approach: Show you 8 visual thumbnails. No labels. No text. Just images.

Then we watch what YOU watch:
- Where does your cursor slow down?
- Which image do you hover on longest?
- What do you click first, second, third?
- What do you scroll past quickly?

In under 60 seconds, we've built a behavioral profile that feels like magic.

The timer runs live on screen. Users see exactly how fast it happens.

"12 seconds to profile you. Not 45 minutes."

---

**Why this matters for TV5MONDE:**

Streaming is a brutal market. Netflix has 200M+ subscribers worth of data. How does a niche francophone platform compete?

Not on content volume. Not on recommendation algorithm sophistication.

On SPEED and RESPECT.

"We respect your time" is a brand identity, not a feature. Features get copied. Positioning persists.

---

**Technical highlights for the builders:**

- Real-time behavioral signal capture at 60fps
- Zustand state management for millisecond-precision tracking
- Weighted scoring: return visits (3x), clicks (2.5x), micro-hesitations (2x)
- Next.js 15 with App Router
- Portrait thumbnails (9:16) for visual impact
- TMDB API for content data

The prototype is live. The thesis is proven.

---

Huge thanks to the Agentics Foundation London team for the sprint.

What's next? AgentDB integration for persistent profiles. Visual similarity search with CLIP embeddings. Emotional arc matching.

The cold-start problem is solved. Now we make it continuous.

---

#AI #Hackathon #Streaming #ProductDesign #UX #TV5MONDE #AgenticsFoundation

---

## POST 2: Technical Deep-Dive

---

**We solved the streaming cold-start problem in 45 seconds. Here's the technical breakdown.**

The TV5MONDE Global Hackathon challenge: How do you personalize content for a brand new user with zero watch history?

Traditional approaches:
- Questionnaires (high friction, low completion)
- Collaborative filtering (needs existing data)
- Content-based filtering (generic until trained)

Our approach: **Behavioral micro-signal capture.**

---

**The Architecture:**

```
Browser Events (60fps)
Event Debounce (16ms)
Signal Processor (weighted)
Profile Builder (genre ranking)
Personalized Feed
```

**Signals we capture:**

| Signal | Weight | Why |
|--------|--------|-----|
| Return visit | 3.0x | User came BACK to this thumbnail |
| Explicit click | 2.5x | Conscious selection |
| Micro-hesitation | 2.0x | Cursor slowed >500ms |
| Hover duration | 1.5x | >1000ms sustained attention |
| Skip velocity | -1.5x | Rapid scroll = rejection |

---

**The Key Insight:**

No genre labels during profiling. Pure visual reaction.

System 1 thinking (fast, intuitive) is 100x faster than System 2 (reading, analyzing).

When you see a dark, moody thumbnail vs. a bright, colorful one—your cursor tells us everything before you consciously decide.

Labels are revealed AFTER profiling. Creates an "aha moment": "The system understood me without asking."

---

**Stack:**

- Next.js 15 (App Router)
- Zustand (state with immer)
- Tailwind CSS
- TMDB API
- Framer Motion
- Canvas-confetti (because celebrating profile completion matters)

**Key React patterns:**

- `performance.now()` for millisecond-precision timestamps
- `requestAnimationFrame` for smooth timer updates
- `mousemove` velocity tracking via position deltas
- Debounced hover events to prevent signal noise

---

**What surprised us:**

The TIMER is the product.

Showing users exactly how fast profiling happens—"0.000s" counting up in real-time—proves the value proposition live. No marketing claim needed. They experience it.

---

**Phase 2 roadmap:**

1. **AgentDB** — Vector persistence for behavioral embeddings
2. **CLIP embeddings** — "More like this" via visual similarity
3. **Emotional arc matching** — Narrative trajectory recommendations
4. **Multi-device signals** — TV (dwell time), Mobile (swipe velocity)

---

The cold-start problem is a data problem. We solved it by creating data faster.

Not asking. Observing.

Code: github.com/agenticsorg/hackathon-tv5

---

#Engineering #AI #MachineLearning #Streaming #NextJS #React #Hackathon

---

## POST 3: Short Version (Quick Hook)

---

Traditional streaming platforms: "Rate these 20 movies to get started"

Us: *watches where your cursor hovers for 45 seconds*

"Here's your personalized feed."

---

Just shipped a behavioral profiling system for the TV5MONDE hackathon.

No questionnaires. No watch history needed. Pure micro-signal capture.

- Hover duration
- Click sequence
- Cursor velocity
- Return visits

The timer runs live. Users watch their profile being built in real-time.

12 seconds average. Not 12 minutes.

Cold-start problem → solved.

---

#Hackathon #AI #UX #Streaming

---
169 changes: 169 additions & 0 deletions apps/media-discovery/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# Media Discovery Platform

**TV5MONDE Global Hackathon Entry** | Agentics Foundation London Team

> 45 seconds to profile you. Not 45 minutes.

## The Problem

Every streaming platform faces the **cold-start problem**: new users land on a sea of content with no personalization. Traditional solutions ask users to fill out questionnaires (5-10 minutes) or wait for weeks of watch history to accumulate.

**The result?** 40% trial abandonment. 20+ minutes of frustrated browsing. Users default to rewatching safe favorites instead of discovering new content.

## Our Solution

**Behavioral observation instead of questionnaires.**

We profile users in under 60 seconds by observing micro-behaviors as they browse a visual grid—no questions asked. The system captures:

- Hover duration on thumbnails
- Click sequence and timing
- Mouse velocity (skip patterns)
- Return visits to the same item
- Micro-hesitations (cursor slowdowns)

Traditional platforms ask. We observe.

## User Flow

```
STEP 1: ENTRY STEP 2: DISCOVERY STEP 3: RESULTS
───────────── ───────────────── ───────────────

"Discover Your 8 visual thumbnails "Curated for You"
Next Watch" NO LABELS - pure visuals
Personalized feed
[Start Exploring] ────────► User browses naturally ──────► with genre labels
Timer: 0.000s visible NOW revealed

System captures: Top 2 genres
• Hover patterns highlighted
• Click order (1, 2, 3)
• Attention signals "12s to profile you,
not 45 minutes"
```

### Key Design Decisions

1. **No labels during profiling** — Users react to visuals (System 1 thinking), not text
2. **Labels revealed in results** — Creates an "aha" moment: "The system understood me"
3. **Live timer** — Proves the speed claim in real-time
4. **Large centered numbers** — Clear visual feedback when thumbnails are selected

## Technical Architecture

### Signal Capture

```
Browser Events (60fps)
┌──────────────────┐
│ Event Debounce │ (16ms batching)
└────────┬─────────┘
┌──────────────────┐
│ Signal Processor │ (weighted scoring)
└────────┬─────────┘
┌──────────────────┐
│ Profile Builder │ (genre ranking)
└────────┬─────────┘
┌──────────────────┐
│ Personalized │
│ Recommendations │
└──────────────────┘
```

### Signal Weights

| Signal | Weight | Rationale |
|--------|--------|-----------|
| Return visit to same item | 3.0x | Strongest intent—user came back |
| Click (explicit selection) | 2.5x | Conscious commitment |
| Micro-hesitation (>500ms) | 2.0x | Subconscious interest |
| Hover duration (>1000ms) | 1.5x | Sustained attention |
| High scroll velocity past | -1.5x | Active rejection |

### Tech Stack

- **Framework:** Next.js 15 (App Router)
- **State:** Zustand
- **Styling:** Tailwind CSS
- **Content API:** TMDB
- **Animations:** CSS keyframes + Framer Motion
- **Deployment:** Netlify / Vercel

## Features Built

| Feature | Purpose |
|---------|---------|
| 3-screen flow (Entry → Discovery → Results) | Core user journey |
| 8-genre visual grid with portrait thumbnails | Profiling surface |
| Real-time hover/click tracking | Behavioral signals |
| Mouse velocity detection | Skip pattern analysis |
| Live millisecond timer | Value prop demonstration |
| Large centered number badges (1, 2, 3) | Clear selection feedback |
| Personalized recommendations | Proof that profiling works |
| Admin widget with leaderboard | Demo tool for judges |
| Skip/Continue flow handling | Graceful degradation |
| Disclosure banner for skipped users | Transparency |

## Recent Development (Last 8 Hours)

- Netflix-style premium animations with card hover effects
- Portrait thumbnails (9:16 aspect ratio) for visual impact
- Skip/Recommendations button with animated gradient border
- Genre labels removed from discovery grid (pure visual profiling)
- Disclosure banner when user skips or doesn't select genres
- Large centered number badges on thumbnail selection
- Confetti celebration when profile is ready
- Conditional hero messaging based on profiling completion

## Running Locally

```bash
cd apps/media-discovery
npm install
npm run dev
```

Open [http://localhost:3000](http://localhost:3000)

## Environment Variables

```env
TMDB_API_KEY=your_tmdb_api_key
```

## Success Metrics

| Metric | Target |
|--------|--------|
| Time-to-profile | < 60 seconds |
| Speed vs. questionnaires | 95% faster |
| Profile resonance | 80%+ "this feels right" |
| Feed engagement | First click within 10 seconds |

## Phase 2 Roadmap

1. **AgentDB Integration** — Persistent behavioral profiles across sessions
2. **Visual Similarity Search** — CLIP embeddings for thumbnail matching
3. **Emotional Arc Matching** — Story trajectory recommendations
4. **Multi-device Support** — Smart TV (dwell time), Mobile (swipe velocity)

## Team

**Agentics Foundation London** — [london.agentics.org](https://london.agentics.org)

## License

MIT

---

*Powered by [TMDB](https://www.themoviedb.org/) | Built with [ARW](https://arw.dev)*
Loading