Files
ryan.mcgee 0db69509b1 Add Zola site, task scraper, and project scaffolding
- Scrapes 1592 Demonic Pacts tasks from the OSRS Wiki into tasks.json
- Zola static site with OSRS-themed dark UI, filters, search, and progress tracking
- Client-side localStorage persistence and RuneLite JSON import/export
- Live countdown to league end date in the site header
2026-05-26 09:24:14 -05:00

77 lines
2.2 KiB
Markdown

# Leagues Task Fixer
A static website for tracking [Old School RuneScape](https://oldschool.runescape.wiki) Leagues task completion. Built with [Zola](https://www.getzola.org).
## Features
- **1592 tasks** for the Demonic Pacts League, scraped from the OSRS Wiki
- Filter by difficulty, area, and completion status
- Search by task name or description
- Completion status persisted in browser `localStorage`
- Live countdown to league end
- Import task completions from a RuneLite JSON export
- Export completion state as JSON (compatible with tasks-tracker-plugin format)
## Project Structure
```
OSRS-Task-Fixer/
├── scripts/
│ ├── scrape_tasks.py # Scrapes task data from the OSRS Wiki
│ └── requirements.txt
└── website/ # Zola site
├── config.toml # Site config (league name, end date)
├── content/
├── templates/
└── static/
├── data/tasks.json # Generated task data (committed)
├── css/style.css
└── js/tracker.js
```
## Development
**Prerequisites:** [Zola](https://www.getzola.org/documentation/getting-started/installation/) and Python 3.10+
```bash
# Serve locally with live reload
cd website
zola serve
# Build static output to website/public/
cd website
zola build
```
## Updating Task Data
Re-run the scraper whenever task data changes on the wiki:
```bash
pip install -r scripts/requirements.txt
python scripts/scrape_tasks.py
```
The updated `website/static/data/tasks.json` can then be committed.
## RuneLite Import
Export your task completions from RuneLite using either:
- [tasks-tracker-plugin](https://github.com/osrs-reldo/tasks-tracker-plugin)
- [osleague-runelite-plugin](https://github.com/tylerthardy/osleague-runelite-plugin)
Then click **Import RuneLite** on the site and select the exported `.json` file.
## Updating for a New League
1. Update `league_name` and `league_end_date` in `website/config.toml`
2. Re-run the scraper with the new league's wiki URL:
```bash
python scripts/scrape_tasks.py --url https://oldschool.runescape.wiki/w/<LeagueName>/Tasks
```
3. Commit the updated `tasks.json`
## License
GPL-3.0 — see [LICENSE](LICENSE).