This guide will deploy your full stack (React frontend + Ktor backend + PostgreSQL) to Render.
- GitHub account with your code pushed
- Render account (sign up at https://render.com)
git add .
git commit -m "Prepare for Render deployment"
git push origin trunk- Go to https://render.com
- Click "Get Started for Free"
- Sign up with GitHub
- Authorize Render to access your repositories
- In Render Dashboard, click "New +" → "Blueprint"
- Connect your GitHub repository
hsc-http - Render will detect
render.yamland create:- PostgreSQL database
- Web service (Ktor backend + React frontend)
- Click "Apply"
- Wait 5-10 minutes for build to complete
If Blueprint doesn't work, follow these steps:
- Dashboard → "New +" → "PostgreSQL"
- Settings:
- Name:
hsc-http-db - Database:
healthshadow_dev - User:
hsc_user - Region: Oregon (US West) or closest to you
- PostgreSQL Version: 15
- Plan: Free
- Name:
- Click "Create Database"
- Important: Copy the Internal Database URL (you'll need this)
- Dashboard → "New +" → "Web Service"
- Connect your GitHub repository
- Settings:
- Name:
hsc-http-backend - Region: Same as database
- Branch:
trunk - Root Directory: Leave empty
- Runtime: Docker
- Plan: Free
- Name:
- Environment Variables (click "Add Environment Variable"):
DATABASE_URL: Paste the Internal Database URL from step 3aPORT:8080
- Health Check Path:
/health - Click "Create Web Service"
- First build takes ~10-15 minutes (building Docker image)
- Watch the logs in Render dashboard
- Look for: "Application started"
Once deployed, Render gives you a URL like:
https://hsc-http-backend.onrender.com
Your React landing page will be served at the root URL.
- Go to your web service → "Settings" tab
- Scroll to "Custom Domains" section
- Click "Add Custom Domain"
- Add both:
shadowconnects.comwww.shadowconnects.com
Render will provide DNS records. Add these where you bought your domain:
For root domain (shadowconnects.com):
- Type:
Arecord - Name:
@ - Value: Render's IP address (provided in dashboard)
For www subdomain (www.shadowconnects.com):
- Type:
CNAMErecord - Name:
www - Value:
hsc-http-backend.onrender.com(or whatever Render shows)
- Render automatically provisions free SSL (HTTPS)
- Takes 5-60 minutes after DNS propagates
- Auto-renews forever
- ✅
https://shadowconnects.com→ Your landing page - ✅
https://www.shadowconnects.com→ Your landing page - ✅ Free SSL/HTTPS
- Check logs in Render dashboard
- Ensure all files are committed to GitHub
- Verify
Dockerfileis correct
- Ensure
DATABASE_URLenvironment variable is set correctly - Use the Internal Database URL, not external
- Check database is in same region as web service
- Verify React build succeeded: Check logs for "react-web:assemble"
- Ensure
/healthendpoint returns 200 OK - Check browser console for errors
- Wait 5-60 minutes for DNS propagation
- Verify DNS records are correct at your registrar
- Use tools like
dig shadowconnects.comor https://dnschecker.org to verify
| Variable | Value | Notes |
|---|---|---|
DATABASE_URL |
From Render PostgreSQL | Auto-provided by Render |
PORT |
8080 |
Required by Render |
PostgreSQL Database (Free):
- 256 MB RAM
- 1 GB Storage
- Expires after 90 days (then need to upgrade)
Web Service (Free):
- 512 MB RAM
- Spins down after 15 minutes of inactivity
- Spins up on first request (30s-1min delay)
Upgrade to Paid ($7/month per service):
- Always on (no spin down)
- More resources
- Database doesn't expire
- Health Check:
https://shadowconnects.com/health - Logs: Render Dashboard → Your Service → Logs tab
- Metrics: Render Dashboard → Your Service → Metrics tab
Push to GitHub, Render auto-deploys:
git add .
git commit -m "Update landing page"
git push origin trunkRender automatically rebuilds and redeploys in ~5 minutes.
- ✅ Deploy to Render
- ✅ Test your landing page at temporary URL
- ✅ Connect shadowconnects.com custom domain
- Add monitoring/alerts
- Consider upgrading for production traffic (no spin down)
- Set up CI/CD for automated testing before deploy