Skip to content

Ayaan2907/wingmic

wingmic logo

wingmic

wingmic.xyz hero — you met twelve people this week. Wingmic remembers everyone.

voice-first networking memory · open source · MIT

Stop forgetting. Start building.

License: MIT Status PRs Welcome Live CI

Live site · Roadmap · Self-host · Contribute · Discussions


the handshake memory leak

You meet 12 people at a conference. By day's end you remember 3 names, 1 company, and zero context. Your brain's RAM got garbage-collected.

Your brain is RAM. Conferences are memory pressure. 12 people met · 3 names recalled · 0 follow-ups sent.

LinkedIn is a graveyard. Notion CRMs want typing time you don't have. Phone contacts are a graveyard. Between two sessions at a conf you have ninety seconds and a coffee in one hand. There's no typing budget.

Wingmic is the tool you open right after you meet someone. Voice-dump the context, commit to your memory graph, never forget a connection again.


three verbs · speak. extract. query.

Three verbs: Speak. Extract. Query. No CRM tax. No form filling. No manual tagging.
you, after a meetup, into your phone:
  > "met sarah from acme at the rust meetup, she leads their edge runtime team,
     send her the github link tomorrow morning"

wingmic, instantly:
  ✓ committed to graph
    → person:    Sarah  (Lead · Edge runtime @ Acme)
    → event:     Rust meetup  (canonical, shared)
    → topics:    rust · edge runtime
    → action:    send github link · tomorrow 9:00 AM

you, three weeks later:
  > "who at acme works on rust?"

  ↪ found 1 match in 0.3s:
    • Sarah  ·  Lead · Edge runtime  ·  Acme  ·  met at Rust meetup
      "she leads their edge runtime team, send her the repo"

That's the whole product. Hold a button. Talk for twenty seconds. Ask anything later, in plain English, get an answer.

Ask in plain English. From anywhere. Mobile app, REST API, MCP server, Slack bot. Same graph.

features

🎤 voice capture Browser SpeechRecognition by default. AssemblyAI / Deepgram BYO key in v0.1.2.
🧠 claude extraction generateObject + Zod schema. Pulls people, companies, events, topics, follow-up actions.
🔍 NL recall "who at acme ships rust?" → top matches in < 500ms. OpenAI embeddings + libSQL vector.
🔒 private people, public facts Sarah-the-person stays yours alone. Acme-the-company is canonical, shared across users (lazy promotion).
✉️ magic-link auth BetterAuth + Resend. No passwords, no OAuth, no install friction.
🌐 mobile-first PWA Responsive web. No App Store, no DMG, no install. Visit and use.
🛠 typed end-to-end Drizzle + tRPC + TypeScript. One source of truth from DB to UI.

roadmap

version what ships status
v0.1.1 voice capture + NL recall (Approach B narrowed) 🟡 wiring complete, awaiting first deploy
v0.2 contact imports — LinkedIn export, Google Contacts, vCard 📋 #10 epic
v0.3 Acts agent — drafts emails / check-ins / intros, permission-first, Inngest durability 📋 #11 epic
v0.4 MCP server — query your network from Claude / ChatGPT directly 📋 deferred
v0.5 self-host — Docker Compose + BYO API keys 📋 deferred
v0.3 preview — Wingmic acts for you. Drafts the warm intro. Schedules the reminder. Sends the great-meeting-you email at the right moment. Permission-first.

v0.3 preview — Acts agent drafts the email, you click send.

Roadmap and milestone progress live on the project board.


stack

layer choice why
Web framework Next.js 15 (App Router + RSC) Mature, edge-ready, Server Actions cover most APIs
Runtime + pkgs Bun 1.3 + workspaces 10-20× faster install, native TS, native sqlite
Styling Tailwind 3 + design tokens App surface only — homepage uses inline styles by design
DB + ORM Drizzle + libSQL/Turso Edge-native, ~50 KB runtime, sqlite-with-replicas
LLM framework Vercel AI SDK v6 + Anthropic Claude Sonnet 4.6 Single function call extraction; multi-provider config swap
Embeddings OpenAI text-embedding-3-small (1536-d) $0.02 / 1M tokens, native libSQL F32_BLOB(1536)
Auth BetterAuth + Resend OSS, self-hostable, magic-link only
API tRPC v11 + Server Actions hybrid Typed end-to-end, multi-client (RN / MCP later)
State Zustand for ephemeral UI; React Query for server Minimal, no Redux
Hosting Cloudflare Pages (landing) + Railway (product) Static edge + Node.js runtime, Turso replicas for low-latency reads
Tests Vitest unit + Playwright E2E Fastest TS testing, mobile + desktop projects

monorepo layout

apps/web              ← static landing → wingmic.xyz (Cloudflare Pages)
apps/app              ← dynamic product → app.wingmic.xyz (Railway, Node.js)
packages/
  brand               ← logos, favicons, OG, manifest
  design-tokens       ← Tailwind preset + token TS exports
  db                  ← Drizzle schema + libSQL + migrations
  extractor           ← entity-detection pipeline + eval harness
  config/{tsconfig,eslint,vitest}
design/               ← canonical mocks (read-only)
docs/                 ← architecture.md, deploy.md, packages.md, superpowers/
CLAUDE.md             ← Claude Code project context
turbo.json

Built as a Turborepo monorepo. See docs/architecture.md § 0 for the full map.

two deploy targets

Surface Source Hosting URL
Landing (static) apps/webnext export Cloudflare Pages wingmic.xyz
Product (dynamic) apps/appnext start Railway (Node.js) app.wingmic.xyz

Operator runbook: docs/deploy.md.


quick start

Pick your path. Both work.

🤖 with an agent (Claude Code, Cursor, Codex, etc.)

Paste this prompt into your AI coding assistant. It walks you through clone → secrets → first run, asking at each step.

Set up wingmic for me on this machine. The repo is github.com/Ayaan2907/wingmic — an
open-source voice-first networking memory app.

Do this in order, stopping for me at each step:

  1. Check if Bun (>=1.3) and Node (>=20) are installed. Install Bun if missing
     via `curl -fsSL https://bun.sh/install | bash`.
  2. Clone https://github.com/Ayaan2907/wingmic.git into ./wingmic if not already.
  3. Run `bun install` from the repo root.
  4. Copy apps/web/.env.example to apps/web/.env.local.
  5. Walk me through obtaining the 8 required secrets per docs/deploy.md § 2:
       - TURSO_DB_URL + TURSO_AUTH_TOKEN  (turso CLI)
       - BETTER_AUTH_SECRET                (openssl rand -base64 48)
       - BETTER_AUTH_URL                   (http://localhost:3210 for local dev)
       - RESEND_API_KEY + RESEND_FROM      (resend.com — domain must be verified)
       - ANTHROPIC_API_KEY                 (console.anthropic.com)
       - OPENAI_API_KEY                    (platform.openai.com)
     Stop and ask me at each one — do NOT generate or fetch any keys yourself.
     For local dev only ANTHROPIC_API_KEY and OPENAI_API_KEY are required;
     the rest can be left blank with safe defaults.
  6. Once .env.local is filled, run `cd apps/web && bun run db:apply` to create
     a local SQLite at apps/web/local.db.
  7. Run `bun run dev` from the repo root. Show me http://localhost:3210 once it's up.
  8. Tell me to sign in: visit /signin, type any email, and check the dev-server
     console — the magic link is logged there since RESEND_API_KEY isn't set.

Brand voice rule: when committing or summarizing, do NOT add "Co-Authored-By: Claude"
or any AI co-author trailer. Authorship is mine.

🛠 manually

Prerequisites: Bun 1.3+ (curl -fsSL https://bun.sh/install | bash) and Node 20+.

git clone https://github.com/Ayaan2907/wingmic.git
cd wingmic
bun install

cp apps/app/.env.example apps/app/.env.local
# Fill in ANTHROPIC_API_KEY and OPENAI_API_KEY at minimum.
# See docs/deploy.md for how to acquire each.

bun --filter=@wingmic/app db:apply

bun run dev:app   # → http://localhost:3211 (product)
# or: bun run dev:web  # → http://localhost:3210 (landing)

Sign in: type any email at /signin. The magic link is logged to the dev console since RESEND_API_KEY isn't set locally.

🤝 making your first contribution

Paste this into your AI coding assistant when you want to send a PR.

Help me make my first contribution to wingmic (github.com/Ayaan2907/wingmic).

  1. Read these in order — they're the maintainer contract:
       - README.md
       - CONTRIBUTING.md
       - docs/architecture.md
       - design/design-system.md (only if the work is UI / brand-voice)
  2. List open issues tagged `good first issue`:
       gh issue list --label "good first issue" --state open
  3. Ask me which issue number I want to tackle. Don't pick one for me.
  4. Read the issue body in full. Identify exact files to touch.
  5. Branch from main: `git checkout -b feat/<short-name>` or fix/, docs/, chore/
     per CONTRIBUTING.md branch conventions.
  6. Make the change. Add or update Vitest or Playwright tests for new behavior.
  7. Run the local CI checks before committing:
       - bun run typecheck
       - bun --filter @wingmic/web lint
       - bun run test
       - bun run build
     All must pass.
  8. Commit using Conventional Commits (e.g. `feat(capture): add text fallback`).
     Do NOT add "Co-Authored-By: Claude" or any AI trailer to the commit message.
  9. Push and open a PR with the template-required fields filled in. Reference
     the issue number with `closes #N`.
 10. Stop and let me review before pushing or merging.

Stay focused on the chosen issue. If you spot unrelated improvements, file
them as separate issues — don't pile them into the PR.

scripts (workspace root)

bun run dev          # turbo dev — defaults to apps/web; use dev:app for product
bun run dev:web      # apps/web on :3210
bun run dev:app      # apps/app on :3211
bun run typecheck    # all workspaces
bun run lint         # all workspaces
bun run test         # all workspaces
bun run build        # apps/web (next export) + apps/app (next build)
bun run db:apply     # apply migrations against TURSO_DB_URL or local file
bun run db:studio    # open Drizzle Studio
bun run extract:eval # run canonical 50-fixture extractor accuracy suite

Filter to one workspace: bun --filter=@wingmic/<name> <script>.


self-host

Wingmic is fully open source. You can run the entire stack on your own infra without touching the hosted version.

Status:

  • v0.1.1 — manual self-host works today (clone, fill env, deploy to your provider). Documented in docs/deploy.md.
  • v0.5 — single-command docker-compose up with BYO API keys is on the roadmap.

From the workspace root:

# Landing (static, no secrets) — Cloudflare Pages dashboard
# Build command:  bun run --filter=@wingmic/web build
# Output dir:     apps/web/out

# Product (dynamic, 8 secrets) — Railway
# Service root:   apps/app
# Build:          bun install --frozen-lockfile && bun --filter @wingmic/app build
# Start:          bun --filter @wingmic/app start
# (defined in apps/app/railway.json)

The hosted wingmic.xyz and the self-host code are identical — same repo, same migrations, same secrets. We don't keep a paid SaaS-only fork.


privacy

  • People are private. Captured people stay scoped to your user. Never shared, never used to enrich anyone else's graph.
  • Companies / events / topics are public facts. Acme is Acme regardless of who knows about it. The canonical layer is shared across users with no consent surface (because it doesn't need one).
  • Voice transcripts are sent to Anthropic for extraction. We disclose this in the UI before first capture; you can review the exact prompt.
  • Embeddings are sent to OpenAI (text-embedding-3-small). 1536-d float vectors, no metadata.
  • No analytics on the homepage by default. Self-host to verify.
  • Magic links are short-lived (10 min) and single-use.

Read the full ethics + data handling page (in progress at /ethics).


contributing

PRs are welcome. Read CONTRIBUTING.md and the Code of Conduct before opening a pull request.

If you're new, look for the good first issue label. Each labeled issue includes context, acceptance criteria, and which file(s) to touch.

Bugs go to issues. Security to SECURITY.md. Ideas + general questions to discussions.


brand voice

Wingmic has a defined voice. Lowercase confident. One italic-serif twist per heading. Editorial-brutalist + terminal aesthetic. No "powered by," no "seamless," no "cutting-edge." See design/design-system.md for the full reference. Match it in any UI copy.


license

MIT — see LICENSE.

If you build something on top of wingmic, we'd love to see it — open a discussion or tag @Ayaan2907.

About

voice-first networking memory · your social RAM, on disk

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors