feat(chat): add SvelteKit web app with full feature parity to mobile

Web app features:
- Auth: Login, Register, Forgot Password with shared-auth-ui
- Chat: New chat, conversation view, message list, model selector
- Templates: List, create, edit, delete templates
- Spaces: Team workspaces with member management
- Documents: Document mode with version history
- Archive & Profile pages

Technical:
- SvelteKit 2 with Svelte 5 runes
- Tailwind CSS 4 with shared themes
- Supabase Auth with SSR
- ChatLogo added to shared-branding
- dev:*:app commands for web+backend

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Till-JS 2025-11-25 15:54:44 +01:00
parent ba3e0538b4
commit 9a84cc06d6
58 changed files with 7198 additions and 53 deletions

View file

@ -64,19 +64,45 @@ export interface ChatCompletionResponse {
// Template Types
export interface Template {
id: string;
user_id: string;
name: string;
description: string;
description: string | null;
system_prompt: string;
initial_question: string | null;
model_id: string | null;
color: string;
is_default: boolean;
document_mode: boolean;
created_at: string;
updated_at: string;
}
export type TemplateCreate = Omit<Template, 'id' | 'created_at' | 'updated_at'>;
export type TemplateUpdate = Partial<Omit<Template, 'id' | 'user_id' | 'created_at' | 'updated_at'>>;
// Space Types
export interface Space {
id: string;
name: string;
description?: string;
owner_id: string;
is_archived: boolean;
created_at: string;
updated_at: string;
}
export type SpaceCreate = Pick<Space, 'name' | 'description' | 'owner_id'>;
export type SpaceUpdate = Partial<Pick<Space, 'name' | 'description' | 'is_archived'>>;
export interface SpaceMember {
id: string;
space_id: string;
user_id: string;
role: 'owner' | 'admin' | 'member' | 'viewer';
invitation_status: 'pending' | 'accepted' | 'declined';
invited_by?: string;
invited_at: string;
joined_at?: string;
created_at: string;
updated_at: string;
}
@ -85,9 +111,12 @@ export interface Space {
export interface Document {
id: string;
conversation_id: string;
title: string;
content: string;
version: number;
created_at: string;
updated_at: string;
}
export interface DocumentWithConversation extends Document {
conversation_title: string;
}