feat: add likes support, Twitter archive import, smart re-import, and quote tweets#41
Conversation
5493279 to
4b28ffc
Compare
how this compares to PR #6 (liked tweets import)PR #6 added the foundational
the key architectural difference is the shared |
comparison to the closed PR #17 (X cleanup for unlike/unbookmark)PR #17 was closed because its core feature — permanently removing bookmarks/likes from X — was destructive and premature, with hardcoded GraphQL query IDs adding maintenance burden. this PR takes the opposite approach: read-only import enrichment rather than destructive mutations.
the hardcoded query ID concern from #17's closing comment still applies here, but the blast radius is fundamentally different: a stale read query ID means "import stops working until you update the ID" vs "deletion silently fails." the this PR also reuses the |
6d307ab to
96f7c27
Compare
… quote tweets - Support importing Twitter/X likes alongside bookmarks (bookmarklet, console, file upload, Live Import API) - Add Twitter data archive import (.js and .zip files from "Download your data") - Smart re-import: update existing tweets when incoming data is richer (longer text, real author handles, new media), automatically re-queue for AI categorization - Extract quoted tweet content for better categorization (a tweet quoting a tech thread no longer miscategorizes as health/wellness) - Live Import API via Twitter's internal GraphQL endpoints for both bookmarks and likes - Handle Twitter's user data structure changes (screen_name moved from legacy to core) - Move Twitter bearer token to X_BEARER_TOKEN env var (was hardcoded) - Update UI language: "bookmarks" → "tweets" where both sources are represented - Add source filter (bookmarks/likes) to browse page - Add 34 parser tests (vitest) covering all import formats and edge cases - Update README and CLAUDE.md with all new features and import methods - Add .gitignore entries for user data files and DB backups
96f7c27 to
e697c1d
Compare
Summary
add full likes support, Twitter archive import, smart re-import with update-on-reimport, and quoted tweet extraction for better categorization.
Changes
.jsand.zipfiles from "Download your data") with auto-detection of source from filename@unknown, new media) — automatically clears enrichment for re-categorizationPOST /api/import/twitter) via Twitter GraphQL endpoints for both bookmarks and likesscreen_namemoved fromlegacytocore)X_BEARER_TOKENenv varRelated Issues
Checklist
npx tsc --noEmitpasses