# Oxide UI -- Project Handoff v6 # Pure ASCII. Fetch this file to restore full session context. # URL: https://oxide-ui.dev/handoff.txt ================================================================ RESUME PROMPT ================================================================ I'm continuing development of Oxide UI. Please fetch: https://oxide-ui.dev/handoff.txt Confirm current state and ask what to work on next. Before first Cloudflare Pages deploy: paste HANDOFF.md instead. ================================================================ PROJECT IDENTITY ================================================================ Name: Oxide UI Type: Tailwind CSS component library + VitePress docs site Goal: Dark-mode Preline.co equivalent for Nuxt projects Framework: Nuxt 3 / Vue 3 ONLY. No React. No vanilla HTML. Mode: Dark ONLY. Never add light mode. Accent: #D40C37 (crimson) Background: #09090b (zinc-950) Surface: #18181b (zinc-900) Border: #27272a (zinc-800) Text: #f4f4f5 (zinc-100) / #a1a1aa (zinc-400) Hosting: Cloudflare Pages (static) Docs: VitePress 1.x Version: v0.1.0 Git: main branch ================================================================ FONT STACK ================================================================ Display/headings: Syne (400, 700, 800) Body: DM Sans (300, 400, 500, 600) Code: JetBrains Mono (400, 500) Loaded via Google Fonts link in .vitepress/config.mts head array. ================================================================ REAL-WORLD CONTEXT ================================================================ Owner runs a multi-app hosting website. Current live apps: 1. YouTube Thumbnail Downloader (paste URL -> download HD/SD thumbnails) 2. YouTube Channel Stats (paste channel URL -> stats, download banner/avatar) More apps planned. Oxide UI is the component system for the whole site. ================================================================ INTERACTION LAYER -- RULES ================================================================ Headless UI v1 (Vue) is THE interaction layer. NON-NEGOTIABLE. Install: npm install @headlessui/vue HUI component -> Oxide UI page Dialog -> Modal, Drawer Menu -> Dropdown Listbox -> Select Combobox -> Select (Combobox section), Command Palette Switch -> Toggle Disclosure -> Accordion, Navbar (mobile menu) Popover -> Popover RadioGroup -> Radio Group Tabs -> Tabs Transition -> Drawer, Toast, Command Palette, all animated DO NOT use Preline JS plugins (conflict with Vue reactivity). Preline HTML/CSS patterns are fine; their JS plugins are not. ================================================================ COMPONENTS (39 total) -- ALL with per-variant Preview blocks ================================================================ Accordion Disclosure single item, full accordion Alert -- info/success/warning/error, dismissible Avatar -- initials, sizes, status dot, group Badge -- brand/secondary/success/warning/error/outline/live/count Breadcrumb -- chevron/slash/home/badge, dynamic Nuxt Button -- primary/secondary/outline/ghost/destructive, sizes Card -- basic/header+footer/icon/stat/interactive/horizontal Carousel -- CSS translate, dots, thumbnails, autoplay, looping Checkbox -- Vue v-model, indeterminate, card group Code Block -- single/tabbed, copy button, Shiki integration Command Palette Combobox Cmd+K overlay, keyboard nav, grouped results Context Menu -- right-click, viewport clamp, dividers, danger Data Grid -- filter + sort + paginate (Vue computed) Date Picker -- calendar grid, month nav, today/clear Drawer Dialog right/left, Vue+Teleport, HUI Dialog Dropdown Menu basic/sections/icons/destructive Empty State -- default/no-results/in-table/minimal File Upload -- drag-and-drop, progress bars, real fetch Input -- basic/label/icon/trailing button/error/disabled/textarea Modal Dialog Vue+Teleport, HUI Dialog, sizes Navbar Disclosure basic/sticky/active links/HUI mobile menu Notification Dot -- count badge, pulse, on avatar, on nav, status colours Pagination -- numbered+ellipsis, count, compact; Vue computed PIN Input -- 6-digit, 4-digit masked, auto-focus, paste Popover Popover basic/profile card, HUI Popover, positioning Progress -- determinate/colours/sizes/thick+label/indeterminate Radio Group RadioGroup card picker/pill row/classic, HUI RadioGroup Scrollspy -- IntersectionObserver, sticky nav, Nuxt composable Select Listbox/Combobox basic/label/disabled/error, HUI variants Skeleton -- shapes/card/table, Vue pending, shimmer Spinner -- basic/sizes/button loading/dots/full-page Stepper -- horizontal, labels, Vue nav, aria-current Strong Password -- show/hide, 4-segment meter, requirement list Table -- basic/avatar/sortable/empty state Tabs Tabs underline/pill, HUI Tabs Tag Input -- Enter/comma add, Backspace remove, suggestions Toast -- success/error/info, useToast composable Toggle Switch on/off, HUI Switch Tooltip -- top/bottom/left/right, Vue wrapper component ================================================================ FILE STRUCTURE (key files) ================================================================ oxide-ui/ .gitignore / LICENSE / README.md / HANDOFF.md package.json / tailwind.config.js / postcss.config.js .vitepress/ config.mts nav, 5-section sidebar, SEO, fonts plugins/colorSwatch.js hex/rgba backtick -> inline swatch dot theme/ index.ts Layout + 39 demo components registered style.css CSS vars, VitePress overrides Layout.vue announcement banner components/ Preview.vue grid-bg canvas (props: column) demos/ (39 Demo.vue files) public/ logo.svg / robots.txt / _headers llms.txt / llms-full.txt / handoff.txt examples/ landing-page.html / tool-app.html / dashboard.html / marketing.html components/ (39 .md files, alphabetical) examples/ index.md + 4 example .md pages plugins/ index.md getting-started/ index.md + installation.md + theming.md ai/ index.md + handoff.md index.md ================================================================ SIDEBAR STRUCTURE ================================================================ 1. Getting Started: Introduction, Installation, Theming 2. Components: 39 components (alphabetical) 3. Examples: Overview + 4 standalone pages (open _blank) 4. Plugins & Interactions: Overview, HUI docs (ext), Preline (ext) 5. AI & LLM: Overview, Resume/Handoff, llms.txt, llms-full.txt, handoff.txt ================================================================ HOW TO ADD A NEW COMPONENT ================================================================ 1. Create .vitepress/theme/components/demos/MyDemo.vue 2. Register in .vitepress/theme/index.ts 3. Write components/my-component.md - frontmatter: title + description - H1 + oxide-component-tag div - ## Overview with - per-variant + code blocks - ## With Headless UI (if applicable) - ## Accessibility notes 4. Add to sidebar in .vitepress/config.mts (alphabetical) 5. Update public/llms.txt and public/llms-full.txt 6. Update HANDOFF.md and public/handoff.txt 7. git add -A && git commit -m "feat: add [Component]" ================================================================ GIT WORKFLOW ================================================================ Branch: main only (private repo) Convention: feat / fix / docs / refactor / chore Push to GitHub -> Cloudflare Pages auto-deploys from main. ================================================================ DEPLOYMENT ================================================================ Build: npm run build -> .vitepress/dist Cloudflare Pages: Build command: npm run build Output dir: .vitepress/dist NODE_VERSION env: 20 ================================================================ REMAINING BACKLOG ================================================================ The original backlog is FULLY COMPLETE (39 components). Possible next directions: New components: Textarea autoheight, Color Picker, Rating stars, Timeline, Split button, Kbd, Divider Polish: llms.txt sync, OG image, Changelog page Infrastructure: @oxide-ui/nuxt module, npx oxide-ui add CLI Examples: Blog, Auth page, Settings page, Onboarding Docs: StackBlitz embeds, Figma kit, Contribution guide ================================================================ OPEN QUESTIONS ================================================================ - Real domain + GitHub org (oxide-ui.dev is a placeholder) - Publish @oxide-ui/nuxt module with auto-imported components? - CLI: npx oxide-ui add button - In-browser StackBlitz playground per component? - Changelog page? ================================================================ SESSION HISTORY ================================================================ Session 1: Initial VitePress site, 5 components, AI files, theme. Session 2: Fixed .vitepress bug, color swatch plugin, LLM sidebar. Session 3: 10 new components, per-variant Previews, Examples, handoff URL. Session 4: Fixed handoff encoding, 4 HTML examples, Card+Input previews, Accordion+Popover+Radio Group (HUI), Plugins page. Session 5: HUI Disclosure for Navbar, 7 new components, git init, LICENSE, README. Total: 25 components. Session 6: BACKLOG COMPLETE. 14 new components: Carousel, Code Block, Command Palette, Context Menu, Data Grid, Date Picker, File Upload, Notification Dot, PIN Input, Scrollspy, Stepper, Strong Password, Tag Input, Tooltip. Total: 39 components, 39 demos, 39 doc pages, all registered.