summaryrefslogtreecommitdiff
path: root/apps/web/src/app
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2025-06-22 10:02:50 +0200
committerMaze Winther <mazewinther@gmail.com>2025-06-22 10:02:50 +0200
commit87a83a5604b20550430ef4eefbcd573d309694e2 (patch)
tree7ed86f00b8414cb6543f5c5ac98ea6e9abd2e10f /apps/web/src/app
downloadopencut-87a83a5604b20550430ef4eefbcd573d309694e2.tar.gz
Initial commit
Diffstat (limited to 'apps/web/src/app')
-rw-r--r--apps/web/src/app/favicon.icobin0 -> 4286 bytes
-rw-r--r--apps/web/src/app/fonts/GeistMonoVF.woffbin0 -> 67864 bytes
-rw-r--r--apps/web/src/app/fonts/GeistVF.woffbin0 -> 66268 bytes
-rw-r--r--apps/web/src/app/globals.css88
-rw-r--r--apps/web/src/app/layout.tsx45
-rw-r--r--apps/web/src/app/page.tsx48
6 files changed, 181 insertions, 0 deletions
diff --git a/apps/web/src/app/favicon.ico b/apps/web/src/app/favicon.ico
new file mode 100644
index 00000000..f1540cae
--- /dev/null
+++ b/apps/web/src/app/favicon.ico
Binary files differ
diff --git a/apps/web/src/app/fonts/GeistMonoVF.woff b/apps/web/src/app/fonts/GeistMonoVF.woff
new file mode 100644
index 00000000..f2ae185c
--- /dev/null
+++ b/apps/web/src/app/fonts/GeistMonoVF.woff
Binary files differ
diff --git a/apps/web/src/app/fonts/GeistVF.woff b/apps/web/src/app/fonts/GeistVF.woff
new file mode 100644
index 00000000..1b62daac
--- /dev/null
+++ b/apps/web/src/app/fonts/GeistVF.woff
Binary files differ
diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css
new file mode 100644
index 00000000..31bd3692
--- /dev/null
+++ b/apps/web/src/app/globals.css
@@ -0,0 +1,88 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+body {
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 0 0% 3.9%;
+ --card: 0 0% 100%;
+ --card-foreground: 0 0% 3.9%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 0 0% 3.9%;
+ --primary: 0 0% 9%;
+ --primary-foreground: 0 0% 98%;
+ --secondary: 0 0% 96.1%;
+ --secondary-foreground: 0 0% 9%;
+ --muted: 0 0% 96.1%;
+ --muted-foreground: 0 0% 45.1%;
+ --accent: 0 0% 96.1%;
+ --accent-foreground: 0 0% 9%;
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 0 0% 98%;
+ --border: 0 0% 89.8%;
+ --input: 0 0% 89.8%;
+ --ring: 0 0% 3.9%;
+ --chart-1: 12 76% 61%;
+ --chart-2: 173 58% 39%;
+ --chart-3: 197 37% 24%;
+ --chart-4: 43 74% 66%;
+ --chart-5: 27 87% 67%;
+ --radius: 0.6rem;
+ --sidebar-background: 0 0% 100%;
+ --sidebar-foreground: 0 0% 3.9%;
+ --sidebar-primary: 0 0% 9%;
+ --sidebar-primary-foreground: 0 0% 98%;
+ --sidebar-accent: 0 0% 96.1%;
+ --sidebar-accent-foreground: 0 0% 9%;
+ --sidebar-border: 0 0% 89.8%;
+ --sidebar-ring: 0 0% 3.9%;
+ }
+ .dark {
+ --background: 0 0% 8%;
+ --foreground: 0 0% 98%;
+ --card: 0 0% 3.9%;
+ --card-foreground: 0 0% 98%;
+ --popover: 0 0% 3.9%;
+ --popover-foreground: 0 0% 98%;
+ --primary: 0 0% 98%;
+ --primary-foreground: 0 0% 9%;
+ --secondary: 0 0% 14.9%;
+ --secondary-foreground: 0 0% 98%;
+ --muted: 0 0% 14.9%;
+ --muted-foreground: 0 0% 63.9%;
+ --accent: 0 0% 14.9%;
+ --accent-foreground: 0 0% 98%;
+ --destructive: 0 100% 60%;
+ --destructive-foreground: 0 0% 98%;
+ --border: 0 0% 14.9%;
+ --input: 0 0% 14.9%;
+ --ring: 0 0% 83.1%;
+ --chart-1: 220 70% 50%;
+ --chart-2: 160 60% 45%;
+ --chart-3: 30 80% 55%;
+ --chart-4: 280 65% 60%;
+ --chart-5: 340 75% 55%;
+ --sidebar-background: 0 0% 3.9%;
+ --sidebar-foreground: 0 0% 98%;
+ --sidebar-primary: 0 0% 98%;
+ --sidebar-primary-foreground: 0 0% 9%;
+ --sidebar-accent: 0 0% 14.9%;
+ --sidebar-accent-foreground: 0 0% 98%;
+ --sidebar-border: 0 0% 14.9%;
+ --sidebar-ring: 0 0% 83.1%;
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx
new file mode 100644
index 00000000..d7dd18a5
--- /dev/null
+++ b/apps/web/src/app/layout.tsx
@@ -0,0 +1,45 @@
+import type { Metadata } from "next";
+import localFont from "next/font/local";
+import { ThemeProvider } from "next-themes";
+import { Analytics } from "@vercel/analytics/react";
+import "./globals.css";
+import { Toaster } from "../components/ui/sonner";
+import { TooltipProvider } from "../components/ui/tooltip";
+
+const geistSans = localFont({
+ src: "./fonts/GeistVF.woff",
+ variable: "--font-geist-sans",
+ weight: "100 900",
+});
+const geistMono = localFont({
+ src: "./fonts/GeistMonoVF.woff",
+ variable: "--font-geist-mono",
+ weight: "100 900",
+});
+
+export const metadata: Metadata = {
+ title: "Create Next App",
+ description: "Generated by create next app",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+ <html lang="en" suppressHydrationWarning>
+ <body
+ className={`${geistSans.variable} ${geistMono.variable} antialiased`}
+ >
+ <ThemeProvider attribute="class" forcedTheme="dark" enableSystem>
+ <TooltipProvider>
+ {children}
+ <Analytics />
+ <Toaster />
+ </TooltipProvider>
+ </ThemeProvider>
+ </body>
+ </html>
+ );
+}
diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx
new file mode 100644
index 00000000..b43a6838
--- /dev/null
+++ b/apps/web/src/app/page.tsx
@@ -0,0 +1,48 @@
+import {
+ ResizablePanelGroup,
+ ResizablePanel,
+ ResizableHandle,
+} from "../components/ui/resizable";
+import { MediaPanel } from "../components/media-panel";
+import { PropertiesPanel } from "../components/properties-panel";
+import { Timeline } from "../components/timeline";
+import { PreviewPanel } from "../components/preview-panel";
+
+export default function VideoEditor() {
+ return (
+ <div className="h-screen w-screen flex flex-col bg-background">
+ <ResizablePanelGroup direction="vertical">
+ <ResizablePanel defaultSize={50} minSize={30}>
+ {/* Main content area */}
+ <ResizablePanelGroup direction="horizontal">
+ {/* Tools Panel */}
+ <ResizablePanel defaultSize={20} minSize={15}>
+ <MediaPanel />
+ </ResizablePanel>
+
+ <ResizableHandle withHandle />
+
+ {/* Preview Area */}
+ <ResizablePanel defaultSize={60}>
+ <PreviewPanel />
+ </ResizablePanel>
+
+ <ResizableHandle withHandle />
+
+ {/* Properties Panel */}
+ <ResizablePanel defaultSize={20} minSize={15}>
+ <PropertiesPanel />
+ </ResizablePanel>
+ </ResizablePanelGroup>
+ </ResizablePanel>
+
+ <ResizableHandle withHandle />
+
+ {/* Timeline */}
+ <ResizablePanel defaultSize={50} minSize={15}>
+ <Timeline />
+ </ResizablePanel>
+ </ResizablePanelGroup>
+ </div>
+ );
+}