Build a runnable skeleton of the AgenticRoboticsEvaluator that demonstrates:
- A student can log in
- A student can start a reflection session
- A student can send messages and see (placeholder) assistant replies
- All data is persisted to PostgreSQL
- An admin can create student accounts
End State: docker compose up --build → working app with login, chat, and database persistence.
- Create
/backendfolder - Create
/backend/appfolder - Create
/backend/app/corefolder - Create
/backend/app/dbfolder - Create
/backend/app/modelsfolder - Create
/backend/app/schemasfolder - Create
/backend/app/apifolder - Create
/backend/app/api/routesfolder - Create
/backend/app/servicesfolder - Create
/backend/alembicfolder - Create
/backend/alembic/versionsfolder - Create
/backend/testsfolder - Create
/frontendfolder - Create
/frontend/srcfolder - Create
/frontend/src/appfolder - Create
/frontend/src/app/loginfolder - Create
/frontend/src/app/chatfolder - Create
/frontend/src/componentsfolder - Create
/frontend/src/libfolder - Create
/frontend/src/typesfolder - Create
/infrafolder
- Create
/infra/docker-compose.ymlwith postgres, backend, frontend services - Create
/backend/Dockerfile(Python 3.12 + FastAPI) - Create
/backend/requirements.txtwith all Python dependencies - Create
/backend/.env.examplewith environment variable templates - Create
/frontend/Dockerfile(Node + Next.js) - Create
/frontend/.env.examplewith environment variable templates
- Create
/backend/app/__init__.py(empty) - Create
/backend/app/main.py(FastAPI app, CORS, router includes) - Create
/backend/app/core/__init__.py(empty) - Create
/backend/app/core/config.py(Settings class with env vars) - Create
/backend/app/core/security.py(password hashing + JWT functions)
- Create
/backend/app/db/__init__.py(empty) - Create
/backend/app/db/session.py(SQLAlchemy engine + session) - Create
/backend/app/db/base.py(Base class + import all models)
- Create
/backend/app/models/__init__.py(export all models) - Create
/backend/app/models/student.py(Student model with id, username, password_hash, role, display_name, pronouns, tone_pref, created_at) - Create
/backend/app/models/session.py(Session model with id, student_id, status, current_stage, prompt_version, model_name, started_at, completed_at) - Create
/backend/app/models/message.py(Message model with id, session_id, role, content, stage_id, created_at) - Create
/backend/app/models/session_summary.py(SessionSummary model) - Create
/backend/app/models/safety_incident.py(SafetyIncident model)
- Create
/backend/alembic.ini(Alembic config file) - Create
/backend/alembic/env.py(migration environment) - Create
/backend/alembic/script.py.mako(migration template) - Create
/backend/alembic/versions/001_initial_schema.py(create all tables)
- Create
/backend/app/schemas/__init__.py(export all schemas) - Create
/backend/app/schemas/auth.py(LoginRequest, TokenResponse, UserResponse) - Create
/backend/app/schemas/student.py(StudentCreate, StudentResponse, PasswordReset) - Create
/backend/app/schemas/session.py(SessionCreate, SessionResponse) - Create
/backend/app/schemas/message.py(MessageCreate, MessageResponse, MessagePairResponse)
- Create
/backend/app/api/__init__.py(empty) - Create
/backend/app/api/deps.py(get_db, get_current_user, require_admin, require_student)
- Create
/backend/app/api/routes/__init__.py(empty) - Create
/backend/app/api/routes/health.py(GET /health endpoint) - Create
/backend/app/api/routes/auth.py(POST /auth/login, GET /auth/me) - Create
/backend/app/api/routes/admin.py(POST /admin/students, POST /admin/students/{id}/reset-password) - Create
/backend/app/api/routes/sessions.py(POST /sessions, POST /sessions/{id}/messages)
- Create
/backend/app/services/__init__.py(empty) - Create
/backend/app/services/flow_engine.py(STAGES list, get_current_stage, advance_stage)
- Create
/backend/seed_admin.py(script to create initial admin user)
- Create
/backend/tests/__init__.py(empty) - Create
/backend/tests/conftest.py(pytest fixtures: test client, test db, test user)
- Create
/backend/tests/test_auth.py(test login success, login failure, /me endpoint) - Create
/backend/tests/test_sessions.py(test create session, send message, message persistence)
- Create
/frontend/package.json(dependencies: next, react, axios, tailwindcss, etc.) - Create
/frontend/tsconfig.json(TypeScript config) - Create
/frontend/next.config.js(Next.js config with API rewrites) - Create
/frontend/tailwind.config.js(Tailwind config) - Create
/frontend/postcss.config.js(PostCSS config)
- Create
/frontend/src/app/layout.tsx(root layout with AuthProvider) - Create
/frontend/src/app/page.tsx(redirect to /login) - Create
/frontend/src/app/globals.css(Tailwind imports + base styles)
- Create
/frontend/src/lib/api.ts(axios client with auth interceptor) - Create
/frontend/src/lib/auth-context.tsx(AuthContext: user, token, login, logout)
- Create
/frontend/src/app/login/page.tsx- Username input field
- Password input field
- Submit button
- Error message display
- Call POST /auth/login on submit
- Store JWT in localStorage
- Redirect to /chat on success
- Create
/frontend/src/app/chat/page.tsx- Check authentication (redirect to /login if not)
- "Start Session" button (calls POST /sessions)
- Display current session info
- Message list component
- Message input component
- Send message (calls POST /sessions/{id}/messages)
- Display user messages (right-aligned)
- Display assistant messages (left-aligned)
- Auto-scroll to latest message
- Logout button
- Create
/docs/SETUP.md- Prerequisites (Docker, Docker Compose)
- Clone repository instructions
- Environment setup (.env files)
-
docker compose up --buildcommand - Run migrations command
- Create admin user (seed script)
- Login as admin workflow
- Create student workflow
- Login as student workflow
- Start session and chat workflow
- Verify data in database instructions
-
docker compose up --buildstarts all services - PostgreSQL is accessible on port 5432
- Backend health check passes (GET http://localhost:8000/health)
- Frontend loads on http://localhost:3000
- Run seed script creates admin user
- Admin can login
- Admin can create student account
- Student can login
- Student can start session
- Student can send message
- Placeholder assistant reply appears
- Messages persist across page refresh
- Session data exists in database
| Category | Files |
|---|---|
| Backend Python | 24 |
| Backend Config | 5 |
| Frontend TypeScript | 14 |
| Frontend Config | 5 |
| Infrastructure | 1 |
| Documentation | 2 |
| Total | 51 files |
- Phase 1 - Infrastructure (can't do anything without folders and Docker)
- Phase 2 - Backend core (need config/db before anything else)
- Phase 3 - Backend API (need models before routes)
- Phase 4 - Backend tests (verify backend works)
- Phase 5 - Frontend setup (need structure before pages)
- Phase 6 - Frontend pages (the actual UI)
- Phase 7 - Documentation (how to run it)
- Phase 8 - Integration testing (verify everything works together)
All boxes checked above AND:
-
docker compose up --buildcompletes without errors - Full workflow works: admin login → create student → student login → start session → send message → see reply
- Data verified in PostgreSQL (students, sessions, messages tables have data)
- Backend tests pass:
pytestin backend container - No console errors in browser
Last Updated: January 27, 2026