# Waggle Teams — Render.com Blueprint # # Deploy with one click: https://render.com/deploy # Or: render blueprint apply # # This creates: # - waggle-server: Node.js web service (serves frontend + local sidecar API) # # Render is the hosted local-sidecar demo path. The Postgres/Redis-backed team # server is deployed through Dockerfile/docker-compose.production.yml instead. services: - type: web name: waggle-server runtime: node plan: starter # Build the real UI (apps/web → root /dist) and all workspace packages # (incl. @waggle/hive-mind-core/dist, a runtime dep). The old `cd app && # npm run build` ran Vite in app/ — the Tauri shell, which has no src/ — # and served a stale committed shell. buildCommand: npm install && npm run build:all startCommand: npx tsx packages/server/src/local/start.ts --skip-litellm healthCheckPath: /health envVars: - key: NODE_ENV value: production - key: WAGGLE_SKIP_LITELLM value: '1' # Sidecar defaults to loopback (desktop-safe); a hosted web service must # bind all interfaces, so opt in explicitly. - key: WAGGLE_HOST value: 0.0.0.0 - key: WAGGLE_FRONTEND_DIR value: ./dist - key: WAGGLE_DATA_DIR value: /data - key: ANTHROPIC_API_KEY sync: false - key: CLERK_SECRET_KEY sync: false - key: CLERK_PUBLISHABLE_KEY sync: false - key: WAGGLE_LICENSE_KEY sync: false # Stripe billing — without these the sidecar's checkout/webhook routes # return 503 and tier upgrades silently never apply in the hosted deploy. # STRIPE_SECRET_KEY: API key; STRIPE_WEBHOOK_SECRET: verifies webhook sigs. # Prices use the 4-var period contract (priceIdForTier, stripe/index.ts): # STRIPE_PRICE__. - key: STRIPE_SECRET_KEY sync: false - key: STRIPE_WEBHOOK_SECRET sync: false - key: STRIPE_PRICE_PRO_MONTHLY sync: false - key: STRIPE_PRICE_PRO_ANNUAL sync: false - key: STRIPE_PRICE_TEAMS_MONTHLY sync: false - key: STRIPE_PRICE_TEAMS_ANNUAL sync: false disk: name: waggle-data mountPath: /data sizeGB: 10 autoDeploy: true