Commit Graph
124 Commits
Author SHA1 Message Date
tonymandClaude Fable 5.1 82f0a1247c ci: replace upstream's GHCR release workflow with a Gitea CI (tests + image build)
CI / image (push) Failing after 5s
CI / test (push) Failing after 6s
Upstream's build.yaml pushes to ghcr.io and has failed on every push since the
fork — those reds were never ours. Gitea now runs the 17 tests and a docker
build with no push.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014LCQmFvKshyAJsE8C3B5ET
2026-10-19 03:06:55 -05:00
tonym 83f4d0d232 ci: re-run after the mini runner's socket-mount failures (no code change)
Build / Build and release (push) Failing after 28m22s
2026-10-19 02:44:02 -05:00
tonymandClaude Fable 5.1 59ed6a5951 feat(otm): shared OTM login look, ported verbatim (0.4.2)
Build / Build and release (push) Failing after 1s
Port OTM_LOGIN_CSS + the otm-login markup structure from
@otm/account-panel otm-login-core.ts 0.44.0 verbatim into
login_page() (brand "13ft" / "Read the article without the cruft.",
accent --otm-accent:#b5562a copper, otherwise the module's neutral
ink defaults). Still OTM-only (no "Other ways to sign in"), fail-closed
503 copy + reasons + tides beacon unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014LCQmFvKshyAJsE8C3B5ET
2026-10-19 00:21:58 -05:00
tonymandClaude Fable 5.1 9b37dd5f2b feat(otm): sign-in page onto the shared OTM standard (0.4.1)
Build / Build and release (push) Failing after 15s
Restyle login_page to the platform standard: brand (name + tagline)
above one centered card, "Sign in with OTM" as the full-width primary
button, and a muted Face ID/Touch ID/passkey helper line under it.
13ft has no local accounts, so there's no "Other ways to sign in"
step. The fail-closed "isn't wired to OTM yet" 503 copy and the tides
beacon are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014LCQmFvKshyAJsE8C3B5ET
2026-10-18 23:32:37 -05:00
tonym f76c562a29 docs: 13ft is live as a first-party app behind Sign in with OTM (2026-10-19)
Build / Build and release (push) Failing after 13s
2026-10-18 23:18:34 -05:00
tonymandClaude Fable 5.1 71abf89784 feat: Sign in with OTM, health, changelog, tides beacon, Ideas — first OTM release (0.4.0)
Build / Build and release (push) Failing after 19s
app/otm.py is the Python port of pickup's ticket verifier (HS256, mandatory
exp, audience check, alg only read to reject, never raises) plus a signed
session cookie and an in-memory single-use jti guard. portable.py gates every
route but PUBLIC_PATHS behind a session and fails CLOSED (503) with no secret
— it is a fetch proxy. /api/health reports the version, /changelog renders
CHANGELOG.md, the footer carries version/sign-out/Ideas, tides beacon from
TIDES_HOST/TIDES_SITE_ID. Dockerfile: OTM labels + HEALTHCHECK. 17 tests.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014LCQmFvKshyAJsE8C3B5ET
2026-10-18 22:22:27 -05:00
tonymandClaude Fable 5.1 d2d8c55d46 docs: CLAUDE.md — OTM fork context + the first-party-app plan
Build / Build and release (push) Failing after 11s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014LCQmFvKshyAJsE8C3B5ET
2026-10-14 11:23:49 -05:00
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 8783575a33 Add .DS_Store to .gitignore 2026-07-12 20:02:20 +06:00
Wasi Master 86fdd2ec0d Merge pull request #48 from moduvoice/i18n/add-korean
i18n: add Korean (ko) translation
2026-07-12 18:08:19 +06:00
moduvoice 161c291e51 i18n: add Korean (ko) locale
Adds app/locales/ko.json with a natural Korean translation of all 25
UI strings, matching the exact key structure of en.json, and lists
ko under the Built-in locales section of the README.
2026-07-11 22:12:47 +07: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
Wasi Master 28c3fb659d Update ghcr pulls badge link in README.md 2026-05-15 04:52:35 +06:00
Wasi Master b1db030826 vercel 🥳 2026-05-15 04:19:57 +06:00
Wasi Master 9eff9d1806 Add vercel support? 2026-05-15 04:04:15 +06:00
Wasi Master 7965a41119 Merge pull request #47 from xabirequejo/main
Add Basque localisation
2026-05-15 03:47:02 +06:00
Xabi 66fa9d53e5 Create eu.json
Add Basque localisation
2026-05-14 14:11:15 +02:00
Wasi Master 52a0323106 Merge pull request #45 from wasi-master/imgbot 2026-05-12 04:16:59 +06:00
ImgBotApp c7ae4d36c7 [ImgBot] Optimize images
*Total -- 10,224.60kb -> 4,805.39kb (53%)

/screenshots/step-4.gif -- 10,120.37kb -> 4,715.09kb (53.41%)
/logo.png -- 104.22kb -> 90.30kb (13.36%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2026-05-11 21:07:52 +00:00
Wasi Master c86145a677 Add shields.io badges 2026-05-12 01:45:04 +06:00
Wasi Master 0915fbe2d9 Also publish to docker hub alongside ghcr 2026-05-12 01:29:21 +06:00
Wasi Master 635f263f13 Update README.md 2026-05-12 01:10:37 +06:00
Wasi Master b2c5922f68 Update README.md 2026-05-12 01:08:47 +06:00
Wasi Master 006373619e Add few more locales 2026-05-12 00:59:46 +06:00
Wasi Master 7f570368f0 Merge pull request #42 from wasi-master/copilot/feat-make-strings-localisable
feat: make UI strings localisable via LOCALE environment variable
2026-05-12 00:54:25 +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 6e50c9c182 Merge remote branch history after rebase
Co-authored-by: wasi-master <63045920+wasi-master@users.noreply.github.com>
2026-05-11 18:44:26 +00:00
copilot-swe-agent[bot]andwasi-master 9f851e3207 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:43:54 +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 b6b831f156 Initial plan
Co-authored-by: wasi-master <63045920+wasi-master@users.noreply.github.com>
2026-05-11 18:36:15 +00:00
Wasi Master 3d4db07d97 Merge pull request #44 from wasi-master/copilot/apply-review-comments
Fix review issues from PR #43: XSS, duplicate imports, dead code, URL encoding, threading, deduplication
2026-05-12 00:29:53 +06: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 e1dd3925b2 Merge pull request #43 from JRS1986/feat/status-page-and-bypass-fallbacks
Add loading status page and multi-source bypass fallbacks
2026-05-12 00:24:57 +06:00
Wasi Master 7a8998ede6 Fix logo 2026-05-12 00:23:17 +06:00
Wasi Master e85883ba4b Add logo
Closes https://github.com/wasi-master/13ft/issues/28
2026-05-12 00:13:08 +06: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
Wasi Master 5749a2a97d Merge pull request #41 from dablenparty/main
Use production-ready Gunicorn WSGI server instead of Flask dev server
2026-05-11 23:34:46 +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
Wasi Master 641ec49000 Update README 2026-04-25 21:08:36 +06:00
copilot-swe-agent[bot]andwasi-master ce8e8c1664 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-04-02 12:01:51 +00:00
copilot-swe-agent[bot] ef12cd0184 Initial plan 2026-04-02 11:49:53 +00:00
Wasi Master d3505fd544 Update README.md 2026-02-24 19:04:55 +06:00