77eeb3bd7f09ab5a34ba5b404bc7d6171c62e373
Grounded survey of the tree (backend/frontend/deploy), then adjudicated each P2/P3 item investigate -> debate -> judge. Dropped as not-worth-it (removed): B2 rollup N+1 (fine at scale), F1 money formatters (2 trivial lines), F3 SW cache (stale-shell can't happen), D1 health check (no real race), D3 aarch64 (x86 internal tool), D4 pin SDK (lockfile already deterministic), B5 string caps (SQLite ignores), B6 created_at (already present), B8 VelvetSweatshop (harmless), B9 empty-strip (already handled), F9 loading text / F10 spinner / F11 confirm() (cosmetic). Kept as DO with plans: B3 tests, B4 upload cap, B7 audit type, B10 FK indexes, B11 cli errors, F2 auth-vs-network, F4 import confirm, F6 audit detail, F7 empty-state, F8 role helpers, D2 commit version files, D5 type-check, D6 log-level env. Escalated (your call): B1 pagination (epic, perm-filtered lists), F5 valuation negatives (money write path), D7 default admin creds (auth, onboarding externals), D8 uninstall wording (corrected fact; ties to H1 backup question).
Ten31Portal
Internal system of record for Ten31 entities, holdings, positions, and quarterly valuation sign-off.
Prerequisites
- Python 3.11+
- Node.js 20+
Backend
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -e .
uvicorn ten31portal.main:app --reload --port 8000
Health check: GET http://localhost:8000/api/health
Frontend
cd frontend
npm install
npm run dev
Opens at http://localhost:5173. Proxies /api to the backend on port 8000.
Project structure
ten31portal/
backend/
ten31portal/ # FastAPI application
main.py # App object and health endpoint
config.py # Env-based configuration
pyproject.toml
frontend/
src/
App.tsx # Main component
main.tsx # Entry point
vite.config.ts
deploy/ # StartOS packaging (Issue 17)
SPEC.md # v1 issue specs
Languages
TypeScript
49.6%
Python
48.2%
Makefile
0.9%
Shell
0.4%
JavaScript
0.4%
Other
0.5%