Theia rip-out: - Delete app/api/theia-auth/route.ts (Traefik ForwardAuth shim) - Delete app/api/projects/[projectId]/workspace/route.ts and app/api/projects/prewarm/route.ts (Cloud Run Theia provisioning) - Delete lib/cloud-run-workspace.ts and lib/coolify-workspace.ts - Strip provisionTheiaWorkspace + theiaWorkspaceUrl/theiaAppUuid/ theiaError from app/api/projects/create/route.ts response - Remove Theia callbackUrl branch in app/auth/page.tsx - Drop "Open in Theia" button + xterm/Theia PTY copy in build/page.tsx - Drop theiaWorkspaceUrl from deployment/page.tsx Project type - Strip Theia IDE line + theia-code-os from advisor + agent-chat context strings - Scrub Theia mention from lib/auth/workspace-auth.ts comment P5.1 (custom apex domains + DNS): - lib/coolify.ts + lib/opensrs.ts: nameserver normalization, OpenSRS XML auth, Cloud DNS plumbing - scripts/smoke-attach-e2e.ts: full prod GCP + sandbox OpenSRS + prod Coolify smoke covering register/zone/A/NS/PATCH/cleanup In-progress (Justine onboarding/build, MVP setup, agent telemetry): - New (justine)/stories, project (home) layouts, mvp-setup, run, tasks routes + supporting components - Project shell + sidebar + nav refactor for the Stackless palette - Agent session API hardening (sessions, events, stream, approve, retry, stop) + atlas-chat, advisor, design-surfaces refresh - New scripts/sync-db-url-from-coolify.mjs + scripts/prisma-db-push.mjs + docker-compose.local-db.yml for local Prisma workflows - lib/dev-bypass.ts, lib/chat-context-refs.ts, lib/prd-sections.ts - Misc: stories CSS, debug/prisma route, modal-theme, BuildLivePlanPanel Made-with: Cursor
79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { Inter, Lora, IBM_Plex_Mono } from "next/font/google";
|
|
import "./globals.css";
|
|
import { Toaster } from "@/components/ui/sonner";
|
|
import { Providers } from "@/app/components/Providers";
|
|
|
|
const inter = Inter({
|
|
variable: "--font-inter",
|
|
subsets: ["latin"],
|
|
weight: ["400", "500", "600", "700"],
|
|
});
|
|
|
|
const lora = Lora({
|
|
variable: "--font-lora",
|
|
subsets: ["latin"],
|
|
weight: ["400", "500", "600", "700"],
|
|
style: ["normal", "italic"],
|
|
});
|
|
|
|
const ibmPlexMono = IBM_Plex_Mono({
|
|
variable: "--font-ibm-plex-mono",
|
|
subsets: ["latin"],
|
|
weight: ["400", "500"],
|
|
});
|
|
|
|
export const metadata: Metadata = {
|
|
title: "VIBN — Build with Vibn",
|
|
description: "Chat with Vibn to define your product, then let AI build it.",
|
|
manifest: "/manifest.json",
|
|
appleWebApp: {
|
|
capable: true,
|
|
statusBarStyle: "black-translucent",
|
|
title: "VIBN",
|
|
},
|
|
other: {
|
|
"mobile-web-app-capable": "yes",
|
|
"msapplication-TileColor": "#1a1510",
|
|
},
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
return (
|
|
<html lang="en" suppressHydrationWarning>
|
|
<head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
<meta name="theme-color" content="#1a1510" />
|
|
<link rel="apple-touch-icon" href="/vibn-logo-circle.png" />
|
|
<link rel="manifest" href="/manifest.json" />
|
|
</head>
|
|
<body
|
|
className={`${inter.variable} ${lora.variable} ${ibmPlexMono.variable} antialiased`}
|
|
>
|
|
<Providers>
|
|
{children}
|
|
<Toaster />
|
|
</Providers>
|
|
{/* Service worker breaks Next dev (RSC / __nextjs_* fetches need a real Response). Prod only. */}
|
|
{process.env.NODE_ENV === "production" ? (
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `
|
|
if ('serviceWorker' in navigator) {
|
|
window.addEventListener('load', () => {
|
|
navigator.serviceWorker.register('/sw.js').catch(() => {});
|
|
});
|
|
}
|
|
`,
|
|
}}
|
|
/>
|
|
) : null}
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|