andy-note-nuxt 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -32
- package/app/types/app-config.d.ts +10 -4
- package/content/index.md +12 -12
- package/content.config.ts +36 -0
- package/nuxt.config.ts +34 -4
- package/package.json +11 -3
- package/public/favicon.svg +6 -0
- package/public/logo.svg +13 -0
- package/app/.claude/skills/ai-annotator/SKILL.md +0 -31
- package/app/app.config.ts +0 -20
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# andy-note-nuxt
|
|
2
2
|
|
|
3
|
-
Brutalist-terminal **Nuxt 4 + Nuxt Content v3 theme** packaged as a [Nuxt Layer](https://nuxt.com/docs/getting-started/layers). Stacked-column navigation (click a note → new column pushes from the right), warm-dark palette with
|
|
3
|
+
Brutalist-terminal **Nuxt 4 + Nuxt Content v3 theme** packaged as a [Nuxt Layer](https://nuxt.com/docs/getting-started/layers). Stacked-column navigation (click a note → new column pushes from the right), warm-dark palette with coral accent + flat 4px stamp shadows. Designed for personal notes, guides, and second-brain knowledge bases.
|
|
4
4
|
|
|
5
5
|
## Quick start — use as a layer
|
|
6
6
|
|
|
@@ -49,25 +49,57 @@ bun install
|
|
|
49
49
|
bun dev
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
Edit `
|
|
52
|
+
Edit `runtimeConfig.public.site` in `nuxt.config.ts` for branding (title, description, tagline, themeColor, logo), `app.head` in the same file for `<title>` / meta tags, and start writing in `content/`.
|
|
53
53
|
|
|
54
54
|
## What's included
|
|
55
55
|
|
|
56
56
|
| Path | Purpose |
|
|
57
57
|
|---|---|
|
|
58
|
+
| `app/app.vue` | Root entry — `<NuxtLayout><NuxtPage /></NuxtLayout>` |
|
|
59
|
+
| `app/types/app-config.d.ts` | TypeScript augmentation declaring `runtimeConfig.public.site` shape |
|
|
60
|
+
| `app/layouts/default.vue` | Full-height shell + `<Toaster>` host |
|
|
61
|
+
| `app/pages/[...slug].vue` | Single catch-all route — delegates to `<StackedColumns>` |
|
|
58
62
|
| `app/components/StackedColumns.vue` | Stacked-column shell — drives the whole UX |
|
|
59
|
-
| `app/components/
|
|
60
|
-
| `app/components/
|
|
61
|
-
| `app/
|
|
63
|
+
| `app/components/StackedColumn.vue` | Single column wrapper (click → push, scroll-to-focus) |
|
|
64
|
+
| `app/components/ContentView.vue` | Per-column renderer (auto-switches listing vs article view) |
|
|
65
|
+
| `app/components/LocalStorageChecklist.vue` | MDC component — persistent checklist embeddable in any markdown |
|
|
66
|
+
| `app/composables/useStack.ts` | Stack state machine (push/pop columns, URL sync, scroll geometry) |
|
|
62
67
|
| `app/assets/css/main.css` | Brutalist terminal theme — Tailwind v3 base + custom prose layers |
|
|
68
|
+
| `nuxt.config.ts` | Module wiring (`@nuxt/content`, `@nuxtjs/tailwindcss`, `vue-sonner/nuxt`, `vite-plugin-ai-annotator`) |
|
|
63
69
|
| `tailwind.config.js` | Color palette + stamp shadow tokens |
|
|
70
|
+
| `content.config.ts` | Minimal generic schema (7 fields — see "Schema" below) |
|
|
64
71
|
| `content/index.md` | Default landing page |
|
|
65
|
-
| `content/license.md` | Default license page
|
|
72
|
+
| `content/license.md` | Default license page |
|
|
73
|
+
| `content/quick-start.md`, `content/guides/`, `content/reference/` | Theme's own docs (ship only when extending via `github:` — npm publishes only `content/index.md` + `content/license.md`). Override or delete in your child. |
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
## Override anything
|
|
76
|
+
|
|
77
|
+
Nuxt Layers deep-merge child over parent. Override semantics:
|
|
78
|
+
|
|
79
|
+
- **Components / pages / layouts / composables** → create a file with the same path in your project (e.g. `app/components/ContentView.vue`) and it replaces the layer's.
|
|
80
|
+
- **`nuxt.config.ts`** → deep-merged. Override `app.head` (for `<title>` / meta) and `runtimeConfig.public.site` (for branding: `title`, `description`, `tagline`, `author`, `themeColor`, `logo`). Layer ships defaults; your values win field-by-field. Add your own fields under `site.*` by augmenting the `PublicRuntimeConfig` interface (see `app/types/app-config.d.ts`).
|
|
81
|
+
- **`tailwind.config.js`** → merged by `@nuxtjs/tailwindcss` across layers. Ship a `tailwind.config.js` in your project with the same shape (`theme.extend.colors`, `theme.extend.boxShadow`, etc.) and it overrides the layer's tokens. The module discovers all layer configs automatically.
|
|
82
|
+
- **`content.config.ts`** → fully replaced by the consumer's file (Nuxt Content reads only one). The layer ships a minimal schema so the SQLite cache has the columns its renderer queries (`document_type`, `updated`, `created`). Your override must include those columns or extend them.
|
|
83
|
+
- **Content** → child `content/<path>.md` overrides parent's same-path file (e.g. `content/license.md` in your project replaces the layer's default license page).
|
|
84
|
+
|
|
85
|
+
## Schema
|
|
86
|
+
|
|
87
|
+
The layer ships a minimal, generic `content.config.ts` covering only the fields its renderer actually reads:
|
|
88
|
+
|
|
89
|
+
| Field | Type | Used by |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| `title` | `string` | Column header, listing item, `<title>` |
|
|
92
|
+
| `description` | `string` | `<meta>`, OG tags, section listings |
|
|
93
|
+
| `document_type` | `string` | `"convention"` hides the file from listings |
|
|
94
|
+
| `tags` | `string[]` | Tag pills under H1 |
|
|
95
|
+
| `created` | `string` (ISO date) | Listing sort, recency badge |
|
|
96
|
+
| `updated` | `string` (ISO date) | Listing sort (preferred over `created`) |
|
|
97
|
+
| `rawbody` | `string` | Auto-populated — backs "Copy as Markdown" with byte-faithful source |
|
|
98
|
+
|
|
99
|
+
Every field is `.optional()` — you can write a `.md` with no frontmatter at all. To add domain-specific fields (`priority`, `owner`, `due_date`, anything project-specific), **override `content.config.ts` in your child project**:
|
|
68
100
|
|
|
69
101
|
```ts
|
|
70
|
-
// content.config.ts in YOUR project
|
|
102
|
+
// content.config.ts in YOUR project — replaces the layer's schema entirely
|
|
71
103
|
import { defineCollection, defineContentConfig, z } from '@nuxt/content'
|
|
72
104
|
|
|
73
105
|
export default defineContentConfig({
|
|
@@ -76,40 +108,24 @@ export default defineContentConfig({
|
|
|
76
108
|
type: 'page',
|
|
77
109
|
source: '**/*.md',
|
|
78
110
|
schema: z.object({
|
|
111
|
+
// Keep these — the renderer queries them
|
|
112
|
+
title: z.string().optional(),
|
|
79
113
|
description: z.string().optional(),
|
|
114
|
+
document_type: z.string().optional(),
|
|
80
115
|
tags: z.array(z.string()).optional(),
|
|
81
116
|
created: z.string().optional(),
|
|
82
117
|
updated: z.string().optional(),
|
|
83
|
-
|
|
118
|
+
rawbody: z.string().optional(),
|
|
119
|
+
// Add your own
|
|
120
|
+
priority: z.enum(['low', 'medium', 'high']).optional(),
|
|
121
|
+
owner: z.string().optional(),
|
|
84
122
|
}),
|
|
85
123
|
}),
|
|
86
124
|
},
|
|
87
125
|
})
|
|
88
126
|
```
|
|
89
127
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
Nuxt Layers deep-merge child over parent. Override semantics:
|
|
93
|
-
|
|
94
|
-
- **Components / pages / layouts / composables** → create a file with the same path in your project (e.g. `app/components/ContentView.vue`) and it replaces the layer's.
|
|
95
|
-
- **`nuxt.config.ts`** → deep-merged. Your `app.head` keys override the layer's.
|
|
96
|
-
- **`app/app.config.ts`** → deep-merged. Override `site.*` and `menu[]`.
|
|
97
|
-
- **`tailwind.config.js`** → NOT auto-merged by Nuxt. If you need a different palette, copy the file into your project; Tailwind picks up your project's config.
|
|
98
|
-
- **Content** → child `content/<path>.md` overrides parent's same-path file (e.g. `content/license.md` in your project replaces the layer's default license page).
|
|
99
|
-
|
|
100
|
-
## Schema
|
|
101
|
-
|
|
102
|
-
`content.config.ts` ships a permissive schema — every field is optional. Common fields available out of the box:
|
|
103
|
-
|
|
104
|
-
- Universal: `title`, `description`, `tags[]`, `status`, `created`, `updated`, `author`, `weight`
|
|
105
|
-
- Game / domain tagging: `game`, `league`, `patch` (renders as badges in headers)
|
|
106
|
-
- Build / recipe: `class`, `ascendancy`, `budget_tier`, `build_tags{}`, `ratings{}`, `pob_link`
|
|
107
|
-
- Economy: `strategy_tier`, `profit_per_hour`, `investment_tier`
|
|
108
|
-
- Skill / technique: `gem_color`, `skill_type`, `level_requirement`, `skill_tags[]`
|
|
109
|
-
- Instance / character: `level`, `progress_stage`
|
|
110
|
-
- Item / class / league: `rarity`, `item_class`, `class_type`, `complexity`, `league_type`
|
|
111
|
-
|
|
112
|
-
Unused fields cost nothing (null in cache). To replace the schema entirely, override `content.config.ts` in your child project.
|
|
128
|
+
Unused fields cost nothing (null in cache).
|
|
113
129
|
|
|
114
130
|
## Conventions baked in
|
|
115
131
|
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
export {}
|
|
2
2
|
|
|
3
|
-
//
|
|
4
|
-
// their own fields — TypeScript
|
|
3
|
+
// PublicRuntimeConfig augmentation. Child layers re-declare this interface
|
|
4
|
+
// to add their own fields under `runtimeConfig.public.site.*` — TypeScript
|
|
5
|
+
// merges declarations across `nuxt/schema`.
|
|
6
|
+
//
|
|
7
|
+
// Note: this file used to augment `AppConfig` (back when the layer shipped
|
|
8
|
+
// `app/app.config.ts`). Nuxt 5 / Nitro 3 removes `app.config.ts`, so site
|
|
9
|
+
// config now lives on `runtimeConfig.public.site` and is read via
|
|
10
|
+
// `useRuntimeConfig().public.site`. The file name is kept for git history
|
|
11
|
+
// continuity; the augmented interface is what changed.
|
|
5
12
|
declare module 'nuxt/schema' {
|
|
6
|
-
interface
|
|
13
|
+
interface PublicRuntimeConfig {
|
|
7
14
|
site: {
|
|
8
15
|
title: string
|
|
9
16
|
description: string
|
|
@@ -14,6 +21,5 @@ declare module 'nuxt/schema' {
|
|
|
14
21
|
// Free-form extras child projects can attach without re-declaring the interface.
|
|
15
22
|
[key: string]: unknown
|
|
16
23
|
}
|
|
17
|
-
menu: Array<{ name: string; url: string; weight: number }>
|
|
18
24
|
}
|
|
19
25
|
}
|
package/content/index.md
CHANGED
|
@@ -2,24 +2,24 @@
|
|
|
2
2
|
title: "Andy Notes"
|
|
3
3
|
description: "Brutalist-terminal Nuxt Content theme — stacked-column navigation for personal notes and second-brain knowledge bases."
|
|
4
4
|
created: 2026-05-11
|
|
5
|
-
updated: 2026-05-
|
|
5
|
+
updated: 2026-05-25
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Andy Notes
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This is the **default landing page** you get right after cloning (or extending) the `andy-note-nuxt` layer. The layout is **stacked-column navigation** — every click on an internal link pushes a new column to the right instead of routing away, so you keep every ancestor in view and read related notes inside a single flow.
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Getting started
|
|
13
13
|
|
|
14
|
-
1.
|
|
15
|
-
2. Frontmatter
|
|
16
|
-
3.
|
|
14
|
+
1. Write your first note by dropping any markdown file into `content/`. For example `content/notes/my-first-note.md`.
|
|
15
|
+
2. Frontmatter only needs `title` + `description`. Every other field is optional — see `content.config.ts` for the full list.
|
|
16
|
+
3. Any subfolder of `content/` becomes a section group on the landing page automatically. For example `content/projects/` shows up as a `projects` section.
|
|
17
17
|
|
|
18
|
-
##
|
|
18
|
+
## Customize
|
|
19
19
|
|
|
20
|
-
- **
|
|
21
|
-
-
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
20
|
+
- **Branding**: edit `runtimeConfig.public.site` in `nuxt.config.ts` to change `site.title`, `site.description`, `site.tagline`, `site.themeColor`, and `site.logo`. Nuxt deep-merges your values over the layer's defaults.
|
|
21
|
+
- **`<title>` and meta**: edit `app.head` in the same `nuxt.config.ts`.
|
|
22
|
+
- **Palette**: terminal tokens live in `tailwind.config.js`. Key tokens: `terminal.accent` (#ff7b6b — coral), `terminal.bg` (#2a2a28 — warm dark).
|
|
23
|
+
- **Components**: every file under `app/components/` can be overridden by dropping a same-path file in your child project.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
See [License](/license) for usage terms (theme code vs. user content).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Default content schema shipped by the layer.
|
|
2
|
+
//
|
|
3
|
+
// Why this file exists in the LAYER even though CLAUDE.md says consumers own
|
|
4
|
+
// `content.config.ts`: the layer's `ContentView` component runs a children
|
|
5
|
+
// query that selects `document_type`, `updated`, and `created`. Without those
|
|
6
|
+
// columns in the SQLite schema, every page query would fail with
|
|
7
|
+
// `no such column`. So the layer ships a minimal generic schema covering only
|
|
8
|
+
// the fields its renderer actually reads. Consumers are still free — and
|
|
9
|
+
// encouraged — to override this file by shipping their own `content.config.ts`
|
|
10
|
+
// at their project root; Nuxt Layers gives the consumer's file priority and
|
|
11
|
+
// replaces this schema entirely.
|
|
12
|
+
//
|
|
13
|
+
// Keep the fields here generic. Anything domain-specific belongs in a
|
|
14
|
+
// consumer override, not in the layer.
|
|
15
|
+
import { defineCollection, defineContentConfig, z } from '@nuxt/content'
|
|
16
|
+
|
|
17
|
+
export default defineContentConfig({
|
|
18
|
+
collections: {
|
|
19
|
+
content: defineCollection({
|
|
20
|
+
type: 'page',
|
|
21
|
+
source: '**/*.md',
|
|
22
|
+
schema: z.object({
|
|
23
|
+
title: z.string().optional(),
|
|
24
|
+
description: z.string().optional(),
|
|
25
|
+
document_type: z.string().optional(),
|
|
26
|
+
tags: z.array(z.string()).optional(),
|
|
27
|
+
created: z.string().optional(),
|
|
28
|
+
updated: z.string().optional(),
|
|
29
|
+
// Opt into rawbody so the copy-as-markdown button gets byte-faithful
|
|
30
|
+
// source instead of stringified minimark. See
|
|
31
|
+
// https://content.nuxt.com/docs/integrations/llms.
|
|
32
|
+
rawbody: z.string().optional(),
|
|
33
|
+
}),
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
})
|
package/nuxt.config.ts
CHANGED
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
//
|
|
3
3
|
// Base Nuxt config for `andy-note-nuxt` theme. Consumers extend this layer
|
|
4
4
|
// via `extends: ['github:nguyenvanduocit/andy-note-nuxt']` (or local path /
|
|
5
|
-
// npm package) and override `app.head
|
|
6
|
-
//
|
|
5
|
+
// npm package) and override `app.head` and `runtimeConfig.public.site` in
|
|
6
|
+
// their child project. All values here are sensible defaults.
|
|
7
|
+
//
|
|
8
|
+
// Why runtimeConfig instead of app.config? Nuxt 5 / Nitro 3 removes the
|
|
9
|
+
// `app.config.ts` / `defineAppConfig` / `useAppConfig` surface. Layer site
|
|
10
|
+
// config now lives under `runtimeConfig.public.*`, which Nuxt deep-merges
|
|
11
|
+
// across layers identically. Components read via `useRuntimeConfig().public.site`.
|
|
7
12
|
|
|
8
13
|
import { createResolver } from '@nuxt/kit'
|
|
9
14
|
|
|
@@ -17,6 +22,14 @@ export default defineNuxtConfig({
|
|
|
17
22
|
compatibilityDate: '2025-07-15',
|
|
18
23
|
devtools: { enabled: true },
|
|
19
24
|
|
|
25
|
+
// Opt-in to Nuxt 5 behavior available under Nuxt 4.2+. Flips: non-async
|
|
26
|
+
// `callHook` return type, client-only HTML comment placeholders, and other
|
|
27
|
+
// forward-compat defaults. The heavier Nitro v3 / Vite 8 changes ship with
|
|
28
|
+
// Nuxt 5 itself — not previewable via this flag.
|
|
29
|
+
future: {
|
|
30
|
+
compatibilityVersion: 5,
|
|
31
|
+
},
|
|
32
|
+
|
|
20
33
|
modules: [
|
|
21
34
|
'vite-plugin-ai-annotator/nuxt',
|
|
22
35
|
'@nuxt/content',
|
|
@@ -58,6 +71,23 @@ export default defineNuxtConfig({
|
|
|
58
71
|
},
|
|
59
72
|
},
|
|
60
73
|
|
|
74
|
+
// Site-wide config (replaces former app/app.config.ts surface). Consumers
|
|
75
|
+
// override any field via their own `runtimeConfig.public.site` in nuxt.config —
|
|
76
|
+
// Nuxt deep-merges child layer values over parent. Free-form extra fields are
|
|
77
|
+
// allowed via the index signature in `app/types/app-config.d.ts`.
|
|
78
|
+
runtimeConfig: {
|
|
79
|
+
public: {
|
|
80
|
+
site: {
|
|
81
|
+
title: 'Andy Notes',
|
|
82
|
+
description: 'Stacked-column knowledge base — extend, override, publish.',
|
|
83
|
+
tagline: 'A second-brain theme for Nuxt Content',
|
|
84
|
+
author: 'andy-note-nuxt',
|
|
85
|
+
themeColor: '#ff7b6b',
|
|
86
|
+
logo: '/logo.svg',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
|
|
61
91
|
app: {
|
|
62
92
|
head: {
|
|
63
93
|
htmlAttrs: { lang: 'en' },
|
|
@@ -66,10 +96,10 @@ export default defineNuxtConfig({
|
|
|
66
96
|
title: 'Andy Notes — Stacked-Column Knowledge Base',
|
|
67
97
|
meta: [
|
|
68
98
|
{ name: 'description', content: 'A brutalist-terminal Nuxt Content theme for personal notes, guides, and second-brain knowledge bases.' },
|
|
69
|
-
{ name: 'theme-color', content: '#
|
|
99
|
+
{ name: 'theme-color', content: '#ff7b6b' },
|
|
70
100
|
],
|
|
71
101
|
link: [
|
|
72
|
-
{ rel: 'icon', type: 'image/
|
|
102
|
+
{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' },
|
|
73
103
|
],
|
|
74
104
|
},
|
|
75
105
|
},
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "andy-note-nuxt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Brutalist-terminal Nuxt Content theme for personal notes, guides, and second-brain knowledge bases. Use as a Nuxt layer.",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"main": "./nuxt.config.ts",
|
|
6
7
|
"license": "MIT",
|
|
7
8
|
"repository": {
|
|
8
9
|
"type": "git",
|
|
@@ -19,10 +20,17 @@
|
|
|
19
20
|
"tailwindcss"
|
|
20
21
|
],
|
|
21
22
|
"files": [
|
|
22
|
-
"app",
|
|
23
|
+
"app/app.vue",
|
|
24
|
+
"app/assets",
|
|
25
|
+
"app/components",
|
|
26
|
+
"app/composables",
|
|
27
|
+
"app/layouts",
|
|
28
|
+
"app/pages",
|
|
29
|
+
"app/types",
|
|
23
30
|
"public",
|
|
24
31
|
"content/index.md",
|
|
25
32
|
"content/license.md",
|
|
33
|
+
"content.config.ts",
|
|
26
34
|
"nuxt.config.ts",
|
|
27
35
|
"tailwind.config.js",
|
|
28
36
|
"tsconfig.json"
|
|
@@ -41,7 +49,7 @@
|
|
|
41
49
|
"@fontsource/space-grotesk": "^5.2.10",
|
|
42
50
|
"@nuxt/content": "^3.12.0",
|
|
43
51
|
"@nuxtjs/tailwindcss": "^6.14.0",
|
|
44
|
-
"nuxt": "^4.
|
|
52
|
+
"nuxt": "^4.4.6",
|
|
45
53
|
"rehype-raw": "^7.0.0",
|
|
46
54
|
"vue": "^3.5.29",
|
|
47
55
|
"vue-router": "^4.6.4",
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" shape-rendering="crispEdges">
|
|
2
|
+
<!-- Brutalist stamp favicon — warm-dark bg + offset coral block -->
|
|
3
|
+
<rect width="64" height="64" fill="#2a2a28"/>
|
|
4
|
+
<rect x="6" y="6" width="44" height="44" fill="#474541"/>
|
|
5
|
+
<rect x="10" y="10" width="44" height="44" fill="#ff7b6b"/>
|
|
6
|
+
</svg>
|
package/public/logo.svg
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 64" shape-rendering="crispEdges">
|
|
2
|
+
<!-- Brutalist stamp logo — coral block + wordmark in warm off-white.
|
|
3
|
+
Stamp shadow uses border-strong (#5a5854) at 4px offset, matching
|
|
4
|
+
the `shadow-stamp` token in tailwind.config.js. -->
|
|
5
|
+
<rect x="4" y="12" width="48" height="48" fill="#5a5854"/>
|
|
6
|
+
<rect x="0" y="8" width="48" height="48" fill="#ff7b6b"/>
|
|
7
|
+
<text x="64" y="42"
|
|
8
|
+
font-family="'Space Grotesk', -apple-system, BlinkMacSystemFont, sans-serif"
|
|
9
|
+
font-size="28"
|
|
10
|
+
font-weight="700"
|
|
11
|
+
letter-spacing="0.02em"
|
|
12
|
+
fill="#d5cfc5">andy/notes</text>
|
|
13
|
+
</svg>
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ai-annotator
|
|
3
|
-
description: This skill should be used when the user asks to "check browser feedback", "get user feedback", "capture screenshot", "inspect element", "inject CSS", "inject JS", "read console logs", or mentions AI Annotator, browser session, or UI feedback.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
AI Annotator provides access to the user's live browser session. Users select UI elements and add feedback comments. Use the REST API to read feedback, capture screenshots, inject CSS/JS, and read console logs.
|
|
7
|
-
|
|
8
|
-
Server: `http://127.0.0.1:7318`
|
|
9
|
-
|
|
10
|
-
## REST API
|
|
11
|
-
|
|
12
|
-
All endpoints return JSON. Obtain session ID from `GET /api/sessions` first.
|
|
13
|
-
|
|
14
|
-
| Method | Endpoint | Body/Query | Description |
|
|
15
|
-
|--------|----------|------------|-------------|
|
|
16
|
-
| `GET` | `http://127.0.0.1:7318/api/sessions` | — | List connected browser sessions |
|
|
17
|
-
| `GET` | `http://127.0.0.1:7318/api/sessions/:id/page-context` | — | Page URL, title, selection count |
|
|
18
|
-
| `POST` | `http://127.0.0.1:7318/api/sessions/:id/select` | `{mode?, selector?, selectorType?}` | Trigger feedback selection |
|
|
19
|
-
| `GET` | `http://127.0.0.1:7318/api/sessions/:id/feedback` | `?fields=xpath,attributes,styles,children` | Get selected feedback items |
|
|
20
|
-
| `DELETE` | `http://127.0.0.1:7318/api/sessions/:id/feedback` | — | Clear all selections |
|
|
21
|
-
| `POST` | `http://127.0.0.1:7318/api/sessions/:id/screenshot` | `{type?, selector?, quality?}` | Capture screenshot |
|
|
22
|
-
| `POST` | `http://127.0.0.1:7318/api/sessions/:id/inject-css` | `{css}` | Inject CSS into page |
|
|
23
|
-
| `POST` | `http://127.0.0.1:7318/api/sessions/:id/inject-js` | `{code}` | Execute JS in page context |
|
|
24
|
-
| `GET` | `http://127.0.0.1:7318/api/sessions/:id/console` | `?clear=true` | Get captured console logs |
|
|
25
|
-
|
|
26
|
-
## Workflow
|
|
27
|
-
|
|
28
|
-
1. `GET http://127.0.0.1:7318/api/sessions` → get session ID
|
|
29
|
-
2. `GET http://127.0.0.1:7318/api/sessions/{id}/feedback` → read user feedback
|
|
30
|
-
3. Make code changes based on feedback
|
|
31
|
-
4. `DELETE http://127.0.0.1:7318/api/sessions/{id}/feedback` → clear feedback after addressing it
|
package/app/app.config.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// Site-wide config consumed by components via `useAppConfig()`.
|
|
2
|
-
// Override every field in your child project by creating your own `app/app.config.ts`
|
|
3
|
-
// — Nuxt deep-merges child over parent layer.
|
|
4
|
-
|
|
5
|
-
export default defineAppConfig({
|
|
6
|
-
site: {
|
|
7
|
-
title: 'Andy Notes',
|
|
8
|
-
description: 'Stacked-column knowledge base — extend, override, publish.',
|
|
9
|
-
tagline: 'A second-brain theme for Nuxt Content',
|
|
10
|
-
author: 'andy-note-nuxt',
|
|
11
|
-
themeColor: '#ff7b6b',
|
|
12
|
-
logo: '/logo.png',
|
|
13
|
-
},
|
|
14
|
-
// Top-level navigation. Empty by default — child projects populate with
|
|
15
|
-
// their own categories. Each entry maps to a `content/<slug>/` folder
|
|
16
|
-
// (or any static route under `pages/`).
|
|
17
|
-
menu: [
|
|
18
|
-
{ name: 'License', url: '/license', weight: 99 },
|
|
19
|
-
],
|
|
20
|
-
})
|