Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Spike 50 Parts Board (self-hosted)
Parts tracker for the 2005 Rieju Spike 50: factory drawings with clickable markers, status per part (Have / Missing / Ordered / Not needed), notes, links and comments. Everything is stored on your server.
- Backend: one Node file (
server.js), no npm packages. Uses Node 22's built-in SQLite. - Data:
data/board.db(SQLite) anddata/images/(drawings you upload).
Run with Docker (recommended)
# copy this folder to the server, then:
cd spike-board
mkdir -p data && sudo chown 1000:1000 data # the container runs as user "node" (uid 1000)
docker compose up -d --build
Open http://<server-ip>:8085.
To set a password, put one in BOARD_PASSWORD in docker-compose.yml and run docker compose up -d again.
The browser then asks for BOARD_USER / BOARD_PASSWORD.
Run without Docker
Needs Node 22.13 or newer.
cd spike-board
node server.js # http://localhost:8080, data in ./data
PORT=9000 DATA_DIR=/srv/spike node server.js
Reaching it from outside your home
Keep it on your LAN or VPN (Tailscale/WireGuard) if you can. If you put it behind a reverse proxy
(Caddy, Nginx Proxy Manager, Traefik) on the internet, set BOARD_PASSWORD and use HTTPS, because
basic auth sends the password with every request.
Caddy example:
spike.example.com {
reverse_proxy 127.0.0.1:8085
}
Backup
Copy the data/ folder (stop the container first for a guaranteed consistent copy), or click
Download backup in the page header for a JSON export of all statuses, notes, links, comments and markers.
API
| Method | Path | Body |
|---|---|---|
| GET | /api/state |
|
| GET | /api/export |
(same as state, as a download) |
| PUT | /api/parts/{group}__{ref} |
{"s":"have"|"miss"|"ord"|"skip"|"none","note":"…"} |
| POST | /api/parts/{group}__{ref}/links |
{"url":"https://…","label":"…"} |
| DELETE | /api/links/{id} |
|
| POST | /api/parts/{group}__{ref}/comments |
{"text":"…"} |
| DELETE | /api/comments/{id} |
|
| PUT | /api/drawings/{group}/pins |
{"pins":{"12":[[x%,y%],…]}} |
| POST | /api/drawings/{group}/image |
raw image bytes, Content-Type: image/png (or jpeg/webp/gif) |
Groups: chassis, controls-steer, electrics, exhaust-radiator-tank-airfilter, motord, plastics, suspension, wheels.