Projects organize AI work around a shared workspace. A project can contain chats and source files, and those source files can be used as context when the assistant answers.
Project code lives inside the AI chat feature because projects are part of the AI workspace, not a separate generic folder system.
What It Includes
- Create, rename, and delete projects.
- Expand and collapse projects in the dashboard sidebar.
- Move chats into and out of projects.
- Open a dedicated project workspace view.
- List project chats with pagination.
- Upload, preview, paginate, and delete project source files.
- Start a new chat from a project workspace.
- Attach the current project to a new chat.
- Use project sources as AI context.
Main Surfaces
| Surface | File |
|---|---|
| Sidebar projects | src/features/ai/chat/components/chat-dashboard-sidebar/sidebar-projects.tsx |
| Project row | src/features/ai/chat/components/chat-dashboard-sidebar/sidebar-project-row.tsx |
| Project actions | src/features/ai/chat/components/chat-dashboard-sidebar/sidebar-project-actions.tsx |
| Project workspace | src/features/ai/chat/components/project-workspace/project-workspace.tsx |
| Project chats tab | src/features/ai/chat/components/project-workspace/project-workspace-chats.tsx |
| Project sources tab | src/features/ai/chat/components/project-workspace/project-workspace-sources.tsx |
| Source list | src/features/ai/chat/components/project-workspace/project-sources-list.tsx |
| New project dialog | src/features/ai/chat/components/chat-dashboard-sidebar/chat-create-project-dialog.tsx |
The dashboard route owns which project is active. The project UI reads the route state and loads the matching project detail, chats, and sources.
Data Flow
Project API clients live in src/features/ai/chat/api/projects.api.ts.
The main API operations are:
listProjectsApicreateProjectApigetProjectApilistProjectChatsApilistProjectSourcesApiuploadProjectSourcesApideleteProjectSourceApiupdateProjectApideleteProjectApi
Project database access lives in src/features/ai/chat/repositories/project.repository.ts.
Client data loading uses feature owned hooks:
src/features/ai/chat/hooks/use-fetch-projects.tssrc/features/ai/chat/hooks/use-fetch-project-detail.tssrc/features/ai/chat/hooks/use-fetch-project-chats.tssrc/features/ai/chat/hooks/use-fetch-project-sources.tssrc/features/ai/chat/hooks/use-mutate-create-project.tssrc/features/ai/chat/hooks/use-mutate-update-project.tssrc/features/ai/chat/hooks/use-mutate-delete-project.tssrc/features/ai/chat/hooks/use-mutate-upload-project-sources.tssrc/features/ai/chat/hooks/use-mutate-delete-project-source.ts
Sources And Context
Project sources are files uploaded directly to a project. They differ from the general Library because they belong to a specific project workspace.
When a chat is connected to a project, project source summaries and extracted source content can be included in assistant context. This lets the user ask project specific questions without attaching the same files to every message.
Storage behavior for project source files is documented in Storage. Context assembly is documented in AI Context.
Where To Customize
src/features/ai/chat/constants/chat-project.constants.tsfor project workspace limits.src/features/ai/chat/components/project-workspacefor project workspace UI.src/features/ai/chat/components/chat-dashboard-sidebarfor sidebar project behavior.src/features/ai/chat/api/projects.api.tsfor browser API calls.src/features/ai/chat/repositories/project.repository.tsfor database behavior.src/features/ai/chat/hooksfor query and mutation behavior.
When changing project behavior, keep URL state, sidebar state, project workspace state, and query invalidation aligned so the sidebar and project page update together.