import { BarChart3, Clock, FileText, LayoutDashboard, Receipt, Settings, Timer, Users, } from "lucide-react"; import { BrowserFrame } from "~/components/marketing/browser-frame"; import { getAppHost } from "~/lib/app-url"; import { cn } from "~/lib/utils"; const appHost = getAppHost(); function MockSidebar({ active }: { active: "dashboard" | "invoices" | "time" }) { const items = [ { id: "dashboard" as const, label: "Dashboard", icon: LayoutDashboard }, { id: "invoices" as const, label: "Invoices", icon: FileText }, { id: "time" as const, label: "Time clock", icon: Timer }, { id: "clients" as const, label: "Clients", icon: Users }, { id: "expenses" as const, label: "Expenses", icon: Receipt }, { id: "reports" as const, label: "Reports", icon: BarChart3 }, ]; return ( ); } function StatusBadge({ children, tone, }: { children: React.ReactNode; tone: "draft" | "sent" | "paid" | "overdue"; }) { const tones = { draft: "bg-muted text-muted-foreground", sent: "bg-blue-500/10 text-blue-700 dark:text-blue-300", paid: "bg-emerald-500/10 text-emerald-700 dark:text-emerald-300", overdue: "bg-amber-500/10 text-amber-700 dark:text-amber-300", }; return ( {children} ); } export function InvoicesScreenshot({ className }: { className?: string }) { const rows = [ { client: "Northwind Studio", id: "INV-1042", amount: "$1,850.00", status: "sent" as const }, { client: "Harbor & Co.", id: "INV-1041", amount: "$640.00", status: "paid" as const }, { client: "Lumen Creative", id: "INV-1040", amount: "$2,100.00", status: "draft" as const }, { client: "Field Notes Ltd", id: "INV-1039", amount: "$420.00", status: "overdue" as const }, ]; return (

Invoices

Draft, send, and track what you're owed.

New invoice
Client Invoice Amount Status
{rows.map((row) => (
{row.client} {row.id} {row.amount} {row.status.charAt(0).toUpperCase() + row.status.slice(1)}
))}
); } export function TimeClockScreenshot({ className }: { className?: string }) { return (

Time clock

Track billable hours and roll them into invoices.

Active session
02:14:38

Brand refresh — Northwind Studio

Stop
Pause
Recent entries
{[ { label: "Wireframes", time: "1h 20m", client: "Harbor & Co." }, { label: "Copy edits", time: "45m", client: "Lumen Creative" }, { label: "Kickoff call", time: "30m", client: "Field Notes Ltd" }, ].map((entry) => (

{entry.label}

{entry.client}

{entry.time}
))}
); } export function DashboardScreenshot({ className }: { className?: string }) { return (

Good afternoon

Here's what needs your attention.

Awaiting payment

3 invoices

Follow up on sent invoices when you're ready.

Timer running

02:14:38

Northwind Studio · Brand refresh

Recent activity

{[ "Invoice INV-1042 sent to Northwind Studio", "Timer started for Brand refresh", "Client Harbor & Co. updated", ].map((line) => (
{line}
))}
); }