Changelog
What changed and when. Each entry lists a real feature that shipped and what it lets you do.
Saved searches
Save a query over a profile's followers or following list, and see matching new or removed accounts between the two most recent snapshots.
- New "Save search" button on the Followers and Following pages.
- A Saved searches section on the /tracking dashboard.
- Built on the follower comparison reconstruction — same coverage rule applies.
Follower comparison
Pick any two snapshots of a profile and see who was gained or lost between them, computed on demand from the membership history.
- "Compare snapshots" on the profile header now opens a real page.
- Works for any pair of snapshots, not only the most recent two.
- Withheld below 99.5% coverage on either side.
Production hardening
Error boundaries, baseline security headers, a database-aware health check, and best-effort in-process rate limiting on write routes.
- Segment-level and root-level error boundaries.
- /api/health verifies real database connectivity, not just configuration.
- Snapshot capture, export, and track routes rate-limited per client IP.
Tracking dashboard
Track any profile from its page and it appears on /tracking with its follower delta since the previous snapshot.
- Anonymous browser identity via a first-party cookie (no accounts).
- One click to track, one click to untrack.
Automatic diff engine
Capturing a new snapshot now writes the added/removed followers and changed profile fields relative to the previous snapshot into change_events, gated by a 99.5% coverage threshold on both sides.
- Changes tab on the profile lists every recorded change with the account behind it.
- Below the coverage threshold, the diff is withheld rather than fabricated.
Snapshot engine
Capture a snapshot of a profile from its History tab. The snapshot records counts, coverage, and up to 500 followers plus 500 following identities.
- Snapshots write real rows to profiles, social_users, memberships, and profile_snapshots.
- Coverage bounds are recorded per snapshot and displayed honestly.
Real Apify provider
An opt-in Apify provider fetches real Instagram data, with a fallback chain across follower-scraper actors when one fails.
- The mock provider stays the default so nothing costs money unintentionally.
- Enable with SOCIAL_PROVIDER=apify and APIFY_API_TOKEN.
Postgres schema
Drizzle ORM schema and initial migration matching spec §31 — profiles, social users, memberships, media items, snapshots, and change events.
- Neon HTTP driver, right shape for serverless deployment.
- Schema only in this entry — later entries wire it up.
Frontend scaffold and design system
Homepage, profile page, followers/following browsing, tools index, legal pages, and the design tokens the rest of the product is built on.
- Coverage badges live on the profile and followers headers from day one.
- Mock provider serves the UI so the app is navigable end to end.