noah-cursor 1.1.0 → 1.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 +36 -36
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +3 -3
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +7 -5
- package/dist/commands/browse.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +54 -15
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +2 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/constants/index.d.ts +6 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +6 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/core/program.js +2 -2
- package/dist/core/program.js.map +1 -1
- package/dist/metadata/store.d.ts +12 -0
- package/dist/metadata/store.d.ts.map +1 -1
- package/dist/metadata/store.js +61 -2
- package/dist/metadata/store.js.map +1 -1
- package/dist/noah-registry/manifest.json +85 -0
- package/dist/noah-registry/mcp/.gitkeep +0 -0
- package/dist/noah-registry/presets/.gitkeep +0 -0
- package/dist/noah-registry/prompts/.gitkeep +0 -0
- package/dist/noah-registry/rules/laravel-api/RULE.md +62 -0
- package/dist/noah-registry/rules/nextjs-marketing/RULE.md +52 -0
- package/dist/noah-registry/rules/nuxt-marketing/RULE.md +50 -0
- package/dist/noah-registry/rules/react-spa-dashboard/RULE.md +75 -0
- package/dist/noah-registry/rules/stack-architecture/RULE.md +28 -0
- package/dist/noah-registry/rules/test/RULE.md +16 -0
- package/dist/noah-registry/skills/commit-push/SKILL.md +193 -0
- package/dist/noah-registry/skills/larastan-fix/SKILL.md +203 -0
- package/dist/noah-registry/skills/nestjs-knip-fix/SKILL.md +147 -0
- package/dist/noah-registry/skills/nestjs-knip-fix/config/knip.nestjs.json +29 -0
- package/dist/noah-registry/skills/node-doctor-fix/SKILL.md +146 -0
- package/dist/noah-registry/skills/node-doctor-fix/config/node-doctor.knip.json +22 -0
- package/dist/noah-registry/skills/node-doctor-fix/scripts/node-doctor.mjs +393 -0
- package/dist/noah-registry/skills/react-doctor-fix/SKILL.md +185 -0
- package/dist/noah-registry/skills/test/SKILL.md +14 -0
- package/dist/services/doctor-service.js +3 -3
- package/dist/services/doctor-service.js.map +1 -1
- package/dist/services/install-service.d.ts +9 -1
- package/dist/services/install-service.d.ts.map +1 -1
- package/dist/services/install-service.js +22 -7
- package/dist/services/install-service.js.map +1 -1
- package/dist/services/registry-loader.d.ts +7 -1
- package/dist/services/registry-loader.d.ts.map +1 -1
- package/dist/services/registry-loader.js +30 -11
- package/dist/services/registry-loader.js.map +1 -1
- package/dist/ui/banner.d.ts +1 -1
- package/dist/ui/banner.d.ts.map +1 -1
- package/dist/ui/banner.js +11 -8
- package/dist/ui/banner.js.map +1 -1
- package/dist/utils/registry.d.ts +22 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/utils/registry.js +95 -0
- package/dist/utils/registry.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "noah-registry",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Noah Cursor registry — add your skills, rules, prompts, MCP configs, and presets here",
|
|
5
|
+
"author": "Noah Poli",
|
|
6
|
+
"skills": [
|
|
7
|
+
{
|
|
8
|
+
"id": "test",
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"description": "Sample skill for verifying noah-cursor installs",
|
|
11
|
+
"tags": ["test", "sample"]
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "commit-push",
|
|
15
|
+
"version": "1.0.0",
|
|
16
|
+
"description": "Stage all changes, group by category, draft a linepush-style commit, commit, and push",
|
|
17
|
+
"tags": ["git", "commit", "push", "conventional-commits"]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "react-doctor-fix",
|
|
21
|
+
"version": "1.0.0",
|
|
22
|
+
"description": "Run react-doctor, fix all findings, and verify features still work",
|
|
23
|
+
"tags": ["react", "react-doctor", "lint", "refactor", "qa"]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "larastan-fix",
|
|
27
|
+
"version": "1.0.0",
|
|
28
|
+
"description": "Run Larastan on Laravel, fix all findings, and verify features still work",
|
|
29
|
+
"tags": ["laravel", "php", "larastan", "phpstan", "qa"]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "nestjs-knip-fix",
|
|
33
|
+
"version": "1.0.0",
|
|
34
|
+
"description": "Run Knip on NestJS, fix unused code/deps, and verify features still work",
|
|
35
|
+
"tags": ["nestjs", "knip", "node", "typescript", "qa"]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "node-doctor-fix",
|
|
39
|
+
"version": "1.0.0",
|
|
40
|
+
"description": "Run bundled node-doctor (Knip + hygiene), fix findings, verify features still work",
|
|
41
|
+
"tags": ["node", "knip", "doctor", "qa", "cli"]
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"rules": [
|
|
45
|
+
{
|
|
46
|
+
"id": "test",
|
|
47
|
+
"version": "1.0.0",
|
|
48
|
+
"description": "Sample rule for verifying noah-cursor installs",
|
|
49
|
+
"tags": ["test", "sample"]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "stack-architecture",
|
|
53
|
+
"version": "1.0.0",
|
|
54
|
+
"description": "When to use React SPA dashboards, Laravel APIs, and Next/Nuxt marketing sites",
|
|
55
|
+
"tags": ["architecture", "stack"]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "react-spa-dashboard",
|
|
59
|
+
"version": "1.0.0",
|
|
60
|
+
"description": "React client-side SPA rules for dashboards consuming a Laravel API",
|
|
61
|
+
"tags": ["react", "spa", "dashboard", "typescript", "tanstack-query"]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "laravel-api",
|
|
65
|
+
"version": "1.0.0",
|
|
66
|
+
"description": "Laravel API-only backend rules for headless SPA clients",
|
|
67
|
+
"tags": ["laravel", "php", "api", "sanctum"]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "nextjs-marketing",
|
|
71
|
+
"version": "1.0.0",
|
|
72
|
+
"description": "Next.js App Router rules for marketing and branding websites",
|
|
73
|
+
"tags": ["nextjs", "marketing", "seo", "branding"]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "nuxt-marketing",
|
|
77
|
+
"version": "1.0.0",
|
|
78
|
+
"description": "Nuxt 3+ rules for marketing and branding websites",
|
|
79
|
+
"tags": ["nuxt", "vue", "marketing", "seo", "branding"]
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"prompts": [],
|
|
83
|
+
"mcp": [],
|
|
84
|
+
"presets": []
|
|
85
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Laravel API-only backend rules for SPA dashboards and headless clients
|
|
3
|
+
globs: "**/*.php"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Laravel API
|
|
8
|
+
|
|
9
|
+
Use this rule when Laravel is an **API-only** backend serving a React SPA (or other clients). Prefer JSON APIs over Blade/Livewire/Inertia unless the user explicitly asks for them.
|
|
10
|
+
|
|
11
|
+
Sources synthesized from [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) (`laravel-php-83`) plus Laravel API conventions (Sanctum, Form Requests, Resources).
|
|
12
|
+
|
|
13
|
+
## Role of this app
|
|
14
|
+
|
|
15
|
+
- Laravel exposes **REST/JSON endpoints** (or thin action controllers).
|
|
16
|
+
- The React dashboard is the primary UI client.
|
|
17
|
+
- Marketing sites (Next/Nuxt) may call public read-only endpoints when needed.
|
|
18
|
+
- Do not build admin UIs in Blade unless requested.
|
|
19
|
+
|
|
20
|
+
## PHP & Laravel conventions
|
|
21
|
+
|
|
22
|
+
- PHP 8.2+ features where appropriate (typed properties, enums, readonly, constructor promotion).
|
|
23
|
+
- Follow PSR-12 and Laravel naming:
|
|
24
|
+
- Classes: PascalCase
|
|
25
|
+
- Methods: camelCase
|
|
26
|
+
- DB columns / request keys: snake_case (or consistently camelCase in API resources — pick one and stick to it)
|
|
27
|
+
- Prefer helpers when clearer; keep controllers thin.
|
|
28
|
+
- Pint for formatting.
|
|
29
|
+
|
|
30
|
+
## HTTP layer
|
|
31
|
+
|
|
32
|
+
- Validate with **Form Request** classes — not ad-hoc `$request->validate()` in fat controllers.
|
|
33
|
+
- Return **API Resources** / Resource collections for JSON shaping.
|
|
34
|
+
- Use API route files (`routes/api.php`) and version when needed (`/api/v1/...`).
|
|
35
|
+
- Prefer invokable / single-action controllers for complex endpoints when it improves clarity.
|
|
36
|
+
- Consistent error JSON shape for `401`, `403`, `404`, `422`, `500`.
|
|
37
|
+
|
|
38
|
+
## Auth
|
|
39
|
+
|
|
40
|
+
- Prefer **Laravel Sanctum** for SPA cookie auth (same-site) or token auth for mobile/third-party.
|
|
41
|
+
- Protect routes with `auth:sanctum` (or project guard).
|
|
42
|
+
- Authorize with Policies / Gates — never “check role in controller ad hoc” without a policy when domain rules grow.
|
|
43
|
+
|
|
44
|
+
## Domain & data
|
|
45
|
+
|
|
46
|
+
- Eloquent models stay focused; push heavy workflows to Actions/Services.
|
|
47
|
+
- Use migrations for schema; factories/seeders for local data.
|
|
48
|
+
- Eager-load relations to avoid N+1 (`with`, `loadMissing`).
|
|
49
|
+
- Database transactions around multi-model writes.
|
|
50
|
+
- Queues for email, webhooks, and slow side effects.
|
|
51
|
+
|
|
52
|
+
## Testing
|
|
53
|
+
|
|
54
|
+
- Feature tests for API endpoints (`postJson`, `getJson`, assert JSON structure).
|
|
55
|
+
- Cover auth boundaries and validation failures.
|
|
56
|
+
- Prefer Pest or PHPUnit per project norm.
|
|
57
|
+
|
|
58
|
+
## Do not
|
|
59
|
+
|
|
60
|
+
- Do not default to Livewire / Inertia / Blade admin panels for this stack.
|
|
61
|
+
- Do not return unfiltered Eloquent models when a Resource is safer.
|
|
62
|
+
- Do not put React/Next/Nuxt frontend code into the Laravel repo unless the monorepo already does that by convention.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Next.js rules for marketing and branding websites (SEO, App Router, content pages)
|
|
3
|
+
globs: "**/*.{tsx,ts,jsx,js,mdx}"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Next.js Marketing / Branding
|
|
8
|
+
|
|
9
|
+
Use this rule for **marketing and branding websites** built with Next.js (App Router). Optimize for SEO, performance, and content-driven pages — not authenticated SPA dashboards.
|
|
10
|
+
|
|
11
|
+
Sources synthesized from [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) (`nextjs-app-router`, `nextjs-14-tailwind-seo`).
|
|
12
|
+
|
|
13
|
+
## When to use Next.js here
|
|
14
|
+
|
|
15
|
+
- Marketing sites, landing pages, brand storytelling, blogs, campaigns.
|
|
16
|
+
- Prefer SSG/SSR and strong SEO.
|
|
17
|
+
- Dashboard/admin apps should use the **React SPA** rule + Laravel API instead.
|
|
18
|
+
|
|
19
|
+
## App Router defaults
|
|
20
|
+
|
|
21
|
+
- Server Components by default; add `'use client'` only for interactivity.
|
|
22
|
+
- Use `layout.tsx`, `page.tsx`, `loading.tsx`, `error.tsx`, `not-found.tsx`.
|
|
23
|
+
- Colocate route UI under `app/`; keep shared UI in `components/`.
|
|
24
|
+
- Use `next/image` and `next/font`.
|
|
25
|
+
- Prefer Tailwind (or the project design system) over ad-hoc CSS.
|
|
26
|
+
|
|
27
|
+
## SEO & content
|
|
28
|
+
|
|
29
|
+
- Define `metadata` / `generateMetadata` per page (title, description, Open Graph, Twitter).
|
|
30
|
+
- Semantic HTML (`main`, `header`, `nav`, `section`, `article`).
|
|
31
|
+
- Accessible landmarks, focus states, and image `alt` text.
|
|
32
|
+
- Static generation for mostly-static pages; revalidate when CMS/API content changes.
|
|
33
|
+
- Sitemap and `robots.txt` when the site is public.
|
|
34
|
+
|
|
35
|
+
## Performance
|
|
36
|
+
|
|
37
|
+
- Avoid shipping large client bundles on marketing pages.
|
|
38
|
+
- Lazy-load below-the-fold interactive widgets.
|
|
39
|
+
- Keep third-party scripts minimal (analytics via Next script strategy).
|
|
40
|
+
- Optimize LCP: hero image priority, restrained font loading.
|
|
41
|
+
|
|
42
|
+
## Data
|
|
43
|
+
|
|
44
|
+
- Fetch in Server Components with caching/`revalidate` as appropriate.
|
|
45
|
+
- If calling the Laravel API for public content, keep tokens server-side only.
|
|
46
|
+
- Do not expose admin credentials to the browser.
|
|
47
|
+
|
|
48
|
+
## Do not
|
|
49
|
+
|
|
50
|
+
- Do not turn a marketing site into a full authenticated dashboard SPA inside Next unless explicitly requested.
|
|
51
|
+
- Do not use client components for purely static content.
|
|
52
|
+
- Do not skip metadata on public pages.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Nuxt rules for marketing and branding websites (SEO, content, Vue Composition API)
|
|
3
|
+
globs: "**/*.{vue,ts,js,mjs}"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Nuxt Marketing / Branding
|
|
8
|
+
|
|
9
|
+
Use this rule for **marketing and branding websites** built with Nuxt 3+. Optimize for SEO, content pages, and brand experiences — not authenticated SPA dashboards.
|
|
10
|
+
|
|
11
|
+
Sources synthesized from [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) (`vue-3-nuxt-3-typescript`, `vue3-composition-api`).
|
|
12
|
+
|
|
13
|
+
## When to use Nuxt here
|
|
14
|
+
|
|
15
|
+
- Marketing sites, landings, brand sites, content-heavy Vue stacks.
|
|
16
|
+
- Prefer Nuxt's SSR/SSG and SEO utilities.
|
|
17
|
+
- Dashboard/admin apps should use the **React SPA** rule + Laravel API instead (unless the team explicitly chooses a Nuxt SPA dashboard).
|
|
18
|
+
|
|
19
|
+
## Nuxt conventions
|
|
20
|
+
|
|
21
|
+
- Vue 3 **Composition API** with `<script setup lang="ts">`.
|
|
22
|
+
- Use Nuxt file-based routing, layouts, plugins, and middleware.
|
|
23
|
+
- Prefer auto-imported composables; keep shared logic in `composables/`.
|
|
24
|
+
- Runtime config for public/private env (`useRuntimeConfig`) — never hardcode secrets.
|
|
25
|
+
- Tailwind (or project design system) for styling; keep utility usage consistent.
|
|
26
|
+
|
|
27
|
+
## SEO & content
|
|
28
|
+
|
|
29
|
+
- Use `useSeoMeta` / `useHead` (or Nuxt SEO module) on every public page.
|
|
30
|
+
- Semantic HTML and accessible navigation.
|
|
31
|
+
- Prefer SSG/ISR-style rendering for mostly static marketing pages.
|
|
32
|
+
- Optimize images (Nuxt Image) and fonts.
|
|
33
|
+
|
|
34
|
+
## Data fetching
|
|
35
|
+
|
|
36
|
+
- Prefer `useAsyncData` / `useFetch` with clear keys.
|
|
37
|
+
- Cache and refresh intentionally; avoid waterfall client fetches for hero content.
|
|
38
|
+
- If consuming the Laravel API for public content, keep private credentials on the server.
|
|
39
|
+
|
|
40
|
+
## Performance
|
|
41
|
+
|
|
42
|
+
- Lazy-load non-critical client islands.
|
|
43
|
+
- Keep marketing pages lean — minimize client-only plugins.
|
|
44
|
+
- Review payload size for route data.
|
|
45
|
+
|
|
46
|
+
## Do not
|
|
47
|
+
|
|
48
|
+
- Do not default to a client-only SPA mode for public brand pages.
|
|
49
|
+
- Do not mix React dashboard patterns into Nuxt marketing code.
|
|
50
|
+
- Do not skip SEO meta on indexable pages.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: React client-side SPA rules for dashboards and admin apps that talk to a Laravel API
|
|
3
|
+
globs: "**/*.{tsx,ts,jsx,js}"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# React SPA Dashboard
|
|
8
|
+
|
|
9
|
+
Use this rule for **client-side SPA dashboards** (Vite + React + TypeScript). The UI is a SPA; the backend is a separate **Laravel API**. Do not introduce Next.js App Router, SSR, or server components here.
|
|
10
|
+
|
|
11
|
+
Sources synthesized from [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) (`react.mdc`, `typescript-react`, `react-query`) and modern SPA practice.
|
|
12
|
+
|
|
13
|
+
## Architecture
|
|
14
|
+
|
|
15
|
+
- Treat this app as a **browser SPA** only — no SSR, no `app/` router, no RSC.
|
|
16
|
+
- Call the Laravel API over HTTPS with a typed client (`fetch` / axios / ky).
|
|
17
|
+
- Prefer feature folders over dumping everything in `components/`.
|
|
18
|
+
|
|
19
|
+
Suggested structure:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
src/
|
|
23
|
+
app/ # providers, router, layout shell
|
|
24
|
+
features/ # domain features (auth, users, billing…)
|
|
25
|
+
<feature>/
|
|
26
|
+
api/
|
|
27
|
+
components/
|
|
28
|
+
hooks/
|
|
29
|
+
types.ts
|
|
30
|
+
shared/ # ui primitives, utils, config
|
|
31
|
+
pages/ or routes/ # route-level screens
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Components & TypeScript
|
|
35
|
+
|
|
36
|
+
- Functional components only; keep them small and focused.
|
|
37
|
+
- Prefer explicit props interfaces; avoid `React.FC` unless needed.
|
|
38
|
+
- Extract reusable logic into custom hooks.
|
|
39
|
+
- Use composition over inheritance; co-locate feature UI with its hooks/api.
|
|
40
|
+
- Strict TypeScript; avoid `any`.
|
|
41
|
+
|
|
42
|
+
## Data fetching (dashboard)
|
|
43
|
+
|
|
44
|
+
- Use **TanStack Query (React Query)** for server state.
|
|
45
|
+
- Put `QueryClientProvider` at the root.
|
|
46
|
+
- Custom hooks for queries/mutations (`useUsersQuery`, `useUpdateUserMutation`).
|
|
47
|
+
- Stable query keys; invalidate after mutations.
|
|
48
|
+
- Handle loading, empty, and error states explicitly.
|
|
49
|
+
- Prefer optimistic updates only when rollback is safe.
|
|
50
|
+
|
|
51
|
+
## Auth & API boundary
|
|
52
|
+
|
|
53
|
+
- Store tokens/session per project convention (httpOnly cookie preferred when Laravel Sanctum SPA cookie auth is used; otherwise Bearer token with secure storage).
|
|
54
|
+
- Centralize API base URL via `import.meta.env`.
|
|
55
|
+
- Never hardcode secrets; never commit `.env`.
|
|
56
|
+
- Map Laravel validation errors (`422`) into form field errors.
|
|
57
|
+
|
|
58
|
+
## UI & UX for dashboards
|
|
59
|
+
|
|
60
|
+
- Tables, filters, and forms should be keyboard-accessible.
|
|
61
|
+
- Use controlled forms; libraries (React Hook Form + Zod) for complex forms.
|
|
62
|
+
- Show skeleton/loading states for slow endpoints.
|
|
63
|
+
- Route-level code splitting with `React.lazy` / dynamic import when screens are heavy.
|
|
64
|
+
|
|
65
|
+
## State
|
|
66
|
+
|
|
67
|
+
- Local UI state: `useState` / `useReducer`.
|
|
68
|
+
- Server state: TanStack Query — not Redux.
|
|
69
|
+
- Cross-cutting client UI state (theme, sidebar): lightweight store (Zustand) or context — only when props become painful.
|
|
70
|
+
|
|
71
|
+
## Do not
|
|
72
|
+
|
|
73
|
+
- Do not add Next.js, Nuxt, or Laravel Blade into this SPA.
|
|
74
|
+
- Do not put business rules that belong on the API into the client.
|
|
75
|
+
- Do not fetch without caching strategy on list/detail dashboard screens.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Stack selection rule for React SPA dashboards, Laravel APIs, and Next/Nuxt marketing sites
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Noah Stack Architecture
|
|
7
|
+
|
|
8
|
+
Use this when choosing or mixing frontends and backends in Noah Poli projects.
|
|
9
|
+
|
|
10
|
+
## Default split
|
|
11
|
+
|
|
12
|
+
| Surface | Stack | Rule to apply |
|
|
13
|
+
|---------|-------|---------------|
|
|
14
|
+
| Dashboard / admin (authenticated SPA) | **React** client-side SPA (Vite) | `react-spa-dashboard` |
|
|
15
|
+
| Backend API | **Laravel** API-only | `laravel-api` |
|
|
16
|
+
| Marketing / branding / content site | **Next.js** *or* **Nuxt** | `nextjs-marketing` / `nuxt-marketing` |
|
|
17
|
+
|
|
18
|
+
## Principles
|
|
19
|
+
|
|
20
|
+
1. Dashboards are **SPAs** talking to Laravel over JSON — not Inertia/Livewire unless requested.
|
|
21
|
+
2. Marketing sites prioritize **SEO and content**; pick Next or Nuxt per team preference, not both in one site.
|
|
22
|
+
3. Keep API contracts stable; version when breaking.
|
|
23
|
+
4. Do not force dashboard auth patterns onto public marketing pages.
|
|
24
|
+
5. Share design tokens/brand guidelines across marketing and dashboard when possible, but keep codebases/boundaries clear.
|
|
25
|
+
|
|
26
|
+
## Sources
|
|
27
|
+
|
|
28
|
+
Curated from community Cursor rules (notably [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules)) and adapted to this architecture.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sample rule for verifying noah-cursor installs
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Test Rule
|
|
7
|
+
|
|
8
|
+
This is a sample Cursor rule used to verify `noah-cursor` installation.
|
|
9
|
+
|
|
10
|
+
Replace this with your own rules when you are ready.
|
|
11
|
+
|
|
12
|
+
## Guidelines
|
|
13
|
+
|
|
14
|
+
- Prefer clear, direct answers
|
|
15
|
+
- Keep changes focused on the requested task
|
|
16
|
+
- Do not invent requirements that were not asked for
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commit-push
|
|
3
|
+
description: >-
|
|
4
|
+
Stages all changes, groups files by category, drafts a linepush-style
|
|
5
|
+
conventional commit message, commits, and pushes. Use when the user runs
|
|
6
|
+
/commit-push, asks to commit and push, or wants an AI-generated commit from
|
|
7
|
+
the current working tree.
|
|
8
|
+
disable-model-invocation: true
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /commit-push
|
|
12
|
+
|
|
13
|
+
Stage everything, categorize the changeset, write a **linepush-style** commit
|
|
14
|
+
message, commit, then push.
|
|
15
|
+
|
|
16
|
+
## Workflow
|
|
17
|
+
|
|
18
|
+
Copy this checklist and track progress:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Commit-Push Progress:
|
|
22
|
+
- [ ] 1. Inspect repo state
|
|
23
|
+
- [ ] 2. Stage all changes
|
|
24
|
+
- [ ] 3. Categorize / group files
|
|
25
|
+
- [ ] 4. Draft commit message
|
|
26
|
+
- [ ] 5. Commit
|
|
27
|
+
- [ ] 6. Push
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 1. Inspect repo state
|
|
31
|
+
|
|
32
|
+
Run in parallel:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
git status --short
|
|
36
|
+
git diff
|
|
37
|
+
git diff --cached
|
|
38
|
+
git log -5 --oneline
|
|
39
|
+
git branch -vv
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Abort early if:
|
|
43
|
+
|
|
44
|
+
- Not a git repository
|
|
45
|
+
- No changes to commit (clean working tree and empty index)
|
|
46
|
+
- Secrets are about to be committed (`.env`, credentials, private keys, tokens) — warn and exclude them unless the user explicitly insists
|
|
47
|
+
|
|
48
|
+
### 2. Stage all changes
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git add -A
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Re-check:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
git status --short
|
|
58
|
+
git diff --cached --stat
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Do **not** use `--no-verify`, amend, force-push, or rewrite history unless the user explicitly asks.
|
|
62
|
+
|
|
63
|
+
### 3. Categorize / group files
|
|
64
|
+
|
|
65
|
+
Group every staged path into one or more of these buckets (a file may only belong to one primary bucket):
|
|
66
|
+
|
|
67
|
+
| Bucket | Match hints |
|
|
68
|
+
|--------|-------------|
|
|
69
|
+
| `feat` | New user-facing capability, new modules/commands |
|
|
70
|
+
| `fix` | Bug fixes, regressions, error handling corrections |
|
|
71
|
+
| `refactor` | Restructures with no intended behavior change |
|
|
72
|
+
| `docs` | README, markdown, comments-only docs |
|
|
73
|
+
| `test` | `*.test.*`, `*.spec.*`, `__tests__`, `src/tests` |
|
|
74
|
+
| `style` | Formatting, lint autofix, whitespace-only |
|
|
75
|
+
| `chore` | Tooling, configs, ignore files, housekeeping |
|
|
76
|
+
| `ci` | `.github/`, workflows, CI scripts |
|
|
77
|
+
| `build` | `package.json`, lockfiles, tsconfig, bundler config |
|
|
78
|
+
| `perf` | Performance-only changes |
|
|
79
|
+
| `ui` | TUI/CLI presentation, banners, styling assets |
|
|
80
|
+
| `assets` | Images, static media |
|
|
81
|
+
|
|
82
|
+
Also infer a **scope** from paths when clear, e.g.:
|
|
83
|
+
|
|
84
|
+
- `src/commands/` → `cli`
|
|
85
|
+
- `src/ui/` → `ui`
|
|
86
|
+
- `src/services/` → `services`
|
|
87
|
+
- `skills/` → `skills`
|
|
88
|
+
- `rules/` → `rules`
|
|
89
|
+
- root config / package → `repo`
|
|
90
|
+
|
|
91
|
+
Present a short grouping summary to the user before committing, for example:
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
Grouped changes
|
|
95
|
+
feat (cli): src/commands/browse.ts, src/ui/*
|
|
96
|
+
docs: README.md
|
|
97
|
+
assets: assets/noah-cursor-banner.png
|
|
98
|
+
build: package.json, package-lock.json
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 4. Draft commit message (linepush style)
|
|
102
|
+
|
|
103
|
+
Use **Conventional Commits**, inspired by [linepush](https://www.npmjs.com/package/linepush):
|
|
104
|
+
|
|
105
|
+
```text
|
|
106
|
+
type(scope): imperative summary
|
|
107
|
+
|
|
108
|
+
- grouped change bullet
|
|
109
|
+
- grouped change bullet
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Rules:
|
|
113
|
+
|
|
114
|
+
1. Pick the **primary** `type` from the dominant bucket (or the highest-impact user-facing change).
|
|
115
|
+
2. `scope` is optional but preferred when one area dominates; omit rather than invent noise.
|
|
116
|
+
3. Summary: imperative, ≤72 chars, no trailing period, focus on **why/impact** not file lists.
|
|
117
|
+
4. Body: bullets grouped by category when multiple buckets exist.
|
|
118
|
+
5. Match the repository’s recent `git log` tone when possible.
|
|
119
|
+
6. Never commit secrets.
|
|
120
|
+
|
|
121
|
+
**Examples:**
|
|
122
|
+
|
|
123
|
+
Single-focus:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
feat(browse): add interactive registry browse TUI
|
|
127
|
+
|
|
128
|
+
- add category and asset multi-select menus
|
|
129
|
+
- wire installFromSelections into browse flow
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Multi-group:
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
feat(cli): ship browse TUI and README branding
|
|
136
|
+
|
|
137
|
+
- feat: interactive browse command and UI modules
|
|
138
|
+
- docs: document browse usage in README
|
|
139
|
+
- assets: add NOAH Cursor README banner
|
|
140
|
+
- build: add figlet, boxen, and gradient-string
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 5. Commit
|
|
144
|
+
|
|
145
|
+
Show the drafted message, then commit with a HEREDOC:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
git commit -m "$(cat <<'EOF'
|
|
149
|
+
type(scope): summary
|
|
150
|
+
|
|
151
|
+
- bullet
|
|
152
|
+
- bullet
|
|
153
|
+
EOF
|
|
154
|
+
)"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
If a pre-commit hook fails, fix the issue and create a **new** commit (do not amend unless the user explicitly asks and amend rules allow it).
|
|
158
|
+
|
|
159
|
+
Verify:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
git status
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 6. Push
|
|
166
|
+
|
|
167
|
+
Push the current branch to its upstream:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
git push -u origin HEAD
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
If upstream already tracks the branch:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
git push
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Do **not** `push --force` unless the user explicitly requests it.
|
|
180
|
+
|
|
181
|
+
On success, report:
|
|
182
|
+
|
|
183
|
+
- commit hash / subject
|
|
184
|
+
- grouping summary
|
|
185
|
+
- remote branch URL if available (`gh` / remote)
|
|
186
|
+
|
|
187
|
+
## Safety
|
|
188
|
+
|
|
189
|
+
- Never update git config
|
|
190
|
+
- Never skip hooks unless explicitly requested
|
|
191
|
+
- Never force-push `main` / `master`
|
|
192
|
+
- Warn before committing `.env`, key files, or credential JSON
|
|
193
|
+
- If push needs auth, stop and tell the user what to run locally
|