# puzzle

This is a multiplayer puzzle game running in the browser.
See a live version at [jigsaw.hyottoko.club].

# Get Started

Note: node `^14.17.0` and npm `^7.14.0` are required. You can try with
lower versions, but it may not work.

## Quick start

This will install the dependencies, execute build and start the server.
```sh
./run start
```

## Manual start

There are other `run` scripts:

command              | explanation
---------------------|----------------------------------------
`./run install`      | installs dependencies and sets up a config if none exists
`./run build`        | builds the sources
`./run server`       | runs the server with built files
`./run tests`        | runs tests
`./run start`        | combination of `install`, `build` and `server`
`./run dev-server`   | runs the dev server (from unbuilt files)
`./run dev-frontend` | runs the dev frontend (with hmr and such)
`./run ts [...ARGS]` | run `node`, but with ts files. eg `./run ts scripts/import_images.ts`

## Dev

For development it makes sense to run both `dev-server` and `dev-frontend`
in separate shells.

```sh
./run dev-server
./run dev-frontend
```

The dev-frontend script will output something like:
```
  vite v2.3.3 dev server running at:

  > Local: http://localhost:3000/
  > Network: use `--host` to expose

  ready in 465ms.
```

Try opening the url that is output.
The frontend will proxy the following to the dev server:

- api
- image serving
- image uploading

The frontend on its own will have hot module reload (HMR) available
in this mode. Try changing a file inside `src/frontend` and see it
update without running an extra command.

The server will restart when a change is made on the server code.

Then open the url output by the dev-frontend command, eg. http://localhost:3000.

## Database

The database will automatically created in `data/db.sqlite`.


[jigsaw.hyottoko.club]: https://jigsaw.hyottoko.club
