feat: US-001 — scaffold NeuralDesk Electron + React app
- electron-forge 7 + Vite plugin (vite-typescript template) - React 19 + TypeScript 5 strict mode - TanStack Router with file-based routing (4 routes: /, /timeline, /tasks, /projects) - Tailwind CSS 3 + PostCSS with Figma design tokens (sidebar, primary, muted) - Framer Motion, Lucide React, shadcn/ui utilities (cn, CVA, clsx, twMerge) - AppShell layout: 240px sidebar with collapse toggle, active route highlighting - Vite configs use .mts extension to avoid ESM/CJS conflict with electron-forge - Full package build verified (linux x64) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
10
src/renderer/routes/__root.tsx
Normal file
10
src/renderer/routes/__root.tsx
Normal file
@@ -0,0 +1,10 @@
|
||||
import { createRootRoute, Outlet } from '@tanstack/react-router';
|
||||
import { AppShell } from '@/components/layout/AppShell';
|
||||
|
||||
export const Route = createRootRoute({
|
||||
component: () => (
|
||||
<AppShell>
|
||||
<Outlet />
|
||||
</AppShell>
|
||||
),
|
||||
});
|
||||
32
src/renderer/routes/index.tsx
Normal file
32
src/renderer/routes/index.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
import { createFileRoute } from '@tanstack/react-router';
|
||||
|
||||
export const Route = createFileRoute('/')({
|
||||
component: HomePage,
|
||||
});
|
||||
|
||||
function HomePage() {
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center h-full gap-4">
|
||||
<div className="flex items-center gap-3">
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
className="text-foreground"
|
||||
>
|
||||
<path
|
||||
d="M12 2L13.5 8.5L20 10L13.5 11.5L12 18L10.5 11.5L4 10L10.5 8.5L12 2Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
<h1 className="text-3xl font-semibold tracking-tight">
|
||||
Hello, Roberto
|
||||
</h1>
|
||||
</div>
|
||||
<p className="text-muted-foreground text-sm">
|
||||
NeuralDesk is ready. Start building.
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
13
src/renderer/routes/projects.tsx
Normal file
13
src/renderer/routes/projects.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { createFileRoute } from '@tanstack/react-router';
|
||||
|
||||
export const Route = createFileRoute('/projects')({
|
||||
component: ProjectsPage,
|
||||
});
|
||||
|
||||
function ProjectsPage() {
|
||||
return (
|
||||
<div className="flex items-center justify-center h-full text-muted-foreground text-sm">
|
||||
Projects — coming in US-006
|
||||
</div>
|
||||
);
|
||||
}
|
||||
13
src/renderer/routes/tasks.tsx
Normal file
13
src/renderer/routes/tasks.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { createFileRoute } from '@tanstack/react-router';
|
||||
|
||||
export const Route = createFileRoute('/tasks')({
|
||||
component: TasksPage,
|
||||
});
|
||||
|
||||
function TasksPage() {
|
||||
return (
|
||||
<div className="flex items-center justify-center h-full text-muted-foreground text-sm">
|
||||
Tasks — coming in US-007
|
||||
</div>
|
||||
);
|
||||
}
|
||||
13
src/renderer/routes/timeline.tsx
Normal file
13
src/renderer/routes/timeline.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { createFileRoute } from '@tanstack/react-router';
|
||||
|
||||
export const Route = createFileRoute('/timeline')({
|
||||
component: TimelinePage,
|
||||
});
|
||||
|
||||
function TimelinePage() {
|
||||
return (
|
||||
<div className="flex items-center justify-center h-full text-muted-foreground text-sm">
|
||||
Timeline — coming in US-008
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user