@yottagraph-app/aether-instructions 1.0.1

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.
@@ -0,0 +1,528 @@
1
+ # Vercel Setup
2
+
3
+ Set up and sync this Aether project with Vercel for web deployment.
4
+
5
+ ## Overview
6
+
7
+ This command walks through connecting an Aether project to Vercel and syncing environment variables. It assumes the user has already created a GitHub repository from the Aether template and wants to deploy it to Vercel.
8
+
9
+ The Vercel connection itself (linking the GitHub repo to a Vercel project) must be done by the user through the Vercel dashboard. Once connected, this command handles everything else via the Vercel CLI.
10
+
11
+ ---
12
+
13
+ ## Step 1: Check NPM Authentication for Private Packages
14
+
15
+ This project depends on private `@lovelace-ai` packages from GitHub Packages. Both local installs and Vercel builds need a valid token. Setting this up first avoids build failures later.
16
+
17
+ ### Check `.npmrc`
18
+
19
+ Read `.npmrc` in the project root. It should contain:
20
+
21
+ ```
22
+ @lovelace-ai:registry=https://npm.pkg.github.com
23
+ //npm.pkg.github.com/:_authToken=${NPM_TOKEN}
24
+ ```
25
+
26
+ **If `.npmrc` is missing:** Create it with the content above.
27
+
28
+ **If `.npmrc` has a hardcoded token** (a literal value like `_authToken=ghp_xxxx` instead of `${NPM_TOKEN}`): This shouldn't normally happen since `.npmrc` is committed to git with `${NPM_TOKEN}`. Stop and tell the user:
29
+
30
+ > Your `.npmrc` has a hardcoded token instead of `${NPM_TOKEN}`. Please move the token value to your `NPM_TOKEN` environment variable, then replace the hardcoded value in `.npmrc` with `${NPM_TOKEN}`.
31
+
32
+ Wait for the user to confirm before continuing.
33
+
34
+ **If `.npmrc` already uses `${NPM_TOKEN}`:** Good, continue.
35
+
36
+ ### Ensure `NPM_TOKEN` is a valid PAT
37
+
38
+ ```bash
39
+ echo $NPM_TOKEN
40
+ ```
41
+
42
+ Check the token prefix:
43
+
44
+ - `ghp_` — Classic PAT. Good, skip to **"Ensure `.npmrc` is committed"**.
45
+ - `github_pat_` — Fine-grained PAT. Good, skip to **"Ensure `.npmrc` is committed"**.
46
+ - `gho_` — **This is an OAuth token, NOT a PAT.** OAuth tokens are tied to a specific device/session and will fail on Vercel's build servers. Tell the user their current token value so they can save it if needed:
47
+
48
+ > Your current `NPM_TOKEN` is an OAuth token (`gho_...`), which won't work on Vercel. Here's the value in case you want to save it: `<the full gho_ token>`
49
+ >
50
+ > We need to replace it with a classic PAT (`ghp_`).
51
+
52
+ Check `~/.npmrc` — it may contain a `ghp_` classic PAT that can be reused. If found, use it as the new `NPM_TOKEN` and persist it (see below). If not, the user needs to create one — use the AskQuestion below.
53
+
54
+ - **Empty** — The user needs a GitHub Personal Access Token. Check `~/.npmrc` for a usable `ghp_` token first. If found, use it and persist it (see below). If not, use the AskQuestion below.
55
+
56
+ ```
57
+ AskQuestion({
58
+ title: "GitHub Token Required for Private Packages",
59
+ questions: [
60
+ {
61
+ id: "npm-token",
62
+ prompt: "This project needs a GitHub Personal Access Token (PAT) to install private @lovelace-ai packages.\n\nNote: OAuth tokens (gho_) won't work on Vercel — you need a classic PAT (ghp_).\n\nDo you already have one, or do you need to create one?",
63
+ options: [
64
+ { id: "have-token", label: "I have a classic PAT — I'll set it as NPM_TOKEN" },
65
+ { id: "need-token", label: "I need to create one" }
66
+ ]
67
+ }
68
+ ]
69
+ })
70
+ ```
71
+
72
+ If the user selects "need-token", guide them:
73
+
74
+ > To create a GitHub token for npm packages:
75
+ >
76
+ > 1. Go to https://github.com/settings/tokens
77
+ > 2. Click **Generate new token** > **Generate new token (classic)**
78
+ > 3. Give it a name like "Aether npm packages"
79
+ > 4. Select the **read:packages** scope (that's all you need)
80
+ > 5. Click **Generate token**
81
+ > 6. Copy the token — you won't see it again
82
+
83
+ ### Persist `NPM_TOKEN` to the shell profile
84
+
85
+ Once you have a valid PAT (from `~/.npmrc` or from the user), persist it. Detect the user's shell:
86
+
87
+ ```bash
88
+ echo $SHELL
89
+ ```
90
+
91
+ | `$SHELL` | Profile file |
92
+ | ----------- | ------------ |
93
+ | `/bin/zsh` | `~/.zshrc` |
94
+ | `/bin/bash` | `~/.bashrc` |
95
+
96
+ If the user's shell is something else (fish, etc.), tell them to set `NPM_TOKEN` as a persistent environment variable themselves and move on.
97
+
98
+ For **zsh** or **bash**, add or update the export (replacing `<shell_rc>` with the profile filename from the table):
99
+
100
+ ```bash
101
+ sed -i.bak '/^export NPM_TOKEN=/d' ~/.<shell_rc> && rm -f ~/.<shell_rc>.bak
102
+ echo 'export NPM_TOKEN=<the_token>' >> ~/.<shell_rc>
103
+ source ~/.<shell_rc>
104
+ ```
105
+
106
+ Verify it took effect:
107
+
108
+ ```bash
109
+ echo $NPM_TOKEN
110
+ ```
111
+
112
+ ### Ensure `.npmrc` is committed
113
+
114
+ Check that `.npmrc` is NOT in `.gitignore`. Since it uses `${NPM_TOKEN}` (not a hardcoded secret), it's safe to commit and must be present in the repo for Vercel builds to work.
115
+
116
+ If `.npmrc` appears in `.gitignore`, remove that line and replace it with a comment:
117
+
118
+ ```
119
+ # .npmrc is committed — it uses ${NPM_TOKEN} env var, not a hardcoded token
120
+ ```
121
+
122
+ ---
123
+
124
+ ## Step 2: Check Vercel CLI & Authentication
125
+
126
+ The `vercel` package is included as a devDependency, so it should already be available after `npm install` / `npm run init`. Use `npx vercel` to invoke it.
127
+
128
+ Verify it's available and the user is authenticated:
129
+
130
+ ```bash
131
+ npx vercel whoami
132
+ ```
133
+
134
+ **If the command succeeds** (prints a username): Continue to Step 3.
135
+
136
+ **If the command fails:** Run the login command in the background so you can read its output:
137
+
138
+ ```bash
139
+ npx vercel login
140
+ ```
141
+
142
+ Run this as a background command (set `block_until_ms: 0`) so you can read its output while it waits. Then read the terminal output to find the one-time device code. The CLI will print a line like:
143
+
144
+ ```
145
+ > Please visit the following URL to log in: https://vercel.com/device
146
+ > Enter code: XXXX-XXXX
147
+ ```
148
+
149
+ **IMPORTANT:** Extract the code from the terminal output and present it to the user in chat, along with the URL. For example:
150
+
151
+ > Vercel needs you to authorize this device. Please:
152
+ >
153
+ > 1. Open **https://vercel.com/device** in your browser (it may have opened automatically)
154
+ > 2. Enter code: **XXXX-XXXX**
155
+ > 3. Verify the location, IP, and request time, then approve
156
+ >
157
+ > Let me know once you've approved it.
158
+
159
+ If the code is not immediately visible in the terminal output, wait a couple of seconds and re-read the terminal file — the CLI may take a moment to contact Vercel's servers.
160
+
161
+ After the user confirms they've approved, poll the terminal output until the login command completes. Then verify:
162
+
163
+ ```bash
164
+ npx vercel whoami
165
+ ```
166
+
167
+ **Stop here if authentication fails.** The user may need to:
168
+
169
+ - Check that their browser opened and they completed the authorization
170
+ - Ensure they have a Vercel account (sign up at https://vercel.com/signup)
171
+ - Try running `npx vercel login` again
172
+
173
+ ---
174
+
175
+ ## Step 3: Select the Correct Vercel Team
176
+
177
+ The project should be deployed under the shared **Lovelace** team, not a personal account. Check and switch to the correct team:
178
+
179
+ ```bash
180
+ npx vercel teams ls
181
+ ```
182
+
183
+ Look for `lovelace-web` (team name: Lovelace) in the list. If the checkmark (✔) is not on `lovelace-web`, switch to it:
184
+
185
+ ```bash
186
+ npx vercel teams switch lovelace-web
187
+ ```
188
+
189
+ **If `lovelace-web` is not listed:** The user needs to be invited to the Lovelace team on Vercel. They should ask a team admin to add them at https://vercel.com/lovelace-web/settings/members.
190
+
191
+ **Stop here if they can't access the team.** All subsequent steps assume the Lovelace team scope.
192
+
193
+ ---
194
+
195
+ ## Step 4: Check Vercel Project Link
196
+
197
+ Check if the project is already linked to Vercel by checking whether `.vercel/project.json` exists (read the file or check the directory).
198
+
199
+ **If the file exists:** Read it and confirm the project link. Continue to Step 5.
200
+
201
+ **If the file does not exist:** The project is not linked to Vercel yet. Tell the user:
202
+
203
+ > Your project needs to be connected to Vercel before we can continue.
204
+ >
205
+ > Please complete these steps:
206
+ >
207
+ > 1. Go to [vercel.com/new](https://vercel.com/new)
208
+ > 2. Click 'Import Git Repository'
209
+ > 3. Select your GitHub repository (the one created from the Aether template)
210
+ > 4. In the 'Configure Project' screen:
211
+ > - Framework Preset should auto-detect as 'Nuxt.js'
212
+ > - Leave Build Command as default
213
+ > - Leave Output Directory as default
214
+ > 5. Click 'Deploy'
215
+ > - The first deploy may fail (missing env vars) — that's OK, we'll fix it next
216
+ >
217
+ > Once the project is imported, come back here.
218
+
219
+ Use the AskQuestion tool:
220
+
221
+ ```
222
+ AskQuestion({
223
+ title: "Vercel Project Connection Required",
224
+ questions: [
225
+ {
226
+ id: "vercel-connected",
227
+ prompt: "Can you confirm that you imported the git repository to Vercel?",
228
+ options: [
229
+ { id: "done", label: "Done — I've imported the project to Vercel" },
230
+ { id: "help", label: "I need help with this step" }
231
+ ]
232
+ }
233
+ ]
234
+ })
235
+ ```
236
+
237
+ If the user selects "help", provide additional guidance:
238
+
239
+ - They need a Vercel account at https://vercel.com/signup (free tier works fine)
240
+ - They need to install the Vercel GitHub App when prompted during import
241
+ - The repository must be the one they created from the Aether template, not the original template repo
242
+ - If the repository is in their personal github account, they should be able to import it. However, if it is the team github account, or someone else's github account, they will probably need additional permissions.
243
+
244
+ After the user confirms they've imported the project, link the local project:
245
+
246
+ ```bash
247
+ npx vercel link --yes
248
+ ```
249
+
250
+ This creates the `.vercel/project.json` file that connects the local directory to the Vercel project. If it prompts to select a project, choose the one that matches the repository name.
251
+
252
+ **Note:** `vercel link` automatically appends `.vercel` to `.gitignore`, even if `.vercel/` is already listed. Check `.gitignore` after linking and remove the duplicate entry if one was added.
253
+
254
+ Verify the link succeeded by confirming `.vercel/project.json` now exists.
255
+
256
+ **Stop here if linking fails.** The user may need to re-run `npx vercel link` and select the correct project.
257
+
258
+ ---
259
+
260
+ ## Step 5: Sync Environment Variables to Vercel
261
+
262
+ Now that Vercel is authenticated and the project is linked, sync all required environment variables — starting with `NPM_TOKEN`, then the rest from `.env`.
263
+
264
+ ### Add `NPM_TOKEN` to Vercel
265
+
266
+ Step 1 ensured `NPM_TOKEN` is valid locally. Now push it to Vercel so builds can use it too.
267
+
268
+ **IMPORTANT:** Add `NPM_TOKEN` to BOTH the `production` AND `preview` environments. Production deploys come from the main branch; preview deploys come from all other branches. If you only set it for production, branch deploys will fail with E401 during `npm install`.
269
+
270
+ Check if it already exists on Vercel:
271
+
272
+ ```bash
273
+ npx vercel env ls production
274
+ npx vercel env ls preview
275
+ ```
276
+
277
+ Add it to both environments:
278
+
279
+ ```bash
280
+ printf '%s' "$NPM_TOKEN" | npx vercel env add NPM_TOKEN production --force
281
+ printf '%s' "$NPM_TOKEN" | npx vercel env add NPM_TOKEN preview --force
282
+ ```
283
+
284
+ This uses the local `NPM_TOKEN` value directly. Verify it was added to both:
285
+
286
+ ```bash
287
+ npx vercel env ls production
288
+ npx vercel env ls preview
289
+ ```
290
+
291
+ ### Sync `.env` variables
292
+
293
+ With `NPM_TOKEN` on Vercel, sync the remaining app-level configuration from `.env`.
294
+
295
+ Read the local `.env` file and parse all non-commented, non-empty lines into KEY=VALUE pairs.
296
+
297
+ **Variables to sync:** All variables defined in `.env` that are NOT commented out. This typically includes:
298
+
299
+ - `NUXT_PUBLIC_APP_ID`
300
+ - `NUXT_PUBLIC_APP_NAME`
301
+ - `NUXT_PUBLIC_QUERY_SERVER_ADDRESS`
302
+ - `NUXT_PUBLIC_AUTH0_CLIENT_ID`
303
+ - `NUXT_PUBLIC_AUTH0_CLIENT_SECRET`
304
+ - `NUXT_PUBLIC_USER_NAME`
305
+
306
+ **Variables to skip:** Do NOT sync these to Vercel:
307
+
308
+ - Commented-out lines (starting with `#`)
309
+ - Variables with empty values (e.g., `NUXT_PUBLIC_USER_NAME=`, `NUXT_PUBLIC_QUERY_SERVER_ADDRESS=`)
310
+ > **Why skip empty values?** Nuxt's runtime config defaults them to empty strings already.
311
+ > The Vercel CLI cannot store truly empty values — it either prompts interactively or
312
+ > requires a non-empty string. Using a space or placeholder causes bugs. For example,
313
+ > a space in `NUXT_PUBLIC_USER_NAME` bypasses Auth0 login entirely.
314
+
315
+ ### Sync Process
316
+
317
+ **IMPORTANT:** Sync env vars to BOTH `production` and `preview` environments. Production is used for main branch deploys; preview is used for all other branch deploys. Missing env vars in preview will cause branch builds to fail or the app to misbehave.
318
+
319
+ For each variable to sync, push it to Vercel for **both** environments. Use the following pattern to avoid interactive prompts:
320
+
321
+ ```bash
322
+ printf '%s' "VALUE" | npx vercel env add VAR_NAME production --force
323
+ printf '%s' "VALUE" | npx vercel env add VAR_NAME preview --force
324
+ ```
325
+
326
+ **IMPORTANT:** Use `printf '%s'` — NOT `echo`. `echo` appends a trailing newline to the value, which gets stored as part of the env var and causes runtime bugs (e.g., Auth0 rejecting a client ID with `\n` appended).
327
+
328
+ **Note on `--force`:** This flag overwrites existing values without prompting. This is safe for syncing because we want local values to be the source of truth.
329
+
330
+ If a variable has a value with spaces or special characters (like `NUXT_PUBLIC_APP_NAME`), the printf/pipe approach handles this correctly.
331
+
332
+ **IMPORTANT:** Strip surrounding quotes from `.env` values before piping. If `.env` has `NUXT_PUBLIC_APP_NAME="Aether Vercel Demo"`, pipe `Aether Vercel Demo` (without the `"` characters). Vercel stores the value literally — quotes included.
333
+
334
+ ### Sensitive Variables Warning
335
+
336
+ Before syncing, warn the user about sensitive values:
337
+
338
+ > **Heads up:** The following sensitive values will be synced to Vercel:
339
+ >
340
+ > - `NUXT_PUBLIC_AUTH0_CLIENT_SECRET` — Note: this is in `NUXT_PUBLIC_` which means it's exposed to the browser. Consider moving it to a server-only config in the future.
341
+ >
342
+ > Vercel encrypts environment variables at rest and in transit.
343
+
344
+ ### After Syncing
345
+
346
+ Confirm the sync by listing the variables:
347
+
348
+ ```bash
349
+ npx vercel env ls production
350
+ ```
351
+
352
+ Display the list to the user so they can verify.
353
+
354
+ ---
355
+
356
+ ## Step 6: Trigger a Production Deployment
357
+
358
+ After environment variables are synced, the existing deployment (if any) won't have them yet. Trigger a new production build:
359
+
360
+ ```bash
361
+ npx vercel --prod --yes
362
+ ```
363
+
364
+ This builds and deploys the app using the CLI. Alternatively, if the user prefers to use Git integration for deploys:
365
+
366
+ > Your environment variables are synced. To trigger a deploy with the new variables, you can either:
367
+ >
368
+ > 1. Push a commit to your `main` branch (Vercel will auto-deploy via Git integration)
369
+ > 2. Go to the Vercel dashboard and click "Redeploy" on the latest deployment
370
+
371
+ **If the deploy fails:** Check `npx vercel logs <deployment-url>` and refer to the Troubleshooting section. The most common cause is missing environment variables — re-run Step 5 if needed.
372
+
373
+ ---
374
+
375
+ ## Step 7: Configure Custom Domain
376
+
377
+ After the first successful deploy, add a custom domain under `.yottagraph.app`.
378
+
379
+ First, determine the subdomain. Read the repository name from the git remote to use as a suggested default, then ask the user:
380
+
381
+ ```bash
382
+ git remote get-url origin
383
+ ```
384
+
385
+ Extract the repo name (e.g., `aether_vercel_demo` from the URL), convert underscores to hyphens for a cleaner subdomain (e.g., `aether-vercel-demo`), and present it as a suggestion.
386
+
387
+ Use the AskQuestion tool with a text-like prompt:
388
+
389
+ ```
390
+ AskQuestion({
391
+ title: "Custom Domain",
392
+ questions: [
393
+ {
394
+ id: "subdomain",
395
+ prompt: "Choose a subdomain for your app.\n\nYour app will be available at: <subdomain>.yottagraph.app\n\nSuggested based on your repo name: [suggested-name]",
396
+ options: [
397
+ { id: "suggested", label: "[suggested-name]" },
398
+ { id: "other", label: "Other" }
399
+ ]
400
+ }
401
+ ]
402
+ })
403
+ ```
404
+
405
+ If the user selects "other", ask them to type just the subdomain they'd like (not the full domain). Confirm the full URL (`<their-choice>.yottagraph.app`) before proceeding. Always append `.yottagraph.app` to whatever the user provides.
406
+
407
+ Check what domains are already configured:
408
+
409
+ ```bash
410
+ npx vercel domains ls 2>&1
411
+ ```
412
+
413
+ Add the custom domain:
414
+
415
+ ```bash
416
+ npx vercel domains add <subdomain>.yottagraph.app
417
+ ```
418
+
419
+ **If the domain add succeeds:** Vercel will automatically provision a TLS certificate. The domain should be active within a few minutes.
420
+
421
+ **If it prompts for DNS configuration:** The `.yottagraph.app` domain must have a wildcard CNAME or individual CNAME record pointing to `cname.vercel-dns.com`. If DNS is already configured for `*.yottagraph.app`, new subdomains should work automatically.
422
+
423
+ **If it fails with a permission error:** The user may need to verify domain ownership. Domain verification is typically done once per team — if another project in the Lovelace team already uses `.yottagraph.app`, new subdomains should be automatically trusted.
424
+
425
+ After adding, verify the domain is assigned:
426
+
427
+ ```bash
428
+ npx vercel domains ls 2>&1
429
+ ```
430
+
431
+ ---
432
+
433
+ ## Step 8: Verify Deployment
434
+
435
+ After the deploy completes, Vercel will output a production URL (e.g., `https://project-name.vercel.app`). **Do not show this URL to the user.** Always use the custom domain chosen in Step 7 (`<subdomain>.yottagraph.app`) when referring to the deployment.
436
+
437
+ ### Verify static assets are served correctly
438
+
439
+ Before opening the app, confirm that `_nuxt/` static files are being served with the correct MIME type. Use the custom domain for verification:
440
+
441
+ ```bash
442
+ curl -sI "https://<subdomain>.yottagraph.app/_nuxt/<any-chunk>.js"
443
+ ```
444
+
445
+ Look for `content-type: application/javascript`. If it returns `text/html` instead, the static file routing is broken — the Nuxt serverless function is catching `_nuxt/` requests and serving the SPA template. This usually means `nitro.output.publicDir` is overriding the Vercel preset's output paths. See the troubleshooting section below.
446
+
447
+ ### Verify the app loads
448
+
449
+ Open `https://<subdomain>.yottagraph.app` and check:
450
+
451
+ 1. The app loads (not a blank page or build error)
452
+ 2. The navigation sidebar appears
453
+ 3. If Auth0 is configured, the login flow works
454
+
455
+ **If the app shows a blank page:**
456
+
457
+ - First check the static asset verification above — a MIME type mismatch is the most common cause
458
+ - Check the Vercel build logs: `npx vercel logs <deployment-url>`
459
+ - Common issue: missing environment variables or build errors
460
+
461
+ **If Auth0 login fails:**
462
+ Instruct the user:
463
+
464
+ > Your custom domain needs to be registered as an allowed callback in Auth0.
465
+ >
466
+ > 1. Go to https://manage.auth0.com/
467
+ > 2. Navigate to Applications > Your Application > Settings
468
+ > 3. Add your custom domain to these fields:
469
+ > - **Allowed Callback URLs:** `https://<subdomain>.yottagraph.app/api/auth/callback`
470
+ > - **Allowed Logout URLs:** `https://<subdomain>.yottagraph.app`
471
+ > - **Allowed Web Origins:** `https://<subdomain>.yottagraph.app`
472
+ > 4. Save changes
473
+
474
+ ---
475
+
476
+ ## Step 9: Summary
477
+
478
+ After completing all steps, provide the user with a summary:
479
+
480
+ ```
481
+ Vercel Setup Complete!
482
+
483
+ Project: [project name from .vercel/project.json]
484
+ URL: https://[subdomain].yottagraph.app
485
+ Dashboard: https://vercel.com/[org]/[project]
486
+
487
+ Environment variables synced:
488
+ - NPM_TOKEN
489
+ - NUXT_PUBLIC_APP_ID
490
+ - NUXT_PUBLIC_APP_NAME
491
+ - [... list all synced vars]
492
+
493
+ Next steps:
494
+ - Push code changes to main branch — Vercel will auto-deploy
495
+ - If using Auth0: add your custom domain as an allowed callback (see the Verify Deployment step)
496
+ ```
497
+
498
+ ---
499
+
500
+ ## Troubleshooting
501
+
502
+ ### `vercel link` fails or selects the wrong project
503
+
504
+ Run `npx vercel link` again interactively (without `--yes`) and manually select the correct project from the list.
505
+
506
+ ### Environment variable sync fails
507
+
508
+ If `npx vercel env add` fails with a permission error, the user may need to verify they have the correct Vercel team/scope selected:
509
+
510
+ ```bash
511
+ npx vercel whoami
512
+ npx vercel teams ls
513
+ npx vercel link --yes
514
+ ```
515
+
516
+ ### Build fails on Vercel
517
+
518
+ Check build logs:
519
+
520
+ ```bash
521
+ npx vercel logs <deployment-url>
522
+ ```
523
+
524
+ Common causes:
525
+
526
+ - **Missing npm packages (E401 Unauthorized):** Private `@lovelace-ai` packages need `NPM_TOKEN` configured. See Step 1 — ensure `.npmrc` uses `${NPM_TOKEN}`, the token is set as a Vercel env var, and `.npmrc` is committed (not gitignored).
527
+ - **Orval/API spec errors:** If the build fails during `prebuild` (orval code generation), ensure the API spec file exists or remove the orval dependency if unused.
528
+ - **Memory issues:** The build command includes `--max-old-space-size=8192`. Vercel's free tier may have lower limits. Try removing this from the build command in `package.json` if builds OOM.
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@yottagraph-app/aether-instructions",
3
+ "version": "1.0.1",
4
+ "description": "Cursor rules, commands, and skills for Aether development",
5
+ "files": [
6
+ "rules",
7
+ "commands",
8
+ "skills"
9
+ ],
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/Lovelace-AI/aether-dev.git",
13
+ "directory": "packages/aether-instructions"
14
+ },
15
+ "keywords": [
16
+ "cursor",
17
+ "aether",
18
+ "rules",
19
+ "commands",
20
+ "skills"
21
+ ],
22
+ "license": "UNLICENSED",
23
+ "publishConfig": {
24
+ "access": "public"
25
+ }
26
+ }
@@ -0,0 +1,21 @@
1
+ ---
2
+ alwaysApply: true
3
+ ---
4
+
5
+ # Aether
6
+
7
+ **Stack:** Nuxt 3 (SPA), Vue 3 Composition API (`<script setup>`), Vuetify 3, TypeScript (required), Auth0.
8
+
9
+ **Structure:** `pages/` (file-based routing), `components/`, `composables/`, `server/api/`, `agents/` (Python ADK), `mcp-servers/` (Python FastMCP).
10
+
11
+ **Data:** The Query Server (Elemental API) is the primary data source -- entities, news, filings, sentiment, relationships, events. Use `useElementalClient()` from `@yottagraph-app/elemental-api/client`. Do NOT call external APIs for data the platform provides. Discovery-first: use `getSchema()` to discover entity types and properties at runtime. Skill docs in `skills/elemental-api/` (run `npm install` if empty). Lovelace MCP servers may also be configured (see `api` rule) but are optional — check your tool list before assuming they're available.
12
+
13
+ **Storage:** KV (Upstash Redis) for preferences and lightweight state via `Pref<T>` from `usePrefsStore()`. Supabase for relational data if connected (check `.env`).
14
+
15
+ **Source of truth:** `DESIGN.md` -- read before starting work, update when changing features. The starter UI is placeholder -- replace freely. Feature docs in `design/` for implementation planning.
16
+
17
+ **Git:** Commit meaningful units of work. Run `npm run format` before commit. Message format: `[Agent commit] {summary}`.
18
+
19
+ **First action for a new project:** Run `/build_my_app`.
20
+
21
+ **Task-specific rules:** `architecture` (project structure, navigation, server routes, agents, MCP), `api` (Elemental API client, schema discovery, gotchas, optional MCP servers), `design` (DESIGN.md workflow, feature docs), `ui` (page templates, layout patterns), `cookbook` (copy-paste UI patterns), `pref` (KV preferences), `branding` (colors, fonts), `server` (Nitro routes, Supabase), `something-broke` (error recovery, build failures).