Skip to content

Project Structure

src/
├── pages/                      # Route-level page components (see App.tsx)
│   ├── LoginPage.tsx           # Authority-Manager login
│   ├── LandingPage.tsx         # Redirects based on session
│   ├── ProjectsPage.tsx        # Project picker
│   ├── HelpPage.tsx / LegalNotice.tsx
│   ├── admin/Upload.tsx        # Admin: tree, documents, upload, permissions
│   └── projects/
│       ├── Overview.tsx        # Per-project document list + admin panel
│       └── demo/DemoImage.tsx  # Annotation page (criteria form + images + RAG)
├── components/
│   ├── NavBar.tsx              # Top bar, project switcher, theme toggle
│   ├── RagBot.tsx              # UCE RAG Bot chat panel
│   ├── RepoTree.tsx            # Async repository tree (React 19 `use()`)
│   ├── RepoContextMenu.tsx     # Permission management / delete
│   ├── inputs/                 # react-hook-form field components
│   ├── layout/                 # Annotation page layout + criteria sections
│   ├── display/                # ImageList, LoadingStateDrawer
│   ├── admin/                  # Upload/validate dialogs, table columns
│   ├── shadcn/                 # shadcn/ui primitives + theme provider
│   └── wrappers/               # WebSocketProvider, WithAuth
├── hooks/                      # Data hooks (useCasSeg, useImages, useProjectStats, …)
├── lib/
│   ├── annotator/              # WebSocket/CAS client (AnnoLib), login, AnnoApi
│   ├── resources/              # repository.ts, permissions.ts (REST clients)
│   ├── criteriaForm.ts         # Criteria-form model + helpers
│   └── helpers.ts              # CAS/form utilities, cookies
└── zustand/                    # Global stores

Key directories

pages/

Each file maps to a route declared in App.tsx. Pages compose hooks and components; protected pages are wrapped in WithAuth.

lib/annotator/

The non-React core. AnnoLib.ts (useANNO) exposes the full WebSocket command set (open/save CAS, views, tools, batched edits, RAG messages, export). login.ts handles authentication against the Authority Manager.

lib/resources/

REST clients for the Resource Manager (repository.ts: projects, repositories, documents) and Authority Manager (permissions.ts: users, groups, access control).

hooks/ and zustand/

Hooks combine the stores with the API layer and return derived, view-ready data. See State Management.