ci/woodpecker/pr/calendar Pipeline was successful
ci/woodpecker/pr/cli Pipeline was successful
ci/woodpecker/pr/config Pipeline was successful
ci/woodpecker/pr/db Pipeline was successful
ci/woodpecker/pr/jobs Pipeline was successful
ci/woodpecker/pr/video-chat Pipeline was successful
ci/woodpecker/pr/web Pipeline was successful
ci/woodpecker/pr/worker Pipeline was successful
ci/woodpecker/push/calendar Pipeline was successful
ci/woodpecker/push/cli Pipeline was successful
ci/woodpecker/push/config Pipeline was successful
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/jobs Pipeline was successful
ci/woodpecker/push/video-chat Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/worker Pipeline was successful
39 lines
1.0 KiB
Markdown
39 lines
1.0 KiB
Markdown
# Development
|
|
|
|
Read the [philosophy](philosophy.md). Then resist the urge to add a plugin system.
|
|
|
|
## run it
|
|
|
|
you can use Node 26 and pnpm (versions in `mise.toml`) directly. or you can use
|
|
docker. one is documented-ish. the other is not.
|
|
|
|
### docker development
|
|
|
|
With Docker installed, start from `apps/web`:
|
|
|
|
```sh
|
|
mkdir -p config data public
|
|
cp -n ../../docs/when.example.yaml config/when.yaml
|
|
chmod 600 config/when.yaml
|
|
```
|
|
|
|
Fill in `config/when.yaml` and set YAML `url.app` to `http://localhost:5173`.
|
|
No `.env` file or session key is required. If you want interpolation, create an
|
|
optional `.env` beside the development Compose file. To keep sessions across
|
|
restarts, set `auth.secret` in YAML or supply a stable `AUTH_SECRET`.
|
|
|
|
Then run:
|
|
|
|
```sh
|
|
docker compose -f docker-compose.dev.yml up --build
|
|
```
|
|
|
|
Web is on 5173,
|
|
Mailpit on 8025. The [sample Compose file](compose.yaml) is for deployment, not
|
|
hot reload.
|
|
|
|
## Testing
|
|
|
|
write more than zero but not so many they aren't worth their costs.
|
|
Use the cheapest test that proves the behavior.
|