Inspiration

We all lose touch with people we care about. Not because we don't care, but because we forget — we forget details, forget to follow up, don't know what to say, or feel overwhelmed managing dozens of relationships across personal, professional, and community circles.

Existing tools don't help: contacts apps store names and numbers but offer zero context. CRMs are built for sales pipelines, not real human relationships. Reminder apps don't understand why you're reaching out.

We wanted to build something different — a system that reduces the mental burden of maintaining relationships without making them feel transactional or robotic.

What it does

Connexions is an adaptive relationship OS that combines:

  • Natural language capture — Type or speak things like "Jake said he's going to his beach house Friday" and the AI parses it into structured actions (a note about Jake's trip + a reminder for Friday), asks you to confirm, then saves everything automatically.
  • Smart outreach cadence — Each contact has an intent (nurture, maintain, support, monitor) that determines how often you should reach out. The app calculates when you're overdue and surfaces those contacts on your dashboard.
  • AI-powered recall and drafting — Ask "What do I know about this person?" and get an instant context summary. Ask it to draft a message and it writes something that matches the relationship tone — not a generic template.
  • Contact import from iOS — Native iOS contact picker via Capacitor pulls in contacts with birthdays and notes, automatically creating key dates with reminders.
  • Calendar sync — Subscribe to an iCal feed that pushes all your reminders and key dates to Apple Calendar or Google Calendar.
  • Voice input — Tap the mic and speak naturally; speech recognition transcribes your words into the Quick Capture field for AI parsing.
  • Privacy-first design — Sensitive contact flags, full data export, and row-level security in the database ensuring users can only ever access their own data.

How we built it

We leaned heavily on Google's ecosystem and AI tools throughout the entire development process. Google's Gemini was used extensively as a coding assistant and pair programmer — helping us architect the database schema, debug Turbopack issues, generate component boilerplate, refine our AI prompt engineering, and iterate on the Material Design 3 color system. The entire UI design system was built around Google's Material Design 3 principles, using Google Fonts (Manrope + Inter) and Google Material Symbols for iconography.

Architecture: Next.js 15 (App Router) + TypeScript + Supabase (PostgreSQL with Row Level Security) + Tailwind CSS. The app is a responsive PWA wrapped in Capacitor for native iOS deployment.

AI Integration: We started prototyping with the Featherless API during the initial brainstorming phase to rapidly test different LLM approaches for natural language parsing. For the production build, we switched to Claude (Anthropic) via the @anthropic-ai/sdk for all runtime AI features — the natural language parser, context recall, and message drafting. Claude Haiku handles the parsing (fast and cost-effective for structured extraction).

Design System: Built on Google Material Design 3 with a custom M3 color palette (teal primary #145b76, burnt orange #9b4500 for attention states, green #006318 for active states). Typography uses Google Fonts (Manrope for headlines, Inter for body), and all icons are Google Material Symbols. Mobile-first at 448px max-width.

Native iOS: Capacitor wraps the web app with access to native APIs. The @capgo/capacitor-contacts plugin provides the native iOS contact picker (CNContactPickerViewController) for importing contacts with birthdays and notes directly from the user's phone.

Database: 6 tables (profiles, contacts, notes, key_dates, reminders, interactions) with full RLS policies, auto-updated timestamps via triggers, and a signup trigger that auto-creates user profiles.

Challenges we ran into

  • Turbopack instability — Next.js 16's Turbopack dev server repeatedly corrupted its .next cache during rapid development, causing 500 errors that required full node_modules reinstalls to fix. This cost us significant debugging time.
  • Environment variable shadowing — The Anthropic SDK's ANTHROPIC_API_KEY env var was being silently shadowed by the development environment, causing the AI routes to 500 with no useful error message. We had to rename it to CONNEXIONS_ANTHROPIC_KEY.
  • AI response formatting — The LLM kept wrapping JSON responses in markdown code fences despite explicit instructions not to. We added server-side regex stripping of json wrappers.
  • Duplicate contact creation — The first version of the natural language parser auto-created contacts without checking for existing matches, leading to duplicates. We redesigned it into a two-step flow: parse → confirm (with contact disambiguation) → execute.
  • Capacitor SPM compatibility — The initial contacts plugin (@capacitor-community/contacts) didn't support Swift Package Manager in Capacitor 8. We had to switch to @capgo/capacitor-contacts and clear Xcode's derived data to resolve package resolution failures.

Accomplishments that we're proud of

  • The natural language Quick Capture genuinely works — you can type casual sentences and the AI correctly extracts multiple actions (notes, reminders, key dates) from a single input.
  • The outreach cadence system is smart without being annoying. It calculates when you're overdue based on relationship intent, not arbitrary timers.
  • The voice input works natively in the iOS app — no external speech-to-text service needed.
  • We built a full native iOS app with contact import, calendar sync, and AI features in a single hackathon session.
  • The Material Design 3 design system gives the app a polished, cohesive feel that matches Google's latest design language.

What we learned

  • How to use Google's AI tools as a development accelerator — from architecture decisions to prompt engineering to debugging
  • How to build a full-stack app with Supabase Row Level Security for true multi-tenant data isolation
  • How to wrap a Next.js web app in Capacitor for native iOS capabilities without rewriting to React Native
  • The importance of two-step confirmation flows for AI-driven actions — never auto-execute something the AI inferred
  • That Turbopack is not yet production-stable for rapid development workflows

What's next for Connexions

  • Group and circle management — Organize contacts into families, teams, and communities
  • Signal detection — Optional monitoring of public updates (job changes, life events) to suggest timely outreach; including LinkedIn + Instagram, and more
  • Offline mode — Service worker caching for viewing contacts without connectivity
  • End-to-end encryption — For sensitive contact notes
  • App Store deployment — The Capacitor iOS build is ready for TestFlight

Built With

nextjs · typescript · supabase · postgresql · tailwindcss · capacitor · anthropic-claude · featherless · google-material-design · google-fonts · google-material-symbols · pwa · ios · elevenlabs

Built With

Share this project:

Updates