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