Inspiration
FaZe Clan built one of the biggest fanbases in gaming, but streams today are mostly passive, there's not that much interaction. Fans watch, chat scrolls by, and then they leave. Many longtime fans from the trickshot era have drifted away entirely. We wanted to make a FaZe stream something you take part in: predict the play, have something riding on it, and get a real shot at talking to the streamer.
What it does
FaZeTime is a Chrome extension that adds a live wagering panel to FaZe-affiliated Twitch streams. A Gemini-powered agent watches the stream, proposes two-sided bets on what's about to happen ("Does he win the 1v3?"), and resolves them when the moment plays out. Every bet also earns points toward a raffle for a real FaceTime with a FaZe member.
| Feature | What it does |
|---|---|
| Live events | AI-proposed bets appear on the every viewer's panel above the chat with the premise, total volume and a prefilled wager slider. Users see what they stand to win before placing a bet in two clicks. |
| Pooled payouts | Wagers go into a shared pool. Winners split it in proportion to their stakes, minus a small platform fee. |
| FaceTime raffle | Wagering, watch time, daily streaks, and invites earn points. Each stream ends with a raffle where your odds are your points divided by all points in that stream. |
| AI bookie | Opted-in users get a Chert text when FaZe goes live. If they're away during a big moment, an AI bookie with an ElevenLabs voice calls to tell them what's happening. |
| Wallet tab | Balance, open bets, history and current raffle multiplier. |
| Redeem tab | Trade points for FaZe merch and cameo coupon codes. |
| Win-back | Longtime fans on FaZe's email lists get an OG badge and a points head start when they return. |
FaZeTime turns watching into playing. Every stream is a reason to show up, stay, and bring friends.
How we built it
| Piece | Role |
|---|---|
| Chrome extension (MV3, React + TypeScript) | Injects the FaZeTime panel above Twitch chat with a resizable split and a toggle next to the chat Collapse button |
| Gemini | Watches and listens to the stream, tracks game state, proposes events, critiques them and resolves outcomes |
| Node.js server | Ingests the stream, runs the agent pipeline, and pushes events and results over WebSockets |
| Postgres | Accounts, append-only ledger, pools, points, raffle entries and redeem codes |
| Chert | iMessage alerts and AI bookie FaceTime calls |
| ElevenLabs | The AI bookie's voice |
| Twitch API | Live status and channel detection for FaZe-affiliated streamers |
Fair by design: payouts come only from the pool, so the platform never takes the other side of a bet. Events the agent isn't confident about are voided and refunded rather than guessed. Every ledger entry is idempotent, so nothing pays twice. Alerts and calls only go to users who opted in. For the demo, wallet balances are simulated and no real payments are processed.
Methodology
Architecture
Chrome extension (Twitch panel, React)
| WebSocket
v
+----------------------------------------------------------+
| Node.js server |
| - Stream ingest - Agent pipeline - Pool engine |
+-------+-------------------+-------------------+----------+
| | |
v v v
Gemini Postgres Chert + ElevenLabs
perceive, state, ledger, pools, iMessage alerts,
propose, critique, points, raffle, AI bookie calls
resolve redeem codes
^
|
Twitch HLS stream (audio + sampled frames)
1. Stream ingest (ingest.ts)
- Pulls the live Twitch HLS feed and splits it into short segments of audio and sampled video frames.
- Segment length is tuned for low latency, so events reach viewers before the moment happens.
2. Perception and game state (perceive.ts, state.ts)
- Gemini transcribes the streamer's audio and reads the screen: game, mode, score, round, players alive and HUD.
- Each perception updates a structured JSON game state, so the agent reasons over the whole match rather than a single frame.
3. Event proposer (proposer.ts)
- Proposes binary events from the current game state. Each event must be observable on screen, resolve within a set window, not already be decided, and not repeat a recent event.
- Output is validated against a schema, and failed validations are retried once with the error.
4. Critic (critic.ts)
- A second Gemini pass checks every proposal against the rules and the current state, then approves, rewrites or rejects it.
- Only approved events are sent to users.
5. Resolver (resolver.ts)
- Watches the segments after an event closes and settles it.
- Settles only above a confidence threshold. Below it, the event is voided and every wager refunded.
6. Pool engine and ledger (pool.ts, ledger.ts)
- Wagers lock when the event closes. Payouts are parimutuel: winners split the pool by stake after the platform fee.
- Edge cases are handled: if nobody bet on the winning side, everyone is refunded.
- The ledger is append-only and idempotent, so every payout traces back to the pool.
7. Points and raffle (raffle.ts)
- Points come from wager volume, watch time, daily streaks and referrals.
- At the end of each stream, a winner is drawn weighted by each user's share of total stream points.
8. Outreach (outreach.ts)
- Chert sends iMessage alerts when a FaZe streamer goes live.
- Users who aren't active in the extension during big events get an AI bookie call voiced by ElevenLabs.
9. Design
The panel uses FaZe's red and black and sits above Twitch chat as if it were part of Twitch. A draggable divider splits the chat area, and a toggle sits next to the Collapse button. Bet cards show the premise, volume and potential winnings at a glance. The raffle multiplier is always visible, and a "X% odds to win a FaceTime with FaZe" line updates as you bet.
Novelty
- An AI that runs the betting, not just watches. The agent understands the stream, writes the bets and settles them with no human host.
- Propose, critique, resolve. Separate agents check each other, so bad or unresolvable bets never reach users.
- Honest uncertainty. When the resolver isn't sure, it voids and refunds instead of guessing.
- A prize money can't buy. Every bet is a raffle entry for real time with a FaZe member.
- Brings people back. AI bookie calls, live alerts, streaks and win-back badges bring viewers back to the stream.
- The house never bets. Parimutuel pools mean every payout comes from other players' stakes.
Challenges we ran into
- Getting the AI to see the stream accurately. Single-frame analysis produced bad bets, such as betting on a round that had already ended. Adding the game-state tracker and critic pass fixed most of these.
- Resolving bets fairly. A wrong resolution costs users money, so we added confidence thresholds and automatic void-and-refund.
- Latency. Events have to arrive before the moment. We tuned segment length and pipelined perception, proposal and critique to keep the delay around [X] seconds.
- Injecting into Twitch's UI. Twitch re-renders often, so the panel injection had to survive layout changes and channel switches.
- Making the math always balance. We tested the pool engine against edge cases so the ledger always balances.
Accomplishments that we're proud of
- An agentic pipeline that watches a live stream and proposes real, resolvable bets on its own
- A critic and resolver that keep bad bets away from users
- A panel that feels native to Twitch, with two-click wagering
- A ledger and pool engine where every payout traces back to the pool
- A full loop: AI-proposed event, wager, AI resolution, payout and raffle entry
Results
| Area | Result |
|---|---|
| Event quality | [X] of [Y] proposed events passed the critic. Rejected ones were mostly [already decided / not observable]. |
| Resolution | [X] of [Y] events resolved correctly; low-confidence events were voided and refunded |
| Latency | Events reached the panel about [X] seconds after the moment was detected |
| Ledger | Pool payouts always balanced across [N] test rounds, including edge cases |
What we learned
- Agents work much better with structured state and a critic than with one large prompt
- In a live product, voiding a bet is better than a confident wrong answer
- Engagement features like FOMO, streaks and referrals matter as much as the core feature
What's next for FaZeTime
- Licensing in each region we operate, 21+ age and identity verification, and geofencing
- Deposit and loss limits users can set themselves
- Opt-in controls for texts and calls, with quiet hours and frequency caps
- A licensed payment processor for deposits and withdrawals
- More games and streamers across FaZe's roster
- A streamer dashboard showing live engagement and featured events
- Sponsored events brands can buy
