Today at 2:08 PM Create a premium, modern Shopify fashion website inspired by luxury streetwear brands. The design should feel minimal, elegant, and high-end with a monochrome color palette (black, white, and light gray). Overall Style Luxury streetwear aesthetic. Clean, spacious layout with lots of white space. Smooth animations and premium transitions. Large typography with bold headlines. Minimal distractions a ... Built premium storefront UI Renders correctly. Built a premium monochrome Maison/Noir storefront with sticky glass header, editorial hero, collections lookbook grid, shop with filters, full product page (hover-zoom gallery, size/color/qty, accordions, reviews, related), and dark footer with newsletter — all wired across Home, Shop, Collections, About, Contact, and Product routes. Today at 2:14 PM change the name to oxyur Renamed site to oxyur Done — the brand name has been updated to oxyur site-wide. Every title tag, meta description, footer, heading, and the marquee banner now reflects the new name. Today at 2:20 PM change thee MAISON/NOIR to OXYUR Searching for remaining Maison/Noir references in codebase There are no remaining "MAISON/NOIR" references in the codebase — everything was already updated to oxyur in the previous change. Today at 2:21 PM give th full code Updated homepage header text Here is the complete application source. The src/components/ui/ folder contains standard shadcn/ui primitives (accordion, button, dialog, etc.) and src/routeTree.gen.ts is auto-generated by the TanStack Router Vite plugin — both are omitted here. package.json { "name": "tanstack_start_ts", "private": true, "sideEffects": false, "type": "module", "scripts": { "dev": "vite dev", "build": "vite build", "build:dev": "vite build --mode development", "preview": "vite preview", "lint": "eslint .", "format": "prettier --write ." }, "dependencies": { "@hookform/resolvers": "^5.2.2", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-aspect-ratio": "^1.1.8", "@radix-ui/react-avatar": "^1.1.11", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-context-menu": "^2.2.16", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-hover-card": "^1.1.15", "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-menubar": "^1.1.16", "@radix-ui/react-navigation-menu": "^1.2.14", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-progress": "^1.1.8", "@radix-ui/react-radio-group": "^1.3.8", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-toggle": "^1.1.10", "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@tailwindcss/vite": "^4.2.1", "@tanstack/react-query": "^5.101.1", "@tanstack/react-router": "^1.170.16", "@tanstack/react-start": "^1.168.26", "@tanstack/router-plugin": "^1.168.18", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", "input-otp": "^1.4.2", "lucide-react": "^0.575.0", "react": "^19.2.0", "react-day-picker": "^9.14.0", "react-dom": "^19.2.0", "react-hook-form": "^7.71.2", "react-resizable-panels": "^4.6.5", "recharts": "^2.15.4", "sonner": "^2.0.7", "tailwind-merge": "^3.5.0", "tailwindcss": "^4.2.1", "tw-animate-css": "^1.3.4", "vaul": "^1.1.2", "vite-tsconfig-paths": "^6.0.2", "zod": "^3.24.2" }, "devDependencies": { "@eslint/js": "^9.32.0", "@lovable.dev/vite-tanstack-config": "^2.6.4", "@types/node": "^22.16.5", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", "@vitejs/plugin-react": "^5.2.0", "eslint": "^9.32.0", "eslint-config-prettier": "^10.1.1", "eslint-plugin-prettier": "^5.2.6", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", "globals": "^15.15.0", "nitro": "3.0.260603-beta", "prettier": "^3.7.3", "typescript": "^5.8.3", "typescript-eslint": "^8.56.1", "vite": "^8.0.16" } } tsconfig.json { "include": ["src/**/*.ts", "src/**/*.tsx", "vite.config.ts", "eslint.config.js"], "compilerOptions": { "target": "ES2022", "jsx": "react-jsx", "module": "ESNext", "lib": ["ES2022", "DOM", "DOM.Iterable"], "types": ["vite/client"], "moduleResolution": "Bundler", "allowImportingTsExtensions": true, "verbatimModuleSyntax": false, "noEmit": true, "skipLibCheck": true, "strict": true, "noUnusedLocals": false, "noUnusedParameters": false, "noFallthroughCasesInSwitch": true, "noUncheckedSideEffectImports": true, "paths": { "@/*": ["./src/*"] } } } vite.config.ts import { defineConfig } from "@lovable.dev/vite-tanstack-config"; export default defineConfig({ tanstackStart: { server: { entry: "server" }, }, }); src/styles.css @import "tailwindcss" source(none); @source "../src"; @import "tw-animate-css"; @custom-variant dark (&:is(.dark *)); @theme inline { --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --color-ink: var(--ink); --color-bone: var(--bone); --color-ash: var(--ash); --font-display: "Bebas Neue", "Arial Narrow", sans-serif; --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif; } :root { --radius: 0rem; --background: oklch(1 0 0); --foreground: oklch(0.145 0 0); --ink: oklch(0 0 0); --bone: oklch(0.97 0 0); --ash: oklch(0.55 0 0); --card: oklch(1 0 0); --card-foreground: oklch(0.145 0 0); --popover: oklch(1 0 0); --popover-foreground: oklch(0.145 0 0); --primary: oklch(0 0 0); --primary-foreground: oklch(1 0 0); --secondary: oklch(0.97 0 0); --secondary-foreground: oklch(0.145 0 0); --muted: oklch(0.97 0 0); --muted-foreground: oklch(0.5 0 0); --accent: oklch(0.97 0 0); --accent-foreground: oklch(0.145 0 0); --destructive: oklch(0.577 0.245 27.325); --destructive-foreground: oklch(1 0 0); --border: oklch(0.9 0 0); --input: oklch(0.9 0 0); --ring: oklch(0 0 0); } .dark { --background: oklch(0.1 0 0); --foreground: oklch(0.98 0 0); --primary: oklch(1 0 0); --primary-foreground: oklch(0 0 0); --border: oklch(1 0 0 / 15%); } @layer base { * { border-color: var(--color-border); } html { scroll-behavior: smooth; -webkit-font-smoothing: antialiased; } body { background-color: var(--color-background); color: var(--color-foreground); font-family: var(--font-sans); font-feature-settings: "ss01", "cv11"; } h1, h2, h3, .font-display { font-family: var(--font-display); letter-spacing: 0.01em; } ::selection { background: #000; color: #fff; } } @utility container-x { padding-left: 1.25rem; padding-right: 1.25rem; @media (min-width: 768px) { padding-left: 2.5rem; padding-right: 2.5rem; } @media (min-width: 1280px) { padding-left: 4rem; padding-right: 4rem; } } @utility eyebrow { font-family: var(--font-sans); font-size: 0.6875rem; font-weight: 500; letter-spacing: 0.22em; text-transform: uppercase; color: var(--color-ash); } @utility link-underline { position: relative; &::after { content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 1px; background: currentColor; transform: scaleX(0); transform-origin: right; transition: transform 0.4s cubic-bezier(0.65, 0, 0.35, 1); } &:hover::after { transform: scaleX(1); transform-origin: left; } } @utility marquee-track { animation: marquee 40s linear infinite; } @keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } } @keyframes reveal-up { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } } @utility reveal { animation: reveal-up 0.9s cubic-bezier(0.22, 1, 0.36, 1) both; } @utility reveal-delay-1 { animation-delay: 0.1s; } @utility reveal-delay-2 { animation-delay: 0.25s; } @utility reveal-delay-3 { animation-delay: 0.4s; } @utility reveal-delay-4 { animation-delay: 0.6s; } src/server.ts import "./lib/error-capture"; import { consumeLastCapturedError } from "./lib/error-capture"; import { renderErrorPage } from "./lib/error-page"; type ServerEntry = { fetch: (request: Request, env: unknown, ctx: unknown) => Promise | Response; }; let serverEntryPromise: Promise | undefined; async function getServerEntry(): Promise { if (!serverEntryPromise) { serverEntryPromise = import("@tanstack/react-start/server-entry").then( (m) => (m.default ?? m) as ServerEntry, ); } return serverEntryPromise; }