Inspiration

Prediction markets are powerful, but most people never use them because onboarding is clunky and discovery is tedious. We wondered what would happen if forecasting felt as lightweight and familiar as Tinder, yet still connected to real markets. That led us to combine a swipe-first interface with insights derived from users’ own data so the app can surface markets they genuinely care about and get smarter with every interaction.

What it does

Swipr is a swipe-first companion for Polymarket. It pulls live markets, presents each as a crisp card, and lets the user swipe left to pass, swipe right to save to a watchlist, or tap YES/NO to place a real trade through MetaMask. Personalization comes from an opt-in upload of Instagram export and/or browser history that Claude summarizes into an interest profile; ongoing swipes and trades are written to Supermemory so recommendations improve over time. Access is simple: everyone gets fifteen free personalized swipes, after which Merit/Echo handles a clean upgrade flow.

How we built it

We used Next.js with the App Router for a fully responsive web app, Tailwind and Framer Motion for a nice , and SWR for fetching. Merit/Echo provides OAuth and usage gating; we store a lightweight tier/usage flag and read Echo user metadata on session load. A drag-and-drop uploader accepts .json/.csv files; the backend parses them, calls Claude to produce a compact interest summary, and seeds a recommender that ranks Polymarket markets by semantic similarity, recency, and liquidity. Trading is handled client-side via MetaMask: users sign EIP-712 orders which we submit to Polymarket’s CLOB; confirmations update positions and feed Supermemory along with every swipe and watchlist action.

Challenges we ran into

The hardest part was making a one-gesture swipe feel instant while juggling wallet connections, network checks, and signature prompts that naturally introduce friction. Turning noisy personal exports into reliable interest embeddings without being creepy required careful prompt design and clear consent UX. Coordinating rate limits and latency across Polymarket, Claude, and Supermemory demanded caching, optimistic UI, and prefetching. Finally, enforcing a fair, refresh-resistant swipe cap with Echo needed consistent back-and-forth checks with the server.

Accomplishments that we’re proud of

We shipped a true end-to-end flow: a user can land, sign in with Merit, upload data, connect MetaMask, and see a Polymarket trade settle—all inside a polished, mobile-first experience. The recommendation loop feels meaningful: first-time uploads create a clear interest profile, and subsequent swipes and bets measurably sharpen results. We also integrated a transparent monetization path with Echo that preserves the fast feel of the product while keeping the trial generous.

What we learned

Tiny interaction details dramatically change perceived speed and trust. Explanations for recommendations (“because you read about AI and startups this week”) increase engagement and reduce churn. And building on usage-based infrastructure like Echo is far simpler than integrating architecture like Supabase, while still playing nicely with web3 wallets and on-chain transactions.

What’s next for Swipr

We plan to add evidence-weighted forecasts that reward users for attaching citations, social features to follow top forecasters and possibly collaborate / interact with others, and on-chain badges for profitable streaks. We’ll improve safety and accessibility with a “test mode,” create more multimarket and thematic portfolios, and deepen privacy controls with per-source consent, local preprocessing options, and one-click data export and deletion.

Built With

  • bets
  • claude
  • claude-api
  • edge/static-optimizations)
  • environment-variables-via-.env-(keys-for-echo
  • ethers.js
  • ethers.js-(signing/eip-712)
  • framer-motion
  • framer-motion-(card-animations)
  • javascript
  • javascript-(client-utilities)-frameworks-&-libraries:-next.js-(app-router)
  • logs)
  • lucide
  • lucide-react-(icons)
  • merit-systems-echo
  • metamask
  • next-js
  • papa-parse
  • papa-parse-(csv-parsing)-web3-&-trading:-metamask-(wallet)
  • polymarket
  • polymarket-gamma/clob-apis-(market-data-+-order-placement)-ai-&-personalization:-claude-api-(interest-summarization/ranking-assist)
  • react
  • supabase)-testing-&-observability-(lightweight):-jest-+-react-testing-library-(unit/ui)
  • supabase-postgres-(user/tier/usage
  • supabase-storage-(user-uploads:-.json/.csv)-cloud-&-devops:-vercel-(hosting
  • supermemory
  • supermemory-api-(behavioral-memory:-swipes
  • swr
  • swr-(data-fetching)
  • tailwind-css
  • typescript
  • watchlist
  • watchlist)-auth-&-monetization:-merit-systems-echo-(oauth-+-usage/tier-gating-for-15-swipe-free-?-paid-tiers)-backend-&-storage:-next.js-api-routes-(node-runtime)
  • zod
  • zod-(schema/validation)
Share this project:

Updates