一键导入
components
Auto-imported global and content components plus layouts (default/blog). Use when using/creating components or working with ContentRenderer.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Auto-imported global and content components plus layouts (default/blog). Use when using/creating components or working with ContentRenderer.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Global Pinia store (useAppStore) for theme and language with cookie persistence. Use when changing theme or language, or touching app/stores/app.ts.
Create/edit blog articles in EN/ES - frontmatter, collections, images, Markdown features. Use when writing content under content/{en,es}/blog/.
Project composables - useBlog, usePageSeo, useEnterAnimations, useBlogScroll, useGsapAnimations. Use when consuming blog/SEO/animation logic.
CSS custom properties, utility classes and theme colors. Use when editing styles, working in app/assets/styles/*, writing <style scoped>, or touching colors, spacing or typography.
Static data - contact.ts, projects.ts, sidebar-items.ts. Use when displaying contact/projects info or adding navigation items.
GSAP + ScrollTrigger - animateInOnEnter, getMainScroller, useGsapAnimations. Use when adding enter/scroll animations.
| name | components |
| description | Auto-imported global and content components plus layouts (default/blog). Use when using/creating components or working with ContentRenderer. |
Global and content components of the project. All auto-imported by Nuxt.
app/components/*.vue - global componentsapp/components/content/*.vue - components for Markdown (ContentRenderer)Application loading overlay. No props. Used in app.vue.
Splash screen on load. No props. Used only in app.vue.
Theme toggle button. No props. Uses useAppStore() internally.
Language toggle button. No props. Uses useI18n() and useAppStore() internally.
Site footer. No props. Reads data from locales and contactInfo.
<PostHeader
:title="post.title"
:date="post.date"
:lastmod="post.lastmod"
:author="post.author"
:tags="post.tags"
:image="post.image"
:summary="post.summary"
/>
All props are optional (string, string[], etc.).
<ImageViewer v-model="showViewer" :src="imageUrl" :alt="imageAlt" />
Props: modelValue: boolean, src: string, alt: string.
Features: zoom (0.25x step, 1x–4x), drag/pan, scroll-to-zoom, download button.
In the blog.vue layout it activates automatically when clicking any img inside .markdown-body.
Overview section on the landing. No props.
General information component. No props.
Main hero of the landing page. No props. Reads everything from locales (hero.*).
Only work inside Markdown rendered by <ContentRenderer>.
::table-of-contents
::
Generates an automatic TOC from the article's H2/H3. No configuration.
::mermaid-diagram{content="graph TD; A-->B; B-->C"}
::
:code-group
```ts [file.ts]
const x: number = 1
const x = 1
::
### ProsePre
Code block with syntax highlighting (Shiki, vitesse-light/dark themes) and copy button.
Generated automatically from ` ``` ` fences in Markdown.
Props: `code`, `language`, `filename`, `highlights`, `meta`.
### ProseTable
Table with horizontal scroll. Generated automatically from tables in Markdown.
### ProseCode
Inline code. Generated automatically from backticks in Markdown.
---
## Layouts
```ts
definePageMeta({ layout: 'default' }) // left sidebar, footer
definePageMeta({ layout: 'blog' }) // simple header, centered layout (max-width: 78ch), ImageViewer
| Layout | Scroller | File |
|---|---|---|
default | .shell-main | app/layouts/default.vue |
blog | .blog-main | app/layouts/blog.vue |
The scrollers are relevant for GSAP and useBlogScroll() (see the gsap-animations skill).
content/ components only work inside <ContentRenderer :value="post" />useDisplay() outside of <ClientOnly> or onMountedImageViewer and SplashScreen should only be used once per view