Web dashboard for OSP staff to review the migration status of 5 representative research administration records from VERAS/Banner to OpenERA.
This application loads pilot migration staging data (awards, proposals, projects, documents) into a PostgreSQL database and provides a React dashboard for reviewing migration progress, document linkage, and data quality gaps.
| Record | Description | Documents |
|---|---|---|
| AA4673 | Active award with amendments | 187 |
| AA6006 | Award with subawards | 171 |
| OS7090 | Largest local corpus | 477 |
| SI3394 | Multi-proposal family | 360 |
| V250261 | Proposal-only (no award) | 42 |
Built from the UI-Insight TEMPLATE-app:
- Tech Stack: React 19 + TypeScript + Tailwind CSS frontend, FastAPI + SQLAlchemy backend, PostgreSQL standard database
- Documentation Standards: MkDocs Material site with architecture, governance, and security docs
- Data Governance: Classification framework, handling rules, and database conventions
- Security Standards: JWT auth, RBAC, dependency scanning, and institutional review checklist
- CI/CD: GitHub Actions for testing, linting, and security scanning
- Agent Guidance:
CLAUDE.mdprovides comprehensive context for AI coding agents - Docs Automation: strict MkDocs validation, optional docs deployment, and template integrity checks
- Security Artifacts: dependency audit artifacts and CycloneDX SBOM generation
- Browser Smoke Tests: Playwright
e2e/scaffold for end-to-end validation
This template follows patterns established in OpenERA, the University of Idaho's open-source electronic research administration system.
- Python 3.11+
- Node.js 22+ and npm
- Docker and Docker Compose (optional, for containerized development)
- Click "Use this template" on GitHub (or clone and remove git history)
- Find and replace
OpenERA Pilot Reviewwith your project name across all files - Update
CLAUDE.mdwith your project description and any project-specific rules - Update this
README.mdwith your project's overview - Review
.github/CODEOWNERS,SECURITY.md, Postgres settings, and docs deployment settings for your real maintainers and hosting setup
This template tracks CLAUDE.md as the canonical repository agent guide and
AGENTS.md as a synchronized companion file for toolchains that read it. Keep
them aligned instead of maintaining two divergent rule sets by hand.
After your initial rename pass, run:
python scripts/check_template_docs.pyThat catches unexpected leftover template placeholders and broken MkDocs nav links.
Backend (Terminal 1):
docker compose up -d postgres
cd backend
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp ../.env.example ../.env # Defaults target the local Postgres container
uvicorn app.main:app --reload --port 8000Frontend (Terminal 2):
cd frontend
npm install
npm run devThe frontend dev server runs at http://localhost:5173 and proxies API requests to http://localhost:8000.
The standard local database is PostgreSQL on localhost:5432; SQLite is kept only as an optional fallback for isolated experiments.
docker compose up --buildAccess the application at http://localhost:9200. The stack includes PostgreSQL, the FastAPI backend, and the nginx-served frontend.
├── backend/ # FastAPI application
│ ├── alembic.ini # Migration configuration
│ ├── app/
│ │ ├── api/v1/ # Route handlers
│ │ ├── auth/ # Authentication logic
│ │ ├── db/ # Database engine and seeds
│ │ ├── models/ # SQLAlchemy ORM models
│ │ ├── schemas/ # Pydantic schemas
│ │ ├── services/ # Business logic
│ │ ├── config.py # Settings
│ │ └── main.py # App entry point
│ ├── migrations/ # Alembic migration environment
│ └── tests/
├── frontend/ # React application
│ └── src/
│ ├── api/ # API client modules
│ ├── components/ # UI components
│ ├── pages/ # Route pages
│ └── types/ # TypeScript interfaces
├── docs/ # MkDocs documentation
├── e2e/ # Playwright smoke tests
├── AGENTS.md # Synchronized agent guide for compatible toolchains
├── CLAUDE.md # Canonical tracked AI agent context
├── .claude/README.md # Local tool-helper guidance
├── scripts/ # Template maintenance helpers
└── docker-compose.yml
See CLAUDE.md for the complete project structure and conventions.
# Backend
cd backend && pytest -v --tb=short
# Frontend
cd frontend && npm run build && npm test# Backend
cd backend && ruff check . && ruff format .
# Frontend
cd frontend && npx eslint .cd backend
./.venv/bin/alembic revision --autogenerate -m "describe change"
./.venv/bin/alembic upgrade headThe scaffold still auto-creates tables in DEV_MODE=true for quick local starts,
but Postgres plus Alembic is the standard path once the app has real schema history.
cd e2e
npm install
npm testThe Playwright config starts the frontend dev server automatically on
http://127.0.0.1:4173 for the homepage smoke test.
If Playwright reports that Chromium is missing on first run, install it with:
cd e2e
npm run install:browserspip install mkdocs-material
python scripts/check_template_docs.py
mkdocs serveSee CONTRIBUTING.md for guidelines.
All contributors must follow the Code of Conduct.
See SECURITY.md for vulnerability reporting instructions. CI also generates dependency audit artifacts and SBOMs from the GitHub Actions workflows.
- Built on patterns from OpenERA by the University of Idaho
- Part of the UI-Insight initiative