- Rust 57.2%
- Vue 32.5%
- TypeScript 9.2%
- Dockerfile 0.5%
- HTML 0.3%
- Other 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Make create/join real buttons, lock canvas size across phases, widen set grids, and show drawing, truth, and your pick on results. |
||
| client | ||
| public | ||
| server | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| art-memory-specs.zip | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
| SPEC.md | ||
| TASKS.md | ||
Acrylic Fever Dream
A multiplayer asymmetric drawing and deduction game.
Each player studies a different painting, draws it from memory, then all players solve a one-to-one matching puzzle to determine which drawing came from which painting.
Stack
- Backend: Rust, Axum, Tokio, WebSockets
- Database: SQLite for painting metadata/catalog
- Frontend: Vue 3, TypeScript, Vite, Pinia
- Active game state: in Rust memory
See SPEC.md for the complete game and technical specification and TASKS.md for the implementation plan.
Development
Requires Node 20+ and a recent Rust toolchain.
# Terminal 1 — backend (http://localhost:3010)
cd server
cargo run
# Terminal 2 — frontend (http://localhost:5173, proxies /ws and /paintings)
cd client
npm install
npm run dev
Tests
cd server
cargo test
Production (single process)
cd client && npm run build && cd ..
cd server && cargo run
The server serves the Vue dist/ bundle, WebSocket endpoint, SQLite catalog, and painting assets.
Docker
One container runs the whole app (frontend, WebSocket, SQLite, paintings):
docker compose up --build
Then open http://localhost:3010. The database and uploaded painting sets are kept in named volumes.
Or without Compose:
docker build -t acrylic-fever-dream .
docker run -p 3010:3010 -v afd-data:/app/data -v afd-uploads:/app/public/paintings/sets acrylic-fever-dream
Configuration
| Variable | Default | Purpose |
|---|---|---|
PORT |
3010 |
HTTP/WebSocket port |
DB_PATH |
server/data/paintings.db |
SQLite catalog (created and seeded on first run) |
ASSETS_DIR |
public/paintings |
Painting image directory served at /paintings/ |
CLIENT_DIR |
client/dist if present |
Built frontend to serve |
STUDY_SECS / FADE_SECS / DRAW_SECS / REVEAL_SECS / MATCH_SECS |
host split / 15 / 120 |
Phase durations. Study+draw / fade / memory follow 60/20/20 of the host’s 1–3 minute choice unless these env vars are set. |
Optional overrides go in a project-root .env (loaded automatically).
Painting assets
The seeded catalog references real artworks by title/artist, but the bundled images in public/paintings/ are generated placeholder SVGs. Drop real reproductions in with the same file names (or edit the seed in server/src/paintings.rs) to play with actual paintings.
You can also upload custom sets in the app at /sets/new (PNG/JPG plus a set title). Uploaded images are stored under public/paintings/sets/<id>/ and appear in the lobby painting-set picker.