Nuxt3 + Prisma + Socket.IO + ConoHaVPS Collaborative scheduling & signage platform replacing physical whiteboards.
| Category | Highlights |
|---|---|
| Realtime | WebSocket (Socket.IO) roombased sync (<1s P95) |
| GoogleSync | Bidirectional with incrementalSync & Webhooks |
| Offline Kiosk | PWA + IndexedDB (24h cache) keeps screens alive without WiFi |
| Multilanguage | ja / en / vi / zhHans / fil / ne / ptBR |
| RBAC | ADMIN / MEMBER / DEVICE roles; OAuth2& MagicLink auth |
| IaC | Terraform (ConoHa provider) onecommand infra spinup |
| CI/CD | GitHubActions Dockerbuild SSH deploy + Watchtower |
flowchart TD
Browser & Kiosk -->|HTTPS/WSS| Nginx_LB
subgraph DockerSwarm / VPS
Nginx_LB --> Nuxt_App_1
Nginx_LB --> Nuxt_App_2
Nuxt_App_1 -- Prisma --> Postgres
Nuxt_App_2 -- Prisma --> Postgres
end
Postgres -- WALObjectStorage
# 1. Clone & install deps
$ git clone git@github.com:watchout/wbs.git && cd wbs
$ pnpm install
# 2. Copy env template & fill credentials
$ cp .env.sample .env.local
# edit .env.local with your DATABASE_URL, OAuth client info and JWT_SECRET
# 3. Start the Socket.IO server
$ pnpm dev
# 4. Prisma studio (optional)
$ pnpm prisma:studio- Node20
- pnpm
- Docker24 (for Postgres/Redis)
- Terraform1.7 (if provisioning infra)
| Script | What it does |
|---|---|
pnpm dev |
Start Socket.IO server (dev mode) |
pnpm build |
NuxtSSG/SSR build |
pnpm lint |
ESLint + Stylelint + Prettier check |
pnpm test |
Vitest unit tests |
pnpm e2e |
Playwright e2e |
pnpm prisma:migrate |
DB migration (Postgres) |
pnpm prisma:generate |
Generate Prisma client |
pnpm prisma:studio |
GUI DB browser |
# Build & run multiservice stack
$ docker compose up --build
# Nuxt: http://localhost:3000
# Postgres: localhost:5432 (user/pass in compose)# 1. Provision VPS + LB + ObjectStorage
$ cd infra
$ terraform init && terraform apply -auto-approve
# 2. Firsttime remote bootstrap (SSH)
$ ./scripts/bootstrap_vps.sh # installs docker + watchtower
# 3. Build & push image via CI (automated)Hint: default domains & IPs are output by Terraform (
terraform output).
| Key | Description |
|---|---|
DATABASE_URL |
Postgres connection string |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET |
OAuth2 creds |
JWT_SECRET |
32byte secret for session tokens |
APP_BASE_URL |
e.g. https://wbs.example.com (used for Socket.IO CORS) |
See .env.sample for full list.
For a full list of functional requirements, see:
- Unit Vitest (90% line coverage target)
- E2E Playwright on Chrome & AndroidWebView
- Load k6 (
scripts/k6_schedule_sync.js, 200rps for 15min) - Lighthouse PWA score 80
- Fork featurebranch PR (ConventionalCommits)
pnpm lint && pnpm testmust pass- Reviewers: any
@watchout/coremember - Once merged, GitHubActions autodeploys to staging
MIT License