Why I built it
I got tired of tracking my grinds in a chaotic notes app. I was inspired by tools like Ladlor's Ironman Progression Chart and ZeroUltra's Exploration Gear Progression, but those are static and linear, so I built something I could shape around my own goals.
What it does
Grinds in Old School RuneScape are rarely a flat checklist: training two skills unlocks a boss, which drops the items you actually want. OSRS Grind lays those out as small, independent chains of icons, each one yours to build and check off.
Search a catalog of skills, bosses, monsters, minigames, quests and items scraped from the OSRS Wiki to add a step, then link steps together into a flow. There are no accounts: each board lives at a random, unguessable link, and changes sync live across devices. A separate read-only link lets friends follow along, with a count of how many times it's been viewed.
How it's built
- Code
- SvelteKit and TypeScript. The server renders each board for a fast first load, then the browser talks straight to Firestore through the Firebase Web SDK for edits and realtime sync. A catalog search endpoint serves results from a JSON file baked in at build time.
- Data
- Firestore in Native mode, with Security Rules as the only access control, since there's no login: they allow reading or editing a board by its exact ID but never listing them. The catalog comes from a Node scraper pipeline over the OSRS Wiki's API, and item icons are served from a public Cloud Storage bucket. Local development runs against the Firestore emulator, never production data.
- Hosting
- Google Cloud Run, running the SvelteKit Node server in a container, at grind.mattlove.dev.
- Deploying
- GitHub Actions builds the image on every push to main, pushes it to Artifact Registry and deploys it to Cloud Run, authenticating through Workload Identity Federation so no keys are stored. Changes to docs, scraper scripts or lint config skip the deploy, and Security Rules are deployed separately with the Firebase CLI.