Skip to content
Agentmart
Submit a tool

vuetify-to-semantic

Refactor a Vue page or component from Vuetify to semantic HTML5 + Schema.org microdata + Stylus element selectors.

Skill by scott-fryxell

IndexedMIT★ 125
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/scott-fryxell-vuetify-to-semantic

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Refactor a Vue page or component from Vuetify to semantic HTML5 + Schema.org microdata + Stylus element selectors. Use when converting a seeq-app view or component file, removing v-* components, replacing utility classes with Stylus, or adding Schema.org microdata to an entity page. Triggers include "refactor this page", "convert this component", "remove vuetify from", "make this semantic".

Use cases: frontend

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/vuetify-to-semantic

What's inside

Skill name
vuetify-to-semantic
Description
Refactor a Vue page or component from Vuetify to semantic HTML5 + Schema.org microdata + Stylus element selectors. Use when converting a seeq-app view or component file, removing v-* components, replacing utility classes with Stylus, or adding Schema.org microdata to an entity page. Triggers include "refactor this page", "convert this component", "remove vuetify from", "make this semantic".
License
MIT
Metadata
category: Frontend & Refactoring
Instructions
115 lines in SKILL.md · view on GitHub

Files (6)

  • SKILL.md
  • component-map.md · references/
  • project-card.md · references/examples/
  • story-status-chip.md · references/examples/
  • microdata-entities.md · references/
  • stylus-patterns.md · references/

SKILL.md (first lines)

# Vuetify to Semantic

Refactor a seeq-app Vue page or component from Vuetify to semantic HTML5, Schema.org microdata, and Stylus element selectors. Follows the `work/realness` pattern: no utility classes, no replacement component library, styles applied via element and attribute selectors only.

## Process

### 1. Read the target file

Read the full `.vue` file. Identify:
- Every `v-*` component used
- Every Vuetify utility class (`pa-*`, `ma-*`, `d-flex`, `text-h*`, `elevation-*`, etc.)
- Every `useTheme` / `useDisplay` import from `'vuetify'`
- What real-world entities the page represents (projects, stories, people, organizations)

### 2. Map components to semantic elements

Use `references/component-map.md` for the full mapping.

Key decisions:
- `v-row` / `v-col` -> remove both; apply CSS Grid to the parent element directly
- `v-card` -> `<article>` with the correct Schema.org `itemtype` for the entity
- `v-sheet` -> `<section>` or `<aside>` based on role
- `v-list` / `v-list-item` -> `<ul>` / `<li>` only when content is truly a list; use `<article>` per item when each stands alone
- `v-btn` with `to=` -> `<a>`; without `to=` -> `<button>`
- `v-icon` -> `<svg class="icon"><use href="/icons.svg#name" /></svg>`
- `v-dialog` -> `<dialog>`
- `v-navigation-drawer` -> `<nav>`
- `v-app-bar` -> `<header>`

### 3. Add Schema.org microdata

Use `references/microdata-entities.md` for Seeq entity types.

Rules:
- Add `itemscope itemtype="https://schema.org/X"` to the container element
- Add `itemprop` to child elements that carry data fields
- Use `<time datetime="...">` for dates
- Use `<data value="...">` for machine-readable values not in visible text
- Do not add microdata to layout-only elements

### 4. Rewrite the template

Output a clean `<template>` block:
- No `v-*` components
- No Vuetify utility classes on any element
- Semantic elements with correct hierarchy
- Schema.org attributes on entity containers and their fields
- `data-*` attributes for JS state hooks where needed
- ARIA only where native HTML cannot express the needed behavior
- Keep all Vue directives (`v-if`, `v-for`, `v-model`, `@click`, `:src`, etc.) intact

### 5. Replace Vuetify composables

- `useDisplay` -> `use_display` composable (create `src/use/display.js`, matching realness's `src/use/` layout) using `matchMedia`
- `useTheme` -> `use_theme` composable (create `src/use/theme.js`) reading `prefers-color-scheme`

Update the `<script setup>` import accordingly.

### 6. Write the Stylus

Follow `references/stylus-patterns.md`.

Rules:
- One `<style lang="stylus" scoped>` block per component for component-specific layout
- Shared element styles live in `src/style/elements/`
- Never use class selectors for styling - use element, attribute, and microdata selectors
- Use `base-line` as the spacing unit
- Use CSS custom properties for colors (`var(--color-primary)`, etc.)
- Use `standard-border`, `standard-button`, `standard-grid` mixins where applicable
- Dark mode via `@media (prefers-color-scheme: dark)` blocks, not JS

Selector patterns:
```stylus
// entity type
article[itemtype*="ResearchProject"]
  ...

// state via data attribute
button[data-status="active"]
  ...

// structural position
nav > ul > li > a
  ...

// ARIA state
button[aria-expanded="true"]
  ...
```

### 7. Review

Before outputting, verify:
- [ ] No `v-*` components remain
- [ ] No Vuetify utility classes remain
- [ ] No `class=` attributes used for styling (only for JS hooks if unavoidable)
- [ ] Every entity container has correct Schema.org `itemtype`
- [ ] Every data field has `itemprop`
- [ ] All interactive elements are correct (`button` vs `a`)
- [ ] Images have `alt`, `loading="lazy"`, and `itemprop="image"` where appropriate
- [ ] Forms have explicit `<label>` for every input
- [ ] CSS Grid replaces all grid row/column wrapper elements
- [ ] Stylus uses element/attribute selectors only

## Output format

Return three blocks in order:

1. `<template>` - the full refactored template
2. `<script setup>` - updated script (only if imports changed)
3. `<style lang="stylus" scoped>` - component-scoped Stylus for layout specific to this component

If shared element styles need to be added to `src/style/elements/`, note them separately after the component output.

From scott-fryxell/brayness, MIT.

More from scott-fryxell/brayness

Compare and alternatives

    Featured in

    Signals

    Stars
    125
    Forks
    15
    Open issues
    0
    Last commit (this folder)
    Aug 9, 2026 (2 months ago)

    From GitHub (fetched Oct 24, 2026).

    Details

    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026

    More from scott-fryxell

    Cite this page

    vuetify-to-semantic skill. Agent Mart. https://agentmart.dev/skills/scott-fryxell-vuetify-to-semantic (last updated 2026-10-24)