Projects
Project

bipolar

Vote LOVE or HATE on what the internet is arguing about, and see what the people who paid to be counted actually think.

Sep 2026 - Presentconvexproductaifullstackpaymentshackathon
bipolar

bipolar is a LOVE-or-HATE voting app for polarizing topics, and the next version of 50fidy. Everyone votes for free, and that is the Crowd. Some put 50 cents behind a vote, one per person per topic, and those are counted separately as the Committed. The gap between the two numbers is the product. I rebuilt it from scratch on Convex for the Convex All Gas Hackathon.

Nobody writes the questions. A crawler finds what the web is arguing about, and a model turns one story into a question a stranger can answer with two buttons.

What it does

  • The run. One topic at a time, full screen. L to love it, H to hate it, space to back it with a spark. A short tutorial teaches the keys on the first visit
  • Results you have to earn. A topic's two-layer split is hidden until you vote, or pay to peek. You decide, then you see, so the crowd never sways your call
  • Call the room. Before the reveal you guess which way the room will go. Calls are graded and build a streak
  • The room. A live rail beside every topic: what is being voted on right now, the talk under each question, boards for the hottest, loudest and most argued topics and the best readers, and an AI you can ask about any of it
  • The world. Which countries lean which way, the rivalries between them, the subjects each one cares about, and the records
  • Sparks. Paid votes come out of a wallet of sparks bought in packs, so card fees do not eat a 50 cent vote. New accounts start with sparks on the house
  • Shareable topics. Every question has its own link with live Open Graph tags, so a pasted link previews properly

How it is built

  • Convex is the runtime. Data, live queries, scheduling, crons, HTTP routes, auth, rate limits, and the hosting of the site. Nothing polls: the live rail, the run, the review queue and the crawler's own progress feed are subscriptions
  • The rules live in transactions. One free and one paid vote per person per topic is the rule the product rests on, and Convex has no unique index to enforce it. So one mutation reads the index before it writes, and lands the vote, the wallet, the ledger and the topic and country counters together or not at all. A retraction reverses all of it in one transaction and writes a refund beside the spend, because a ledger that deletes cannot be audited
  • The stats gate is in the payload. The aggregate is null in what leaves the server until the reader has earned it, and a test asserts the field is absent rather than hidden
  • Questions from the news. Firecrawl searches the last week of the web for arguments. gpt-5-mini, through a forced tool call, turns a story into a question with a category, tags, a polarizing score, a sensitivity flag and the country it is about. Wikipedia supplies the picture
  • Tunable without a deploy. Crawl frequency, questions per session and the polarizing floor are stored as overrides an admin can change on a page, every change clamped and audited
  • AgentMail sends the welcome note and a daily hot-topics mail, deduplicated by date so a cron that fires twice mails once