From 0fd31ef6f261f3b98987c1a93306be7be54a1371 Mon Sep 17 00:00:00 2001 From: Nzai Kilonzo Date: Sun, 12 Jul 2026 20:02:25 +0300 Subject: [PATCH 1/5] feat: add dashboard with auth, tickets, billing, and settings - Dashboard layout with sidebar, breadcrumb, and app switcher - Apps page with project cards and create-app form - App detail pages (overview, API keys, subscription, tickets, settings) - Global tickets page with search, sort, filter, pagination, row selection - Billing page with pricing plans, invoices, and danger zone - Settings page with profile, API keys, security, and danger zone - Better-auth integration (email/password + GitHub OAuth) - Protected routes (dashboard requires session, login redirects if authenticated) - Theme switcher in sidebar footer dropdown - Brand color tokens and Geist font - shadcn UI form components with react-hook-form + zod - Remove sqlite.db from repository, add to .gitignore --- .gitignore | 8 + app/api/auth/[...all]/route.ts | 4 + app/blog/[slug]/page.tsx | 2 +- app/blog/page.tsx | 4 +- app/dashboard/apps/[appId]/api-keys/page.tsx | 15 + app/dashboard/apps/[appId]/layout.tsx | 23 + app/dashboard/apps/[appId]/page.tsx | 130 + app/dashboard/apps/[appId]/settings/page.tsx | 15 + .../apps/[appId]/subscription/page.tsx | 151 + app/dashboard/apps/[appId]/tickets/page.tsx | 122 + app/dashboard/apps/new/page.tsx | 123 + app/dashboard/apps/page.tsx | 86 + app/dashboard/billing/page.tsx | 215 + app/dashboard/layout.tsx | 22 + app/dashboard/page.tsx | 5 + app/dashboard/settings/page.tsx | 26 + app/dashboard/tickets/[ticketId]/page.tsx | 345 + app/dashboard/tickets/page.tsx | 17 + app/docs/layout.tsx | 2 +- app/layout.tsx | 9 +- app/login/page.tsx | 50 + app/pricing/layout.tsx | 2 +- app/pricing/page.tsx | 2 +- components.json | 25 + components/atoms/button.tsx | 6 +- components/atoms/search.tsx | 12 +- components/blog/related-posts.tsx | 2 +- components/dashboard/app-api-key-content.tsx | 111 + components/dashboard/app-card.tsx | 87 + components/dashboard/app-header.tsx | 43 + components/dashboard/app-settings-content.tsx | 126 + components/dashboard/app-sidebar.tsx | 164 + components/dashboard/app-switcher.tsx | 72 + components/dashboard/app-tabs.tsx | 51 + components/dashboard/billing-actions.tsx | 61 + components/dashboard/dashboard-breadcrumb.tsx | 69 + components/dashboard/dashboard-header.tsx | 40 + components/dashboard/dashboard-shell.tsx | 41 + components/dashboard/login-form.tsx | 182 + components/dashboard/new-app-form.tsx | 188 + components/dashboard/project-switcher.tsx | 1 + components/dashboard/settings-content.tsx | 169 + .../dashboard/sidebar-footer-dropdown.tsx | 266 + .../dashboard/sidebar-header-dropdown.tsx | 94 + components/dashboard/tickets-table.tsx | 357 + components/docs/child-cards.tsx | 2 +- components/docs/components/code-output.tsx | 2 +- components/docs/components/pre.tsx | 6 +- components/docs/navigation.tsx | 4 +- components/docs/table-of-contents.tsx | 2 +- components/layout/code.tsx | 6 +- components/layout/divider.tsx | 2 +- components/layout/footer.tsx | 2 +- components/layout/navigation.tsx | 62 +- components/sections/ergonomics.tsx | 4 +- components/sections/faq.tsx | 10 +- components/sections/features.tsx | 4 +- components/sections/features/middleware.tsx | 2 +- components/sections/hero.tsx | 6 +- components/sections/pricing.tsx | 10 +- components/sections/testimonial.tsx | 4 +- components/ui/accordion.tsx | 72 + components/ui/avatar.tsx | 109 + components/ui/badge.tsx | 54 + components/ui/button.tsx | 58 + components/ui/card.tsx | 103 + components/ui/checkbox.tsx | 29 + components/ui/context-menu.tsx | 271 + components/ui/drawer.tsx | 228 + components/ui/dropdown-menu.tsx | 268 + components/ui/empty.tsx | 104 + components/ui/form.tsx | 161 + components/ui/hover-card.tsx | 51 + components/ui/input.tsx | 20 + components/ui/label.tsx | 20 + components/ui/menubar.tsx | 280 + components/ui/navigation-menu.tsx | 168 + components/ui/select.tsx | 201 + components/ui/separator.tsx | 25 + components/ui/sheet.tsx | 138 + components/ui/sidebar.tsx | 723 + components/ui/skeleton.tsx | 13 + components/ui/sonner.tsx | 49 + components/ui/table.tsx | 116 + components/ui/tabs.tsx | 82 + components/ui/textarea.tsx | 18 + components/ui/toggle.tsx | 45 + components/ui/tooltip.tsx | 66 + hooks/use-mobile.ts | 19 + lib/auth.ts | 15 + lib/auth/auth-client.ts | 30 + lib/dashboard/mock-data.ts | 130 + lib/dashboard/types.ts | 50 + lib/utils.ts | 4 +- package.json | 19 +- postcss.config.js | 7 +- styles/globals.css | 213 +- tsconfig.json | 27 +- tsconfig.tsbuildinfo | 1 + yarn.lock | 23221 +++++++++------- 100 files changed, 20938 insertions(+), 9943 deletions(-) create mode 100644 app/api/auth/[...all]/route.ts create mode 100644 app/dashboard/apps/[appId]/api-keys/page.tsx create mode 100644 app/dashboard/apps/[appId]/layout.tsx create mode 100644 app/dashboard/apps/[appId]/page.tsx create mode 100644 app/dashboard/apps/[appId]/settings/page.tsx create mode 100644 app/dashboard/apps/[appId]/subscription/page.tsx create mode 100644 app/dashboard/apps/[appId]/tickets/page.tsx create mode 100644 app/dashboard/apps/new/page.tsx create mode 100644 app/dashboard/apps/page.tsx create mode 100644 app/dashboard/billing/page.tsx create mode 100644 app/dashboard/layout.tsx create mode 100644 app/dashboard/page.tsx create mode 100644 app/dashboard/settings/page.tsx create mode 100644 app/dashboard/tickets/[ticketId]/page.tsx create mode 100644 app/dashboard/tickets/page.tsx create mode 100644 app/login/page.tsx create mode 100644 components.json create mode 100644 components/dashboard/app-api-key-content.tsx create mode 100644 components/dashboard/app-card.tsx create mode 100644 components/dashboard/app-header.tsx create mode 100644 components/dashboard/app-settings-content.tsx create mode 100644 components/dashboard/app-sidebar.tsx create mode 100644 components/dashboard/app-switcher.tsx create mode 100644 components/dashboard/app-tabs.tsx create mode 100644 components/dashboard/billing-actions.tsx create mode 100644 components/dashboard/dashboard-breadcrumb.tsx create mode 100644 components/dashboard/dashboard-header.tsx create mode 100644 components/dashboard/dashboard-shell.tsx create mode 100644 components/dashboard/login-form.tsx create mode 100644 components/dashboard/new-app-form.tsx create mode 100644 components/dashboard/project-switcher.tsx create mode 100644 components/dashboard/settings-content.tsx create mode 100644 components/dashboard/sidebar-footer-dropdown.tsx create mode 100644 components/dashboard/sidebar-header-dropdown.tsx create mode 100644 components/dashboard/tickets-table.tsx create mode 100644 components/ui/accordion.tsx create mode 100644 components/ui/avatar.tsx create mode 100644 components/ui/badge.tsx create mode 100644 components/ui/button.tsx create mode 100644 components/ui/card.tsx create mode 100644 components/ui/checkbox.tsx create mode 100644 components/ui/context-menu.tsx create mode 100644 components/ui/drawer.tsx create mode 100644 components/ui/dropdown-menu.tsx create mode 100644 components/ui/empty.tsx create mode 100644 components/ui/form.tsx create mode 100644 components/ui/hover-card.tsx create mode 100644 components/ui/input.tsx create mode 100644 components/ui/label.tsx create mode 100644 components/ui/menubar.tsx create mode 100644 components/ui/navigation-menu.tsx create mode 100644 components/ui/select.tsx create mode 100644 components/ui/separator.tsx create mode 100644 components/ui/sheet.tsx create mode 100644 components/ui/sidebar.tsx create mode 100644 components/ui/skeleton.tsx create mode 100644 components/ui/sonner.tsx create mode 100644 components/ui/table.tsx create mode 100644 components/ui/tabs.tsx create mode 100644 components/ui/textarea.tsx create mode 100644 components/ui/toggle.tsx create mode 100644 components/ui/tooltip.tsx create mode 100644 hooks/use-mobile.ts create mode 100644 lib/auth.ts create mode 100644 lib/auth/auth-client.ts create mode 100644 lib/dashboard/mock-data.ts create mode 100644 lib/dashboard/types.ts create mode 100644 tsconfig.tsbuildinfo diff --git a/.gitignore b/.gitignore index aad1606..93e6be7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,11 @@ examples/target .env .env.local .env.production +.yarn +better-auth_migrations +.yarnrc.yml + +# SQLite databases +*.db +*.db-journal +sqlite.db diff --git a/app/api/auth/[...all]/route.ts b/app/api/auth/[...all]/route.ts new file mode 100644 index 0000000..5b67b06 --- /dev/null +++ b/app/api/auth/[...all]/route.ts @@ -0,0 +1,4 @@ +import { auth } from "@/lib/auth"; +import { toNextJsHandler } from "better-auth/next-js"; + +export const { GET, POST } = toNextJsHandler(auth); diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index 0bc80b0..33917d5 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -32,7 +32,7 @@ export default async function Page({ return ( <> -
+