Inspiration

We attend a lot of hackathons, workshops, and networking events. Every time, we meet interesting people — founders, engineers, designers — and scribble their names in our notes app. "Met Huy from Hanoi at LotusHack." "Got Anh's LinkedIn." These notes scatter across apps, phones, and platforms. When you change jobs or phones, they disappear. We wanted a single place where every connection lives permanently and stays actionable.

What it does

Lotus is a personal CRM that lets you capture contacts from a single sentence, automatically enriches them from social profiles, and nudges you to follow up before the connection goes cold.

  • Fast Add — Type a quick note like "Met Huy from Hanoi at LotusHack" and AI parses it into a structured contact with event context
  • Smart Enrichment — TinyFish stealth browser scrapes LinkedIn, X, and Facebook to pull in headlines, companies, photos, and social links
  • Nudge Queue — The system reminds you to come back and add more detail at 2 hours, 24 hours, and 72 hours after capture

How we built it

  • Next.js 14 App Router with TypeScript for the frontend and API routes
  • Supabase for Postgres database, authentication, and Row Level Security so every user's contacts are private
  • Claude (claude-haiku-4-5) and Gemini (gemini-2.0-flash) as dual AI providers with automatic fallback — one parses natural language into contacts, the other scores enrichment candidates
  • TinyFish Web Agent for stealth browser scraping of social profiles without needing official API access
  • Tailwind CSS for a clean, fast UI

Challenges we ran into

  • Getting AI parsing reliable enough to handle messy, real-world input ("met someone named Anh? or An? at that thing yesterday") required careful prompt engineering and a confidence threshold system
  • TinyFish scraping is async with polling — coordinating the enrichment flow (submit → poll → structure → update) across the API layer took iteration
  • Designing the nudge timing to be helpful without being annoying — we landed on absolute scheduling (2h/24h/72h from creation) rather than relative delays

What we learned

  • Dual AI provider fallback (Claude → Gemini) adds real resilience — when one API is slow or down, the other picks up seamlessly
  • Stealth browser scraping via TinyFish is surprisingly powerful for enrichment without needing official API partnerships
  • The simplest UX wins: a single text input that creates a full contact record is the feature people react to most

What's next for Lotus

  • Wire the nudge queue to live data with scheduled processing (Vercel Cron)
  • Integrate Clay for deeper contact enrichment and company data
  • Add important date reminders (birthdays, work anniversaries)
  • Expand from business networking to personal relationship management

Built With

  • nextjs
  • supabase
  • tinyfish
Share this project:

Updates