A local-first relationship management assistant — manage contacts, interactions, and follow-up reminders with all data stored locally in SQLite.
- Contacts Management — Full CRUD for contacts with relationship types, tags, and notes
- Richer Contact Profiles — Optional avatars, birthdays, anniversaries, and duplicate merge tools
- Interaction Tracking — Log calls, emails, meetings, and notes with any contact
- Smart Reminders — Set one-time or recurring reminders with automatic follow-up creation
- Relationship Health — Automatic tracking of relationship warmth based on interaction frequency
- Assistant Insights — AI-powered queue of contacts needing attention
- Import/Export — Full data portability with JSON, CSV, and vCard export/import
- Dashboard — Overview of your relationship network health
# Install dependencies
npm install
# Start the server
npm startOpen http://localhost:3456 in your browser.
| Environment Variable | Description | Default |
|---|---|---|
PORT |
Server port | 3456 |
POPPY_DB_PATH |
Full path to SQLite database | ~/.poppy-local/poppy.db |
POPPY_DATA_DIR |
Directory for database | ~/.poppy-local/ |
GET /api/health— Server health check
GET /api/contacts— List contacts (supportsq,tag,relationship_type,sort,order)GET /api/tags— List known tags with usage countsGET /api/contacts/duplicates— List potential duplicate contactsGET /api/contacts/:id— Get single contact with interactions and remindersPOST /api/contacts— Create contactPUT /api/contacts/:id— Update contactPOST /api/contacts/:id/merge— Merge another contact into the selected contactDELETE /api/contacts/:id— Delete contactGET /api/contacts/:id/vcard— Export a single contact as.vcfGET /api/contacts/vcard— Export all contacts as.vcf
GET /api/contacts/:id/interactions— List interactions for contactPOST /api/contacts/:id/interactions— Add interactionPUT /api/interactions/:id— Update interactionDELETE /api/interactions/:id— Delete interaction
GET /api/reminders— List all reminders (supportsshow_completed)GET /api/contacts/:id/reminders— List reminders for contactPOST /api/contacts/:id/reminders— Create reminderPUT /api/reminders/:id— Update reminderPATCH /api/reminders/:id— Complete/uncomplete reminderDELETE /api/reminders/:id— Delete reminder
GET /api/export— Export all data as JSONPOST /api/import— Import data (supportsmode: 'merge'or'replace')GET /api/contacts/export— Export contacts as CSVPOST /api/contacts/import— Import contacts from CSV
GET /api/stats— Dashboard statisticsGET /api/assistant/brief— AI queue of contacts needing attention
| Type | Cadence |
|---|---|
| inner_circle | 14 days |
| family | 21 days |
| friend | 30 days |
| colleague | 30 days |
| professional | 45 days |
| mentor | 45 days |
| acquaintance | 90 days |
# Run in development mode with auto-reload
npm run dev- Backend: Express.js + better-sqlite3
- Frontend: Vanilla JS SPA (no build required)
- Storage: SQLite with WAL mode
MIT