From deb370ea743265fd3a4430cf1dab0c2a34a63d10 Mon Sep 17 00:00:00 2001 From: Sil Date: Sun, 11 Oct 2026 17:10:58 +0200 Subject: [PATCH 1/4] Point the fulldev skill to the shadcn skill Fulldev UI follows shadcn/ui, so the shadcn skill's component rules and DESIGN.md workflow apply to components with a shadcn/ui counterpart, without its React-only APIs. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/fulldev/SKILL.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.agents/skills/fulldev/SKILL.md b/.agents/skills/fulldev/SKILL.md index 8b5e136aa..792b83dc7 100644 --- a/.agents/skills/fulldev/SKILL.md +++ b/.agents/skills/fulldev/SKILL.md @@ -19,6 +19,12 @@ Install through shadcn using the project's `components.json`; see source for the actual API. Local components are application code unless the repository says otherwise. +Fulldev UI builds on shadcn/ui. Where a component has a shadcn/ui counterpart, +the [shadcn skill](https://github.com/shadcn-ui/ui/tree/main/skills/shadcn) +rules for composition, styling, forms and icons apply, and so does its +DESIGN.md workflow for tokens, type, radius, elevation and focus. Its React-only +APIs, such as `asChild`, `render` and hooks, do not. + Read the relevant rules when changing: - [Content and schemas](rules/source-ownership.md): authored data, globals and icons. From 82e6049230828eba49c5c674c57b51194cc9e7af Mon Sep 17 00:00:00 2001 From: Sil Date: Sun, 11 Oct 2026 17:16:27 +0200 Subject: [PATCH 2/4] Replace the legacy fulldev skill with a public fulldev-ui skill The old skill described Astro template conventions that the template now owns. The new skill builds on the shadcn skill and covers only where Fulldev UI differs: setup, presets, Astro APIs, customizing and blocks. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/fulldev/SKILL.md | 35 --------- .agents/skills/fulldev/agents/openai.yaml | 4 - .agents/skills/fulldev/cli.md | 32 -------- .agents/skills/fulldev/rules/blocks.md | 26 ------- .agents/skills/fulldev/rules/components.md | 19 ----- .agents/skills/fulldev/rules/layouts.md | 19 ----- .../skills/fulldev/rules/source-ownership.md | 21 ----- AGENTS.md | 2 +- skills/fulldev-ui/SKILL.md | 78 +++++++++++++++++++ 9 files changed, 79 insertions(+), 157 deletions(-) delete mode 100644 .agents/skills/fulldev/SKILL.md delete mode 100644 .agents/skills/fulldev/agents/openai.yaml delete mode 100644 .agents/skills/fulldev/cli.md delete mode 100644 .agents/skills/fulldev/rules/blocks.md delete mode 100644 .agents/skills/fulldev/rules/components.md delete mode 100644 .agents/skills/fulldev/rules/layouts.md delete mode 100644 .agents/skills/fulldev/rules/source-ownership.md create mode 100644 skills/fulldev-ui/SKILL.md diff --git a/.agents/skills/fulldev/SKILL.md b/.agents/skills/fulldev/SKILL.md deleted file mode 100644 index 792b83dc7..000000000 --- a/.agents/skills/fulldev/SKILL.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: fulldev -description: Apply Fulldev's content, schema, layout, component and block conventions in Astro client projects, and install UI from the @fulldev registry. ---- - -# Fulldev - -Follow the project's existing architecture and repository workflow. These are -Fulldev client conventions, not a request to migrate a project or change the -Fulldev UI library. Mention useful library improvements at handoff when relevant. - -Content owns copy and semantic configuration; schemas validate it; layouts map -it into component and block props. Components and blocks own rendering, -behavior and styles. Routes stay generic and the base layout stays a shared shell. - -Use existing `@fulldev` components and blocks before creating equivalents. -Install through shadcn using the project's `components.json`; see -[installation](cli.md) for shared setup and registry details. Read installed -source for the actual API. Local components are application code unless the -repository says otherwise. - -Fulldev UI builds on shadcn/ui. Where a component has a shadcn/ui counterpart, -the [shadcn skill](https://github.com/shadcn-ui/ui/tree/main/skills/shadcn) -rules for composition, styling, forms and icons apply, and so does its -DESIGN.md workflow for tokens, type, radius, elevation and focus. Its React-only -APIs, such as `asChild`, `render` and hooks, do not. - -Read the relevant rules when changing: - -- [Content and schemas](rules/source-ownership.md): authored data, globals and icons. -- [Layouts and routes](rules/layouts.md): page orchestration and new page types. -- [Components](rules/components.md): Astro props, class forwarding and customization. -- [Blocks](rules/blocks.md): portable sections, semantic props and content mapping. - -Use the repository's own development and validation instructions. diff --git a/.agents/skills/fulldev/agents/openai.yaml b/.agents/skills/fulldev/agents/openai.yaml deleted file mode 100644 index 0e1355040..000000000 --- a/.agents/skills/fulldev/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "Fulldev" - short_description: "Fulldev Astro architecture and UI guidance" - default_prompt: "Use $fulldev while working in a Fulldev client project." diff --git a/.agents/skills/fulldev/cli.md b/.agents/skills/fulldev/cli.md deleted file mode 100644 index bbbedec7b..000000000 --- a/.agents/skills/fulldev/cli.md +++ /dev/null @@ -1,32 +0,0 @@ -# Install Fulldev UI - -Use the shadcn CLI with the project's package runner, such as `pnpm dlx shadcn@latest`. -There is no separate Fulldev CLI. When `components.json` is missing, initialize -from the Fulldev UI base in the project's style. It writes `components.json` -with the `@fulldev` registry, adds the theme tokens to the stylesheet in -`components.json`, and installs `cn` and the shared dependencies: - -```bash -pnpm dlx shadcn@latest init https://ui.full.dev/r/styles/base-vega/base.json -pnpm dlx shadcn@latest add @fulldev/button -``` - -When `components.json` exists, do not run `init`, because it replaces the theme -tokens. Set `style` to a `base-` style if it is a legacy or `radix-` style, add -the registry entry, then `add @fulldev/init`, which adds the helpers and base -styles and leaves the theme tokens alone: - -```json -{ - "registries": { - "@fulldev": "https://ui.full.dev/r/styles/{style}/{name}.json" - } -} -``` - -`@fulldev/components` and `@fulldev/blocks` are bulk installs, for requests that -need the full sets. - -Use shadcn's existing inspection and install tooling. `components.json` owns -registry URLs and aliases; adjust hardcoded imports from registry items to the -project's actual aliases. diff --git a/.agents/skills/fulldev/rules/blocks.md b/.agents/skills/fulldev/rules/blocks.md deleted file mode 100644 index 1fe3b839e..000000000 --- a/.agents/skills/fulldev/rules/blocks.md +++ /dev/null @@ -1,26 +0,0 @@ -# Blocks - -Blocks live in `src/components/blocks`. Layouts map schema-backed content into -plain block props and slots. Keep reusable blocks independent of page schemas, -collection types, content, layouts, routes and private project assets. Pass -images, labels, links, CTAs and content-owned icons through props when they vary -by project, page, instance or locale. Fixed control icons can be imported in code. - -Expose `class?: string`, destructure it as `class: className`, and forward it to -the outermost root through `cn(...)`, including `cn("", className)` without base -classes. Keep prop types plain and inline; do not import UI component prop types. - -Use `label` for controls, `title` for headings/entities, `description` for copy, -`icon` for content icon names, `href` for destinations and `buttons` for CTAs. -Name collections by their content, such as `features`, `services` or `reviews`; -use `items` only for genuinely generic data. - -These naming rules apply to data. Preserve CSS utilities, selectors, `data-*` -attributes, slots, component/file names and style hooks. `items-center` must -remain `items-center`, never `features-center`. - -Button size belongs to the block design, not content data. Derive `target`/`rel` -from `href` in the component when needed. Render direct mappings inline; derive -named values in frontmatter for sorting, filtering, combining sources, active -state and schema-to-block transformations. Guard optional values, and map -required arrays directly. diff --git a/.agents/skills/fulldev/rules/components.md b/.agents/skills/fulldev/rules/components.md deleted file mode 100644 index 5aedbcae6..000000000 --- a/.agents/skills/fulldev/rules/components.md +++ /dev/null @@ -1,19 +0,0 @@ -# Components - -Use `src/components/ui//`, kebab-case filenames, an `index.ts` -public API and colocated helpers. Follow the project's actual import aliases. - -- Define local `type Props` before destructuring `Astro.props` once. Export it - from an `.astro` file only if an external TypeScript module imports it. -- Let Astro infer props without `: Props` on the destructuring or `as Props`. - For a complex type, simplify its shape or use `satisfies Props`. -- Use Astro's `HTMLAttributes` or `Polymorphic` helpers for native attributes. -- Destructure `class` as `class: className`, call the remaining pass-through bag - `props`, merge classes with `cn(...)`, and spread `props` on the intended root - or control. Preserve required `data-slot` structure and behavior. -- Keep content-specific data out of generic primitives. Use built-in props and - composition first; local wrappers can hold project-specific behavior. - -Customize global appearance in the existing theme's semantic CSS variables; -use component variants for component choices and layouts for page composition. -Do not introduce a second theme layer for a local customization. diff --git a/.agents/skills/fulldev/rules/layouts.md b/.agents/skills/fulldev/rules/layouts.md deleted file mode 100644 index f552e67a8..000000000 --- a/.agents/skills/fulldev/rules/layouts.md +++ /dev/null @@ -1,19 +0,0 @@ -# Layouts and routes - -`src/pages/[...page].astro` fetches and renders content, loads globals, resolves -`src/layouts/.astro` from `page.data.type`, and passes `global`, `page`, -`headings` and `` to it. Keep the route and any layout renderer generic. - -Layouts choose sections, shape data and map validated content into block props. -Keep page-specific SEO and icon mapping here. In Astro frontmatter, use local -`type Props` with `global: GlobalSchema` and the specific layout schema for -`page`. Destructure `Astro.props` directly; omit unused props. Include required -`headings: MarkdownHeading[]` only in layouts that use them. - -`src/layouts/base.astro` owns the shared document shell, head, navigation and -theme. Forward `page.seo` directly to head components; keep page-specific SEO -fallbacks, content reshaping and layout branching out of the base shell. - -For a new page type, add `src/schemas/layouts/.ts` to the union in -`src/schemas/page.ts`, create `src/layouts/.astro`, and add page content -with `type: `. The generic route should need no change. diff --git a/.agents/skills/fulldev/rules/source-ownership.md b/.agents/skills/fulldev/rules/source-ownership.md deleted file mode 100644 index df3e97054..000000000 --- a/.agents/skills/fulldev/rules/source-ownership.md +++ /dev/null @@ -1,21 +0,0 @@ -# Content and schemas - -- Page content lives in `src/content/pages`; cross-page, locale-aware data such - as navigation and footer copy lives in `src/content/globals`. Keep page-specific - block data with its page. -- Prefer Markdown with structured frontmatter and body content. Layouts render - the body with ``. Use MDX imports/components only for docs or live - code examples that need them. -- Frontmatter holds schema-validated semantic values, not Tailwind classes, - raw HTML/SVG, imported icons or component/DOM implementation details. -- Schemas live in `src/schemas`, with layout schemas in `src/schemas/layouts`. - `src/content.config.ts` connects collections to schemas; `src/schemas/page.ts` - contains the page union discriminated by frontmatter `type`. -- Validate object shape strictly; keep open-ended ecosystem values such as icon - names permissive where appropriate. - -Content-owned icons are plain names rendered through `src/components/ui/icon`, -for example ``. Preserve its name normalization, -Lucide default and Simple Icons fallback for brand/social icons. Import fixed -control icons directly from static SVG packages with an `Icon` suffix, such as -`ArrowRightIcon`. Content determines meaning; code owns control behavior. diff --git a/AGENTS.md b/AGENTS.md index 91711840d..0b42ca665 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # Fulldev UI -This repository is the Fulldev UI registry source, docs site and reference implementation. For conventions in client projects, use the `fulldev` skill in `.agents/skills`. +This repository is the Fulldev UI registry source, docs site and reference implementation. `skills/fulldev-ui` is the public skill for projects that use Fulldev UI; keep it in line with the docs when behavior changes. ## Components diff --git a/skills/fulldev-ui/SKILL.md b/skills/fulldev-ui/SKILL.md new file mode 100644 index 000000000..def61c114 --- /dev/null +++ b/skills/fulldev-ui/SKILL.md @@ -0,0 +1,78 @@ +--- +name: fulldev-ui +description: Use together with the shadcn skill in projects that use Fulldev UI, the @fulldev registry of Astro components and blocks, or its React extension. Covers installing, presets, theming, customizing and writing blocks where Fulldev UI differs from shadcn/ui. Applies when components.json has an @fulldev registry. +--- + +# Fulldev UI + +Fulldev UI is shadcn/ui for Astro: the same tokens, styles, presets and CLI, +plus content components, such as section, banner, header and typography, and +page blocks. Its React extension adds those extras and blocks to an official +shadcn/ui React project. + +The [shadcn skill](https://github.com/shadcn-ui/ui/tree/main/skills/shadcn) is +the base: its CLI, registry, theming, DESIGN.md workflow and component rules +apply. This skill covers only where Fulldev UI differs. Every docs page has a +Markdown version: add `.md` to its URL, or start at +[llms.txt](https://ui.full.dev/llms.txt) or, for React, +[react/llms.txt](https://ui.full.dev/react/llms.txt). + +## Setup + +- Fulldev UI serves only the Base UI styles (`base-vega`, `base-nova` and so + on) with Lucide icons. Move a legacy style, such as `new-york`, or a `radix-` + style to a `base-` style first; see + [Presets](https://ui.full.dev/docs/presets.md). +- The registry is `https://ui.full.dev/r/styles/{style}/{name}.json`. An older + URL without `{style}` always installs Vega. +- Start a project with + `init https://ui.full.dev/r/styles/base-