https://github.com/torrentpier/ox
๐ฆ TorrentPier. Static read-only archive of the support forum (2011โ2026)
https://github.com/torrentpier/ox
archive cloudflare-d1 cloudflare-r2 cloudflare-workers forum-archive forum-software full-text-search github-pages snowball-stemmer static-site torrentpier xenforo
Last synced: about 2 months ago
JSON representation
๐ฆ TorrentPier. Static read-only archive of the support forum (2011โ2026)
- Host: GitHub
- URL: https://github.com/torrentpier/ox
- Owner: torrentpier
- License: mit
- Created: 2026-05-10T21:30:07.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-11T21:21:39.000Z (2 months ago)
- Last Synced: 2026-05-11T21:34:32.947Z (2 months ago)
- Topics: archive, cloudflare-d1, cloudflare-r2, cloudflare-workers, forum-archive, forum-software, full-text-search, github-pages, snowball-stemmer, static-site, torrentpier, xenforo
- Language: Python
- Homepage:
- Size: 12.3 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# TorrentPier Ox Archive
Static, read-only archive of the TorrentPier support forum (XenForo 2),
which ran from 2011 to 2026.
## Goal
Preserve every public thread, post, attachment, resource and profile-post
as a static, read-only site served from GitHub Pages, with binary files
hosted on Cloudflare R2 and full-text Russian search powered by a
Cloudflare Worker + D1 (SQLite/FTS5 with Snowball stemming).
## Snapshot
As of 2026-05-11:
| Threads | Posts | Authors | Resources | Wall posts | Wall comments | Reviews | Polls |
|--------:|-------:|--------:|----------:|-----------:|--------------:|--------:|------:|
| 3,304 | 45,473 | 1,120 | 230 | 217 | 120 | 60 | 17 |
R2 binaries: 3,319 attachments ยท 506 hi-res avatars ยท 136 resource icons ยท
511 resource version files ยท 549 deduped inline images. Full-text search
runs over every post body via D1 FTS5.
## Layout
| Path | What it holds |
|------------------|------------------------------------------------------------|
| `exporter/` | XenForo REST API โ JSON (CLI: `xf-export`) |
| `mirror/` | Cloudflare R2 upload for attachments / avatars / inline |
| `builder/` | Jinja2 templates โ static HTML in `dist/` |
| `search/` | Snowball-stemmed FTS5 indexer that produces `seed.sql` |
| `search-worker/` | Cloudflare Worker at `search-ox.torrentpier.com` |
| `data/` | Versioned JSON export (one file per thread / resource / user) |
| `templates/` | Jinja2 templates |
| `static/` | CSS |
## Build locally
```bash
uv venv .venv --python 3.13
uv pip install --python .venv/bin/python -e .
cp .env.example .env # fill XF_API_KEY, R2 creds; only needed for re-export
.venv/bin/python -m builder build --data data --out dist
.venv/bin/python -m http.server 8765 --directory dist
# open http://127.0.0.1:8765/
```
The exporter, mirror and search indexer all read from `data/`, so the
builder can produce the full static site without any network access.
## Architecture
See [ARCHITECTURE.md](./ARCHITECTURE.md) โ Mermaid diagrams of the data
pipeline, the search request flow, the deploy flow, plus a decisions log
and a verified map of the XenForo API surface.
## License
[MIT](./LICENSE).