Commit Graph
122 Commits
Author SHA1 Message Date
4cuck 95cc2df375 Route GraphQL through session-pinned SOCKS5 and serve repeats from cache.
Search and profiles were paying a new tunnel plus extra X hops on every hit; keep-alive, first-page SWR, and the example config document a reverse-proxied instance without committing live exits.
2026-09-02 19:59:32 +00:00
4cuck b41745925c Retry empty GraphQL 404s instead of calling the search not found.
X often 404s SearchTimeline with an empty body across several sessions in a row; those are blips, so we walk more sessions and say try again if it still fails.
2026-08-31 14:40:43 +00:00
4cuck 92dcab30ca Stop treating locked cookie sessions as suspended profiles.
X error 326 and GraphQL 404s were shown as the viewed account being gone; those are session/WAF blips, so we sideline the bad session and retry once.
2026-08-31 14:32:13 +00:00
4cuck 83a5b64a8c prefs: let the theme cookie be read from script
(cherry picked from commit 715ac11748e12faef2c4376b85acf0ed61354b29)
2026-08-31 14:23:47 +00:00
4cuck 827833cf79 views: show country and translation on quoted posts
(cherry picked from commit 458358c525b6770ecd6cc983d6c9e26958b3245f)
2026-08-31 14:23:47 +00:00
4cuck fabccf5039 views: say what a suspended or missing account means
(cherry picked from commit 2ab687562656e387789c1be213189a6abdfae4be)
2026-08-31 14:23:22 +00:00
4cuck 1e8707fa47 Turn off X's default NSFW filters on new cookie sessions.
New accounts hide sensitive media and strip it from search, which leaks into teapawt results; each cookie session now POSTs those settings off once at startup.
2026-08-31 14:20:35 +00:00
4cuck db77470c5b Rebrand the public identity as teapawt with the cup-and-paw logo. 2026-08-30 02:31:22 +00:00
4cuck a427103cc2 Restore the icon navbar and drop the hamburger menu.
Icons stay in the top bar with hover titles so you do not need an extra click.
2026-08-30 02:10:00 +00:00
vpsandCursor a13e8ce0d3 Merge amaanq/teapot: about-account, mobile nav, and landing refresh.
Keep nitter.cf branding, sister-site links, search dedupe, and the safer X error mapping.

Co-authored-by: Cursor <[email protected]>
2026-08-30 01:54:25 +00:00
vpsandCursor 904ff9bfc2 Add nitter.cf instance branding, search dedupe, and safer API errors.
Keep keyword search from repeating the same viral tweet on every retweet, encode pagination cursors, and treat X 404s as not-found instead of 500s. Sessions, live config, and logs stay untracked.

Co-authored-by: Cursor <[email protected]>
2026-08-30 01:54:05 +00:00
4cuck 95e375759f views: fill the photo rail grid evenly 2026-08-29 21:43:43 -04:00
4cuck e17ee3ce23 views: mark thread position on timeline items 2026-08-29 21:43:43 -04:00
4cuck 5834c2a5ce views: add a mobile navigation menu 2026-08-29 21:43:43 -04:00
4cuck 9afb6bc6be views: abbreviate profile stat counts 2026-08-29 21:43:43 -04:00
4cuck 5f5055bfd4 views: add the sticky thread context bar 2026-08-29 21:43:43 -04:00
4cuck 02939eda6b views: rework the landing page and search results 2026-08-29 21:43:43 -04:00
4cuck eb4bc4dc76 views: group the settings form into sections 2026-08-29 21:43:42 -04:00
4cuck cfde3da668 views: show X's about-account panel 2026-08-29 21:43:42 -04:00
4cuck c6d002b92e routes: resolve about-account data without fanning out 2026-08-29 21:43:42 -04:00
4cuck 2a8cce1eed config: add the X-Posed community cache toggle 2026-08-29 21:43:42 -04:00
4cuck 78b57d7534 api: read X's about-account record 2026-08-29 21:43:42 -04:00
4cuck 56de5c7835 types: carry X's about-account fields on User 2026-08-29 21:43:42 -04:00
4cuck f0258f8f5d pages: show the crate version on the about page 2026-08-29 06:05:31 -04:00
4cuck 6943e19733 config: take error messages as a list and rotate them 2026-08-29 05:40:46 -04:00
4cuck 02ba12c9a9 api: account every authenticated call against its session 2026-08-29 04:15:22 -04:00
4cuck 22bfc26734 api: refuse locally when every session is out of budget 2026-08-29 04:15:22 -04:00
4cuck b45a46c47e api: do not retry a 429 onto an exhausted session 2026-08-29 04:15:22 -04:00
4cuck e0950678b9 api: keep rate-limit state across restarts 2026-08-29 04:15:20 -04:00
4cuck cb0019f7c9 api: refresh the stale SearchTimeline query ID 2026-08-29 03:36:00 -04:00
4cuck 76ee933467 api: keep a recorded rate limit over the code 88 fallback 2026-08-29 03:12:57 -04:00
4cuck 3d9307a5b5 api: split graphql header construction out of the request 2026-08-29 03:12:57 -04:00
4cuck 2a6b7d27b3 routes: move definitions out of the module roots 2026-08-29 03:12:57 -04:00
4cuck 7e6aa35ff2 routes: report exhaustion instead of an internal error 2026-08-29 03:12:56 -04:00
4cuck 419476082b api: bill upstream calls to the requesting client 2026-08-29 03:12:54 -04:00
4cuck 133c8b8591 api: retry and sideline a session whose credentials are refused 2026-08-29 02:42:13 -04:00
4cuck 5de552e386 api: scope a 429 to the endpoint that returned it 2026-08-29 02:42:13 -04:00
4cuck 13fa639f8c api: restore transaction ID generation 2026-08-29 02:42:13 -04:00
4cuck bbf2ab3442 views: improve embeds, feeds, and privacy-safe rendering 2026-07-15 21:06:50 -04:00
4cuck 6e3418b10d runtime: harden API sessions and route execution 2026-07-15 21:06:47 -04:00
4cuck 5695b439c9 discord: improve embeds 2026-07-15 16:26:29 -04:00
4cuck b75d379642 embeds: match status metadata shape 2026-06-11 22:32:47 -04:00
4cuck f8d391aed3 embeds: fix quoted media 2026-06-11 18:58:41 -04:00
4cuck a7887b29b6 security: harden media and preference boundaries
Default signing keys made media proxy URLs forgeable, and unauthenticated
media fetches let arbitrary upstream hosts consume server-side network
access. This commit makes those boundaries explicit, limits buffered upstream
bodies, and keeps externally sourced text escaped at raw rendering sinks.
2026-06-11 18:58:26 -04:00
4cuck 740584d048 cache: bound in-memory cache with size cap and expiry-ordered eviction 2026-05-30 22:28:02 -04:00
4cuck 1eb036d196 ui: redesign from scratch 2026-04-17 13:26:48 -04:00
4cuck 7321ee27bf translate: add Kagi Translate as user-configurable alternative
Users can set their Kagi session token in preferences to use Kagi
Translate instead of Twitter's Strato API. The /translate endpoint
reads the kagiToken cookie and routes accordingly, falling back to
Strato when no token is set.
2026-03-25 17:21:47 -04:00
4cuck 8c59923835 all: cargo fmt 2026-03-20 03:04:00 -04:00
4cuck 29cb6e9010 translate: add click-to-translate for non-English tweets via htmx
Shows a 'Translate post' button on tweets where legacy.lang is not
English. Clicking it fires an htmx GET to /translate/{id} which calls
Twitter's Strato translation API (Google Translate backend) and swaps
the button with the translated text and source language header. Adds
lang and is_translatable fields to the API schema, a Translation
struct, and the translate_tweet client method with cookie-session auth.
2026-03-20 03:04:00 -04:00
4cuck de3c43b64d htmx: add htmx support 2026-03-20 01:33:40 -04:00