Lexery - Portal Surface Map

What This Page Is

Детальний інвентар поточної поверхні apps/portal — екранів, компонентів і серверних маршрутів, що формують user-facing частину продукту.

Top-Level Product Areas

  • workspace layout
  • chat
  • attachments
  • sidebar/history
  • settings
  • search overlay
  • boot/loading/error states
  • server-side chat routes

Screen-by-Screen Inventory

Workspace Screen

Головний екран після авторизації. Layout визначений у src/app/(workspace)/layout.tsx — він об’єднує sidebar, header та основну content area. Workspace screen підтримує multi-workspace switching: кожен workspace зберігає окремий набір чатів, preferences та memory context.

Chat Screen

Центральний user flow Portal. Користувач вводить юридичне питання, отримує streamed відповідь від Brain pipeline. Компоненти src/components/chat/* включають message bubbles, typing indicators, citation cards із посиланнями на нормативні акти. Streaming реалізований через SSE endpoint src/chat-api/stream/route.ts.

Auth Pages

Сторінки login, register, forgot-password — PR #7 від Sasha. Побудовані на shadcn/ui form primitives з server-side validation. Після авторизації redirect flow переводить користувача на workspace screen із збереженим session token.

Settings

src/components/settings/* і src/components/ui/SettingsScreen.tsx — user preferences, API key management для OpenRouter, theme switching. Settings зберігаються локально через src/lib/app-preferences.ts з sync до Supabase для крос-девайсного доступу.

System Prompt Editor

PR #4 від Sasha — дозволяє користувачу кастомізувати system prompt для юридичного агента. Включає template picker з preset prompts для різних юридичних сценаріїв, markdown preview і validation для максимальної довжини та обов’язкових секцій.

Subscription Plans

PR #10 від Sasha — pricing table із тарифними планами, feature comparison matrix, billing integration через API. UI адаптований під Ukrainian market з відповідними currency і payment method options.

Concrete Source Tree Signals

App shell

  • src/app/(workspace)/layout.tsx
  • src/app/layout.tsx
  • src/app/page.tsx

Chat system

  • src/components/chat/*
  • src/workspace-chat/*
  • src/chat-api/route.ts
  • src/chat-api/stream/route.ts

Attachments

  • src/components/attachments/*
  • src/components/ui/FilePreview.tsx
  • src/components/sidebar/*
  • src/components/ui/WorkspaceSidebar.tsx

Settings / overlays

  • src/components/settings/*
  • src/components/ui/SearchOverlay.tsx
  • src/components/ui/SettingsScreen.tsx

Data/helpers

  • src/lib/chat-library.ts
  • src/lib/chat-repository.ts
  • src/lib/app-preferences.ts
  • src/lib/server/openrouter.ts

OpenRouter Route

Серверний маршрут src/lib/server/openrouter.ts виконує server-side LLM calls через OpenRouter. Portal ніколи не надсилає API ключі на клієнт — всі model requests проксюються через Next.js API route. Це дозволяє контролювати rate limiting, cost tracking і model selection на backend рівні, не розкриваючи credentials у browser context.

Repository Layers for Local State

Portal зберігає chat history та workspace metadata через repository pattern:

  • chat-repository.ts — CRUD для chat sessions, зберігає повідомлення та metadata у localStorage з lazy sync до Supabase
  • chat-library.ts — колекція чатів для sidebar display, sorting, search і filtering
  • app-preferences.ts — user preferences (theme, language, default workspace) зі збереженням у localStorage та Supabase backup

Цей шар ізолює UI components від storage details — якщо backend storage змінюється, repository layer абсорбує зміну без переписування компонентів.

Product Reading

  • Observed: Portal вже є повноцінним workspace shell, а не landing page чи placeholder.
  • Observed: він поєднує local product state, UI composition і server-side AI route logic в єдиній Next.js application.
  • Inferred: цей Portal — user-visible половина продукту, яка має з часом тісніше зінтегруватися з Brain runtime.

See Also