Inspiration

Creators today heavily rely on centralized platforms for monetization, which often leads to high fees, trapped funds, delayed payouts, and limited access for smaller creators. At the same time, fans who really want to directly support their creators face friction in both the transaction flow and the overall experience.

I wanted to tackle this by building...

TipMNEE

A Chrome Extension that lets viewers tip creators directly on YouTube using MNEE. The key problem is that many creators don't have a wallet set up yet, so TipMNEE has an escrow smart contract. If creators hasn't registered or have a wallet, the tips are still sent on-chain and held under a hash of their YouTube channel_id until the creator signs up. Once they do, they're able to verify their ownership of the channel through Google's OAuth 2.0 and then register their wallet, letting them claim/withdraw all previously escrowed tips + messages without losing any support from earlier viewers.

What it does

As the name suggests, TipMNEE injects "one-click tipping" onto YouTube with an escrow fallback so creators never miss out on support.

  • Tip any YouTube creator with MNEE directly from the video page
  • Creators are able to withdraw their tips anytime they want
  • If the creator is unregistered, tips go to an escrow smart contract keyed by keccak256(channel_id) so funds are still on-chain and attributable.
  • The system supports tip messages and a basic earnings / tips history view.

How I built it

  1. Smart Contract Layer (Solidity) Deployed a TipEscrow contract on Sepolia to hold MNEE (ERC-20). Tips are keyed by keccak256(channelId) so creators can receive tips before registering. Added an EIP-712 claim flow: the backend signs a claim only after the creator proves YouTube ownership via OAuth. Supports setting/updating payout addresses for flexibility (wallet changes, transfers).

  2. Backend API (Go + PostgreSQL) Built a Gin REST API with JWT auth for creators. Implemented wallet-based login using EIP-191 personal signatures with nonce-based replay protection. Built YouTube verification via OAuth + YouTube Data API, then marks the channel as verified in DB. Added ledger ingestion: fetch tx receipts, decode contract events, and store tips/messages in Postgres.

  3. Chrome Extension (JavaScript + Ethers.js)

Challenges I ran into

  1. EIP-712 Sig Debugging Implementing wallet authentication was a nightmare. Since the signed message needed to match exactly, even tiny differences completely change the signature. The challenge came from the subtle formatting differences between what the backend stored and what the wallet signed. In this case, although the messages looked identical to the human eye, they were byte-for-byte different, in which the frontend was using \n for newlines while the backend was generating messages with actual line breaks. Also, I forgot to format the timestamp, which I caught on earlier on.

  2. Keeping on-chain and off-chain states consistent We had to synchronize three “truths”: the contract (claimed channel), the DB (verified ownership), and YouTube (real ownership). The solution was to treat the backend as the verifier authority: it only signs claims after OAuth verification, while supporting edge cases like wallet changes and channel transfers.

  3. YouTube’s CSP + MetaMask communication YouTube’s strict Content Security Policy blocked naive UI injection and direct MetaMask calls. I redesigned the extension to use a content script, in-page script, MetaMask bridge with event-based messaging to stay CSP-safe.

Accomplishments that I'm proud of

I’m personally proud of successfully connecting all three stacks (the Chrome extension, the backend, and the smart contract layer) into one system. Each piece worked independently, but making them communicate reliably in real time made it into a real challenge. Bringing these together smoothly from a viewer clicking “Tip” to a creator later claiming escrowed funds was the most rewarding part of building TipMNEE.

What's next for TipMNEE

  • Expand to more platforms outside of YouTube like X, Facebook, or Instagram.
  • Improve the tipping experience with smoother UI and a more addictive/rewarding animations for each tip to make supporting creators feel more engaging.
  • Hopefully convince more people to onboard the world of Web3
Share this project:

Updates