# Keith DM Scanner — State of Record

Last updated: 2026-05-22

## TAB STRUCTURE (canonical)

Order: REPLY → BUMP UPS → NEW FOLLOWERS → ENGAGERS → PARTNERS → SM TEACHERS → 📚 CRM → 🗂 ARCHIVE → ALL

- **REPLY** — needs_reply, LEAD bucket, not yet sent
- **BUMP UPS** — bump_up, LEAD bucket. sub-nav: 1st / 2nd / 3rd+ bump
- **NEW FOLLOWERS** — new followers not yet DM'd
- **ENGAGERS** — people who liked/commented on specific tracked posts
- **PARTNERS** — PARTNER bucket
- **SM TEACHERS** — SM_TEACHERS bucket (separate from CRM)
- **📚 CRM** — IN_SKOOL bucket + BOOKED_CALL bucket combined
- **🗂 ARCHIVE** — EXCLUDED + EXHAUSTED buckets
- **ALL** — everything

REMOVED: PAUSED tab (LONG_PAUSE bucket still exists in data, just not shown)
REMOVED: BOOKED_CALL as standalone tab (merged into CRM)

## FILTERS (canonical)

Only these 4 filter chips on the preset row:
- `> 2w` — last contact older than 14 days
- `> 6w` — last contact older than 42 days
- `6m` — last contact older than 180 days
- `clear`

Default preset on BUMP tab: `> 2w` (auto-activates on switchTab('bump'))

## BUCKET BUTTONS (per row)

Each row has small icon buttons to assign bucket:
- 🌿 SM_TEACHERS (title: "SM teacher")
- 📚 CRM (title: "CRM") → sets IN_SKOOL bucket
- 📞 BOOKED_CALL (title: "call booked") → sets BOOKED_CALL bucket
- 🗂 ARCHIVE / EXHAUSTED buttons

## BUMP TAB BEHAVIOUR

- Sub-nav: 1st bump / 2nd bump / 3rd+ bump with counts
- No automatic 3-week hard-hide — user controls visibility via `> 2w` filter
- Sorted by score (highest first)

## EMOJI REACTIONS → BUMP (not REPLY)

Two layers of detection:
1. **auto_update.py** — at scrape time: `_last_item_type in ("like", "reaction", "like_heart", "heart", "reel_share_reshare")` → follow_up_type = BUMP_UP
2. **build_audit.py** — at build time: `_is_reaction_only(other_last_msg)` catches existing rows. Matches: "Reacted X to your message" or pure emoji strings

## ENGAGERS POSTS (tracked)

| post_id | engagers | caption |
|---------|----------|---------|
| 3889708009018509593 | 83 | "Comment SHAKE and start your own journey..." |
| 3886561699230535824 | 12 | "My friend @flokisfoodforest..." (Floki bodywork) |
| 3900448510147605222 | 1 | "Why is not everybody doing the shake?" |

TODO: scrape more engagers for post 3900448510147605222 (currently only 1)

## SUGGESTION RULES (canonical)

- Never write "TRE" — use "neurogenic therapeutic tremoring" if needed
- No quotes when referencing person's words/profile
- No link suggestion if link already in thread
- NEEDS_REPLY: answer questions first before pivoting
- Warm emojis where they fit: 🙂 🙏 🫶 🌿 🎵 ✨ 🤗

## GITHUB BACKUP

Every rebuild pushes to: https://github.com/xen9r/keith-dashboard
Auto-update: daily at 01:00 via LaunchAgent `com.keith.dm.update`

**RULE: never edit network_audit.html directly — all changes go into build_audit.py**
**RULE: after any build_audit.py change → run build_audit.py → push to github**

## IG SESSION

Expires ~every 2 weeks. Last renewed: 2026-05-22.
Next renewal due: ~2026-06-04.
Fix: get fresh `sessionid` cookie from Chrome DevTools → paste into this session.
