Inspiration
KICK chat moves faster than any streamer can read. Viewers ask questions, repeat requests, hype up moments, react with emotes, and signal generosity through gifts or sub-gifter activity. The hard part isn't counting messages — it's deciding what to do while the audience is still there. We kept coming back to one question: what is chat trying to make happen right now, and what safe action should the streamer take next?
What it does
KICK WinWin turns live chat into a full engagement loop across three stages:
- Before stream — a research/search view (word cloud, TL;DR summaries, gifter cues) helps the creator prepare topics and interaction seeds.
- During stream — on
/live, KICKWIN watches chat and gift-like signals in real time, detects lulls, hype spikes, repeated requests, questions, and gifter moments, then suggests a safe action (a question, a poll/quest, a celebration) — always kept behind streamer approval before it goes public. Viewers can shape the moment through Community Quest votes, gestures, and a collaborative canvas. - After stream — clicking End live opens an instant Stream Summary
(estimated gift revenue, unique chatters, gift-driving supporters, a
recap-style Event Intelligence timeline, and one best next-stream topic).
The full
/stream-recapsview goes deeper: Topic Map, Gift Drivers, Audience Intelligence, high-frequency questions, and a Next-Stream Strategy Brief.
How we built it
- Frontend: Next.js 16, React 19, TypeScript — a KICK-style creator and
viewer UI (
/live,/stream,/research,/stream-recaps,/demo). - Backend: FastAPI + Pydantic for deterministic live/recap analysis, with a LangChain-ready insight service for optional Claude enrichment.
- Real Kick integration: a signed webhook receiver (
POST /webhooks/kick) verifies Kick's RSA-SHA256 signature against Kick's published public key, rejects replayed events outside a 5-minute window, de-duplicates bymessage_id, and persists realchat.message.sent/kicks.giftedevents — optionally into Supabase, with a local JSON fallback so the demo stays reliable offline. - OAuth2: standard Kick login (authorization-code flow) plus a client-credentials app token used to subscribe channels to webhook events.
- Deterministic rules keep the whole demo reliable without an LLM key; an optional AI enrichment path adds richer insight when one is configured.
Challenges we ran into
- Keeping the audience's actual signal (questions, hype, gifting) legible inside a chat stream that moves far faster than any human can read.
- Verifying real webhook signatures correctly (RSA-SHA256 over
message_id.timestamp.raw_body) and handling Kick's redelivery/replay behavior without dropping or duplicating events. - Being disciplined about real vs. simulated data — every proxy metric (e.g. "gift activity proxy", "returning audience proxy") had to be labeled honestly instead of implied as ground truth.
- Presenting a two-sided (streamer + viewer) story in a single demo window
without real cross-device state sync, which we solved with a dedicated
/demosplit-screen page sharing one React state tree.
What we learned
- Webhooks and OAuth solve two different problems (event delivery vs. authorization) and shouldn't be conflated — but both matter for a real platform integration.
- A hackathon demo is stronger when every simulated mechanic is clearly labeled rather than implied to be live multi-user data.
- Small, fast, honestly-scoped features (a 3-second gesture prediction window, a fast collaborative canvas reveal) demo better under a 5-minute clock than slower, more "realistic" versions of the same idea.
Accomplishments that we're proud of
A real, signature-verified Kick webhook pipeline feeding a full before/ during/after engagement loop — not just a mockup, but a system that can actually receive and act on live Kick chat data.
What's next for KICK WinWin
Wire the pre-stream research view directly into the live signal detector, extend gift-driven topic detection with more granular Event Intelligence drilldowns, and move from local JSON fallback to Supabase as the default store for production reliability.
Built With
- nextjs
- python
- typescript

Log in or sign up for Devpost to join the conversation.