Settings
How leveling works, and the knobs behind it. Edit any number and Save.
The decisions behind how this app behaves — kept here so you can audit them and they stay the reference point for future tweaks.
- Before any event is booked (by the app or by Claude), the surrounding day is checked and conflicts are spoken back: hard overlaps first, then tight turnarounds (≤90 min gap), then same-day context.
- Open-ended items (a party with no end time) count as occupying the evening — they must be surfaced, not skipped.
- GET /api/calendar/conflicts?start=ISO&end=ISO does the check; POST /api/calendar/events also returns conflicts with every creation.
- Opens on “Up next” — the next thing happening, with its Eastern time.
- This week + Next week are expanded; Earlier and Later collapse.
- This week starts at today, so already-passed days fold into Earlier.
- All times display in Eastern (America/Toronto), regardless of the device’s timezone.
- Multi-day trips and holidays render as theme pills spanning their dates — not single-day blocks.
- Trips use their floating (UTC) date, so an all-day Jul 1 trip never slips to Jun 30.
- Prep tasks nest under the event they belong to and link to where you act.
- Trip → make reservations; plan with no venue → pick a venue; recent hangout → follow up.
- 1-on-1 (one matched person) → opens that person under People.
- Group or trip → opens the Plans/Calendar detail (e.g. the NYC trip).
- Each trip has a unique URL slug = name + start date (e.g. nyc-2026-07-01).
- The Plans page honors ?trip= and ?day= so links open the right tab and day.
- A person's page holds their Tasks — the birthday wish (when due within 14 days) plus deliverables — and is where you act.
- No standalone Wishes tab: clicking a due wish goes to the person; /wishes redirects to People.
- Surfaces overdue deliverables, birthday wishes due within 14 days, stale dating conversations, and slipping ties.
- Shown as theme pills in the week they fall — recurring ones repeat annually, one-time ones show once.
- Managed here in Settings (no separate tab).
- After a trip, run scripts/instagram-new-friends.sh (Android phone on USB, unlocked, USB debugging on) — it opens Instagram, pulls your most recent follows + new unread DMs, and scrapes each profile's name and bio.
- Unknown handles become pending acquaintances (relationship = acquaintance, role = new, known-since = today); handles already on a person are skipped.
- Claude then web-searches LinkedIn for each pending person (name + bio clues) and attaches candidate matches via PATCH /api/people/intake.
- Review at /people/intake: confirm or reject the LinkedIn match, note how you met / what you talked about, and record what you know about them (“likes to lift weights”). Confirm saves; “Not a real contact” deletes.
- New DMs also sync to rp_messages via the Instagram bridge, so the Copilot sees them.
Cultural moments worth a thoughtful note. They surface as theme pills in the week they fall on the Home agenda — recurring ones repeat every year, one-time ones show once.
Every friendship has an XP total. XP comes from two places: a starting baseline seeded from the person's category(so family doesn't begin at zero), plus the interactions you log.
Each interaction is worth a base value for its type (a hangout is worth more than a text), then scaled by quality multipliers — how long you spent, the setting (1-on-1 counts more than a big group), and how real the conversation got:
Your XP total maps onto stages. The gaps widen as you climb, so deeper friendships take more sustained investment. Stage is recalculated live — log a great hangout and the bar moves.
XP isn't permanent. Stop investing and a relationship drifts — at the end of each month it sheds a slice of XP, so ties you neglect slide back down through the stages (see Relationship decay below).
When you give a longer update (“saw Monica ~3 hrs, 1-on-1, really deep talk”) I score it with these multipliers and store the exact XP on that interaction. Adjust the numbers here and everything recomputes against them.
XP needed to reach each stage, and how often to invest to keep momentum.
| Stage | XP to reach | Maintain every (days) |
|---|---|---|
Worth of each interaction type before quality multipliers.
How much the context scales an interaction. 1.0 = neutral.
Starting XP seeded from a person's relationship category.
Momentum window: the “XP lately” badge counts XP earned in the last days.
Relationships you stop investing in slide back down. After a grace period of no logged investment, XP is shed at the end of each month — so people can fall out of a stage, and even out of a category, unless you keep showing up. It's recalculated live, but only ticks at month-ends.
At 12%/month, a 200 XP tie left untouched falls to 93 XP after 6 months and 43 XP after a year.
Used to shape AI message suggestions.
Days before a birthday to surface each priority. Edit JSON freely.
… people tracked.