No description
  • Rust 57.2%
  • Vue 32.5%
  • TypeScript 9.2%
  • Dockerfile 0.5%
  • HTML 0.3%
  • Other 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Antoine Letouzey 4c673a6902 Tighten home actions and keep draw, sets, and results readable.
Make create/join real buttons, lock canvas size across phases, widen set grids, and show drawing, truth, and your pick on results.
2026-10-02 02:01:39 +02:00
client Tighten home actions and keep draw, sets, and results readable. 2026-10-02 02:01:39 +02:00
public Skip reveal, draw through fade, and add lobby, color, and set tooling. 2026-09-16 11:08:28 +02:00
server Ship Docker Compose and move the default port to 3010. 2026-09-16 18:29:53 +02:00
.dockerignore Ship Docker Compose and move the default port to 3010. 2026-09-16 18:29:53 +02:00
.env.example Ship Docker Compose and move the default port to 3010. 2026-09-16 18:29:53 +02:00
.gitignore Initial project specs for Acrylic Fever Dream. 2026-09-14 12:00:38 +02:00
art-memory-specs.zip server: painting set upload API, host set selection, random eligible set pick 2026-09-14 14:01:07 +02:00
docker-compose.yml Ship Docker Compose and move the default port to 3010. 2026-09-16 18:29:53 +02:00
Dockerfile Ship Docker Compose and move the default port to 3010. 2026-09-16 18:29:53 +02:00
README.md Ship Docker Compose and move the default port to 3010. 2026-09-16 18:29:53 +02:00
SPEC.md Initial project specs for Acrylic Fever Dream. 2026-09-14 12:00:38 +02:00
TASKS.md Align client with spec review and add deployment pieces. 2026-09-14 13:28:14 +02:00

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.