Intensity helps couples and friends create deeper connection through shared experiences. Collect unusual ideas in themed boxes, rate how intense each one feels, and when you're together draw one at random and reveal it deliberately — after aligning on mood and limits. Groups form by playing together and grow through invites. The rhythm is simple: collect → draw → live the moment. Not a task list or a social network — connection, intensity, and discovery, lived with presence.
Try the product in the browser (no app install). Sample data resets daily.
| App | https://demo-intensity.narvane.com.br |
| Swagger | https://demo-intensity-api.narvane.com.br/swagger-ui.html |
| Accounts | leo@demo.intensity.app · maya@demo.intensity.app · nico@demo.intensity.app |
| Password | demo1234 |
Tour tip (current product): Sign in as Leo (shortcut chips on the login screen) → you land on Groups → open Leo & Maya or Trio de viagem → Play on a box → confirm you are the host → share the code / open session. In another browser (or after sign-out), sign in as Maya or Nico → confirm presence on the yellow banner (boxes that require everyone stay pending until all confirm). Back as Leo → Open session / Go to draw → draw and reveal. To try Join: Groups → Join with code DEMOTR (seeded invite on the trip group; use a fresh account or clear session first).
For a phone-sized preview in desktop Chrome/Firefox/Edge: open DevTools (F12) → toggle device toolbar (Ctrl+Shift+M / Cmd+Shift+M) → pick a mobile device.
Product documentation
| Locale | Spec | |
|---|---|---|
| 🇧🇷🇵🇹 | Portuguese (Brazil / Portugal) | @ref:docs-pt-br — docs/pt-br/ |
| 🇬🇧 | English (UK) | @ref:docs-en — docs/en/ (canonical) |
| 🇮🇹 | Italian | @ref:docs-it — docs/it/ |
Reference map: @ref:refs — docs/refs.yaml
| Tool | Version |
|---|---|
| JDK | 21 |
| Node.js | 22 LTS |
| npm | 10+ |
| Docker | 24+ with Compose v2 |
├── README.md Product entry (this file)
├── backlog.md What to build next
├── docs/ Product & engineering knowledge (en / pt-br / it) + refs.yaml map
├── openapi/ Contract-first OpenAPI v1
├── api/ Spring Boot REST API (Java 21)
├── client/ React + Capacitor mobile app
├── deploy/ Production + public demo VPS stack (Compose + Caddy)
├── assets/ Brand logos (also imported by the Vite client)
├── ia/ Agents, skills, and tasks for AI-assisted evolution
└── scripts/ Repo tooling (`validate-refs.py`)
cd api
docker compose up -d
./mvnw spring-boot:run- Health: http://localhost:8080/actuator/health
- OpenAPI (dev): http://localhost:8080/v3/api-docs
Demo profile (sample world): create/reset DB intensity_demo via api/scripts/reset-demo-db.sh (or first-time compose init), then:
SPRING_PROFILES_ACTIVE=demo ./mvnw spring-boot:runAccounts: leo@demo.intensity.app / maya@demo.intensity.app / nico@demo.intensity.app — password demo1234. See @ref:deploy-readme.
cd client
npm install
npm run dev- Dev server: http://localhost:5173
- API URL:
VITE_API_URL=http://localhost:8080(seeclient/.env.development) - Optional:
VITE_API_PROXY_TARGETproxies/v1in Vite; production also usesVITE_INVITE_BASE_URLfor invite links - Demo SPA build:
npm run build:demo(usesclient/.env.demo); publish withdeploy/publish-demo-client.sh
cd client
npm run build
npx cap syncOpen the native project in Android Studio or Xcode for emulator/device runs.
Android emulator API host: 10.0.2.2:8080; physical device: your machine LAN IP.
GitHub Actions runs ./mvnw test, builds the Docker image, and pushes to GHCR on push to master.
Required repository secrets:
| Secret | Purpose |
|---|---|
DEPLOY_WEBHOOK_URL |
POST URL on VPS to pull and restart API after image push |
DEPLOY_WEBHOOK_SECRET |
Shared secret sent as X-Deploy-Secret header |
On the VPS .env (see @ref:deploy-readme), configure also INTENSITY_RESEND_API_KEY, INTENSITY_RESEND_FROM, and INTENSITY_APP_BASE_URL for password-reset email.
GHCR push uses the built-in GITHUB_TOKEN (no extra PAT required for public repos).
VPS setup: see @ref:deploy-readme — deploy/README.md — copy deploy/.env.example → .env, run ./deploy.sh.
Public demo (optional): same VPS, isolated DB — deploy/.env.demo.example → .env.demo, then ./deploy-demo.sh. See @ref:deploy-readme.
Order: deploy API first, then store client release.
- Set
client/.env.production→VITE_API_URLandVITE_INVITE_BASE_URLfor your domains npm run build:store(production Vite build + Capacitor sync with HTTPS scheme)- Sign and upload in Android Studio / Xcode
Full checklist: @ref:store-release — client/STORE_RELEASE.md
- API: Java 21, Spring Boot 3.5, Maven, Hibernate, Flyway, PostgreSQL 16
- Client: Node 22, TypeScript 5.7, React 19, Vite 6, Capacitor 7
- Infra: Docker Compose, GitHub Actions → GHCR → VPS webhook, Caddy TLS; optional public demo stack on the same VPS
See @ref:en-tools — tools inventory for the full stack.
Validate doc references: python3 scripts/validate-refs.py
