A role-based portfolio platform. Students build and share project portfolios; coaches, employers, and admins interact with them through dedicated dashboards.
The repo is split into two apps:
| Folder | Stack | Purpose |
|---|---|---|
backend/ |
FastAPI · SQLAlchemy · Alembic · SQLite | REST API, auth, AI summaries |
frontend/ |
React 19 · Vite · React Router | Web UI (public site + role dashboards) |
Roles: student, coach, employer, admin.
InOne lets students create portfolios of their projects (with screenshots, resumes, and links) and share them publicly via a slug. Coaches review student work and leave feedback, employers browse and save candidate portfolios, and admins manage users and platform-wide content. An optional AI layer generates portfolio summaries and reviews project content.
- Python 3.11+
- Node.js 18+
- npm (ships with Node.js)
- (Optional) An OpenAI API key — AI features fall back to a mock when unset.
Clone the repo, then install each app's dependencies.
cd backend
python -m venv venv
source venv/bin/activate # macOS/Linux
# venv\Scripts\activate # Windows
pip install -r requirements.txtcd frontend
npm installRun the backend and frontend in two terminals.
cd backend
source venv/bin/activate
alembic upgrade head # create InOne.db (first run only)
uvicorn app.main:app --reloadInteractive API docs: http://127.0.0.1:8000/docs
cd frontend
npm run devOther frontend scripts: npm run build, npm run preview, npm run lint.
Secrets live in untracked .env files — one per app. Create each file by hand
(there is no committed .env.example; see Known Issues).
| App | File | Key settings |
|---|---|---|
| backend | backend/.env |
DATABASE_URL, SECRET_KEY, OPENAI_API_KEY, FRONTEND_URL |
| frontend | frontend/.env |
VITE_API_BASE_URL |
The only external account needed is an OpenAI API key for live AI summaries;
without it the app uses a built-in mock. See backend/README.md
for the full list of backend variables and defaults.
- No
.env.examplefiles are committed. You must createbackend/.envandfrontend/.envby hand using the tables above before running. - AI features require an OpenAI key. Without
OPENAI_API_KEY, summaries and project checks return mock data rather than real output. forgot-passwordis a placeholder — it does not send email or reset credentials yet.- SQLite only. The default database is local SQLite (
backend/InOne.db); no production/Postgres configuration is provided.
backend/README.md— API routes, tech stack, file uploadsfrontend/README.md— page/route map and project structure