feat: add domains, ideas, layouts, widgets API modules

- Add DomainsModule with full CRUD, search, and activity logging
- Add IdeasModule with quick capture endpoint
- Add LayoutsModule for user dashboard layouts
- Add WidgetsModule for widget definitions (read-only)
- Update ActivityService with domain/idea logging methods
- Register all new modules in AppModule
This commit is contained in:
Jason Woltje
2026-01-29 13:47:03 -06:00
parent 973502f26e
commit f47dd8bc92
66 changed files with 4277 additions and 29 deletions

View File

@@ -0,0 +1,48 @@
import { RecentTasksWidget } from "@/components/dashboard/RecentTasksWidget";
import { UpcomingEventsWidget } from "@/components/dashboard/UpcomingEventsWidget";
import { QuickCaptureWidget } from "@/components/dashboard/QuickCaptureWidget";
import { DomainOverviewWidget } from "@/components/dashboard/DomainOverviewWidget";
import { mockTasks } from "@/lib/api/tasks";
import { mockEvents } from "@/lib/api/events";
export default function DashboardPage() {
// TODO: Replace with real API call when backend is ready
// const { data: tasks, isLoading: tasksLoading } = useQuery({
// queryKey: ["tasks"],
// queryFn: fetchTasks,
// });
// const { data: events, isLoading: eventsLoading } = useQuery({
// queryKey: ["events"],
// queryFn: fetchEvents,
// });
const tasks = mockTasks;
const events = mockEvents;
const tasksLoading = false;
const eventsLoading = false;
return (
<main className="container mx-auto px-4 py-8">
<div className="mb-8">
<h1 className="text-3xl font-bold text-gray-900">Dashboard</h1>
<p className="text-gray-600 mt-2">
Welcome back! Here's your overview
</p>
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
{/* Top row: Domain Overview and Quick Capture */}
<div className="lg:col-span-2">
<DomainOverviewWidget tasks={tasks} isLoading={tasksLoading} />
</div>
<RecentTasksWidget tasks={tasks} isLoading={tasksLoading} />
<UpcomingEventsWidget events={events} isLoading={eventsLoading} />
<div className="lg:col-span-2">
<QuickCaptureWidget />
</div>
</div>
</main>
);
}