Skip to main content

Deploy to Render

Proseweave runs on Render using a Blueprint (render.yaml) that defines all services in a single file: the Fastify backend, generation worker, React frontend, PostgreSQL database, and Redis cache.

Prerequisites

  • A Render account
  • The Proseweave GitHub repository connected to your Render account
  • An Anthropic API key
  • DigitalOcean Spaces credentials (for image storage — cover images, uploads)

Blueprint Deployment

1. Connect your repository

  1. Log in to the Render Dashboard.
  2. Go to New → Blueprint.
  3. Select the epeder10/proseweave repository and the main branch.
  4. Render detects render.yaml automatically.

2. Review services

Render will show the services it will create:

ServiceTypeDescription
backendWeb ServiceFastify API on port 8000
generation-workerBackground WorkerRuns node dist/worker.js
frontendStatic SiteReact SPA with pre-rendered landing page
proseweave-dbPostgreSQLBasic plan database
proseweave-redisKey Value (Redis)Starter plan, used for caching and rate limiting

3. Set secrets

Render will prompt you to fill in any environment variables marked sync: false. Set these before clicking Apply:

VariableWhere to get it
ANTHROPIC_API_KEYAnthropic Console
JWT_SECRETGenerate a random 64-char string
CORS_ORIGINSYour production frontend URL (e.g. https://proseweave.ai)
FRONTEND_URLSame as CORS_ORIGINS
OAUTH_BASE_URLSame as CORS_ORIGINS
DO_SPACES_KEYDigitalOcean Spaces access key
DO_SPACES_SECRETDigitalOcean Spaces secret
DO_SPACES_BUCKETSpaces bucket name
DO_SPACES_REGIONe.g. nyc3
DO_SPACES_ENDPOINTe.g. https://nyc3.digitaloceanspaces.com
info

DATABASE_URL, MIGRATION_DATABASE_URL, and REDIS_URL are injected automatically by Render from the provisioned database and Redis service — you do not set these manually.

4. Apply the Blueprint

Click Apply. Render provisions all services and runs initial deployments. The first build takes a few minutes.

Database Migration from DigitalOcean

If you're migrating from an existing DigitalOcean PostgreSQL database:

  1. Export from DO:

    pg_dump $DO_DATABASE_URL > proseweave_backup.sql
  2. Import into Render:

    psql $RENDER_DATABASE_URL < proseweave_backup.sql
  3. Run migrations (if any pending):

    # From the Render Dashboard → backend service → Shell
    npm run migrate
warning

Run the Render backend in maintenance mode or stop it during the import to prevent writes to the old database from being lost.

DigitalOcean Spaces (Image Storage)

Proseweave continues to use DigitalOcean Spaces for image storage — there is no equivalent Render service. Cover images and user uploads are stored in Spaces and served via its CDN.

The DO_SPACES_* environment variables connect both the backend service and the generation-worker to the same Spaces bucket. No migration is required for existing images — they remain in place.

Redis

Render provisions a managed Redis Key Value store (proseweave-redis). It is used by:

  • Backend — rate limiting and response caching
  • Generation Worker — job queue coordination (BullMQ integration is forthcoming; the REDIS_URL env var is already wired)

Redis is automatically connected via the REDIS_URL environment variable, which Render injects from the provisioned Key Value service.

Auto-Deploy

Render watches the main branch and automatically redeploys all services on every push. No manual trigger is needed for normal releases.

To update the Blueprint spec (add a service, change an env var):

  1. Edit render.yaml and push to main.
  2. In the Render Dashboard, go to Settings → Blueprint → Sync to apply the changes.

Custom Domain

  1. In the Render Dashboard, open the frontend static site.
  2. Go to Settings → Custom Domains → Add Custom Domain.
  3. Add your domain (e.g. proseweave.ai) and follow the DNS instructions.
  4. Repeat for the backend service if you want a dedicated API subdomain (e.g. api.proseweave.ai).
  5. Update the CORS_ORIGINS, FRONTEND_URL, and OAUTH_BASE_URL env vars on the backend to match the new frontend domain.
tip

Render provisions TLS certificates automatically via Let's Encrypt once DNS propagates.

Docs Site

The Docusaurus docs site is deployed as a separate Render static site watching the docs/ directory. It redeploys automatically on every push to main that touches docs/.

To preview docs locally:

cd docs && npm install && npm start