A simple, public API for roller derby data. It exposes four endpoints—Structure, Rules, Official Types, and Officials—so you can incorporate roller derby information into your app with ease. The API is backed by Firestore and the documentation site is an Angular client. Both are hosted on Firebase.
Live demo: rollerderbyapi.web.app
Repo: github.com/quinise/rollerderbyapi
- Features
- Quick Start
- API Reference
- Client (Docs) App
- Project Structure
- Tech Stack
- Deployment
- Contributing
- License
- Four read-only endpoints for commonly used roller derby information.
- JSON responses sourced from Firestore collections.
- Lightweight Node.js API + Angular documentation client.
- One-command local dev for API and client.
- Node.js 18+ and npm
- A Firebase project with Firestore enabled (for local development you can use the Firebase Emulator Suite if desired)
git clone https://github.com/quinise/rollerderbyapi.git
cd rollerderbyapiFrom the repo root:
npm install
npm run start:devThe API will start on the configured port (commonly http://localhost:3000 unless otherwise set).
cd client
npm install
npm startThis runs the Angular site locally (typically on http://localhost:4200).
Tip: For a unified DX, open two terminals—one for the API and one for the docs app.
- Production: https://rollerderbyapi.web.app/api
- Local (example): http://localhost:3000/api
All responses are JSON.
If you’re calling the API from a browser app, ensure CORS is configured appropriately for your environment.
Returns the structure of roller derby (e.g., gameplay components, roles, or organizational breakdowns).
curl -s https://<your-host>/api/structure[
{
"id": "jam",
"name": "Jam",
"description": "A segment of play in which teams score points."
}
]Returns a list of rule references and summaries.
curl -s https://<your-host>/api/rules[
{
"id": "contact",
"title": "Contact",
"summary": "Guidelines on legal and illegal contact.",
"reference": "WFTDA 2023 - Section 5"
}
]Returns recognized official roles/types in roller derby.
curl -s https://<your-host>/api/official-types[
{ "id": "referee", "name": "Referee" },
{ "id": "nso", "name": "Non-Skating Official" }
]Returns officials (name + type and other attributes if available).
curl -s https://<your-host>/api/officials[
{
"id": "abc123",
"name": "Pat Quinn",
"type": "Referee"
}
]Note: The exact fields returned map to your Firestore documents.
The Angular client hosts documentation and examples of how to use the API. Start it locally with:
cd client
npm startYou can customize the docs UI or add demos showing fetch/curl examples for each endpoint. The production docs are hosted on Firebase.
rollerderbyapi/
├─ api/ # Node.js API (Express, Firestore access)
├─ client/ # Angular docs client
├─ .firebaserc # Firebase project config
├─ firebase.json # Firebase Hosting/Functions config (if present)
├─ package.json # Root scripts (start API, etc.)
└─ README.md
- API: Node.js + Express, Firestore (Google Firebase)
- Docs: Angular
- Hosting: Firebase Hosting (and optionally Functions/Emulators)
References: WFTDA and WFTDA Rules are great primary sources when curating structured derby data.
This repo is configured for Firebase hosting. A common setup:
npm install -g firebase-tools
firebase login
firebase init2. Configure hosting targets for API (if using Cloud Functions/Hosting rewrites) and the Angular client.
# From the client/ folder
npm run build
# From repo root (depending on your setup)
firebase deployAdjust steps to match your firebase.json and whether your API is deployed as Functions, a separate service, or behind rewrites.
Contributions, issues, and feature requests are welcome!
- Please open an issue describing the change.
- For PRs, include:
- A short description of the intent
- Any schema changes (if Firestore collections/fields are added/renamed)
- Updated docs (README or client UI) if applicable
This project is licensed under the MIT License. See the LICENSE file for details.
