Skip to content

chore: update project docs to reflect Nuxt UI as primary building blocks - #10

Merged
toolpathguy merged 1 commit into
mainfrom
chore/nuxt-ui-design-decision
Jul 22, 2026
Merged

chore: update project docs to reflect Nuxt UI as primary building blocks#10
toolpathguy merged 1 commit into
mainfrom
chore/nuxt-ui-design-decision

Conversation

@toolpathguy

Copy link
Copy Markdown
Owner

Relates to #2\n\nUpdates project-level documentation to reflect the architectural decision to use Nuxt UI components as the primary building blocks in the visual builder.\n\n## Changes\n- 00-START-HERE.md: Added Nuxt UI building blocks to global conventions\n- 02-component-registry.md: Replaced custom block table with Nuxt UI component table + 3 custom gap-fillers\n\n## Context\nThe original design used hand-rolled Tailwind blocks (Section, Columns, Hero, etc.). The updated approach wraps real Nuxt UI page-building components (UPageHero, UPageSection, UPageColumns, etc.) so the editor preview matches production output and compiled pages use Nuxt UI directly.

@toolpathguy
toolpathguy merged commit ff16681 into main Jul 22, 2026
2 checks passed
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @toolpathguy's task in 2m 43s —— View job


Review complete ✅

  • Gather context (diff, AI-MAP, relevant specs)
  • Review doc consistency & spec traceability
  • Post inline findings (2)
  • Post summary verdict

Verdict: request-changes (follow-up — PR is already merged).

The Nuxt UI wrapping approach is sound and keeps registry purity intact. But the two changed MD Instructions now contradict the docs meant to be the source of truth, which weren't updated in sync:

  1. CLAUDE.md:20 and AI-MAP.md:119 still say blocks are Tailwind only, never Nuxt UI — the opposite of this PR (AI-MAP.md:148 requires these move in sync).
  2. AI-MAP.md:127 + Decisions Log :147 still describe the Columns/Column constraint, but the new set replaces them with PageColumns.
  3. Nit: AI-MAP.md:61 still says "8 starter blocks" (now 13); "exclusively" on line 120 reads oddly.

Full write-up is in the summary comment and two inline comments.

Comment on lines +66 to +71
- **Building blocks:** The Component Registry wraps real Nuxt UI page-building
components (UPageHero, UPageSection, UPageColumns, UPageGrid, UPageCTA,
UPageFeature, UPageCard, UButton, UCard, USeparator) as the primary placeable
blocks. A small set of custom gap-filler blocks (RichText, Image, Spacer)
covers functionality Nuxt UI doesn't provide. The compiled output uses Nuxt UI
components directly — no custom component layer.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking (consistency): this new direction is not reflected in the two docs that are supposed to be the source of truth, so the doc set now contradicts itself.

This bullet (and the UI-framework bullet above) now say blocks are the primary Nuxt UI wrappers. But:

  • CLAUDE.md:20 — non-negotiable convention: "Blocks (app/components/blocks/) use Tailwind only — never Nuxt UI."
  • .kiro/steering/AI-MAP.md:119"Block components use Tailwind utilities (portable, no Nuxt UI dependency)."

Both still assert the opposite of this PR. An implementer following CLAUDE.md's "non-negotiable conventions" would build Tailwind-only blocks and directly violate these specs. The project's own Decisions Log requires these be kept in sync:

AI-MAP.md:148"When conventions in .kiro/steering/ change, CLAUDE.md must be updated in sync."

Since this is a design change (relates to #2), AI-MAP.md (line 119, and "exclusively" on line 120) and CLAUDE.md (line 20) should be updated in the same change. As merged, the docs disagree.

Fix this →

Comment on lines +59 to +73
| type | compileAs | category | key props | children |
|------|-----------|----------|-----------|----------|
| `PageHero` | UPageHero | layout | `title(string)`, `description(text)`, `headline(string)`, `orientation(enum vertical/horizontal)` | none |
| `PageSection` | UPageSection | layout | `title(string)`, `description(text)`, `headline(string)`, `orientation(enum)`, `reverse(boolean)` | acceptsChildren |
| `PageColumns` | UPageColumns | layout | (none) | acceptsChildren |
| `PageGrid` | UPageGrid | layout | (none) | acceptsChildren |
| `PageCTA` | UPageCTA | content | `title(string)`, `description(text)`, `headline(string)` | none |
| `PageFeature` | UPageFeature | content | `title(string)`, `description(text)`, `icon(string)`, `orientation(enum)` | none |
| `PageCard` | UPageCard | content | `title(string)`, `description(text)`, `to(url)` | none |
| `Button` | UButton | content | `label(string)`, `to(url)`, `color(enum)`, `variant(enum)`, `size(enum)` | none |
| `Card` | UCard | content | (none) | acceptsChildren |
| `Separator` | USeparator | layout | `orientation(enum horizontal/vertical)`, `label(string)` | none |
| `RichText` | (custom) | content | `body(text)`, `align(enum)` | none |
| `Image` | (custom) | media | `src(image)`, `alt(string)`, `rounded(boolean)` | none |
| `Spacer` | (custom) | layout | `size(enum sm/md/lg)` | none |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consistency: the new starter set orphans two AI-MAP.md statements.

  1. The old Columns/Column block types are gone (replaced by PageColumns with plain acceptsChildren). But AI-MAP.md:127 still lists the convention "Columns block: only accepts Column children (enforced by registry + validation)", and the Decisions Log at AI-MAP.md:147 documents the allowedChildren: ['Column'] / allowedParents: ['Columns'] rule. Those now reference types this table no longer defines. Not relitigating the decision — flagging that the entries it depends on were removed, so either PageColumns should carry the constraint forward or the log/convention needs a sync note.

  2. This table now defines 13 blocks, but AI-MAP.md:61 still says the registry task delivers "8 starter blocks", and the same "8" wording likely lives in the registry test acceptance (registry.test.ts) an implementer will write.

Neither is in this diff, so as merged the map is stale against the spec.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review: docs update for Nuxt UI building blocks

Verdict: request-changes (follow-up — PR is already merged).

The design pivot itself is sound and well-motivated: wrapping real Nuxt UI page components (UPageHero, UPageSection, …) so the editor preview is production output, keeping the registry-purity split intact (compileAs is a plain string in entries.ts, no .vue leak), and adding the compileAs-starts-with-U acceptance check are all good calls.

The problem is scope: the two changed files now contradict the docs that are meant to be the source of truth, and those weren't updated in the same change.

Blocking / follow-up

  1. CLAUDE.md:20 still lists as non-negotiable: "Blocks use Tailwind only — never Nuxt UI." AI-MAP.md:119 says the same. Both are now the exact opposite of this PR. Per the project's own rule (AI-MAP.md:148: CLAUDE.md must be updated in sync with steering), these must move together — otherwise an implementer following CLAUDE.md builds Tailwind-only blocks and violates the spec.
  2. AI-MAP.md:127 + Decisions Log :147 still describe the Columns/Column constraint, but the new starter set replaces those with PageColumns (plain acceptsChildren). The settled decision now references types the registry no longer defines — carry the constraint forward under the new name or add a sync note.

Nits

  • AI-MAP.md:61 still says "8 starter blocks"; the new table defines 13. The registry test acceptance criteria that reuse that count will need updating too.
  • AI-MAP.md:120 — "Editor chrome uses Nuxt UI v4 components exclusively" reads oddly now that blocks also use Nuxt UI; consider rewording.

Details are in the two inline comments. Since #10 is merged, a small follow-up PR syncing CLAUDE.md and AI-MAP.md would close the gap.

Note: this is a docs-only, code-level review; the CI gate job is separate and not evaluated here.

View job run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant