ruinivist 17d01aff21 fix: properly bundle and cache frontend assets
- Build frontend assets natively with Bun to dist/public/ via `src/index.html` entrypoint
- Serve static assets in production with `Cache-Control: public, max-age=31536000, immutable` caching headers
- Preserve native `bun run dev` routing for seamless HMR by retaining development mode conditions in the server router
- Exclude `index.html` from long-term cache headers to allow for production updates
2026-05-29 18:14:25 +00:00
2026-05-24 15:32:36 +00:00
2026-05-24 18:53:24 +00:00
2026-05-24 18:36:09 +00:00
2026-05-24 15:32:36 +00:00
2026-05-24 15:32:36 +00:00

excali-box

Private self-hosted Excalidraw with Bun and SQLite.

This is bare wrapper around the excalidraw packages that adds autosave and disk-persistence. No auth to keep things simple - you either run in a private network or put it behind a Caddy auth or similar solutions.

GPT 5.5 generated

Pull from GHCR and run

Images are published to:

ghcr.io/ruinivist/excalidraw-box:<version>

docker pull ghcr.io/ruinivist/excalidraw-box:latest
docker run --rm -p 127.0.0.1:3000:3000 -v "$PWD/excali-box-data:/data" ghcr.io/ruinivist/excalidraw-box:latest

Run locally

bun install
bun run dev

Open http://localhost:3000.

Test

bun run test
bun run typecheck

Build the image

docker build -t excali .
docker run --rm -p 127.0.0.1:3000:3000 -v "$PWD/excali-box-data:/data" excali

This will make the data persistent in the excali-box-data folder in the current directory, the site will be available at localhost:3000.