Phase 1: Command palette (⌘K), editor autosave with quiet auto-saves, dashboard saved views from API + quick links + onboarding seed CTA, explicit task scan panel. Phase 2: Context pack formatter with YAML frontmatter, copy on note + workspace .md export. Phase 3: ADR for hybrid search without embeddings; POST /notes/search (lexical + ranked hybrid); search UI mode toggle. Phase 4: POST copilot + suggest-title; in-editor copilot actions; /chat retrieval answers with citations (backend chat.rag_enabled). Phase 5: Settings MCP snippet, offline queue note, API token deferral; DEEP_LINKS.md. Phase 6: Note shares + public GET; share page; POST onboarding-seed. Phase 7: note_versions on PATCH; version panel; create-note templates; PWA manifest. Flags: search.hybrid_enabled, copilot.enabled, chat.rag_enabled, onboarding.seed_enabled. Made-with: Cursor
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import type { Metadata, Viewport } from "next";
|
|
import { Space_Grotesk, DM_Sans, IBM_Plex_Mono } from "next/font/google";
|
|
import "@bytelyst/design-tokens/css/notelett";
|
|
import "./globals.css";
|
|
import { Providers } from "./providers";
|
|
import { PRODUCT_NAME } from "@/lib/product-config";
|
|
|
|
const spaceGrotesk = Space_Grotesk({ subsets: ["latin"], variable: "--font-display" });
|
|
const dmSans = DM_Sans({ subsets: ["latin"], variable: "--font-body" });
|
|
const ibmPlexMono = IBM_Plex_Mono({ weight: ["400", "500"], subsets: ["latin"], variable: "--font-mono" });
|
|
|
|
export const metadata: Metadata = {
|
|
title: PRODUCT_NAME,
|
|
description:
|
|
"Structured notes workspace for humans and ByteLyst agents with search, review, and operational context.",
|
|
manifest: "/manifest.json",
|
|
appleWebApp: {
|
|
capable: true,
|
|
statusBarStyle: "black-translucent",
|
|
title: PRODUCT_NAME,
|
|
},
|
|
};
|
|
|
|
export const viewport: Viewport = {
|
|
width: "device-width",
|
|
initialScale: 1,
|
|
themeColor: "#06070A",
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
return (
|
|
<html lang="en" data-theme="dark">
|
|
<body className={`${spaceGrotesk.variable} ${dmSans.variable} ${ibmPlexMono.variable} antialiased`}>
|
|
<a href="#main-content" className="skip-to-content">Skip to content</a>
|
|
<Providers>{children}</Providers>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|