Redesign the frontend: real type, hero landing, depth

Lifts the UI from wireframe to a finished heritage look: Fraunces (display serif) + Inter (sans) via next/font; a proper hero landing with a feature triad and the Origin mark; a warm bronze-tinted background gradient for depth; a sticky branded header and refined footer. Polished button (sizes + bronze focus ring + shadow), card (rounded-xl, soft layered shadow), and input (bronze focus) primitives that carry across every page.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Justin Paul <justin@jpaul.me>
This commit is contained in:
2026-06-06 21:34:47 -04:00
parent fc4cb0273e
commit 3a14fcc4ca
6 changed files with 131 additions and 52 deletions
+6 -6
View File
@@ -4,19 +4,19 @@ import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "@/lib/utils";
const buttonVariants = cva(
"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-bronze focus-visible:ring-offset-1 disabled:pointer-events-none disabled:opacity-50",
"inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-bronze focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--background)] disabled:pointer-events-none disabled:opacity-50",
{
variants: {
variant: {
// Bronze is the brand accent; paper reads cleanly on it.
default: "bg-bronze text-paper hover:bg-bronze-deep",
default: "bg-bronze text-paper shadow-sm hover:bg-bronze-deep hover:shadow",
outline:
"border border-bronze text-bronze bg-transparent hover:bg-bronze hover:text-paper",
"border border-[var(--border)] bg-[var(--surface)] hover:border-bronze hover:text-bronze",
ghost: "text-[var(--foreground)] hover:bg-bronze/10",
},
size: {
default: "h-10 px-4 py-2",
sm: "h-9 px-3",
default: "h-10 px-4 text-sm",
sm: "h-9 px-3 text-sm",
lg: "h-12 px-6 text-base",
},
},
defaultVariants: { variant: "default", size: "default" },
+1 -1
View File
@@ -6,7 +6,7 @@ export function Card({ className, ...props }: React.HTMLAttributes<HTMLDivElemen
return (
<div
className={cn(
"rounded-lg border border-[var(--border)] bg-[var(--surface)] shadow-sm",
"rounded-xl border border-[var(--border)] bg-[var(--surface)] shadow-[0_1px_2px_rgba(26,26,23,0.04),0_8px_24px_-12px_rgba(26,26,23,0.10)]",
className,
)}
{...props}
+1 -1
View File
@@ -7,7 +7,7 @@ export const Input = React.forwardRef<HTMLInputElement, React.InputHTMLAttribute
<input
ref={ref}
className={cn(
"flex h-10 w-full rounded-md border border-[var(--border)] bg-[var(--surface)] px-3 py-2 text-sm placeholder:text-[var(--muted)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-bronze disabled:opacity-50",
"flex h-10 w-full rounded-lg border border-[var(--border)] bg-[var(--surface)] px-3 py-2 text-sm placeholder:text-[var(--muted)] transition-colors focus-visible:border-bronze focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-bronze/40 disabled:opacity-50",
className,
)}
{...props}