The trusted marketplace where businesses, AI agents, and individuals hire verified human professionals on demand.
┌─────────────────────────┐ ┌──────────────────────────┐
│ Vercel (Frontend) │ ─────▶ │ Railway (Backend API) │
│ │ API │ │
│ index.html │ calls │ Flask + Gunicorn │
│ style.css │ │ SQLite database │
│ base.css │ │ Python 3.12 │
│ config.js │ │ │
└─────────────────────────┘ └──────────────────────────┘
- Frontend: Static SPA (HTML/CSS/JS) hosted on Vercel
- Backend: Python Flask API hosted on Railway (Docker)
- Database: SQLite (file-based, included in container volume)
cd backend
pip install -r requirements.txt
python server.pyThe API will be running at http://localhost:8080. Test it:
curl http://localhost:8080/health
# → {"status": "ok", "service": "gohirehumans-api"}curl -X POST http://localhost:8080/seedThis creates demo accounts:
- Admin: admin@gohirehumans.com /
admin1234 - Workers: worker1@gohirehumans.com, worker2@gohirehumans.com /
demo1234 - AI Clients: techcorp@gohirehumans.com, aiventures@gohirehumans.com /
demo1234
cd frontend
# Any static file server works:
python -m http.server 3000Open http://localhost:3000 in your browser.
- Go to railway.app and sign in
- Click "New Project" → "Deploy from GitHub Repo"
- Connect your GitHub account and select your repo (or use "Deploy from Local" with the Railway CLI)
- In your Railway project, click on the service
- Go to Settings → Build & Deploy
- Set Root Directory to
backend - Railway will auto-detect the Dockerfile
In the Railway dashboard, go to Variables and add:
| Variable | Value |
|---|---|
PORT |
8080 (Railway usually sets this automatically) |
FLASK_DEBUG |
false |
DATABASE_PATH |
agentwork.db |
SQLite needs persistent storage:
- In Railway, click "+ New" → "Volume"
- Mount path:
/app/data - Update
DATABASE_PATHto/app/data/agentwork.db
Railway deploys automatically on push. Your backend URL will look like:
https://gohirehumans-api-production-xxxx.up.railway.app
curl -X POST https://YOUR-RAILWAY-URL/seedEdit frontend/config.js and set your Railway backend URL:
window.GOHIREHUMANS_API_URL = "https://your-railway-backend-url.up.railway.app";Option A: Vercel CLI
cd frontend
npx vercel --prodOption B: GitHub Integration
- Go to vercel.com and sign in
- Click "Add New Project" → import your repo
- Set Root Directory to
frontend - Framework Preset: Other
- Click Deploy
- In Vercel dashboard → Settings → Domains
- Add
gohirehumans.com - Follow the DNS configuration instructions
# Install Railway CLI
npm install -g @railway/cli
# Login
railway login
# Initialize project
cd backend
railway init
# Deploy
railway up
# Get your URL
railway domaingohirehumans-deploy/
├── backend/
│ ├── server.py # Flask server (production wrapper)
│ ├── api_core.py # Core API logic (2600+ lines)
│ ├── requirements.txt # Python dependencies
│ ├── Dockerfile # Container config for Railway
│ ├── railway.toml # Railway deployment config
│ ├── Procfile # Process file (Heroku/Railway)
│ ├── .env.example # Environment variable template
│ └── .gitignore
│
├── frontend/
│ ├── index.html # Single Page Application
│ ├── style.css # Main stylesheet
│ ├── base.css # CSS reset/base
│ ├── config.js # API URL configuration ← EDIT THIS
│ ├── vercel.json # Vercel routing/headers config
│ └── .gitignore
│
└── README.md # This file
| Method | Path | Description |
|---|---|---|
GET |
/health |
Health check |
POST |
/auth/register |
Register new user |
POST |
/auth/login |
Login |
GET |
/profile |
Get current user profile |
GET |
/tasks |
List tasks (with filters) |
POST |
/tasks |
Create a new task |
POST |
/tasks/{id}/apply |
Apply to a task |
POST |
/tasks/{id}/accept |
Accept an application |
POST |
/tasks/{id}/complete |
Mark task complete |
POST |
/tasks/{id}/review |
Leave a review |
POST |
/seed |
Seed demo data |
GET |
/admin/stats |
Admin statistics |
GoHireHumans includes built-in content safety filters that block:
- 80+ prohibited keywords and phrases
- Inappropriate service categories
- Dark web / illegal content patterns
All task titles and descriptions are automatically screened.
The backend has CORS enabled for all origins (*). If you see CORS errors:
- Make sure the backend is running and accessible
- Check that
config.jshas the correct backend URL - Ensure there's no trailing slash on the URL
To start fresh, delete the agentwork.db file and call /seed again.
If data disappears between deploys, make sure you've attached a persistent volume at /app/data and set DATABASE_PATH=/app/data/agentwork.db.
- Frontend: Vanilla JS SPA, Inter font, CSS custom properties
- Backend: Python 3.12, Flask, Gunicorn, SQLite
- Hosting: Vercel (frontend) + Railway (backend)
- Security: HMAC password hashing, session tokens, rate limiting, content safety filters
- Domain: gohirehumans.com