# AuraK V2 — Frontend (web)

A modern multi-tenant knowledge base and AI assistant platform built with React 19, Vite, and Tailwind CSS.

## 🏗️ Architecture

The frontend uses **React Router** for navigation with a clean role-based routing structure:

| Route | Access | Description |
|-------|--------|-------------|
| `/login` | Public | Password or API Key sign-in |
| `/` | All users | Workspace overview |
| `/chat` | All users | AI Chat with scope selection |
| `/knowledge` | All users | Document (Knowledge Base) management |
| `/notebooks` | All users | Notebooks and notes |
| `/settings` | All users | Model and app settings |
| `/admin` | TENANT_ADMIN+ | Team management, share approvals |
| `/admin/tenants` | SUPER_ADMIN | Global tenant management |
| `/admin/models` | TENANT_ADMIN+ | Model configuration |

## 🔐 Authentication

The app supports **two login methods**:
1. **Password login** — POST to `/api/v1/auth/login`, receives an `apiKey` back
2. **Direct API Key** — paste the API key directly

All API calls include `x-api-key: <key>` in the request headers automatically via `services/apiClient.ts`.

## 🛠️ Tech Stack

- **React 19 + TypeScript**
- **Vite** (dev server + build)
- **TailwindCSS v3** (styling)
- **React Router v6** (routing)
- **framer-motion** (animations)
- **Lucide React** (icons)
- **clsx + tailwind-merge** (`cn()` utility)

## 🚀 Quick Start

### 1. Install dependencies
```bash
cd web
yarn install
```

### 2. Configure environment
Copy `.env.example` to `.env` and set the backend URL if needed:
```
VITE_API_BASE_URL=http://localhost:13000
```

The Vite dev server proxies `/api/*` to `http://localhost:13000` by default (see `vite.config.ts`).

### 3. Start the dev server
```bash
yarn dev
# → http://localhost:13001
```

### 4. Build for production
```bash
yarn build
# Output: dist/
```

## 📁 Project Structure

```
web/
├── index.tsx              # App root — BrowserRouter + all routes
├── index.html
├── src/
│   ├── contexts/
│   │   └── AuthContext.tsx        # User auth state (apiKey, user, role)
│   ├── components/
│   │   └── layouts/
│   │       ├── WorkspaceLayout.tsx  # Sidebar + header for main workspace
│   │       └── AdminLayout.tsx      # Admin console layout
│   ├── pages/
│   │   ├── auth/
│   │   │   └── Login.tsx            # Dual-mode login (password + API key)
│   │   ├── workspace/
│   │   │   ├── ChatPage.tsx
│   │   │   ├── KnowledgePage.tsx
│   │   │   ├── NotebooksPage.tsx
│   │   │   └── SettingsPage.tsx
│   │   └── admin/
│   │       ├── SuperAdminPage.tsx   # Tenant management (SUPER_ADMIN)
│   │       └── TenantAdminPage.tsx  # Team management (TENANT_ADMIN)
│   └── utils/
│       └── cn.ts                    # clsx + twMerge helper
├── components/            # Legacy rich view components (still used)
│   └── views/
│       ├── ChatView.tsx
│       ├── KnowledgeBaseView.tsx
│       ├── NotebooksView.tsx
│       └── SettingsView.tsx
└── services/              # API service layer
    ├── apiClient.ts       # Base HTTP client (auto-injects x-api-key)
    ├── chatService.ts     # Streaming chat
    ├── knowledgeBaseService.ts
    └── ...
```

## 🔑 Default Credentials (Development)

After running the backend migration, a default super admin is seeded:
- **Email**: `admin@system.local`
- **Password**: `admin123`

The `/api/v1/auth/api-key` endpoint returns your API key after login.

## ⚠️ Troubleshooting

- **401 errors**: Your session expired. You will be redirected to `/login` automatically.
- **Upload fails**: Ensure the backend is running and the `uploads/` directory is writable.
- **No AI response**: Configure at least one LLM model in `/settings` or `/admin/models`.
