<aside>

create web services on Render

*Render does not allow background workers on free tier → devmetrics-worker needs to be paid version

single service approach

worker runs in the same process as the API

code changes: add require('./workers/syncWorker'); into server/src/index.js

https://dashboard.render.com/project/prj-d9khgsvavr4c73bmid70

server/src/index.js

pull in the worker module so it starts alongside Express instead of running as a separate process

const express = require('express');
require('dotenv').config();

// mongoose connection, middleware, routes, etc.

// Start the BullMQ worker in-process (merged for Render free tier)
require('./workers/syncWorker');

const app = express();
const PORT = process.env.PORT || 3001;

app.get('/health', (req, res) => res.json({ status: 'ok' }));

app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

VITE_API_URL — new Render URL (https://devmetrics-api-XXXX.onrender.com)

update:

RAILWAY_TOKEN in GitHub Actions secrets is no longer used — you can delete it, or leave it unused if you're not worried about clutter. You won't need a RENDER_API_KEY replacement unless you want a CI-gated deploy step; by default Render redeploys automatically on every push to main, so most people just drop the deploy-server job entirely.

update .github/workflows/deploy.yml

This file still has the old deploy-server job pointing at bervProject/[email protected] with RAILWAY_TOKEN. Since Render auto-deploys on push by default, the simplest fix is to delete that job entirely — Render will pick up the push to main on its own. If you'd rather keep a CI gate (so a lint/build failure blocks the deploy), replace it with a curl to a Render deploy hook instead. Either way, commit and push that workflow change too.

</aside>