Axesis is an AI-powered career development + knowledge hub.
It includes a React (Vite) frontend and an Express (TypeScript) backend backed by MongoDB Atlas.
- Auth (email/password) + Google sign-in
- Notes, Projects, Goals
- Resume upload + AI resume analysis
- AI insights/skill progress endpoints
- Frontend: React, TypeScript, Vite, Tailwind, shadcn/ui, framer-motion
- Backend: Node.js, Express, TypeScript, Mongoose
- Database: MongoDB Atlas
.
├── src/ # frontend source
├── public/ # frontend public assets
├── backend/ # express + typescript api
└── README.md
- Node.js 18+ (Node 20 LTS recommended)
- A MongoDB Atlas connection string
From the repo root:
npm installThen install backend deps:
cd backend
npm installCreate backend/.env (this project loads it from the backend folder):
# Server
PORT=3000
NODE_ENV=development
# Mongo
MONGODB_URI=mongodb+srv://<user>:<pass>@<cluster>/<db>?retryWrites=true&w=majority
# Auth
JWT_SECRET=change-me
JWT_EXPIRES_IN=7d
# CORS (comma-separated). You can also use wildcards like https://*.netlify.app
CORS_ORIGIN=http://localhost:5173
# Google login (required only if you use /auth/google)
GOOGLE_CLIENT_ID=
# AI providers (required only for the endpoints you use)
GROQ_API_KEY=
GROQ_MODEL=llama-3.1-8b-instant
GEMINI_API_KEY=
GEMINI_MODEL=models/gemini-1.5-flash
# Resume analysis via OpenRouter (Step model)
STEP_API_KEY=
STEP_MODEL=stepfun/step-3.5-flash:free
OPENROUTER_SITE_URL=
OPENROUTER_APP_TITLE=AxesisOptional. If you don’t set these, it defaults to http://localhost:3000 and mock API enabled.
VITE_API_BASE_URL=http://localhost:3000
VITE_USE_MOCK_API=false
VITE_GOOGLE_CLIENT_ID=Backend (in backend/):
npm run devFrontend (in repo root):
npm run devOpen: http://localhost:5173
- Backend exposes routes in two styles for compatibility:
/auth,/notes,/projects,/goals,/ai,/resume/api/auth,/api/notes,/api/projects,/api/goals,/api/ai,/api/resume
- Health check:
GET /health→{ "ok": true }
npm run dev– Vite dev servernpm run build– production buildnpm run lint– ESLintnpm run preview– preview the production build
From backend/:
npm run dev– run with watch modenpm run build– TypeScript compile todist/npm start– rundist/server.js
One working setup is:
- Frontend: Netlify
- Set
VITE_API_BASE_URLto your backend URL - SPA routing is handled by
public/_redirects
- Set
- Backend: Render
- Set backend env vars in Render (do not rely on local
.env) - Ensure MongoDB Atlas Network Access allows Render
- Set backend env vars in Render (do not rely on local