Starts the Go API and the Vite dev server as background jobs; 'wait -n' returns when the first one exits and the EXIT trap kills the rest, so one Ctrl-C (or either server crashing) stops everything. Installs web/node_modules on first run. Verified: both ports respond, SIGINT leaves no orphan processes.
45 lines
1.3 KiB
Markdown
45 lines
1.3 KiB
Markdown
# spreadlab
|
|
|
|
Self-hosted dashboard that runs an agent-based deepfake-spread model live:
|
|
change the levers, watch the spread, and (later) search for the best
|
|
intervention under a budget. Output is illustrative, not validated.
|
|
|
|
Status: milestone 2, thin API + parity page done.
|
|
|
|
## Layout
|
|
|
|
- `internal/engine/` - the pure simulation engine (no web dependencies)
|
|
- `internal/api/` - thin JSON API over the engine
|
|
- `cmd/spreadlab/` - the server binary (`-table` prints a CLI comparison)
|
|
- `web/` - Vue 3 + TypeScript frontend (Vite)
|
|
- `web/src/types/` - TypeScript types GENERATED from the Go structs; never
|
|
edit by hand, regenerate with `go generate ./...`
|
|
|
|
## Development
|
|
|
|
One command (installs frontend deps on first run, Ctrl-C stops everything):
|
|
|
|
```sh
|
|
./dev.sh
|
|
```
|
|
|
|
Or manually, in two terminals:
|
|
|
|
```sh
|
|
go run ./cmd/spreadlab # API on localhost:8080
|
|
cd web && npm run dev # Vite dev server, proxies /api to :8080
|
|
```
|
|
|
|
Checks:
|
|
|
|
```sh
|
|
go test ./... # engine + API tests
|
|
golangci-lint run ./... # Go linter
|
|
go test -bench=. -benchmem ./internal/engine/ # benchmark baseline
|
|
cd web && npm run test:unit && npm run lint && npm run type-check
|
|
```
|
|
|
|
After changing `Config`, `Result`, or the API response types, run
|
|
`go generate ./...` and commit the regenerated files in `web/src/types/`.
|
|
|
|
MIT licensed.
|