Commit Graph
202 Commits
Author SHA1 Message Date
4cuckandCursor d00136558a Refuse cross-site preference changes and redirects off Twitter, YouTube, and Reddit.
Show an account's country as a flag, and escape raw tags in posts and bios.

Co-authored-by: Cursor <[email protected]>
2026-10-25 03:31:12 +00:00
4cuckandCursor e93d659d21 Load the next gallery page when the photos already fit on screen.
Bump teapawt to 0.19.1.

Co-authored-by: Cursor <[email protected]>
2026-10-24 18:03:27 +00:00
4cuckandCursor b0572193fc Show spare domains and a donate button on the front page.
The donation meter stays without the long pitch, and the landing block sits under the navbar.

Co-authored-by: Cursor <[email protected]>
2026-10-24 03:05:01 +00:00
vpsandCursor de02b80c42 Link the public status page from the README.
Co-authored-by: Cursor <[email protected]>
2026-10-22 00:26:51 +00:00
4cuckandCursor 54939a9899 Publish a signed Web Bot Auth key directory.
Other sites can verify the public key. The X fetches stay unsigned so they still look like a browser.

Co-authored-by: Cursor <[email protected]>
2026-10-21 01:13:15 +00:00
4cuckandCursor 599def5d4d Publish the documents and read tools agents need to use teapawt.
Pages can be fetched as markdown, robots.txt allows training, and the public discovery files describe search, profiles, and posts.

Co-authored-by: Cursor <[email protected]>
2026-10-21 00:17:13 +00:00
4cuckandCursor f0c057710c Bind translate buttons on replies that infinite scroll inserts.
Those buttons are htmx controls, and a click did nothing because the new markup was never processed.

Co-authored-by: Cursor <[email protected]>
2026-10-20 16:58:43 +00:00
4cuckandCursor 601da983e0 Retry a search on another account when its 429 still carries a rate-limit window.
Empty-body account limits were treated as a blocked proxy IP, so visitors got 429 while other cookies still had budget.

Co-authored-by: Cursor <[email protected]>
2026-10-20 16:05:22 +00:00
4cuckandCursor 2689a1f1d4 Add Explore, game highlights, and trending stories.
Move accounts that cannot change their settings out of the live pool so they can be fixed later.

Co-authored-by: Cursor <[email protected]>
2026-10-20 08:08:43 +00:00
4cuckandCursor fadab2cb13 Center and compact timeline pagination controls.
Co-authored-by: Cursor <[email protected]>
2026-10-20 06:39:15 +00:00
4cuckandCursor f0c1b6c20c Stop gallery auto-scan after forty empty results.
Co-authored-by: Cursor <[email protected]>
2026-10-20 06:31:27 +00:00
4cuckandCursor c378025e6c Keep media galleries moving through empty cached pages.
Co-authored-by: Cursor <[email protected]>
2026-10-20 06:24:23 +00:00
4cuckandCursor 7baf62ec9e Explain why some accounts stay out of search.
Co-authored-by: Cursor <[email protected]>
2026-10-20 05:34:38 +00:00
4cuckandCursor f361b6c594 Park a proxy exit when X rate-limits its IP.
Co-authored-by: Cursor <[email protected]>
2026-10-20 05:26:00 +00:00
4cuckandCursor 58f09c286c Note that posting will take months, and set the version to 0.19.0.
Co-authored-by: Cursor <[email protected]>
2026-10-20 01:35:25 +00:00
4cuckandCursor 5c18c66429 Show this month's donations on the homepage, and reset the counter on the 23rd.
Co-authored-by: Cursor <[email protected]>
2026-10-19 16:27:11 +00:00
4cuckandCursor e0e51f903d Keep accounts that cannot search out of search for good.
An empty SearchTimeline used to expire after a day and get tried again. The mark stays in the session state, with the account name in the log.

Co-authored-by: Cursor <[email protected]>
2026-10-19 15:58:55 +00:00
4cuckandCursor 1143f95bf4 Ask for another $120 and drop the imageboard links from the nav.
The first donation goal is met, search spam is burning accounts, and those sister-site icons do not belong on the public bar.

Co-authored-by: Cursor <[email protected]>
2026-10-19 15:48:36 +00:00
vpsandCursor 24ad9d0dfe Expose a post's translation as plain text on the status JSON.
Discord still reads the HTML body and ignores the extra field.

Co-authored-by: Cursor <[email protected]>
2026-10-18 22:38:37 +00:00
4cuckandCursor 170b7bcbf1 Carry proxy media onto every link in a proxied RSS feed.
A reader does not keep the cookie, so opening an item was dropping back to a page that loads pictures straight from X.

Co-authored-by: Cursor <[email protected]>
2026-10-18 20:47:13 +00:00
4cuckandCursor 6f5eaa50f3 Note that a busy instance should leave the per-account cap uncapped.
A popular teapawt otherwise queues calls once every session is sitting at a small limit.

Co-authored-by: Cursor <[email protected]>
2026-10-18 19:57:28 +00:00
4cuckandCursor 98f1493543 Stop idle connections from filling the proxy exits.
Keeping hundreds of sockets per account made later calls wait on headers, so each account now keeps a few and a slow call is given three seconds before it is abandoned.

Co-authored-by: Cursor <[email protected]>
2026-10-18 19:37:40 +00:00
4cuckandCursor aeb5299f54 Let people pick a default reply order, and honor proxy media on RSS.
Reply sort is a one-click choice on the post and in settings, and a feed URL can ask for proxied pictures without turning that on for everyone.

Co-authored-by: Cursor <[email protected]>
2026-10-18 19:04:54 +00:00
4cuckandCursor 6f9cfa0ec8 Stop a bad span or a dead connection from stalling the page.
X sometimes sends a negative text index and drops HTTP/2 streams; those used to fail the whole response or sit until the gateway gave up, and the small concurrency caps made every other call wait.

Co-authored-by: Cursor <[email protected]>
2026-10-18 18:56:00 +00:00
4cuckandCursor 89e317a2d3 Point GitHub links at teapawt and drop the fork line from the README.
The donation note also says extra money would fund thousands of accounts for ban evasion.

Co-authored-by: Cursor <[email protected]>
2026-10-14 01:56:49 +00:00
4cuckandCursor a50c0ebadd Let donation forms redirect to the card, crypto, and LZT checkouts.
Brave and Chrome were blocking those redirects because the content security policy only allowed forms to stay on this site.

Co-authored-by: Cursor <[email protected]>
2026-10-14 00:05:02 +00:00
4cuckandCursor 8a9f095c31 Count a partial crypto donation as the amount that actually arrived.
A NOWPayments invoice was being added at its full price even when only part of the coin had been sent.

Co-authored-by: Cursor <[email protected]>
2026-10-13 20:04:50 +00:00
4cuckandCursor 1528e967e8 Tell donors they can request features, and what extra money would fund.
Missing or slow parts can be requested on GitHub, and surplus donations would pay for posting, liking, and reposting.

Co-authored-by: Cursor <[email protected]>
2026-10-13 17:55:53 +00:00
4cuckandCursor 9c1dd0f29a Add a donate page for card, crypto, and LZT Market payments.
Visitors can give any amount up to $10,000, and the homepage asks for $129 by October 23.

Co-authored-by: Cursor <[email protected]>
2026-10-13 17:05:46 +00:00
4cuckandCursor 7b42783b32 Let a translate click through when automatic translations have used the minute.
If one account is out of quota, try another, and leave the button in place when it still fails.

Co-authored-by: Cursor <[email protected]>
2026-10-12 23:47:31 +00:00
4cuckandCursor 12dba443f6 Let Firefox users dismiss the media tracking warning.
The choice is remembered for a year, and resetting preferences shows the warning again.

Co-authored-by: Cursor <[email protected]>
2026-10-12 23:21:52 +00:00
4cuckandCursor bd6db0a940 Warn Firefox users that tracking protection flags direct Twitter media.
The proxy option no longer says it might be slow, and preference controls stay beside their labels.

Co-authored-by: Cursor <[email protected]>
2026-10-12 23:04:07 +00:00
4cuckandCursor 5094ab658e Add broadcast and community pages plus HLS playback, and tighten preferences.
Skip the Cloudflare cache warning when media is not proxied.

Co-authored-by: Cursor <[email protected]>
2026-10-12 22:50:25 +00:00
4cuckandCursor c63f792963 Let the browser load Twitter media directly, with a preference to proxy it.
Co-authored-by: Cursor <[email protected]>
2026-10-12 22:31:27 +00:00
4cuckandCursor e9c86c04a3 Pack the timeline tighter, put the time under the name, and add the Nitter themes.
Co-authored-by: Cursor <[email protected]>
2026-10-12 22:08:22 +00:00
vpsandCursor d5d6312a4e Stop reusing a dead CDN connection for images and video.
A shared HTTP/2 session to video.twimg.com sat in retransmits for seconds after the CDN dropped it, so playback stalled and then loaded.

Co-authored-by: Cursor <[email protected]>
2026-10-12 21:50:12 +00:00
4cuck cc390c9b30 Show a page when X fails to fill one field of it, instead of an internal error. 2026-10-09 22:13:11 +00:00
4cuck d5b8abfd36 Read profile counts, banner, website, and pinned post from X's current user layout. 2026-10-09 22:07:05 +00:00
4cuck 5d609d621e Read X's live GraphQL ids, skip accounts X refuses search, and stop retry loops.
- Read each operation's current query id and feature flags from X's web
  client, keep them in graphql-ops.json, refresh them hourly, and read them
  again when two accounts get nothing back for the same call.
- Leave an account out of an operation for a day when X answers it with an
  empty 404 while another account gets results. Check unchecked accounts'
  search access in the background and prefer accounts known to work.
- Send search the way Chrome does (variables, features, referer) and load
  X's script chunks with Chrome's headers. Keep a transaction-id refusal only
  when dropping the id helped.
- Require three handshakes before using a browser version; one lucky
  handshake let Chrome 152 through while X refused it.
- Add a round-robin fallback proxy pool for HTML 429s, with clients shared
  per browser so exits reuse connections.
- Drop the browser auto-retry and the per-account retries on empty answers,
  and log expected empty answers at trace.
2026-10-09 20:42:33 +00:00
4cuck b8fe22b76d Add a Lists search tab and open list pages with their banner and posts. 2026-10-06 04:20:29 +00:00
4cuck 979b7b89cf Add a profile Reposts tab and send X requests in the captured Chrome header order. 2026-10-06 02:55:30 +00:00
4cuck 01c8303fc2 Give the homepage and profile search fields room for their placeholder text. 2026-10-06 02:07:36 +00:00
4cuck 48b067736b Rewrite a search only after X denylists that exact query.
Remember each rejected string so the next search skips the failure.
2026-10-06 01:44:09 +00:00
4cuck 571f94eea7 Serve a cached profile when the timeline quota is gone.
Spend that quota once per handoff, reuse scroll and RSS pages, and fall back to the replies feed without its reply-only posts.
2026-10-05 03:40:32 +00:00
4cuck b80b1960cf Preview the linked photo for unfurl bots and keep slash URLs on the same page.
Reply chains also get the thread class so the connector between them draws.
2026-10-05 03:00:46 +00:00
4cuck 3adc9754c6 Retry an HTML 429 through the configured proxy, and keep account limits direct. 2026-10-05 02:48:52 +00:00
4cuck 52114cbbf9 Explain when a video is over the 512 MB cache instead of playing it. 2026-10-05 02:48:52 +00:00
vpsandCursor fff4a6fd57 Restore the full profile and static sitemaps.
The earlier shrink was a false lead; Search Console fetch failures were on Cloudflare, not sitemap size.

Co-authored-by: Cursor <[email protected]>
2026-09-20 18:32:40 +00:00
vpsandCursor c5a49dda25 Add Nord Dark and Nord Light themes.
Co-authored-by: Cursor <[email protected]>
2026-09-20 18:21:48 +00:00
vpsandCursor 3bd0fc3789 Keep only our GitHub on About and shrink sitemaps so Googlebot can fetch them.
The profile sitemap listed four URLs per user and Cloudflare 520'd the download; Search Console then marked every sitemap as unreadable.

Co-authored-by: Cursor <[email protected]>
2026-09-20 18:20:57 +00:00