Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
194 changes: 131 additions & 63 deletions web/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,87 +5,127 @@

:root {
/* Updated to Linear's vibrant color palette */
--background: oklch(0.98 0 0);
--foreground: oklch(0.2 0 0);
--background: oklch(0.9900 0 0);
--foreground: oklch(0 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.2 0 0);
--popover: oklch(0.98 0 0);
--popover-foreground: oklch(0.2 0 0);
--primary: oklch(0.5 0.15 280);
--card-foreground: oklch(0 0 0);
--popover: oklch(0.9900 0 0);
--popover-foreground: oklch(0 0 0);
--primary: oklch(0 0 0);
--primary-foreground: oklch(1 0 0);
--secondary: oklch(0.95 0 0);
--secondary-foreground: oklch(0.2 0 0);
--muted: oklch(0.92 0 0);
--muted-foreground: oklch(0.5 0 0);
--accent: oklch(0.57 0.18 260);
--accent-foreground: oklch(1 0 0);
--destructive: oklch(0.62 0.22 27);
--secondary: oklch(0.9400 0 0);
--secondary-foreground: oklch(0 0 0);
--muted: oklch(0.9700 0 0);
--muted-foreground: oklch(0.4400 0 0);
--accent: oklch(0.9400 0 0);
--accent-foreground: oklch(0 0 0);
--destructive: oklch(0.6300 0.1900 23.0300);
--destructive-foreground: oklch(1 0 0);
--border: oklch(0.92 0 0);
--input: oklch(0.95 0 0);
--ring: oklch(0.57 0.18 260);
--chart-1: oklch(0.57 0.18 260);
--chart-2: oklch(0.65 0.15 280);
--chart-3: oklch(0.72 0.12 300);
--chart-4: oklch(0.45 0.16 250);
--chart-5: oklch(0.6 0.14 270);
--border: oklch(0.9200 0 0);
--input: oklch(0.9400 0 0);
--ring: oklch(0 0 0);
--chart-1: oklch(0.8100 0.1700 75.3500);
--chart-2: oklch(0.5500 0.2200 264.5300);
--chart-3: oklch(0.7200 0 0);
--chart-4: oklch(0.9200 0 0);
--chart-5: oklch(0.5600 0 0);
--radius: 0.5rem;
--sidebar: oklch(0.96 0 0);
--sidebar-foreground: oklch(0.2 0 0);
--sidebar-primary: oklch(0.5 0.15 280);
--sidebar: oklch(0.9900 0 0);
--sidebar-foreground: oklch(0 0 0);
--sidebar-primary: oklch(0 0 0);
--sidebar-primary-foreground: oklch(1 0 0);
--sidebar-accent: oklch(0.57 0.18 260);
--sidebar-accent-foreground: oklch(1 0 0);
--sidebar-border: oklch(0.92 0 0);
--sidebar-ring: oklch(0.57 0.18 260);
--sidebar-accent: oklch(0.9400 0 0);
--sidebar-accent-foreground: oklch(0 0 0);
--sidebar-border: oklch(0.9400 0 0);
--sidebar-ring: oklch(0 0 0);
--success: oklch(0.65 0.18 130);
--success-foreground: oklch(1 0 0);
--warning: oklch(0.75 0.15 60);
--warning-foreground: oklch(0.2 0 0);
--font-sans: Geist, sans-serif;
--font-serif: Georgia, serif;
--font-mono: Geist Mono, monospace;
--shadow-color: hsl(0 0% 0%);
--shadow-opacity: 0.18;
--shadow-blur: 2px;
--shadow-spread: 0px;
--shadow-offset-x: 0px;
--shadow-offset-y: 1px;
--letter-spacing: 0em;
--spacing: 0.25rem;
--shadow-2xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);
--shadow-xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);
--shadow-sm: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);
--shadow: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);
--shadow-md: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 2px 4px -1px hsl(0 0% 0% / 0.18);
--shadow-lg: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 4px 6px -1px hsl(0 0% 0% / 0.18);
--shadow-xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 8px 10px -1px hsl(0 0% 0% / 0.18);
--shadow-2xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.45);
--tracking-normal: 0em;
}

.dark {
--background: oklch(0.1 0 0);
--foreground: oklch(0.95 0 0);
--card: oklch(0.15 0 0);
--card-foreground: oklch(0.95 0 0);
--popover: oklch(0.1 0 0);
--popover-foreground: oklch(0.95 0 0);
--primary: oklch(0.65 0.18 260);
--primary-foreground: oklch(0.1 0 0);
--secondary: oklch(0.22 0 0);
--secondary-foreground: oklch(0.95 0 0);
--muted: oklch(0.32 0 0);
--muted-foreground: oklch(0.65 0 0);
--accent: oklch(0.68 0.2 260);
--accent-foreground: oklch(0.1 0 0);
--destructive: oklch(0.62 0.22 27);
--destructive-foreground: oklch(0.95 0 0);
--border: oklch(0.22 0 0);
--input: oklch(0.18 0 0);
--ring: oklch(0.68 0.2 260);
--chart-1: oklch(0.68 0.2 260);
--chart-2: oklch(0.7 0.18 280);
--chart-3: oklch(0.75 0.16 300);
--chart-4: oklch(0.6 0.18 250);
--chart-5: oklch(0.7 0.16 270);
--sidebar: oklch(0.13 0 0);
--sidebar-foreground: oklch(0.95 0 0);
--sidebar-primary: oklch(0.68 0.2 260);
--sidebar-primary-foreground: oklch(0.1 0 0);
--sidebar-accent: oklch(0.32 0 0);
--sidebar-accent-foreground: oklch(0.95 0 0);
--sidebar-border: oklch(0.22 0 0);
--sidebar-ring: oklch(0.68 0.2 260);
--background: oklch(0 0 0);
--foreground: oklch(1 0 0);
--card: oklch(0.1400 0 0);
--card-foreground: oklch(1 0 0);
--popover: oklch(0.1800 0 0);
--popover-foreground: oklch(1 0 0);
--primary: oklch(1 0 0);
--primary-foreground: oklch(0 0 0);
--secondary: oklch(0.2500 0 0);
--secondary-foreground: oklch(1 0 0);
--muted: oklch(0.2300 0 0);
--muted-foreground: oklch(0.7200 0 0);
--accent: oklch(0.3200 0 0);
--accent-foreground: oklch(1 0 0);
--destructive: oklch(0.6900 0.2000 23.9100);
--destructive-foreground: oklch(0 0 0);
--border: oklch(0.2600 0 0);
--input: oklch(0.3200 0 0);
--ring: oklch(0.7200 0 0);
--chart-1: oklch(0.8100 0.1700 75.3500);
--chart-2: oklch(0.5800 0.2100 260.8400);
--chart-3: oklch(0.5600 0 0);
--chart-4: oklch(0.4400 0 0);
--chart-5: oklch(0.9200 0 0);
--sidebar: oklch(0.1800 0 0);
--sidebar-foreground: oklch(1 0 0);
--sidebar-primary: oklch(1 0 0);
--sidebar-primary-foreground: oklch(0 0 0);
--sidebar-accent: oklch(0.3200 0 0);
--sidebar-accent-foreground: oklch(1 0 0);
--sidebar-border: oklch(0.3200 0 0);
--sidebar-ring: oklch(0.7200 0 0);
--success: oklch(0.7 0.2 130);
--success-foreground: oklch(0.1 0 0);
--warning: oklch(0.8 0.18 60);
--warning-foreground: oklch(0.1 0 0);
--radius: 0.5rem;
--font-sans: Geist, sans-serif;
--font-serif: Georgia, serif;
--font-mono: Geist Mono, monospace;
--shadow-color: hsl(0 0% 0%);
--shadow-opacity: 0.18;
--shadow-blur: 2px;
--shadow-spread: 0px;
--shadow-offset-x: 0px;
--shadow-offset-y: 1px;
--letter-spacing: 0em;
--spacing: 0.25rem;
--shadow-2xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);
--shadow-xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);
--shadow-sm: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);
--shadow: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);
--shadow-md: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 2px 4px -1px hsl(0 0% 0% / 0.18);
--shadow-lg: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 4px 6px -1px hsl(0 0% 0% / 0.18);
--shadow-xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 8px 10px -1px hsl(0 0% 0% / 0.18);
--shadow-2xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.45);
}

@theme inline {
--font-sans: "Geist", "Geist Fallback";
--font-mono: "Geist Mono", "Geist Mono Fallback";
--font-sans: Geist, sans-serif;
--font-mono: Geist Mono, monospace;
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
Expand Down Expand Up @@ -126,6 +166,33 @@
--color-success-foreground: var(--success-foreground);
--color-warning: var(--warning);
--color-warning-foreground: var(--warning-foreground);
--font-serif: Georgia, serif;
--radius: 0.5rem;
--tracking-tighter: calc(var(--tracking-normal) - 0.05em);
--tracking-tight: calc(var(--tracking-normal) - 0.025em);
--tracking-wide: calc(var(--tracking-normal) + 0.025em);
--tracking-wider: calc(var(--tracking-normal) + 0.05em);
--tracking-widest: calc(var(--tracking-normal) + 0.1em);
--tracking-normal: var(--tracking-normal);
--shadow-2xl: var(--shadow-2xl);
--shadow-xl: var(--shadow-xl);
--shadow-lg: var(--shadow-lg);
--shadow-md: var(--shadow-md);
--shadow: var(--shadow);
--shadow-sm: var(--shadow-sm);
--shadow-xs: var(--shadow-xs);
--shadow-2xs: var(--shadow-2xs);
--spacing: var(--spacing);
--letter-spacing: var(--letter-spacing);
--shadow-offset-y: var(--shadow-offset-y);
--shadow-offset-x: var(--shadow-offset-x);
--shadow-spread: var(--shadow-spread);
--shadow-blur: var(--shadow-blur);
--shadow-opacity: var(--shadow-opacity);
--color-shadow-color: var(--shadow-color);
--radius-2xl: calc(var(--radius) * 1.8);
--radius-3xl: calc(var(--radius) * 2.2);
--radius-4xl: calc(var(--radius) * 2.6);
}

@layer base {
Expand All @@ -134,5 +201,6 @@
}
body {
@apply bg-background text-foreground;
letter-spacing: var(--tracking-normal);
}
}
}
84 changes: 42 additions & 42 deletions web/app/root.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,55 +4,55 @@ import { Providers } from "./providers";
import stylesheet from "./globals.css?url";

export const links: LinksFunction = () => [
{
rel: "stylesheet",
href: "https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap",
},
{ rel: "stylesheet", href: stylesheet },
{
rel: "icon",
href: "/icon-light-32x32.png",
media: "(prefers-color-scheme: light)",
},
{
rel: "icon",
href: "/icon-dark-32x32.png",
media: "(prefers-color-scheme: dark)",
},
{
rel: "icon",
href: "/icon.svg",
type: "image/svg+xml",
},
{
rel: "apple-touch-icon",
href: "/apple-icon.png",
},
{
rel: "stylesheet",
href: "https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap",
},
{ rel: "stylesheet", href: stylesheet },
{
rel: "icon",
href: "/icon-light-32x32.png",
media: "(prefers-color-scheme: light)",
},
{
rel: "icon",
href: "/icon-dark-32x32.png",
media: "(prefers-color-scheme: dark)",
},
{
rel: "icon",
href: "/icon.svg",
type: "image/svg+xml",
},
{
rel: "apple-touch-icon",
href: "/apple-icon.png",
},
];

export const meta: MetaFunction = () => [
{ title: "Webhook Dashboard" },
{ name: "description", content: "Manage webhook endpoints and deliveries" },
{ title: "Webhook Dashboard" },
{ name: "description", content: "Manage webhook endpoints and deliveries" },
];

export function Layout({ children }: { children: React.ReactNode }) {
return (
<html lang="en" suppressHydrationWarning>
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<Meta />
<Links />
</head>
<body className="font-sans antialiased">
<Providers>{children}</Providers>
<ScrollRestoration />
<Scripts />
</body>
</html>
);
return (
<html lang="en" suppressHydrationWarning>
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<Meta />
<Links />
</head>
<body className="font-sans antialiased">
<Providers>{children}</Providers>
<ScrollRestoration />
<Scripts />
</body>
</html>
);
}

export default function App() {
return <Outlet />;
return <Outlet />;
}
9 changes: 8 additions & 1 deletion web/app/routes.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
import { type RouteConfig, layout, route, index } from "@react-router/dev/routes";
import {
type RouteConfig,
layout,
route,
index,
} from "@react-router/dev/routes";

export default [
layout("routes/dashboard-layout.tsx", [
index("routes/overview.tsx"),
route("webhooks", "routes/webhooks.tsx"),
route("webhooks/new", "routes/create-webhook.tsx"),
route("deliveries", "routes/deliveries.tsx"),
route("deliveries/:id", "routes/delivery-detail.tsx"),
route("logs", "routes/logs.tsx"),
route("settings", "routes/settings.tsx"),
]),
Expand Down
5 changes: 5 additions & 0 deletions web/app/routes/create-webhook.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { CreateWebhookPage } from "@/components/pages/create-webhook";

export default function CreateWebhook() {
return <CreateWebhookPage />;
}
5 changes: 5 additions & 0 deletions web/app/routes/delivery-detail.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { DeliveryDetailPage } from "@/components/pages/delivery-detail";

export default function DeliveryDetail() {
return <DeliveryDetailPage />;
}
Loading