@appsforgood/next-supabase-kit 0.1.0 → 0.1.3

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.
Files changed (72) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/DOGFOOD.md +1 -1
  3. package/README.md +24 -7
  4. package/REPOSITORY_SETTINGS.md +2 -1
  5. package/SUPPLY_CHAIN.md +5 -5
  6. package/UPGRADE.md +14 -10
  7. package/antigravity/commands/audit.toml +16 -0
  8. package/antigravity/commands/copy.toml +16 -0
  9. package/antigravity/commands/frontend.toml +17 -0
  10. package/antigravity/commands/handoff.toml +16 -0
  11. package/antigravity/commands/plan.toml +18 -0
  12. package/antigravity/commands/security.toml +16 -0
  13. package/antigravity/commands/setup.toml +16 -0
  14. package/antigravity/commands/ship.toml +17 -0
  15. package/antigravity/commands/upgrade.toml +17 -0
  16. package/antigravity/plugin.json +58 -0
  17. package/assistant-adapters/README.md +1 -0
  18. package/assistant-adapters/antigravity.md +56 -0
  19. package/assistant-adapters/claude-code-subagents.md +1 -1
  20. package/assistant-adapters/codex-agents.md +2 -1
  21. package/assistant-adapters/cursor-agent-kit.mdc +2 -2
  22. package/assistant-adapters/github-copilot-instructions.md +1 -1
  23. package/assistant-adapters/github-next-supabase.instructions.md +1 -1
  24. package/dist/index.js +3956 -1105
  25. package/dist/index.js.map +1 -1
  26. package/dist/studio/office/assets/office.css +551 -0
  27. package/dist/studio/office/assets/office.js +1105 -0
  28. package/dist/studio/wizard/assets/wizard.css +525 -0
  29. package/dist/studio/wizard/assets/wizard.js +692 -0
  30. package/examples/next-supabase-installed/.agent-kit/manifest.json +13 -12
  31. package/examples/next-supabase-installed/.agent-kit/model-routing.json +7 -0
  32. package/examples/next-supabase-installed/README.md +3 -3
  33. package/examples/next-supabase-installed/audit-output.json +24 -7
  34. package/examples/next-supabase-installed/tree.txt +6 -0
  35. package/model-routing/default-model-routing.json +7 -0
  36. package/package.json +13 -5
  37. package/runtime-skills/README.md +7 -0
  38. package/runtime-skills/accessibility-wcag/SKILL.md +8 -0
  39. package/runtime-skills/agent-handoff-tracing/SKILL.md +8 -0
  40. package/runtime-skills/best-practice-maturity-review/SKILL.md +8 -0
  41. package/runtime-skills/content-first-design/SKILL.md +8 -0
  42. package/runtime-skills/conversion-copywriting/SKILL.md +8 -0
  43. package/runtime-skills/deployment-observability/SKILL.md +8 -0
  44. package/runtime-skills/docs-maintainer/SKILL.md +8 -0
  45. package/runtime-skills/frontend-design-system/SKILL.md +8 -0
  46. package/runtime-skills/frontend-distinctiveness-benchmark/SKILL.md +8 -0
  47. package/runtime-skills/frontend-product-quality-rubric/SKILL.md +8 -0
  48. package/runtime-skills/landing-page-copy/SKILL.md +8 -0
  49. package/runtime-skills/nextjs-app-router/SKILL.md +8 -0
  50. package/runtime-skills/onboarding-empty-state-copy/SKILL.md +8 -0
  51. package/runtime-skills/owasp-security-review/SKILL.md +8 -0
  52. package/runtime-skills/planning-council/SKILL.md +8 -0
  53. package/runtime-skills/positioning-messaging/SKILL.md +8 -0
  54. package/runtime-skills/postgres-migrations/SKILL.md +8 -0
  55. package/runtime-skills/product-voice-tone/SKILL.md +8 -0
  56. package/runtime-skills/reference-led-design-critique/SKILL.md +8 -0
  57. package/runtime-skills/supabase-auth-rls/SKILL.md +8 -0
  58. package/runtime-skills/testing-qa/SKILL.md +8 -0
  59. package/runtime-skills/upgrade-maintenance/SKILL.md +8 -0
  60. package/runtime-skills/visual-regression-qa/SKILL.md +8 -0
  61. package/schemas/onboarding-state.schema.json +33 -0
  62. package/templates/next-supabase/.github/workflows/agent-kit-audit.yml +35 -0
  63. package/templates/next-supabase/AGENTS.md +1 -1
  64. package/templates/next-supabase/ASSISTANT_ADAPTERS.md +21 -3
  65. package/templates/next-supabase/CLAUDE.md +39 -0
  66. package/templates/next-supabase/DECISIONS.md +14 -0
  67. package/templates/next-supabase/DOCS.md +4 -0
  68. package/templates/next-supabase/MODEL_ROUTING.md +12 -0
  69. package/templates/next-supabase/QUALITY_GATES.md +4 -0
  70. package/templates/next-supabase/SPEC.md +2 -0
  71. package/templates/next-supabase/TESTING.md +3 -0
  72. package/templates/next-supabase/UPGRADE.md +8 -4
@@ -0,0 +1,551 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --ink: #1f2933;
4
+ --muted: #52606d;
5
+ --line: #d9e2ec;
6
+ --panel: #ffffff;
7
+ --bg: #0f172a;
8
+ --accent: #0f766e;
9
+ --accent-soft: #ccfbf1;
10
+ --warn: #fbbf24;
11
+ --ok: #4ade80;
12
+ --header: #0b1f24;
13
+ }
14
+
15
+ @media (prefers-reduced-motion: reduce) {
16
+ *, *::before, *::after {
17
+ animation-duration: 0.01ms !important;
18
+ transition-duration: 0.01ms !important;
19
+ }
20
+ }
21
+
22
+ * { box-sizing: border-box; }
23
+
24
+ body {
25
+ margin: 0;
26
+ font-family: Inter, ui-sans-serif, system-ui, sans-serif;
27
+ color: var(--ink);
28
+ background: var(--bg);
29
+ min-height: 100vh;
30
+ }
31
+
32
+ .sr-only {
33
+ position: absolute;
34
+ width: 1px;
35
+ height: 1px;
36
+ padding: 0;
37
+ margin: -1px;
38
+ overflow: hidden;
39
+ clip: rect(0, 0, 0, 0);
40
+ border: 0;
41
+ }
42
+
43
+ .office-header {
44
+ display: flex;
45
+ flex-wrap: wrap;
46
+ align-items: center;
47
+ justify-content: space-between;
48
+ gap: 12px;
49
+ padding: 14px 20px;
50
+ background: var(--header);
51
+ color: #e2e8f0;
52
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
53
+ }
54
+
55
+ .office-header h1 {
56
+ margin: 0;
57
+ font-size: 20px;
58
+ color: #f8fafc;
59
+ }
60
+
61
+ .project-name {
62
+ margin: 2px 0 0;
63
+ font-size: 13px;
64
+ color: #99f6e4;
65
+ }
66
+
67
+ .header-actions {
68
+ display: flex;
69
+ align-items: center;
70
+ gap: 10px;
71
+ flex-wrap: wrap;
72
+ }
73
+
74
+ .progress-pill {
75
+ font-size: 13px;
76
+ padding: 6px 12px;
77
+ border-radius: 999px;
78
+ background: rgba(255, 255, 255, 0.08);
79
+ border: 1px solid rgba(255, 255, 255, 0.12);
80
+ }
81
+
82
+ .office-main {
83
+ display: grid;
84
+ grid-template-columns: 220px minmax(0, 1fr);
85
+ gap: 0;
86
+ min-height: calc(100vh - 64px);
87
+ }
88
+
89
+ @media (max-width: 900px) {
90
+ .office-main { grid-template-columns: 1fr; }
91
+ .station-list { border-right: 0; border-bottom: 1px solid var(--line); max-height: 180px; overflow: auto; }
92
+ }
93
+
94
+ .station-list {
95
+ background: #1e293b;
96
+ color: #cbd5e1;
97
+ padding: 14px;
98
+ border-right: 1px solid rgba(255, 255, 255, 0.08);
99
+ }
100
+
101
+ .station-list h2 {
102
+ margin: 0 0 6px;
103
+ font-size: 14px;
104
+ color: #f8fafc;
105
+ }
106
+
107
+ .station-list .hint {
108
+ margin: 0 0 10px;
109
+ font-size: 11px;
110
+ color: #94a3b8;
111
+ }
112
+
113
+ .station-list ul {
114
+ list-style: none;
115
+ margin: 0;
116
+ padding: 0;
117
+ display: grid;
118
+ gap: 4px;
119
+ }
120
+
121
+ .station-list button {
122
+ width: 100%;
123
+ text-align: left;
124
+ background: rgba(255, 255, 255, 0.04);
125
+ border: 1px solid rgba(255, 255, 255, 0.08);
126
+ border-radius: 8px;
127
+ padding: 8px 10px;
128
+ color: inherit;
129
+ font: inherit;
130
+ cursor: pointer;
131
+ }
132
+
133
+ .station-list button:hover { background: rgba(255, 255, 255, 0.1); }
134
+ .station-list button.done { border-color: rgba(74, 222, 128, 0.4); }
135
+ .station-list button .chip {
136
+ float: right;
137
+ font-size: 10px;
138
+ opacity: 0.7;
139
+ }
140
+
141
+ .canvas-wrap {
142
+ position: relative;
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ padding: 20px;
147
+ overflow: auto;
148
+ background: #0f172a;
149
+ }
150
+
151
+ .nameplate-layer {
152
+ position: absolute;
153
+ inset: 20px;
154
+ pointer-events: none;
155
+ overflow: visible;
156
+ }
157
+
158
+ .nameplate {
159
+ position: absolute;
160
+ transform: translate(-50%, -100%);
161
+ background: rgba(15, 23, 42, 0.9);
162
+ color: #f8fafc;
163
+ font-size: 10px;
164
+ font-weight: 600;
165
+ padding: 2px 6px;
166
+ border-radius: 4px;
167
+ border: 1px solid #475569;
168
+ white-space: nowrap;
169
+ max-width: 120px;
170
+ overflow: hidden;
171
+ text-overflow: ellipsis;
172
+ }
173
+
174
+ .nameplate.done {
175
+ border-color: rgba(74, 222, 128, 0.6);
176
+ color: #bbf7d0;
177
+ }
178
+
179
+ .office-hint {
180
+ position: absolute;
181
+ bottom: 28px;
182
+ left: 50%;
183
+ transform: translateX(-50%);
184
+ background: rgba(15, 118, 110, 0.95);
185
+ color: #fff;
186
+ padding: 10px 16px;
187
+ border-radius: 10px;
188
+ font-size: 14px;
189
+ z-index: 10;
190
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
191
+ }
192
+
193
+ #office-floor {
194
+ image-rendering: pixelated;
195
+ image-rendering: crisp-edges;
196
+ border: 2px solid #334155;
197
+ border-radius: 4px;
198
+ cursor: pointer;
199
+ max-width: 100%;
200
+ height: auto;
201
+ }
202
+
203
+ .hover-label {
204
+ position: absolute;
205
+ pointer-events: none;
206
+ background: rgba(15, 23, 42, 0.92);
207
+ color: #f8fafc;
208
+ font-size: 12px;
209
+ padding: 4px 8px;
210
+ border-radius: 6px;
211
+ border: 1px solid #475569;
212
+ white-space: nowrap;
213
+ }
214
+
215
+ .status {
216
+ position: fixed;
217
+ bottom: 16px;
218
+ left: 50%;
219
+ transform: translateX(-50%);
220
+ padding: 10px 16px;
221
+ border-radius: 10px;
222
+ font-size: 14px;
223
+ z-index: 50;
224
+ max-width: 90vw;
225
+ }
226
+
227
+ .status.ok { background: #dcfce7; color: #166534; }
228
+ .status.error { background: #fee2e2; color: #991b1b; }
229
+
230
+ .btn {
231
+ display: inline-flex;
232
+ align-items: center;
233
+ justify-content: center;
234
+ border: 0;
235
+ border-radius: 10px;
236
+ padding: 10px 16px;
237
+ font: inherit;
238
+ font-weight: 600;
239
+ cursor: pointer;
240
+ text-decoration: none;
241
+ }
242
+
243
+ .btn.primary { background: var(--accent); color: #fff; }
244
+ .btn.secondary { background: #334155; color: #f8fafc; }
245
+ .btn:disabled { opacity: 0.5; cursor: not-allowed; }
246
+
247
+ .panel {
248
+ position: fixed;
249
+ top: 0;
250
+ right: 0;
251
+ width: min(420px, 100vw);
252
+ height: 100vh;
253
+ background: var(--panel);
254
+ box-shadow: -8px 0 30px rgba(0, 0, 0, 0.3);
255
+ z-index: 40;
256
+ display: flex;
257
+ flex-direction: column;
258
+ }
259
+
260
+ .panel.hidden { display: none; }
261
+
262
+ .panel-head {
263
+ display: flex;
264
+ align-items: center;
265
+ justify-content: space-between;
266
+ padding: 16px 18px;
267
+ border-bottom: 1px solid var(--line);
268
+ }
269
+
270
+ .panel-head h2 { margin: 0; font-size: 18px; }
271
+
272
+ .panel-close {
273
+ background: none;
274
+ border: 0;
275
+ font-size: 24px;
276
+ line-height: 1;
277
+ cursor: pointer;
278
+ color: var(--muted);
279
+ }
280
+
281
+ .panel-body {
282
+ flex: 1;
283
+ overflow: auto;
284
+ padding: 16px 18px;
285
+ }
286
+
287
+ .panel-foot {
288
+ display: flex;
289
+ gap: 10px;
290
+ justify-content: flex-end;
291
+ padding: 14px 18px;
292
+ border-top: 1px solid var(--line);
293
+ }
294
+
295
+ .panel label {
296
+ display: block;
297
+ font-weight: 600;
298
+ font-size: 14px;
299
+ margin: 14px 0 6px;
300
+ }
301
+
302
+ .panel label span {
303
+ display: block;
304
+ font-weight: 400;
305
+ font-size: 12px;
306
+ color: var(--muted);
307
+ margin-top: 2px;
308
+ }
309
+
310
+ .panel input,
311
+ .panel textarea,
312
+ .panel select {
313
+ width: 100%;
314
+ font: inherit;
315
+ border: 1px solid var(--line);
316
+ border-radius: 8px;
317
+ padding: 10px;
318
+ }
319
+
320
+ .panel textarea { min-height: 90px; resize: vertical; }
321
+
322
+ .panel .agent-role {
323
+ font-size: 13px;
324
+ color: var(--muted);
325
+ margin: 0 0 12px;
326
+ padding: 10px;
327
+ background: #f8fafc;
328
+ border-radius: 8px;
329
+ }
330
+
331
+ .panel .hint-box {
332
+ margin: 10px 0;
333
+ padding: 10px;
334
+ background: #ecfdf5;
335
+ border-radius: 8px;
336
+ font-size: 13px;
337
+ }
338
+
339
+ .panel .hint-box button {
340
+ margin-top: 8px;
341
+ font: inherit;
342
+ padding: 6px 10px;
343
+ border-radius: 6px;
344
+ border: 1px solid var(--accent);
345
+ background: #fff;
346
+ cursor: pointer;
347
+ }
348
+
349
+ .modal {
350
+ position: fixed;
351
+ inset: 0;
352
+ background: rgba(15, 23, 42, 0.75);
353
+ display: flex;
354
+ align-items: center;
355
+ justify-content: center;
356
+ z-index: 60;
357
+ padding: 20px;
358
+ }
359
+
360
+ .modal-blur:not([hidden]) {
361
+ background: rgba(15, 23, 42, 0.45);
362
+ backdrop-filter: blur(2px);
363
+ }
364
+
365
+ .modal[hidden],
366
+ .modal.hidden { display: none; }
367
+
368
+ .modal-card {
369
+ background: var(--panel);
370
+ border-radius: 12px;
371
+ padding: 24px;
372
+ max-width: 520px;
373
+ width: 100%;
374
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35);
375
+ }
376
+
377
+ .modal-wide { max-width: 640px; }
378
+
379
+ .modal-card h2 { margin: 0 0 8px; }
380
+
381
+ .why { color: var(--muted); font-size: 14px; margin: 0 0 16px; }
382
+
383
+ .depth-grid {
384
+ display: grid;
385
+ gap: 10px;
386
+ }
387
+
388
+ .depth-card {
389
+ text-align: left;
390
+ border: 2px solid var(--line);
391
+ border-radius: 10px;
392
+ padding: 14px;
393
+ background: #fff;
394
+ cursor: pointer;
395
+ font: inherit;
396
+ }
397
+
398
+ .depth-card:hover { border-color: var(--accent); }
399
+ .depth-card.selected { border-color: var(--accent); background: var(--accent-soft); }
400
+ .depth-card strong { display: block; margin-bottom: 4px; }
401
+ .depth-card p { margin: 0; font-size: 13px; color: var(--muted); }
402
+
403
+ .review { margin: 0; display: grid; gap: 12px; }
404
+ .review dt { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); font-weight: 700; }
405
+ .review dd { margin: 4px 0 0; white-space: pre-wrap; }
406
+
407
+ .modal-actions {
408
+ display: flex;
409
+ gap: 10px;
410
+ justify-content: flex-end;
411
+ margin-top: 20px;
412
+ }
413
+
414
+ .hidden { display: none !important; }
415
+
416
+ code {
417
+ font-family: ui-monospace, Menlo, Consolas, monospace;
418
+ font-size: 12px;
419
+ background: #edf2f7;
420
+ padding: 2px 5px;
421
+ border-radius: 4px;
422
+ }
423
+
424
+ .office-main.studio-layout {
425
+ grid-template-columns: minmax(0, 1fr) 280px;
426
+ }
427
+
428
+ .session-pill {
429
+ font-size: 12px;
430
+ padding: 6px 12px;
431
+ border-radius: 999px;
432
+ background: rgba(251, 191, 36, 0.15);
433
+ border: 1px solid rgba(251, 191, 36, 0.35);
434
+ color: #fde68a;
435
+ max-width: 220px;
436
+ overflow: hidden;
437
+ text-overflow: ellipsis;
438
+ white-space: nowrap;
439
+ }
440
+
441
+ .transcript-panel {
442
+ background: #1e293b;
443
+ color: #cbd5e1;
444
+ padding: 14px;
445
+ border-left: 1px solid rgba(255, 255, 255, 0.08);
446
+ overflow: auto;
447
+ max-height: calc(100vh - 64px);
448
+ }
449
+
450
+ .transcript-panel h2 {
451
+ margin: 0 0 8px;
452
+ font-size: 14px;
453
+ color: #f8fafc;
454
+ }
455
+
456
+ #transcript-list {
457
+ list-style: none;
458
+ margin: 0;
459
+ padding: 0;
460
+ display: grid;
461
+ gap: 8px;
462
+ font-size: 12px;
463
+ }
464
+
465
+ #transcript-list li {
466
+ padding: 8px;
467
+ border-radius: 8px;
468
+ background: rgba(255, 255, 255, 0.04);
469
+ border: 1px solid rgba(255, 255, 255, 0.06);
470
+ }
471
+
472
+ .tx-time {
473
+ color: #94a3b8;
474
+ font-size: 10px;
475
+ margin-right: 6px;
476
+ }
477
+
478
+ .bubble-layer,
479
+ .speech-layer {
480
+ position: absolute;
481
+ inset: 20px;
482
+ pointer-events: none;
483
+ overflow: visible;
484
+ }
485
+
486
+ .speech-bubble {
487
+ position: absolute;
488
+ transform: translate(-50%, -100%);
489
+ background: rgba(255, 255, 255, 0.95);
490
+ color: #0f172a;
491
+ font-size: 11px;
492
+ padding: 6px 8px;
493
+ border-radius: 8px;
494
+ max-width: 160px;
495
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
496
+ border: 1px solid #cbd5e1;
497
+ }
498
+
499
+ .speech-bubble::after {
500
+ content: "";
501
+ position: absolute;
502
+ left: 50%;
503
+ bottom: -6px;
504
+ transform: translateX(-50%);
505
+ border: 6px solid transparent;
506
+ border-top-color: rgba(255, 255, 255, 0.95);
507
+ }
508
+
509
+ @media (max-width: 900px) {
510
+ .office-main.studio-layout { grid-template-columns: 1fr; }
511
+ .transcript-panel { max-height: 200px; border-left: 0; border-top: 1px solid rgba(255, 255, 255, 0.08); }
512
+ }
513
+
514
+ .studio-main .transcript-list {
515
+ list-style: none;
516
+ margin: 0;
517
+ padding: 0;
518
+ display: grid;
519
+ gap: 8px;
520
+ max-height: 70vh;
521
+ overflow-y: auto;
522
+ font-size: 13px;
523
+ }
524
+
525
+ .transcript-list li {
526
+ padding: 8px 10px;
527
+ background: #f8fafc;
528
+ border: 1px solid var(--line);
529
+ border-radius: 8px;
530
+ }
531
+
532
+ .speech-layer {
533
+ position: absolute;
534
+ inset: 0;
535
+ pointer-events: none;
536
+ z-index: 4;
537
+ }
538
+
539
+ .speech-bubble {
540
+ position: absolute;
541
+ transform: translateX(-50%);
542
+ max-width: 180px;
543
+ padding: 6px 10px;
544
+ background: #fff;
545
+ color: var(--ink);
546
+ border: 2px solid var(--accent);
547
+ border-radius: 10px;
548
+ font-size: 11px;
549
+ line-height: 1.3;
550
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
551
+ }