Commit Graph
27 Commits
Author SHA1 Message Date
Wasi Master d03b120c41 Fix Freedium fallback for the current mirror layout
Build / Build and release (push) Failing after 5m53s
freedium.cfd no longer resolves, and freedium-mirror.cfd has been
rewritten as a SvelteKit app that renders the post inside <main> rather
than the old <div id="main-content">. The content check therefore
rejected every mirror response, so Medium articles always fell through
to the archive fallbacks.

Accept either marker, and reject the mirror's error pages explicitly:
they return HTTP 200 with a streamed error payload and ship an empty
<article> skeleton, so <article> alone does not prove a post rendered.

Also fix an unrelated crash in process_html_document that blocked this
path (and every page with an inline script): get_text() has no "default"
keyword, so it raised TypeError.

Closes #49
2026-09-18 03:29:28 +06:00
Wasi Master d7505d639a Improve challenge detection 2026-07-18 16:59:03 +06:00
Wasi Master f789fdcfd4 Fix for sites that have a base tag 2026-07-12 21:47:11 +06:00
Wasi Master 06746d6017 Add a favicon to pages 2026-07-12 21:18:36 +06:00
Wasi Master 9069a1cf33 Fix for news24 2026-07-12 21:18:33 +06:00
Wasi Master 48bfa0f9d3 Add page cache and browser history support
Now pressing back works and it uses the article/ path instead of rewriting dom
2026-07-12 20:40:07 +06:00
Wasi Master 05fa7f695e Add a better theme toggle 2026-07-12 20:02:30 +06:00
Wasi Master e513a8d190 Fix for seattle times
Closes https://github.com/wasi-master/13ft/issues/34
2026-05-15 05:21:21 +06:00
Wasi Master 0df86cfc2b Use query param for /status and unquote URL for vercel support
Change the /status endpoint to accept the target URL via a query parameter instead of a path component. Update client-side EventSource to call /status?url=... and import urllib.parse.unquote to decode the incoming URL. Return a 400 error when the url param is missing. This avoids routing/encoding issues with encoded URLs.
2026-05-15 05:07:30 +06:00
copilot-swe-agent[bot]andwasi-master 1cefe387ab rebase localization onto latest main
Agent-Logs-Url: https://github.com/wasi-master/13ft/sessions/85227ed8-0556-4ae4-a47b-92bfed6cfe67

Co-authored-by: wasi-master <63045920+wasi-master@users.noreply.github.com>
2026-05-11 18:48:53 +00:00
copilot-swe-agent[bot]andwasi-master e7669b7e08 feat: make UI strings localisable via LOCALE environment variable
Agent-Logs-Url: https://github.com/wasi-master/13ft/sessions/3b6e6061-c4d2-4aa1-879b-8526ccd3b1db

Co-authored-by: wasi-master <63045920+wasi-master@users.noreply.github.com>
2026-05-11 18:41:32 +00:00
copilot-swe-agent[bot]andwasi-master fc9559ad8b Apply all review comments from PR #43
Agent-Logs-Url: https://github.com/wasi-master/13ft/sessions/62de0c61-bb98-4941-9db2-3e6b22b08033

Co-authored-by: wasi-master <63045920+wasi-master@users.noreply.github.com>
2026-05-11 18:28:53 +00:00
Wasi Master e8d4393ea5 Merge branch 'main' into feat/status-page-and-bypass-fallbacks 2026-05-12 00:06:04 +06:00
Wasi Master 7ab30974b7 Remove index and rely on only portable.py 2026-05-11 23:59:32 +06:00
Jan R. SeylerandClaude Opus 4.7 f0a12864ec Add loading status page and multi-source bypass fallbacks
Replaces the previous synchronous form-POST flow (which left users
staring at a white screen for the duration of the upstream fetch)
with an SSE-driven status page that shows real-time progress through
each stage of the bypass attempt.

Bypass pipeline:
- Direct fetch with Googlebot UA (unchanged for non-Medium URLs)
- Detect Cloudflare-style anti-bot challenge pages in the response
- Fallback 1: Freedium (freedium-mirror.cfd, then freedium.cfd) for
  medium.com hosts — short-circuited before direct fetch since
  Cloudflare consistently blocks the Googlebot UA from non-Google IPs
- Fallback 2: archive.org Wayback Machine snapshot
- Fallback 3: archive.today / archive.ph / archive.is / archive.li
  mirrors (all four tried in sequence)
- Surface a clear error if every source fails

UI:
- Animated step list with spinner / checkmark per stage
- Progress bar and elapsed-time counter
- Honest error box with retry button instead of a blank page

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 15:00:00 +02:00
dablenparty 53cf57ec60 Add gunicorn production server 2025-10-01 12:00:35 -04:00
dablenparty 71bfa80778 Format files 2025-10-01 11:34:07 -04:00
Wasi Master cbb40f9e94 Autofocus on input field
Closes https://github.com/wasi-master/13ft/issues/31
2024-10-27 15:57:11 +06:00
Wasi Master 40b1d9aa95 Fix Placeholder Chrome Version in User-Agent
Closes https://github.com/wasi-master/13ft/issues/22
2024-08-20 20:03:04 +06:00
Wasi Master f68c29a1dc Update portable.py 2024-08-14 15:49:18 +06:00
Wasi Master d89e451405 Add dark mode to portable.py 2024-08-14 13:38:33 +06:00
Wasi Master d7260ebd7c Format files 2024-08-14 13:17:52 +06:00
Luiz F. Picolo 73b410fc3e Added restart and remove desnecessary version 2024-08-05 21:56:54 -04:00
Luiz F. Picolo a941346fde Improve UI 2024-07-09 18:29:27 -04:00
Justin Paul 69544ada63 Update portable.py 2023-10-31 09:28:13 -04:00
Justin Paul 32cde2f385 Update portable.py
listen on all interfaces
2023-10-31 09:25:14 -04:00
Justin Paul 11d13ae0ef dockerized 2023-10-31 09:11:54 -04:00