A simple tool which lets you scrape twitter accounts and crosspost them to bluesky accounts! Comes with a CLI and a webapp for managing profiles! Works with images/videos/link embeds/threads.
13
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: default backfill limit to 15 and ensure hashtag facets are detected

jack 92a7d8fb 9de4d95a

+6 -6
+4 -4
public/index.html
··· 207 207 }; 208 208 209 209 const runBackfill = async (id, twitterUsername) => { 210 - const limit = prompt(`How many tweets to backfill for @${twitterUsername}?`, "100"); 210 + const limit = prompt(`How many tweets to backfill for @${twitterUsername}?`, "15"); 211 211 if (limit === null) return; // Cancelled 212 212 213 213 try { 214 - await axios.post(`/api/backfill/${id}`, { limit: parseInt(limit) || 100 }, { 214 + await axios.post(`/api/backfill/${id}`, { limit: parseInt(limit) || 15 }, { 215 215 headers: { Authorization: `Bearer ${token}` } 216 216 }); 217 217 alert(`Backfill queued for @${twitterUsername}`); ··· 257 257 }; 258 258 259 259 const resetAndBackfill = async (id, twitterUsername) => { 260 - const limit = prompt(`Reset cache and backfill how many tweets for @${twitterUsername}?`, "100"); 260 + const limit = prompt(`Reset cache and backfill how many tweets for @${twitterUsername}?`, "15"); 261 261 if (limit === null) return; 262 262 263 263 try { ··· 266 266 headers: { Authorization: `Bearer ${token}` } 267 267 }); 268 268 // 2. Queue Backfill 269 - await axios.post(`/api/backfill/${id}`, { limit: parseInt(limit) || 100 }, { 269 + await axios.post(`/api/backfill/${id}`, { limit: parseInt(limit) || 15 }, { 270 270 headers: { Authorization: `Bearer ${token}` } 271 271 }); 272 272 alert(`Cache cleared and backfill queued for @${twitterUsername}`);
+2 -2
src/index.ts
··· 898 898 899 899 const backfillReq = getPendingBackfills().find(b => b.id === mapping.id); 900 900 if (forceBackfill || backfillReq) { 901 - const limit = backfillReq?.limit || 100; 901 + const limit = backfillReq?.limit || 15; 902 902 console.log(`[${mapping.twitterUsername}] Running backfill (limit ${limit})...`); 903 903 updateAppStatus({ state: 'backfilling', currentAccount: mapping.twitterUsername, message: `Starting backfill (limit ${limit})...` }); 904 904 await importHistory(mapping.twitterUsername, limit, dryRun); ··· 921 921 } 922 922 } 923 923 924 - async function importHistory(twitterUsername: string, limit = 100, dryRun = false): Promise<void> { 924 + async function importHistory(twitterUsername: string, limit = 15, dryRun = false): Promise<void> { 925 925 const config = getConfig(); 926 926 const mapping = config.mappings.find((m) => m.twitterUsername.toLowerCase() === twitterUsername.toLowerCase()); 927 927 if (!mapping) {