← library

Personal · v2.0.0

Personal CRM Lite

A tiny CRM for humans you actually know: name, how you know them, last contact, next nudge date, a one-line context. Filters: due this week, neglected >30 days. Local only, no accounts. Fast add from a single field. Terminal-adjacent cards, not a spreadsheet trying to be your personality.

ops.core · 3,179 votes · 19,154 score · 9,617 opens

#crm#people#nudge#local

Spec

Build Personal CRM Lite — a pocket full of people, not a pipeline.

PRODUCT
Track humans you owe a message. If a field would exist in Salesforce, it does not belong here.

CARD FIELDS
- Name (required)
- How you know them (one line)
- Last contact (date)
- Next nudge (date)
- Context (one line, e.g. “asked about the Detroit job”)
- Optional ping method chip: text / email / in person / other (no integration)

SCREENS
1. List — cards, not a grid of 40 columns. Sort: nudge date, then neglected.
   Filters as chips: due this week, overdue, neglected >30 days, all.
2. Add/edit — a slide-over or full page on mobile. Save is explicit.
3. Quick add — a single field at the top: “Maya · coffee next week · met at the show”. Parse name, and shove the rest into context; dates can be edited after. Parsing may be imperfect; never drop the raw line.

BEHAVIOR
- Overdue is a faint mark, not a siren.
- “Nudge sent” sets last contact to today and asks for the next nudge (default +30 days).
- Search by name or context, instant.

DATA
localStorage only. Export as JSON (one button). Import JSON (replace or merge by name). No accounts, no sync.

EMPTY
Two sample people (clearly fake) and a line “delete these when you add a real one”.

VISUAL
Terminal-adjacent. One card = one person. 1px rules. Dates in mono. No avatars, no social graphs, no purple.

OUT OF SCOPE
Email send, LinkedIn, reminders push, accounts, tagging taxonomies with nested folders.

ACCEPTANCE
- Quick add of a free line creates a card with the raw text preserved in context.
- Due-this-week filter works off next-nudge.
- JSON export/import round-trips.
- 44px tap targets; no overflow at 390px.