Adopt Stackless UI: warm palette, sidebar, project tab bar with Design tab

- Add Google Fonts (Newsreader/Outfit/IBM Plex Mono) + warm beige CSS palette
- New VIBNSidebar: Stackless-style 220px sidebar with project list + user footer
- New ProjectShell: project header with name/status/progress% + tab bar
- Tabs: Atlas → PRD → Design → Build → Deploy → Settings
- New /prd page: section-by-section progress view
- New /build page: locked until PRD complete
- Projects list page: Stackless-style row layout
- Simplify overview page to just render AtlasChat

Made-with: Cursor
This commit is contained in:
2026-03-02 16:01:33 -08:00
parent 7ba3b9563e
commit aaa3f51592
9 changed files with 1051 additions and 451 deletions

View File

@@ -1,7 +1,13 @@
import { AppShell } from "@/components/layout/app-shell";
import { ProjectShell } from "@/components/layout/project-shell";
import { query } from "@/lib/db-postgres";
async function getProjectName(projectId: string): Promise<string> {
interface ProjectData {
name: string;
status?: string;
progress?: number;
}
async function getProjectData(projectId: string): Promise<ProjectData> {
try {
const rows = await query<{ data: any }>(
`SELECT data FROM fs_projects WHERE id = $1 LIMIT 1`,
@@ -9,12 +15,16 @@ async function getProjectName(projectId: string): Promise<string> {
);
if (rows.length > 0) {
const data = rows[0].data;
return data?.productName || data?.name || "Project";
return {
name: data?.productName || data?.name || "Project",
status: data?.status,
progress: data?.progress ?? 0,
};
}
} catch (error) {
console.error("Error fetching project name:", error);
console.error("Error fetching project:", error);
}
return "Project";
return { name: "Project" };
}
export default async function ProjectLayout({
@@ -25,11 +35,17 @@ export default async function ProjectLayout({
params: Promise<{ workspace: string; projectId: string }>;
}) {
const { workspace, projectId } = await params;
const projectName = await getProjectName(projectId);
const project = await getProjectData(projectId);
return (
<AppShell workspace={workspace} projectId={projectId} projectName={projectName}>
<ProjectShell
workspace={workspace}
projectId={projectId}
projectName={project.name}
projectStatus={project.status}
projectProgress={project.progress}
>
{children}
</AppShell>
</ProjectShell>
);
}