Full-stack developer productivity platform with:
- a React frontend,
- an Express API backend,
- a FastAPI + Chroma resume-ingestion/embedding service,
- and Solidity escrow/reward contracts.
The platform supports onboarding, OAuth integrations (GitHub/WakaTime), task/project tracking, scoring, and resume vectorization for downstream recommendation workflows.
.
├── client/ # React + Vite frontend
├── server/ # Node.js + Express API (auth, projects, resume upload, etc.)
├── resumeRag/ # FastAPI service for resume ingestion and embeddings
├── contracts/ # Hardhat smart contracts + tests/deploy scripts
└── README.md
- Developer/admin authentication and session handling
- GitHub + WakaTime OAuth connectivity
- Project and task APIs with analytics/stat endpoints
- Resume upload to Cloudinary + ingestion into Chroma Cloud
- Resume text chunking and Gemini embedding generation
- ELO and daily score computation endpoints
- Escrow/reward token smart contract workspace (Hardhat)
- React 19, Vite, React Router
- Tailwind CSS, GSAP, Recharts
- Node.js, Express, Mongoose
- JWT/cookie-based auth
- Cloudinary uploads, OAuth integrations
- FastAPI
- ChromaDB Cloud client
- Google Gemini embeddings
- PDF parsing + section chunking
- Solidity + Hardhat
- OpenZeppelin libraries
- Node.js 18+
- npm 9+
- Python 3.11 (recommended for current dependency compatibility)
- MongoDB instance
- Cloudinary account
- Google Gemini API key
- Chroma Cloud credentials
Create .env files in each service.
Minimum required for local development:
PORT=3000
MONGO_URI=your_mongodb_uri
JWT_SECRET=your_jwt_secret
CLIENT_URL=http://localhost:5173
PYTHON_URL= PORT 8000 (uvicorn)
# Cloudinary
CLOUDINARY_URL=your_cloudinary_url
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret
CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
# OAuth
WAKATIME_APP_ID=your_wakatime_app_id
WAKATIME_APP_SECRET=your_wakatime_app_secret
WAKATIME_SCOPES=read_summaries read_stats
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
GITHUB_SCOPES=repo read:user user:email
# Optional only if you intentionally create org-owned repos (leave unset for personal-account repos):
# GITHUB_APP_ORG=your_org_login
# Optional explicit redirect URIs
# WAKATIME_REDIRECT_URI=http://localhost:3000/api/oauth/wakatime-redirect
# GITHUB_REDIRECT_URI=http://localhost:3000/api/oauth/github-redirectGOOGLE_API_KEY=your_google_api_key
CHROMA_API_KEY=your_chroma_api_key
CHROMA_TENANT=your_chroma_tenant
CHROMA_DATABASE=your_chroma_database
CHROMA_HOST=api.trychroma.comVITE_BACKEND_URL=http://localhost:3000Never commit real secrets. Use placeholder values for shared examples.
Admins who create projects/repos must install the Senate GitHub App on their GitHub account before using project creation flows.
- Install the app on your personal account (or on your org if you intentionally create org-owned repos).
- Grant the required repository permissions during installation.
- Then connect GitHub in the app (OAuth) using the same GitHub account.
Without app installation, repository creation and task automation (issues, collaborators, branches) will fail.
# frontend
cd client && npm install
# backend
cd ../server && npm install
# contracts
cd ../contracts && npm install
# resume service (python)
cd ../resumeRag
python3.11 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install fastapi uvicorn pypdf langchain langchain-community langchain-core# Terminal A - backend API
cd server
npm run dev
# Terminal B - frontend
cd client
npm run dev
# Terminal C - resume service
cd resumeRag
source venv/bin/activate
uvicorn server.app:app --reload --host 0.0.0.0 --port 8000- Frontend:
http://localhost:5173 - Backend (Express):
http://localhost:3000 - Resume service (FastAPI):
PORT 8000
POST /api/auth/developer/registerPOST /api/auth/developer/loginPOST /api/resume/upload(uploads file and triggers resume ingestion)GET /api/oauth/sessionPOST /api/oauth/logout
POST /ingest-resumewith JSON payload:
{
"resumeUrl": "https://.../resume.pdf",
"userId": "optional-user-id"
}POST /score/dailyPOST /rating/updatePOST /get-recommendationswith JSON payload:
{
"query": "Find team members for a React + Node project",
"context": {
"projectDescription": "Build a task tracking platform",
"teamSize": 3,
"type": "team_recommendation"
},
"userId": "optional-user-id",
"timestamp": "optional-iso-datetime"
}Inside contracts/:
npx hardhat compile
npx hardhat testDeployment scripts exist in contracts/scripts/ and ignition modules in contracts/ignition/modules/.
- Ensure request body includes at least:
resumeUrl(string)
- If calling through backend upload flow, ensure
serveris running and sending payload to FastAPI.
- Set
CLIENT_URL=http://localhost:5173inserver/.env. - Backend should redirect to frontend routes, not backend routes.
- Resume ingestion should go through backend (
/api/resume/upload) and FastAPI, not direct browser fetch to n8n.
- Use Python 3.11 virtual environment for
resumeRag. - Reinstall dependencies after changing Python version.
- Frontend: lint/build from
client/ - Backend: route-level testing via Postman/curl
- Contracts:
npx hardhat testincontracts/
- Keep API base URLs environment-driven (
VITE_BACKEND_URL). - Do not hardcode production URLs in frontend API clients.
- Keep secrets out of git and rotate any exposed credentials.
Internal / hackathon project. Add an explicit license file if you plan to open-source.