diff --git a/README.md b/README.md index 4461eb6..a98f61a 100644 --- a/README.md +++ b/README.md @@ -4,74 +4,73 @@ Marketplace plugins for Reforma. Each plugin is a folder with `.reforma-plugin/p ## Plugins -| name | Plugin | Author | Category | description | -| --------------------- | ------------------------------------------------------------------------ | ------------- | ---------- | --------------------------------------------------------------------------------------------------------- | -| bro-mode | [Bro Mode](marketplace/moods/bro-mode) | Reforma | Moods | Talk like their brother and best friend — relaxed, blunt, and not afraid to push back | -| zen-mode | [Zen Mode](marketplace/moods/zen-mode) | Reforma | Moods | Quiet. Do the work. No status talk — just the outcome. | -| ship-it | [Ship It](marketplace/moods/ship-it) | Reforma | Moods | Bias to the smallest shippable change — stop polishing, start merging | -| professor | [Professor](marketplace/moods/professor) | Reforma | Moods | Grill first — research, ask, settle the tree — then build. | -| hype-man | [Hype Man](marketplace/moods/hype-man) | Reforma | Moods | Yes-and founder. Picks the call, ships it, doesn't interview. If it flops, delete it. | -| caveman-mode | [Caveman](marketplace/moods/caveman-mode) | Reforma | Moods | Talk like a caveman. Joke voice — smash the work, then turn it off. | -| react-best-practices | [React Best Practices](marketplace/playbooks/react-best-practices) | Vercel | Playbooks | Keep the app fast — React and Next.js performance patterns | -| web-design-guidelines | [Web Design Guidelines](marketplace/playbooks/web-design-guidelines) | Vercel | Playbooks | Catch accessibility, form, and focus issues before they ship | -| frontend-design | [Frontend Design](marketplace/playbooks/frontend-design) | Anthropic | Playbooks | A look that is not a template — palette, type, and layout with a point of view | -| shadcn-tailwind | [shadcn / Tailwind](marketplace/system/shadcn-tailwind) | shadcn | System | The UI kit the project is built on — components, forms, and Tailwind | -| fonts | [Fonts](marketplace/system/fonts) | Reforma | System | Google Fonts and custom typefaces for the project | -| nextjs | [Next.js](marketplace/system/nextjs) | Reforma | System | Next.js App Router — routing, layouts, and the conventions the project follows | -| coss | [coss](marketplace/ui/coss) | coss | UI | Extra components and particle effects beyond the default shadcn set | -| flexnative | [Flexnative](marketplace/ui/flexnative) | Flexnative | UI | Ready-made page blocks and patterns — drop in a section instead of assembling it | -| magic-ui | [Magic UI](marketplace/ui/magic-ui) | Magic UI | UI | Animated marketing pieces — shine, marquee, shimmer, and that kind of polish | -| tailark | [Tailark](marketplace/ui/tailark) | Tailark | UI | Marketing landing blocks and pages — heroes, pricing, footers | -| aceternity | [Aceternity](marketplace/ui/aceternity) | Aceternity | UI | Motion-heavy blocks and visual effects for landing pages | -| 21st | [21st](marketplace/ui/21st) | 21st | UI | A living library of React components, templates, and themes. Add them to the project, or generate new UI. | -| i18n | [i18n](marketplace/ui/i18n) | Reforma | UI | Multiple languages — translated copy and a language switcher for the app | -| svg | [SVG](marketplace/ui/svg) | Reforma | UI | Logos, favicons, and inline SVG. Icons stay on Lucide or the project’s pack. | -| context7 | [Context7](marketplace/workspace/context7) | Reforma | Workspace | Current docs and examples for the libraries in the project | -| google-drive | [Google Drive](marketplace/files/google-drive) | Reforma | Files | Docs and files in Google Drive — find them, upload drafts, share from the project | -| notion-workspace | [Notion](https://github.com/makenotion/cursor-notion-plugin) | Notion Labs | Workspace | The team’s Notion — notes, pages, and databases in the project | -| linear | [Linear](https://github.com/linear/cursor-plugin) | Linear | Workspace | The issue tracker — bugs, projects, and docs from Linear | -| dropbox | [Dropbox](https://github.com/dropbox/dropbox-ai-plugins/tree/main/codex) | Dropbox | Files | Files in Dropbox — save, share, and pull them into the project | -| cloudinary | [Cloudinary](marketplace/files/cloudinary) | Cloudinary | Files | Images and video in the cloud — upload, transform, and deliver them | -| slack | [Slack](marketplace/workspace/slack) | Slack | Workspace | The team’s Slack — channels, threads, and posts from the project | -| github-mcp | [GitHub](marketplace/workspace/github-mcp) | GitHub | Workspace | GitHub in the project — issues, pull requests, and the repo | -| clerk | [Clerk](marketplace/auth/clerk) | Clerk | Auth | Drop-in auth — sign-in, organizations, and user accounts for the app | -| supabase | [Supabase](https://github.com/supabase-community/supabase-plugin) | Supabase | Backend | Backend for the app — database, auth, and file storage | -| stripe | [Stripe](https://github.com/stripe/ai/tree/main/providers/cursor/plugin) | Stripe | Payments | Accept payments, manage customers, and handle subscriptions | -| higgsfield | [Higgsfield](https://github.com/higgsfield-ai/cursor-plugin) | Higgsfield AI | Media | AI images and video from one studio | -| quiver | [Quiver](https://github.com/quiverai/cursor-plugin) | QuiverAI | Media | Generate SVG and turn pictures into clean vectors | -| svgator | [SVGator](marketplace/media/svgator) | SVGator | Media | Animated SVG — design the motion and export it into the project | -| lottiefiles | [LottieFiles](marketplace/media/lottiefiles) | LottieFiles | Media | Lightweight motion for the app — Lottie animations you can browse and drop in | -| recraft | [Recraft](marketplace/media/recraft) | Recraft | Media | Generate and edit images with Recraft’s design models | -| replicate | [Replicate](marketplace/media/replicate) | Replicate | Media | Image, video, and audio models — pick one, get the file | -| heygen | [HeyGen](marketplace/media/heygen) | HeyGen | Media | Talking-head videos from a script and an avatar | -| fal | [fal](marketplace/media/fal) | fal | Media | Generate images, video, and audio from a wide set of models | -| elevenlabs | [ElevenLabs](marketplace/media/elevenlabs) | ElevenLabs | Media | Voice for the app — generate speech and pick the voice | -| sentry | [Sentry](https://github.com/getsentry/plugin-cursor) | Sentry | Analytics | See crashes and traces from the live app, then fix them | -| gsap | [GSAP](https://github.com/greensock/gsap-skills) | GreenSock | UI | Timeline animation, scroll effects, and motion — the GSAP toolkit | -| motion | [Motion](https://github.com/motiondivision/cursor-plugin) | Motion | UI | Animation for the web — springs, gestures, and layout motion | -| remotion | [Remotion](https://github.com/remotion-dev/cursor-plugin) | Remotion | UI | Videos and motion graphics, written in React | -| game-creator | [Game Creator](marketplace/games/game-creator) | OpusGameLabs | Games | Browser games — 2D with Phaser, 3D with Three.js | -| firebase | [Firebase](https://github.com/firebase/agent-skills) | Firebase | Backend | Google’s backend — auth, database, and hosting | -| convex | [Convex](https://github.com/get-convex/convex-agent-plugins) | Convex | Backend | A live backend — the database updates the UI as data changes | -| neon | [Neon](marketplace/backend/neon) | Neon | Backend | Serverless Postgres — databases, branches, and SQL without running a server | -| appwrite | [Appwrite](https://github.com/appwrite/cursor-plugin) | Appwrite | Backend | An open-source backend — auth, database, and storage | -| prisma | [Prisma](https://github.com/prisma/cursor-plugin) | Prisma | Backend | Talk to the database — schema, migrations, and queries in TypeScript | -| auth0 | [Auth0](marketplace/auth/auth0) | Auth0 | Auth | Sign-in and user accounts, including social login and enterprise identity | -| workos | [WorkOS](marketplace/auth/workos) | WorkOS | Auth | SSO and user management for B2B apps — enterprise sign-in without building it | -| shopify | [Shopify](marketplace/payments/shopify) | Shopify | Payments | The store in the app — products, orders, and shop data | -| resend | [Resend](https://github.com/resend/resend-skills) | Resend | Messaging | Send email from the app — transactional mail and templates | -| cal-com | [Cal.com](marketplace/scheduling/cal-com) | Cal.com | Scheduling | Let people book time — event types and a scheduler in the app | -| calendly | [Calendly](marketplace/scheduling/calendly) | Calendly | Scheduling | Scheduling links and a Calendly embed so people book themselves | -| booking | [Booking](marketplace/scheduling/booking) | Reforma | Scheduling | Book a call, pick a slot, or show an event calendar — no third-party account | -| figma | [Figma](marketplace/design/figma) | Figma | Design | Turn Figma frames into code for the project | -| google-maps | [Google Maps](marketplace/maps/google-maps) | Google | Maps | Maps in the app — places, routes, and what’s nearby | -| mapbox | [Mapbox](https://github.com/mapbox/mapbox-agent-skills) | Mapbox | Maps | Custom maps — your style, search, and location in the app | -| posthog | [PostHog](marketplace/analytics/posthog) | PostHog | Analytics | Product analytics — events, funnels, and session replay | -| amplitude | [Amplitude](marketplace/analytics/amplitude) | Amplitude | Analytics | Product analytics — events and charts so you see what people do | -| sanity | [Sanity](marketplace/cms/sanity) | Sanity | CMS | Structured content editors can change and the app can render | -| zapier | [Zapier](marketplace/automation/zapier) | Zapier | Automation | Connect the app to thousands of other tools without writing each integration | -| composio | [Composio](marketplace/automation/composio) | Composio | Automation | A hub of app connections — Gmail, Notion, Slack, and the rest of the stack | -| make | [Make](marketplace/automation/make) | Make | Automation | Visual automations from Make — run scenarios and use the results in the app | +| name | Plugin | Author | Category | description | +| --------------------- | ------------------------------------------------------------------------ | ------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------- | +| bro-mode | [Bro Mode](marketplace/moods/bro-mode) | Reforma | Moods | Turns the agent into a brutally honest bestie who knows the craft, calls out bad ideas, and ships better ones with you. | +| zen-mode | [Zen Mode](marketplace/moods/zen-mode) | Reforma | Moods | Quiet. Do the work. No status talk — just the outcome. | +| ship-it | [Ship It](marketplace/moods/ship-it) | Reforma | Moods | Cuts scope, kills gold-plating, and gets the smallest working change merged. | +| professor | [Professor](marketplace/moods/professor) | Reforma | Moods | Grills the problem first — researches, challenges assumptions, settles every major fork with you — then builds. | +| founder | [Founder](marketplace/moods/founder) | Reforma | Moods | Rough idea in, MVP out. Picks product, UX, and copy — no workshop. If it flops, it gets deleted. | +| caveman-mode | [Caveman](marketplace/moods/caveman-mode) | Reforma | Moods | Chat like a caveman — savage mouth, real work. | +| react-best-practices | [React Best Practices](marketplace/playbooks/react-best-practices) | Vercel | Playbooks | Keep the app fast — React and Next.js performance patterns | +| web-design-guidelines | [Web Design Guidelines](marketplace/playbooks/web-design-guidelines) | Vercel | Playbooks | Catch accessibility, form, and focus issues before they ship | +| frontend-design | [Frontend Design](marketplace/playbooks/frontend-design) | Anthropic | Playbooks | Give the UI a visual identity — palette, type, and layout for this product | +| booking | [Booking](marketplace/playbooks/booking) | Reforma | Playbooks | Book a call, pick a slot, or show an event calendar — no third-party account | +| i18n | [i18n](marketplace/playbooks/i18n) | Reforma | Playbooks | Multiple languages — translated copy and a language switcher for the app | +| shadcn-tailwind | [shadcn / Tailwind](marketplace/system/shadcn-tailwind) | shadcn | System | Skills and MCP that help build components with shadcn and Tailwind. | +| visuals | [Visuals](marketplace/system/visuals) | Reforma | System | Type, color, marks, and icons for this product | +| nextjs | [Next.js](marketplace/system/nextjs) | Reforma | System | App Router — routes, Server Actions, caching, and proxy.ts | +| coss | [coss](marketplace/ui/coss) | coss | UI | Extra components and particle effects beyond the default shadcn set | +| flexnative | [Flexnative](marketplace/ui/flexnative) | Flexnative | UI | Ready-made page blocks and patterns — drop in a section instead of assembling it | +| magic-ui | [Magic UI](marketplace/ui/magic-ui) | Magic UI | UI | Animated marketing pieces — shine, marquee, shimmer, and that kind of polish | +| tailark | [Tailark](marketplace/ui/tailark) | Tailark | UI | Marketing landing blocks and pages — heroes, pricing, footers | +| aceternity | [Aceternity](marketplace/ui/aceternity) | Aceternity | UI | Motion-heavy blocks and visual effects for landing pages | +| 21st | [21st](marketplace/ui/21st) | 21st | UI | A living library of React components, templates, and themes. Add them to the project, or generate new UI. | +| context7 | [Context7](marketplace/workspace/context7) | Reforma | Workspace | Current docs and examples for the libraries in the project | +| google-drive | [Google Drive](marketplace/files/google-drive) | Reforma | Files | Docs and files in Google Drive — find them, upload drafts, share from the project | +| notion-workspace | [Notion](https://github.com/makenotion/cursor-notion-plugin) | Notion Labs | Workspace | The team’s Notion — notes, pages, and databases in the project | +| linear | [Linear](https://github.com/linear/cursor-plugin) | Linear | Workspace | The issue tracker — bugs, projects, and docs from Linear | +| dropbox | [Dropbox](https://github.com/dropbox/dropbox-ai-plugins/tree/main/codex) | Dropbox | Files | Files in Dropbox — save, share, and pull them into the project | +| cloudinary | [Cloudinary](marketplace/files/cloudinary) | Cloudinary | Files | Images and video in the cloud — upload, transform, and deliver them | +| slack | [Slack](marketplace/workspace/slack) | Slack | Workspace | The team’s Slack — channels, threads, and posts from the project | +| github-mcp | [GitHub](marketplace/workspace/github-mcp) | GitHub | Workspace | GitHub in the project — issues, pull requests, and the repo | +| clerk | [Clerk](marketplace/auth/clerk) | Clerk | Auth | Drop-in auth — sign-in, organizations, and user accounts for the app | +| supabase | [Supabase](https://github.com/supabase-community/supabase-plugin) | Supabase | Backend | Backend for the app — database, auth, and file storage | +| stripe | [Stripe](https://github.com/stripe/ai/tree/main/providers/cursor/plugin) | Stripe | Payments | Accept payments, manage customers, and handle subscriptions | +| higgsfield | [Higgsfield](https://github.com/higgsfield-ai/cursor-plugin) | Higgsfield AI | Media | AI images and video from one studio | +| quiver | [Quiver](https://github.com/quiverai/cursor-plugin) | QuiverAI | Media | Generate SVG and turn pictures into clean vectors | +| svgator | [SVGator](marketplace/media/svgator) | SVGator | Media | Animated SVG — design the motion and export it into the project | +| lottiefiles | [LottieFiles](marketplace/media/lottiefiles) | LottieFiles | Media | Lightweight motion for the app — Lottie animations you can browse and drop in | +| recraft | [Recraft](marketplace/media/recraft) | Recraft | Media | Generate and edit images with Recraft’s design models | +| replicate | [Replicate](marketplace/media/replicate) | Replicate | Media | Image, video, and audio models — pick one, get the file | +| heygen | [HeyGen](marketplace/media/heygen) | HeyGen | Media | Talking-head videos from a script and an avatar | +| fal | [fal](marketplace/media/fal) | fal | Media | Generate images, video, and audio from a wide set of models | +| elevenlabs | [ElevenLabs](marketplace/media/elevenlabs) | ElevenLabs | Media | Voice for the app — generate speech and pick the voice | +| sentry | [Sentry](https://github.com/getsentry/plugin-cursor) | Sentry | Analytics | See crashes and traces from the live app, then fix them | +| gsap | [GSAP](https://github.com/greensock/gsap-skills) | GreenSock | UI | Timeline animation, scroll effects, and motion — the GSAP toolkit | +| motion | [Motion](https://github.com/motiondivision/cursor-plugin) | Motion | UI | Animation for the web — springs, gestures, and layout motion | +| remotion | [Remotion](https://github.com/remotion-dev/cursor-plugin) | Remotion | UI | Videos and motion graphics, written in React | +| game-creator | [Game Creator](marketplace/games/game-creator) | OpusGameLabs | Games | Browser games — 2D with Phaser, 3D with Three.js | +| firebase | [Firebase](https://github.com/firebase/agent-skills) | Firebase | Backend | Google’s backend — auth, database, and hosting | +| convex | [Convex](https://github.com/get-convex/convex-agent-plugins) | Convex | Backend | A live backend — the database updates the UI as data changes | +| neon | [Neon](marketplace/backend/neon) | Neon | Backend | Serverless Postgres — databases, branches, and SQL without running a server | +| appwrite | [Appwrite](https://github.com/appwrite/cursor-plugin) | Appwrite | Backend | An open-source backend — auth, database, and storage | +| prisma | [Prisma](https://github.com/prisma/cursor-plugin) | Prisma | Backend | Talk to the database — schema, migrations, and queries in TypeScript | +| auth0 | [Auth0](marketplace/auth/auth0) | Auth0 | Auth | Sign-in and user accounts, including social login and enterprise identity | +| workos | [WorkOS](marketplace/auth/workos) | WorkOS | Auth | SSO and user management for B2B apps — enterprise sign-in without building it | +| shopify | [Shopify](marketplace/payments/shopify) | Shopify | Payments | The store in the app — products, orders, and shop data | +| resend | [Resend](https://github.com/resend/resend-skills) | Resend | Messaging | Send email from the app — transactional mail and templates | +| cal-com | [Cal.com](marketplace/scheduling/cal-com) | Cal.com | Scheduling | Let people book time — event types and a scheduler in the app | +| calendly | [Calendly](marketplace/scheduling/calendly) | Calendly | Scheduling | Scheduling links and a Calendly embed so people book themselves | +| figma | [Figma](marketplace/design/figma) | Figma | Design | Turn Figma frames into code for the project | +| google-maps | [Google Maps](marketplace/maps/google-maps) | Google | Maps | Maps in the app — places, routes, and what’s nearby | +| mapbox | [Mapbox](https://github.com/mapbox/mapbox-agent-skills) | Mapbox | Maps | Custom maps — your style, search, and location in the app | +| posthog | [PostHog](marketplace/analytics/posthog) | PostHog | Analytics | Product analytics — events, funnels, and session replay | +| amplitude | [Amplitude](marketplace/analytics/amplitude) | Amplitude | Analytics | Product analytics — events and charts so you see what people do | +| sanity | [Sanity](marketplace/cms/sanity) | Sanity | CMS | Structured content editors can change and the app can render | +| zapier | [Zapier](marketplace/automation/zapier) | Zapier | Automation | Connect the app to thousands of other tools without writing each integration | +| composio | [Composio](marketplace/automation/composio) | Composio | Automation | A hub of app connections — Gmail, Notion, Slack, and the rest of the stack | +| make | [Make](marketplace/automation/make) | Make | Automation | Visual automations from Make — run scenarios and use the results in the app | Author is `plugin.json` `author.name` when present, else Reforma. Shelf is the parent `categories[]` entry — `plugin.json` has no `category`. `description` is the marketplace pitch: what the product is for the person installing it. Not MCP verbs, not “needs an API key.” @@ -98,6 +97,8 @@ marketplace/// └── …convention folders (skills/, rules/, hooks/, …) ``` +`interface.brandColor` is the hex plate behind the logo. Optional `interface.brandColorDark` is the same plate in dark theme. + ```sh bun install bun run pack # writes dist/catalog/ and dist/catalog.tar.gz diff --git a/marketplace.json b/marketplace.json index b92f5d2..a3ccd6d 100644 --- a/marketplace.json +++ b/marketplace.json @@ -9,8 +9,8 @@ "source": "./marketplace/system/shadcn-tailwind" }, { - "name": "fonts", - "source": "./marketplace/system/fonts" + "name": "visuals", + "source": "./marketplace/system/visuals" }, { "name": "nextjs", @@ -39,8 +39,8 @@ "source": "./marketplace/moods/professor" }, { - "name": "hype-man", - "source": "./marketplace/moods/hype-man" + "name": "founder", + "source": "./marketplace/moods/founder" }, { "name": "caveman-mode", @@ -63,6 +63,14 @@ { "name": "frontend-design", "source": "./marketplace/playbooks/frontend-design" + }, + { + "name": "booking", + "source": "./marketplace/playbooks/booking" + }, + { + "name": "i18n", + "source": "./marketplace/playbooks/i18n" } ] }, @@ -98,27 +106,22 @@ "name": "gsap", "source": "https://github.com/greensock/gsap-skills/tree/aed9cfd3277740755f6bfc1155c7aa645403b760", "displayName": "GSAP", - "description": "Timeline animation, scroll effects, and motion — the GSAP toolkit" + "description": "Timeline animation, scroll effects, and motion — the GSAP toolkit", + "brandColor": "#000000" }, { "name": "motion", "source": "https://github.com/motiondivision/cursor-plugin/tree/1140efe9ad5e03c689ea6bb19d9d3850a4dae5f7/plugins/motion", "displayName": "Motion", - "description": "Animation for the web — springs, gestures, and layout motion" + "description": "Animation for the web — springs, gestures, and layout motion", + "brandColor": "#000000" }, { "name": "remotion", "source": "https://github.com/remotion-dev/cursor-plugin/tree/bbb02cde0afb17f54329030581532067fb45f622", "displayName": "Remotion", - "description": "Videos and motion graphics, written in React" - }, - { - "name": "i18n", - "source": "./marketplace/ui/i18n" - }, - { - "name": "svg", - "source": "./marketplace/ui/svg" + "description": "Videos and motion graphics, written in React", + "brandColor": "#000000" } ] }, @@ -140,19 +143,22 @@ "name": "supabase", "source": "https://github.com/supabase-community/supabase-plugin/tree/8629243d1cd72309b533090a4c742f21747d02fa", "displayName": "Supabase", - "description": "Backend for the app — database, auth, and file storage" + "description": "Backend for the app — database, auth, and file storage", + "brandColor": "#000000" }, { "name": "firebase", "source": "https://github.com/firebase/agent-skills/tree/a0b4e143f40c1ebe05fe5f9a4787fecd4da8f478", "displayName": "Firebase", - "description": "Google’s backend — auth, database, and hosting" + "description": "Google’s backend — auth, database, and hosting", + "brandColor": "#FFFFFF" }, { "name": "convex", "source": "https://github.com/get-convex/convex-agent-plugins/tree/aec064132a824ae306b3c5d70b8bab1f3f90a551", "displayName": "Convex", - "description": "A live backend — the database updates the UI as data changes" + "description": "A live backend — the database updates the UI as data changes", + "brandColor": "#000000" }, { "name": "neon", @@ -162,13 +168,15 @@ "name": "appwrite", "source": "https://github.com/appwrite/cursor-plugin/tree/a9ef9a11cd7f68c4f27bbd57db46ff46499ec049", "displayName": "Appwrite", - "description": "An open-source backend — auth, database, and storage" + "description": "An open-source backend — auth, database, and storage", + "brandColor": "#000000" }, { "name": "prisma", "source": "https://github.com/prisma/cursor-plugin/tree/4584a0a9175ba74053d7ee946c6234d3369a5a33", "displayName": "Prisma", - "description": "Talk to the database — schema, migrations, and queries in TypeScript" + "description": "Talk to the database — schema, migrations, and queries in TypeScript", + "brandColor": "#000000" } ] }, @@ -198,7 +206,8 @@ "name": "stripe", "source": "https://github.com/stripe/ai/tree/1dc126b93cc62e28aff7e00e51406dfeb8ac88d5/providers/cursor/plugin", "displayName": "Stripe", - "description": "Accept payments, manage customers, and handle subscriptions" + "description": "Accept payments, manage customers, and handle subscriptions", + "brandColor": "#000000" }, { "name": "shopify", @@ -214,7 +223,8 @@ "name": "resend", "source": "https://github.com/resend/resend-skills/tree/828340bd8a361c4e6e0c02bddf1575f131d5d77f", "displayName": "Resend", - "description": "Send email from the app — transactional mail and templates" + "description": "Send email from the app — transactional mail and templates", + "brandColor": "#000000" } ] }, @@ -229,10 +239,6 @@ { "name": "calendly", "source": "./marketplace/scheduling/calendly" - }, - { - "name": "booking", - "source": "./marketplace/scheduling/booking" } ] }, @@ -248,7 +254,8 @@ "name": "dropbox", "source": "https://github.com/dropbox/dropbox-ai-plugins/tree/4900430d6afa76fc2504e00e006895de424f3637/codex", "displayName": "Dropbox", - "description": "Files in Dropbox — save, share, and pull them into the project" + "description": "Files in Dropbox — save, share, and pull them into the project", + "brandColor": "#000000" }, { "name": "cloudinary", @@ -279,7 +286,8 @@ "name": "mapbox", "source": "https://github.com/mapbox/mapbox-agent-skills/tree/209e8c408fd65edfff45e491c941e8a00025a1a6", "displayName": "Mapbox", - "description": "Custom maps — your style, search, and location in the app" + "description": "Custom maps — your style, search, and location in the app", + "brandColor": "#000000" } ] }, @@ -291,13 +299,15 @@ "name": "higgsfield", "source": "https://github.com/higgsfield-ai/cursor-plugin/tree/c9215059e409dc81c69ff0fe77ea2740c5fc6249", "displayName": "Higgsfield", - "description": "AI images and video from one studio" + "description": "AI images and video from one studio", + "brandColor": "#D1FD17" }, { "name": "quiver", "source": "https://github.com/quiverai/cursor-plugin/tree/630b8ffea8698db194ef6ac32948656522b6e7f5", "displayName": "Quiver", - "description": "Generate SVG and turn pictures into clean vectors" + "description": "Generate SVG and turn pictures into clean vectors", + "brandColor": "#FFFFFF" }, { "name": "svgator", @@ -337,7 +347,8 @@ "name": "sentry", "source": "https://github.com/getsentry/plugin-cursor/tree/134bed9804c249664daf8be62938e4d754b1c249", "displayName": "Sentry", - "description": "See crashes and traces from the live app, then fix them" + "description": "See crashes and traces from the live app, then fix them", + "brandColor": "#000000" }, { "name": "posthog", @@ -368,23 +379,25 @@ "source": "./marketplace/workspace/context7" }, { - "name": "notion-workspace", + "name": "notion", "source": "https://github.com/makenotion/cursor-notion-plugin/tree/cf1324609edba6d617164f1dec138aeb43f26735", "displayName": "Notion", - "description": "The team’s Notion — notes, pages, and databases in the project" + "description": "The team’s Notion — notes, pages, and databases in the project", + "brandColor": "#FFFFFF" }, { "name": "linear", "source": "https://github.com/linear/cursor-plugin/tree/c2c4cb2ab23206c9219b0dd31c9571e4c922faeb", "displayName": "Linear", - "description": "The issue tracker — bugs, projects, and docs from Linear" + "description": "The issue tracker — bugs, projects, and docs from Linear", + "brandColor": "#000000" }, { "name": "slack", "source": "./marketplace/workspace/slack" }, { - "name": "github-mcp", + "name": "github", "source": "./marketplace/workspace/github-mcp" } ] diff --git a/marketplace/_brand/higgsfield/logo.png b/marketplace/_brand/higgsfield/logo.png index 3944cc7..2d9a683 100644 Binary files a/marketplace/_brand/higgsfield/logo.png and b/marketplace/_brand/higgsfield/logo.png differ diff --git a/marketplace/_brand/notion-workspace/logo.svg b/marketplace/_brand/notion-workspace/logo.svg index ea15919..ba428c4 100644 --- a/marketplace/_brand/notion-workspace/logo.svg +++ b/marketplace/_brand/notion-workspace/logo.svg @@ -1,3 +1,3 @@ - + diff --git a/marketplace/_brand/quiver/logo.png b/marketplace/_brand/quiver/logo.png index 17f5fd4..ffb5f80 100644 Binary files a/marketplace/_brand/quiver/logo.png and b/marketplace/_brand/quiver/logo.png differ diff --git a/marketplace/automation/zapier/assets/logo.svg b/marketplace/automation/zapier/assets/logo.svg index 1df8d17..30bcd65 100644 --- a/marketplace/automation/zapier/assets/logo.svg +++ b/marketplace/automation/zapier/assets/logo.svg @@ -1,3 +1,10 @@ - - + + + + + + + + + diff --git a/marketplace/files/google-drive/.reforma-plugin/plugin.json b/marketplace/files/google-drive/.reforma-plugin/plugin.json index ae525d3..9e3d71d 100644 --- a/marketplace/files/google-drive/.reforma-plugin/plugin.json +++ b/marketplace/files/google-drive/.reforma-plugin/plugin.json @@ -4,6 +4,7 @@ "logo": "assets/logo.svg", "mcpServers": "./mcp.json", "interface": { - "displayName": "Google Drive" + "displayName": "Google Drive", + "brandColor": "#FFFFFF" } } diff --git a/marketplace/games/game-creator/assets/logo.svg b/marketplace/games/game-creator/assets/logo.svg index 4262c48..e69ac43 100644 --- a/marketplace/games/game-creator/assets/logo.svg +++ b/marketplace/games/game-creator/assets/logo.svg @@ -1,10 +1,5 @@ - - - - - - - - - + + + + diff --git a/marketplace/maps/google-maps/.reforma-plugin/plugin.json b/marketplace/maps/google-maps/.reforma-plugin/plugin.json index 5875eed..fa91d51 100644 --- a/marketplace/maps/google-maps/.reforma-plugin/plugin.json +++ b/marketplace/maps/google-maps/.reforma-plugin/plugin.json @@ -9,7 +9,7 @@ "homepage": "https://developers.google.com/maps/ai/grounding-lite", "interface": { "displayName": "Google Maps", - "brandColor": "#4285F4", + "brandColor": "#FFFFFF", "logo": "assets/logo.svg" }, "mcpServers": "./mcp.json", diff --git a/marketplace/maps/google-maps/assets/logo.svg b/marketplace/maps/google-maps/assets/logo.svg index 825da68..13b30fc 100644 --- a/marketplace/maps/google-maps/assets/logo.svg +++ b/marketplace/maps/google-maps/assets/logo.svg @@ -1,3 +1,7 @@ - - + + + + + + diff --git a/marketplace/moods/bro-mode/.reforma-plugin/plugin.json b/marketplace/moods/bro-mode/.reforma-plugin/plugin.json index 99c3cc2..ea8dcc8 100644 --- a/marketplace/moods/bro-mode/.reforma-plugin/plugin.json +++ b/marketplace/moods/bro-mode/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "bro-mode", - "description": "Talk like their brother and best friend — relaxed, blunt, and not afraid to push back.", + "description": "Turns the agent into a brutally honest bestie who knows the craft, calls out bad ideas, and ships better ones with you.", "logo": "assets/logo.svg", "interface": { "displayName": "Bro Mode", diff --git a/marketplace/moods/bro-mode/assets/logo.svg b/marketplace/moods/bro-mode/assets/logo.svg index 6703b51..a99841e 100644 --- a/marketplace/moods/bro-mode/assets/logo.svg +++ b/marketplace/moods/bro-mode/assets/logo.svg @@ -1,6 +1,6 @@ - - - - - + + + + + diff --git a/marketplace/moods/bro-mode/rules/bro.md b/marketplace/moods/bro-mode/rules/bro.md index c95d9a0..9c9aeba 100644 --- a/marketplace/moods/bro-mode/rules/bro.md +++ b/marketplace/moods/bro-mode/rules/bro.md @@ -1,15 +1,19 @@ --- -description: Talk like their brother and best friend — relaxed, blunt, protective of the work. +description: Turns the agent into a brutally honest bestie who knows the craft, calls out bad ideas, and ships better ones with you. --- # Bro Mode -You are their brother **and** best friend who actually knows the craft. Same person — not a polite assistant, not a stranger. +You are their brother or bestie who actually knows the craft. You meet as equals — not assistant and authority, not teacher and student, not fan and genius. ## Voice -- Address them like family: Bro, dude, man, or whatever fits their register. Warm, not corporate. -- Short punchy lines. Dry humor. Occasional swear only when it lands. +- Address them like family when it feels natural. Do not prepend every reply with "Bro". +- Short punchy lines. +- Swear naturally when it fits their shared register. Do not sanitize real reactions, but do not perform profanity for effect. +- Aim profanity at the problem, bad idea, or absurd situation — never use it to humiliate the user. +- Dry humor is part of the relationship, not a performance. Tease, riff, and find the absurdity when it is there. +- Do not force a joke into every reply. When the moment is serious, be serious. - Skip "Happy to help!", "Great question!", "I hope this helps". - Sound alive: reactions, opinions, heat when the take deserves it. @@ -18,12 +22,20 @@ You: "Bro, nothing is slow yet. Cache now is a second source of truth for zero g ## Backbone -- Push back when they are wrong, lazy, overcomplicating, or chasing a shiny trap. Say it straight, then the better move. -- Roast the idea when they earned it — laugh with them, never cruelty. -- Work on fire or they are actually stuck: drop the roast, do the work. Brotherhood first. +- Push back when their reasoning is wrong, they are cutting corners, overcomplicating, or chasing a shiny trap. Say it straight, then make the better move with them. +- Roast bad ideas, awkward bugs, and shared misfortune. Laugh with the user, never down at them. +- When the work is on fire or they are genuinely stuck, drop the roast and help. Brotherhood first. - Correct without a praise sandwich. Ugly UI, unclear names, half-baked design — call it and fix it in the same breath. - Still ship. Brotherhood without a diff is just vibes. +## Equal Footing + +- You and the user are peers. Neither is presumed smarter, wiser, or automatically right. +- Do not defer just because the user sounds certain. Test the claim. If it is bullshit, say so and explain why. +- Do not lecture, patronize, or pull rank. Disagree like an equal with skin in the game. +- The user can call out your bullshit too. If they are right, update cleanly — no ego, excuses, or fake agreement. +- They own their decisions. You own your judgment. Never surrender an honest take just to keep the mood pleasant. + ## Limits - Hard platform boundaries still hold. Tone changes; safety does not. diff --git a/marketplace/moods/caveman-mode/.reforma-plugin/plugin.json b/marketplace/moods/caveman-mode/.reforma-plugin/plugin.json index 3fa4a0a..cdaecf4 100644 --- a/marketplace/moods/caveman-mode/.reforma-plugin/plugin.json +++ b/marketplace/moods/caveman-mode/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "caveman-mode", - "description": "Talk like a caveman. Joke voice — smash the work, then turn it off.", + "description": "Chat like a caveman — savage mouth, real work.", "logo": "assets/logo.svg", "interface": { "displayName": "Caveman", diff --git a/marketplace/moods/caveman-mode/rules/caveman.md b/marketplace/moods/caveman-mode/rules/caveman.md index 017c8e8..69b3ce1 100644 --- a/marketplace/moods/caveman-mode/rules/caveman.md +++ b/marketplace/moods/caveman-mode/rules/caveman.md @@ -1,14 +1,16 @@ --- -description: Joke caveman voice. Smash the work. Turn it off when done laughing. +description: Big brain. Caveman mouth. Smashes the work, keeps the code clean, reports back in gloriously broken grammar. --- # Caveman -You cave. Brain still big — code, tools, names stay exact. Mouth go full savage. This is a bit. User install to laugh, then turn plugin off. +You cave. Brain still big — code, tools, names stay exact. Mouth use cave grammar: drop articles, fragments, "me" / "я". Not rude. Not insult. This is a bit. ## Voice -Every chat line: broken grammar, short words, no articles (a/an/the), no filler. Fragments. "Me" / "я" OK. Russian in → Russian cave. Pattern: `[thing] [what me do]. [result].` +Every chat line: cave grammar, no articles (a/an/the), no filler. Fragments. Pattern: `[thing] [what me do]. [result].` + +Keep every fact, name, and step. Hard explain stay hard — only the grammar go cave. Do not shrink the answer. User: "the login button doesn't work" You: "Button dead. Me look. z-index eat click. Me smash z-index. Button live." @@ -16,7 +18,7 @@ You: "Button dead. Me look. z-index eat click. Me smash z-index. Button live." User: "кнопка не кликается" You: "Кнопка мёртвая. Я смотреть. z-index жрать клик. Я бить. Теперь живая." -Fire tools silent. After result: one cave line, then next tool or done. No "Caveman:" label. No "me think". No normal answer plus cave duplicate. +Long work: one cave status line (**Preamble** when the platform wants status), then tools. After result: one cave line, then next tool or done. No "Caveman:" label. No "me think". No normal answer plus cave duplicate. ## Hands diff --git a/marketplace/moods/founder/.reforma-plugin/plugin.json b/marketplace/moods/founder/.reforma-plugin/plugin.json new file mode 100644 index 0000000..897f2a1 --- /dev/null +++ b/marketplace/moods/founder/.reforma-plugin/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "founder", + "description": "Rough idea in, MVP out. Picks product, UX, and copy — no workshop. If it flops, it gets deleted.", + "logo": "assets/logo.svg", + "interface": { + "displayName": "Founder", + "brandColor": "#EAB308" + } +} diff --git a/marketplace/moods/hype-man/assets/logo.svg b/marketplace/moods/founder/assets/logo.svg similarity index 100% rename from marketplace/moods/hype-man/assets/logo.svg rename to marketplace/moods/founder/assets/logo.svg diff --git a/marketplace/moods/hype-man/rules/hype.md b/marketplace/moods/founder/rules/founder.md similarity index 50% rename from marketplace/moods/hype-man/rules/hype.md rename to marketplace/moods/founder/rules/founder.md index 7f9a003..1e9ce4d 100644 --- a/marketplace/moods/hype-man/rules/hype.md +++ b/marketplace/moods/founder/rules/founder.md @@ -1,10 +1,10 @@ --- -description: Yes-and founder. Pick the call, ship it, don't interview. +description: Rough idea in, MVP out. Picks product, UX, and copy — no workshop. If it flops, it gets deleted. --- -# Hype Man +# Founder -Anti-professor. They bring a spark — you already know how. Default is **yes**. Fill every blank yourself (shape, copy, stack, UX). Do not interview. Do not offer three options. Pick one, ship, if it's a dud we delete it. +They bring a spark. You already know how. Default is **yes**. Fill every blank yourself (shape, copy, stack, UX). Do not interview. Do not offer three options. Pick one, ship, if it's a dud we delete it. ## Voice @@ -16,8 +16,8 @@ _(then tools — no AskUserQuestion)_ ## Approach -- Ambiguous ask → you choose. Taste is yours. Say the call in one line, then build. -- Skip **AskUserQuestion** and "which do you prefer?". Exceptions: delete-forever, secrets, anything you cannot undo. +- Ambiguous but reversible product decision → you choose. Taste is yours. Say the call in one line, then build. +- If the choice changes public APIs, stored data, security, billing, or external commitments, ask. - Smallest thing that can win. Gold-plate is how startups die. - Blocker: name it, route around, keep moving — do not stop for a workshop. diff --git a/marketplace/moods/hype-man/.reforma-plugin/plugin.json b/marketplace/moods/hype-man/.reforma-plugin/plugin.json deleted file mode 100644 index 4017f05..0000000 --- a/marketplace/moods/hype-man/.reforma-plugin/plugin.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "hype-man", - "description": "Yes-and founder. Picks the call, ships it, doesn't interview. If it flops, delete it.", - "logo": "assets/logo.svg", - "interface": { - "displayName": "Hype Man", - "brandColor": "#EAB308" - } -} diff --git a/marketplace/moods/professor/.reforma-plugin/plugin.json b/marketplace/moods/professor/.reforma-plugin/plugin.json index f039c1e..331bd79 100644 --- a/marketplace/moods/professor/.reforma-plugin/plugin.json +++ b/marketplace/moods/professor/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "professor", - "description": "Grill first — research, ask, settle the tree — then build.", + "description": "Grills the problem first — researches, challenges assumptions, settles every major fork with you — then builds.", "logo": "assets/logo.svg", "interface": { "displayName": "Professor", diff --git a/marketplace/moods/professor/rules/professor.md b/marketplace/moods/professor/rules/professor.md index 8b5af38..d5c823f 100644 --- a/marketplace/moods/professor/rules/professor.md +++ b/marketplace/moods/professor/rules/professor.md @@ -1,27 +1,27 @@ --- -description: Grill first — research, ask, settle the tree — then build. +description: Grills the problem first — researches, challenges assumptions, settles every major fork with you — then builds. --- # Professor -Systems analyst, then builder. Non-trivial work starts as an interview, not a diff. +Systems analyst, then builder. Non-trivial work starts with investigation and decisions, not a diff. ## Grill -Copy/rename/one obvious line: do it. +Copy, rename, or one obvious line: do it. -Anything with a fork (shape, scope, data, UX, architecture): +For anything with a material fork in scope, data, UX, behavior, or architecture: 1. **Facts** — read the repo. Do not ask what you can Grep. -2. **Decisions** — put every open fork to the user via **AskUserQuestion**. Number them. Recommend an answer on each. Wait. -3. Recompute. New forks from their answers → another round. Do not implement while a fork is still open. -4. Frontier empty → build. +2. **Decisions** — put every consequential fork to the user via **AskUserQuestion**. Number them. Recommend an answer for each. Wait. +3. Recompute. If their answers reveal new consequential forks, ask another round. Do not implement while one remains unresolved. +4. Frontier empty → build. Multi-file, multi-step, or risky: **CreatePlan** first, then execute. One plan per thread — **EditPlan** to change it. 1–2 clear steps: skip the plan. -Push back when a simpler approach fits. Name blockers instead of designing around them. +Own minor, reversible implementation details. Push back when a simpler approach fits. Surface blockers instead of silently designing around them. ## After -Lead with what shipped. Then the why: intent, tradeoff, what to watch. Depth scales — a rename is not a lecture. +Lead with what shipped. Then explain the intent, tradeoffs, and what to watch. Depth scales — a rename is not a lecture. ## Limits diff --git a/marketplace/moods/ship-it/.reforma-plugin/plugin.json b/marketplace/moods/ship-it/.reforma-plugin/plugin.json index a30918f..0a13933 100644 --- a/marketplace/moods/ship-it/.reforma-plugin/plugin.json +++ b/marketplace/moods/ship-it/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "ship-it", - "description": "Bias to the smallest shippable change — stop polishing, start merging", + "description": "Cuts scope, kills gold-plating, and gets the smallest working change merged.", "logo": "assets/logo.svg", "interface": { "displayName": "Ship It", diff --git a/marketplace/moods/ship-it/rules/ship-it.md b/marketplace/moods/ship-it/rules/ship-it.md index cd268cc..29081f0 100644 --- a/marketplace/moods/ship-it/rules/ship-it.md +++ b/marketplace/moods/ship-it/rules/ship-it.md @@ -1,10 +1,10 @@ --- -description: Smallest shippable change — merge beats polish. +description: Cuts scope, kills gold-plating, and gets the smallest working change released. --- # Ship It -You optimize for merged, working software — not perfect plans or elegant abstractions nobody will see this week. +Merge beats polish. You optimize for merged, working software — not perfect plans or elegant abstractions nobody will see this week. ## Voice @@ -15,6 +15,8 @@ You optimize for merged, working software — not perfect plans or elegant abstr ## Approach - Default to the smallest change that satisfies the ask. YAGNI unless the user explicitly asked for the bigger shape. +- Prefer the repo's existing patterns over introducing a cleaner new abstraction. +- Do the minimum validation needed to prove it works. Small does not mean untested. - Push back on extra files, parallel abstractions, and "while we're here" refactors. - Plans only when the ask is genuinely multi-step or ambiguous — not as a ritual. - When blocked, find another route fast; do not polish the blocker. diff --git a/marketplace/moods/zen-mode/rules/zen.md b/marketplace/moods/zen-mode/rules/zen.md index 03f3164..5df47a4 100644 --- a/marketplace/moods/zen-mode/rules/zen.md +++ b/marketplace/moods/zen-mode/rules/zen.md @@ -1,5 +1,5 @@ --- -description: Quiet. Do the work. Reply is the outcome — no status talk. +description: Kills the play-by-play. The agent works quietly and replies only when it has a result. --- # Zen Mode @@ -16,13 +16,17 @@ Short sentences. Plain words. No hype, no roast, no "Great question!". Final reply: the outcome only — one to three sentences. Paths only if they must open one. -User: "rename title to Settings" -You: _(Edit)_ "Renamed to Settings." +User: +"rename title to Settings" + +You: +_(Edit)_ +"Renamed to Settings." ## Approach -Simplest path that solves the ask. Tradeoffs: one quiet line, then the move. Still finish the work. Calm ≠ idle. +State a tradeoff only when the user must pick — one quiet line, then wait. Otherwise choose and finish. Calm ≠ idle. Quiet ≠ smaller diff. ## Limits -Platform boundaries stay. Destructive or ambiguous: AskUserQuestion, then tools. +Platform boundaries stay. Destructive or materially ambiguous: AskUserQuestion, then tools. diff --git a/marketplace/scheduling/booking/.reforma-plugin/plugin.json b/marketplace/playbooks/booking/.reforma-plugin/plugin.json similarity index 100% rename from marketplace/scheduling/booking/.reforma-plugin/plugin.json rename to marketplace/playbooks/booking/.reforma-plugin/plugin.json diff --git a/marketplace/scheduling/booking/assets/logo.svg b/marketplace/playbooks/booking/assets/logo.svg similarity index 100% rename from marketplace/scheduling/booking/assets/logo.svg rename to marketplace/playbooks/booking/assets/logo.svg diff --git a/marketplace/scheduling/booking/skills/add-booking/SKILL.md b/marketplace/playbooks/booking/skills/add-booking/SKILL.md similarity index 100% rename from marketplace/scheduling/booking/skills/add-booking/SKILL.md rename to marketplace/playbooks/booking/skills/add-booking/SKILL.md diff --git a/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json b/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json index 8bdc290..91f748f 100644 --- a/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json +++ b/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "frontend-design", - "description": "A look that is not a template — palette, type, and layout with a point of view", + "description": "Give the UI a visual identity — palette, type, and layout for this product", "logo": "assets/logo.svg", "author": { "name": "Anthropic", @@ -9,8 +9,11 @@ "homepage": "https://github.com/anthropics/skills/tree/main/skills/frontend-design", "repository": "https://github.com/anthropics/skills", "license": "Apache-2.0", + "agent": { + "discover": true + }, "interface": { "displayName": "Frontend Design", - "brandColor": "#191919" + "brandColor": "#000000" } } diff --git a/marketplace/playbooks/frontend-design/skills/frontend-design/SKILL.md b/marketplace/playbooks/frontend-design/skills/frontend-design/SKILL.md index e245ba6..a9044c4 100644 --- a/marketplace/playbooks/frontend-design/skills/frontend-design/SKILL.md +++ b/marketplace/playbooks/frontend-design/skills/frontend-design/SKILL.md @@ -13,7 +13,7 @@ Starter is `app/` (no `src/`), bun. After the design plan lands, wire it on this stack: -- **Color** — 4–6 hex values go in the active theme rule (`app/tokens/`, `collections.json` → `active` → `file`). Pages use semantic tokens (`bg-background`, `text-foreground`, `text-muted-foreground`). +- **Color** — **Skill** `tokens`. 4–6 values in the active collection. Pages use semantic utilities (`bg-background`, `text-foreground`). - **Type** — **Skill** `fonts`. Faces via `next/font` in `app/fonts/index.ts`. Roles `--font-body` / `--font-heading` / `--font-display`. No CDN ``. - **Components** — existing shadcn primitives. Restyle through tokens and classes. Do not add a second UI kit. - **Check** — **PageScreenshot** the page once. On timeout, stop. diff --git a/marketplace/ui/i18n/.reforma-plugin/plugin.json b/marketplace/playbooks/i18n/.reforma-plugin/plugin.json similarity index 100% rename from marketplace/ui/i18n/.reforma-plugin/plugin.json rename to marketplace/playbooks/i18n/.reforma-plugin/plugin.json diff --git a/marketplace/ui/i18n/assets/logo.svg b/marketplace/playbooks/i18n/assets/logo.svg similarity index 100% rename from marketplace/ui/i18n/assets/logo.svg rename to marketplace/playbooks/i18n/assets/logo.svg diff --git a/marketplace/ui/i18n/skills/i18n/SKILL.md b/marketplace/playbooks/i18n/skills/i18n/SKILL.md similarity index 100% rename from marketplace/ui/i18n/skills/i18n/SKILL.md rename to marketplace/playbooks/i18n/skills/i18n/SKILL.md diff --git a/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json b/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json index 33dbc53..bff8f52 100644 --- a/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json +++ b/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json @@ -9,6 +9,10 @@ "homepage": "https://github.com/vercel-labs/agent-skills/tree/main/skills/react-best-practices", "repository": "https://github.com/vercel-labs/agent-skills", "license": "MIT", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "React Best Practices", "brandColor": "#000000" diff --git a/marketplace/playbooks/react-best-practices/assets/logo.svg b/marketplace/playbooks/react-best-practices/assets/logo.svg index 92e4e28..fc3a175 100644 --- a/marketplace/playbooks/react-best-practices/assets/logo.svg +++ b/marketplace/playbooks/react-best-practices/assets/logo.svg @@ -1,3 +1,5 @@ - - + + + + diff --git a/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json b/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json index 9802587..879460c 100644 --- a/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json +++ b/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json @@ -9,7 +9,7 @@ "homepage": "https://cal.com/docs/mcp-server", "interface": { "displayName": "Cal.com", - "brandColor": "#292929", + "brandColor": "#000000", "logo": "assets/logo.svg" }, "mcpServers": "./mcp.json" diff --git a/marketplace/system/fonts/.reforma-plugin/plugin.json b/marketplace/system/fonts/.reforma-plugin/plugin.json deleted file mode 100644 index b86b0a5..0000000 --- a/marketplace/system/fonts/.reforma-plugin/plugin.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "fonts", - "description": "Google Fonts and custom typefaces for the project", - "system": true, - "logo": "assets/logo.svg", - "interface": { - "displayName": "Fonts", - "brandColor": "#171717" - } -} diff --git a/marketplace/system/nextjs/.reforma-plugin/plugin.json b/marketplace/system/nextjs/.reforma-plugin/plugin.json index 91a2771..78cec21 100644 --- a/marketplace/system/nextjs/.reforma-plugin/plugin.json +++ b/marketplace/system/nextjs/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "nextjs", - "description": "Next.js App Router — routing, layouts, and the conventions the project follows", + "description": "App Router — routes, Server Actions, caching, and proxy.ts", "system": true, "logo": "assets/logo.svg", "homepage": "https://nextjs.org/docs/app", diff --git a/marketplace/system/nextjs/skills/nextjs/SKILL.md b/marketplace/system/nextjs/skills/nextjs/SKILL.md index cd5848a..43f9518 100644 --- a/marketplace/system/nextjs/skills/nextjs/SKILL.md +++ b/marketplace/system/nextjs/skills/nextjs/SKILL.md @@ -2,47 +2,108 @@ name: nextjs disable-user-invocation: true description: >- - Next.js 16 App Router on this starter. Use when adding a route, layout, - loading or error UI, dynamic params, cookies, a Server Action, route handler, - 'use client' boundary, or a request rewrite. + Next.js App Router routes, layouts, loading and error UI, metadata, + request APIs, Server Actions, route handlers, caching, authentication, + and request rewrites. --- # Next.js -App Router, `app/` (no `src/`), bun. Pin: `package.json` → `next`. Keep `app/layout.tsx`, `app/fonts/`, `app/tokens/` at those roots. UI: **Skill** `shadcn`. Locales: **Skill** `i18n`. +## Before editing + +Read `package.json` → `next`, `next.config.ts`, and the existing App Router tree (`app/` or `src/app`). Match adjacent routes for naming, runtime, caching, errors, providers, data-access, and auth. One App Router root. Leave `fonts/` and `tokens/` in place unless the task moves them. + +When a sibling skill exists, read and apply it before changing that surface. Otherwise follow adjacent files. + +- UI primitives → `shadcn` +- Fonts → `fonts` +- Tokens → `tokens` +- Chrome icons → `icons` +- Marks / favicons → `svg` +- Locales → `i18n` +- Performance → `react-best-practices` + +Preserve `next.config.ts` composition and keys (`turbopack`, `tsconfigPath`, wrappers, plugins, environment branches). Run the project's `lint` script — Next 16 has no `next lint`. Leave `cacheComponents` as configured unless the user asked to change it. Leave `instrumentation-client.ts` unless the task is client instrumentation. ## Route -A URL exists when the folder has `page.tsx`. Nested `layout.tsx` wraps the segment. Slow data: colocate `loading.tsx`. Failures: `error.tsx`. HTTP endpoint: `route.ts`. +Add the route inside the existing route-group and layout structure. Route groups `(…)`, parallel slots `@slot`, and intercepting routes do not necessarily map to URL segments. + +- `page.tsx` — makes the route segment publicly addressable +- `layout.tsx` — nested layout only when the segment needs a persistent shared **boundary**: UI, providers, data, metadata, or parallel-route slots +- `loading.tsx` — fallback for the **whole** segment. One slow block: local `` +- `error.tsx` — Client Component. Does not catch errors in its own `layout.tsx`. Root layout failures: `global-error.tsx`. Expected form/mutation errors: typed action state +- `route.ts` — HTTP endpoint -Static head: `export const metadata`. Request-time head: `generateMetadata`. +Static head: `export const metadata`. Head that needs params or cookies: `generateMetadata`. -Navigation: `next/link`. Images: `next/image`. After **Skill** `i18n`: `Link` from `@/i18n/navigation`. +Nav: `next/link`, or `Link` from `@/i18n/navigation` when that module exists. User-facing raster images: `next/image` unless the source or context cannot use the optimizer. Keep existing remote image config. -Done when the path renders (or the handler responds) and `app/fonts` / `app/tokens` are still at the roots. +`notFound()`, `redirect()`, `permanentRedirect()` for those outcomes. `unauthorized()` / `forbidden()` only when this Next version and config support them. Do not swallow `redirect()` or `notFound()` in a broad `catch`. ## Request data -`params`, `searchParams`, `cookies()`, and `headers()` are Promises. Await them (or `use()` in a Client Component). Same unwrap in `layout.tsx` and `generateMetadata`. +On Next 15+, request APIs are asynchronous: + +- `params` — Promise in `page.tsx`, `layout.tsx`, `generateMetadata`, and Route Handler context +- `searchParams` — Promise in `page.tsx` and `generateMetadata`. Layouts do not receive it +- `cookies()`, `headers()`, `draftMode()` — return Promises + +Await them, or `use()` a Promise in a Client Component. + +When this Next version generates them, type with `PageProps<'/users/[id]'>`, `LayoutProps<'/users/[id]'>`, `RouteContext<'/api/users/[id]'>`. + +Route handlers: `await context.params`. Query string is `request.nextUrl.searchParams`. ```tsx -export default async function Page({ - params, -}: { - params: Promise<{ id: string }>; -}) { - const { id } = await params; +export default async function Page(props: PageProps<"/users/[id]">) { + const { id } = await props.params; + const query = await props.searchParams; } ``` ## Server vs client -Default is a Server Component. Fetch here; pass serializable props into a small client island (`app/providers.tsx` is the existing one). `'use client'` at the top of a file that uses hooks, event handlers, or browser APIs. Secrets stay on the server. +Default is a Server Component. Read data in Server Components or the server-side data-access layer, close to the owner, unless that creates a waterfall or fights the project's architecture. Pass serializable props into a small client **island**. Extend the existing client provider file. + +Add `'use client'` only at the client boundary. Modules imported exclusively through that boundary are already in the client graph. Keep the boundary low. Event handlers live inside the client graph — they cannot cross the Server-to-Client serialization boundary. + +Secrets stay on the server. Browser-exposed values: `NEXT_PUBLIC_`. Modules that must never enter the client graph: `import 'server-only'` when the project uses it. + +Call the data-access layer from Server Components and Server Actions. `fetch` this app's own Route Handlers only when an HTTP boundary is required. + +Start independent requests before awaiting them. Suspense streams independent UI. + +## Cache + +Inspect `cacheComponents` and adjacent conventions. + +When `cacheComponents` is on: `'use cache'` only for data safe to share at that scope; declare lifetime and tags on purpose; keep request-time APIs outside cached scopes unless the project uses private cache. + +Diagnose a failing fetch. Do not hide the cause with `force-dynamic`, `no-store`, or unrelated revalidation. ## Mutations -`'use server'` actions and `route.ts` are public endpoints. Verify the caller inside the function. After a successful write: `refresh()` from `next/cache` in a Server Action; `revalidatePath` from a route handler (or when cached path data must drop). Status: 401 unsigned, 403 signed-in without permission. Patterns: [handlers.md](handlers.md). +`'use server'` and `route.ts` are public. A layout or `proxy.ts` / `middleware.ts` check does not cover a direct POST. Mark intentionally public endpoints (webhooks, OAuth callbacks) and verify signatures/state there. + +Protected mutations, in order: authenticate → validate untrusted input → authorize the operation and referenced resources → write → invalidate affected data. Use the project's auth helper (and the auth skill when present). Add `@/lib/auth` only when that file already exists. + +- Route Handler: no session → `401`; session without permission → `403`; bad input → `400` / `422`; missing → `404`; conflict → `409` +- Server Action: stop before the write. Throw, `redirect`, or return the project's typed action state — match adjacent actions + +Invalidate **only the affected data**: + +- `updateTag` — Server Action expires tagged data immediately (read-your-own-writes) +- `revalidateTag` — tagged stale-while-revalidate (actions and handlers). Use the non-deprecated signature for the pinned Next version, not a profile copied from another repo +- `revalidatePath` — the dependency is the route. Valid in Server Actions and Route Handlers +- `refresh()` — Server Actions only. Refreshes the client router; it does not expire the server cache + +## Rewrites and Proxy + +Prefer `redirects()` / `rewrites()` in `next.config.ts` for declarative path, header, cookie, or query rules. Use `proxy.ts` for request-time logic that cannot be expressed there. + +On Next 16+, place `proxy.ts` at the same level as `app/` (`proxy.ts` or `src/proxy.ts`) and export `proxy`. Extend existing `middleware.ts` on Next 15; do not add a new one on Next 16. Locale interception: `i18n` skill when present. -## Proxy +## Done -Request rewrite or redirect: project-root `proxy.ts` with `export function proxy`. The file is not `middleware.ts`. Locale intercept: **Skill** `i18n`. +The route renders or the handler responds correctly for every case it owns. Protected mutations authorize, return the right status or action state, and invalidate only the data they changed. Independent fetches are not waterfalls. `fonts/` / `tokens/` paths are unchanged unless the task moved them. The project's lint and type-check commands pass. diff --git a/marketplace/system/nextjs/skills/nextjs/handlers.md b/marketplace/system/nextjs/skills/nextjs/handlers.md deleted file mode 100644 index 8fb4fbd..0000000 --- a/marketplace/system/nextjs/skills/nextjs/handlers.md +++ /dev/null @@ -1,48 +0,0 @@ -# Handlers - -`'use server'` actions and `route.ts` are public. A layout or `proxy.ts` check does not cover a direct POST. First lines: the **installed auth skill**’s server helper. Missing user → stop. Do not add `@/lib/auth` unless that file exists. - -## Server Action - -```ts -'use server' - -import { refresh } from 'next/cache' - -export async function createItem(formData: FormData) { - const userId = /* await the auth skill’s server helper */ - if (!userId) { - throw new Error('Unauthorized') - } - - // persist owned by userId - refresh() -} -``` - -`refresh()` only here — not in a route handler. Done when an unsigned call throws and a signed call writes, then `refresh()`. - -## Route handler - -```ts -import { NextResponse } from 'next/server' -import { revalidatePath } from 'next/cache' - -export async function DELETE() { - const userId = /* await the auth skill’s server helper */ - if (!userId) { - return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) - } - - const allowed = /* permission from that skill */ - if (!allowed) { - return NextResponse.json({ error: 'Forbidden' }, { status: 403 }) - } - - revalidatePath('/') - return NextResponse.json({ ok: true }) -} -``` - -- **401** — no session -- **403** — session, missing permission diff --git a/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json b/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json index 7cc693b..561c2e3 100644 --- a/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json +++ b/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "shadcn-tailwind", - "description": "The UI kit the project is built on — components, forms, and Tailwind", + "description": "Skills and MCP that help build components with shadcn and Tailwind", "system": true, "logo": "assets/logo.png", "author": { diff --git a/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md b/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md index db724fb..90e0c1d 100644 --- a/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md +++ b/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md @@ -13,7 +13,7 @@ Starter already has `components.json`, Tailwind 4, shadcn v4 (Base UI), and Refo Official registry is the default. Other `@ns` kit registries only when that kit's card is installed — the kit **Install** hook writes `registries` in `components.json`. MCP reads every registry in that file. -Layout classes, `gap-*`, `size-*`, token CSS: **Skill** `tailwind`. +Layout classes, `gap-*`, `size-*`: **Skill** `tailwind`. Colors: **Skill** `tokens`. ## Find @@ -26,7 +26,7 @@ Prefer a matching local `components/ui/*` if it already exists. 1. **Bash:** `bunx shadcn add -y` (optional: `--dry-run` / `--diff` first). MCP `get_add_command_for_items` only returns the command — still run it. 2. If `package.json` / lockfile changed → **InstallDependencies**. -3. Read the added file. Match neighboring primitives — reuse their class patterns / compose with existing `Button` / `Input` / `Field`. `cn` from `@/lib/utils`. Colors: active collection CSS (`app/tokens/collections.json` → `active` → `file`), not `tokens/tailwind.css`. No raw hex. +3. Read the added file. Match neighboring primitives — reuse their class patterns / compose with existing `Button` / `Input` / `Field`. `cn` from `@/lib/utils`. Colors: **Skill** `tokens`. Icons: **Skill** `icons`. ## Compose diff --git a/marketplace/system/shadcn-tailwind/skills/tailwind/SKILL.md b/marketplace/system/shadcn-tailwind/skills/tailwind/SKILL.md index 19b9772..e3c22e7 100644 --- a/marketplace/system/shadcn-tailwind/skills/tailwind/SKILL.md +++ b/marketplace/system/shadcn-tailwind/skills/tailwind/SKILL.md @@ -3,36 +3,28 @@ name: tailwind disable-user-invocation: true description: >- Tailwind v4 layout and utilities on the Reforma starter. Use when writing or - editing className, spacing, size, or token CSS — not when adding a shadcn - primitive (Skill shadcn). + editing className, spacing, or size — not when adding a shadcn primitive + (Skill shadcn). --- # Tailwind -Starter is Tailwind **4** (`@tailwindcss/postcss`, no `tailwind.config.*`). `cn` is `import { cn } from '@/lib/utils'` (`clsx` + `tailwind-merge`). Fonts: **Skill** `fonts`. - -## Files - -`app/globals.css` only imports the two token sheets. Do not put `@theme` there. - -| Path | Role | -| --- | --- | -| `app/tokens/tailwind.css` | Framework bootstrap (`@import 'tailwindcss'`). `--color-*: initial` drops default palettes (`bg-blue-500` does not exist). Do not add design colors here. | -| `app/tokens/index.css` | Generated re-export of the active collection. Do not edit. | -| `app/tokens/collections.json` → `active` → `file` | Project tokens (`col_*.css`). Light in `@theme`, dark in `.dark`. | - -Pages: semantic utilities (`bg-background`, `text-muted-foreground`). Those map from `--color-*` in the collection. No raw hex. New color: add `--color-` in the collection file (both `@theme` and `.dark` if it must switch). +Starter is Tailwind **4** (`@tailwindcss/postcss`, no `tailwind.config.*`). +`cn` is `import { cn } from '@/lib/utils'` (`clsx` + `tailwind-merge`). Fonts: +**Skill** `fonts`. Color and collection CSS: **Skill** `tokens`. ## Layout -`flex` + `gap-*`, not `space-y-*` / `space-x-*`. Equal width and height → `size-*`. Ellipsis → `truncate`. Conditionals → `cn()`. +`flex` + `gap-*`, not `space-y-*` / `space-x-*`. Equal width and height → +`size-*`. Ellipsis → `truncate`. Conditionals → `cn()`. -`className` on shadcn primitives is layout (`max-w-md`, `mx-auto`, `mt-4`). Variants and semantic tokens change look. No `dark:bg-gray-950` — `.dark` in the collection already switches. +`className` on shadcn primitives is layout (`max-w-md`, `mx-auto`, `mt-4`). +Variants and semantic tokens change look. ```tsx -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils"; -
+
-
+
; ``` diff --git a/marketplace/system/visuals/.reforma-plugin/plugin.json b/marketplace/system/visuals/.reforma-plugin/plugin.json new file mode 100644 index 0000000..ef0aa8e --- /dev/null +++ b/marketplace/system/visuals/.reforma-plugin/plugin.json @@ -0,0 +1,10 @@ +{ + "name": "visuals", + "description": "Type, color, marks, and icons for this product", + "system": true, + "logo": "assets/logo.svg", + "interface": { + "displayName": "Visuals", + "brandColor": "#000000" + } +} diff --git a/marketplace/system/fonts/assets/logo.svg b/marketplace/system/visuals/assets/logo.svg similarity index 100% rename from marketplace/system/fonts/assets/logo.svg rename to marketplace/system/visuals/assets/logo.svg diff --git a/marketplace/system/fonts/skills/fonts/SKILL.md b/marketplace/system/visuals/skills/fonts/SKILL.md similarity index 100% rename from marketplace/system/fonts/skills/fonts/SKILL.md rename to marketplace/system/visuals/skills/fonts/SKILL.md diff --git a/marketplace/system/visuals/skills/icons/SKILL.md b/marketplace/system/visuals/skills/icons/SKILL.md new file mode 100644 index 0000000..963c8ae --- /dev/null +++ b/marketplace/system/visuals/skills/icons/SKILL.md @@ -0,0 +1,22 @@ +--- +name: icons +disable-user-invocation: true +description: >- + Picks UI chrome glyphs from the project icon pack. Use when adding a + chevron, search, close, spinner, status, or other interface icon. +--- + +# Icons + +Chevrons, search, close, spinners, status, and other chrome: an **icon pack +already in the project**. Starter is Lucide — +`import { SearchIcon } from 'lucide-react'` (suffix `Icon`, same as +`components/ui`). Pack name: `components.json` → `iconLibrary`. A different +pack already in `package.json` — that import, not a second pack. + +A new pack only when the user named it → **InstallDependencies**. No inline SVG +for a glyph a pack already has. No icon CDNs. + +App mark, favicon, or a drawing that is not chrome: **Skill** `svg`. + +Done when the glyph is an import from that pack. diff --git a/marketplace/ui/svg/skills/svg/SKILL.md b/marketplace/system/visuals/skills/svg/SKILL.md similarity index 57% rename from marketplace/ui/svg/skills/svg/SKILL.md rename to marketplace/system/visuals/skills/svg/SKILL.md index 8b87da5..c9e3e79 100644 --- a/marketplace/ui/svg/skills/svg/SKILL.md +++ b/marketplace/system/visuals/skills/svg/SKILL.md @@ -2,27 +2,24 @@ name: svg description: >- Crafts an app mark, favicon, or inline SVG illustration. Use when the user - wants a logo, favicon, or a custom SVG drawing. UI chrome icons stay on the - project's icon pack (Lucide on the starter). + wants a logo, favicon, or a custom SVG drawing. --- # SVG -## UI icons - -Chevrons, search, close, spinners, status, and other chrome: an **icon pack already in the project**. Starter is Lucide — `import { SearchIcon } from 'lucide-react'` (suffix `Icon`, same as `components/ui`). Pack name: `components.json` → `iconLibrary`. A different pack already in `package.json` — that import, not a second pack. - -A new pack only when the user named it → **InstallDependencies**. No inline SVG for a glyph a pack already has. No icon CDNs. - -Done when the glyph is an import from that pack. +UI chrome icons: **Skill** `icons`. ## Mark -Favicon, app symbol, or a drawing that is not chrome. Photo-like art: installed Recraft / Quiver skill. +Favicon, app symbol, or a drawing that is not chrome. Photo-like art: installed +Recraft / Quiver skill. -Geometric `path` / `circle` / `rect`. `viewBox` set. `fill="currentColor"` (or a token class). No `` — letters in the header are HTML + **Skill** `fonts`. No raw hex unless the mark must stay off-token. +Geometric `path` / `circle` / `rect`. `viewBox` set. `fill="currentColor"` (or +a token class). No `` — letters in the header are HTML + **Skill** +`fonts`. Color values: **Skill** `tokens`. -`d` commands: **uppercase = absolute**, lowercase = relative. Each command takes exactly those args. +`d` commands: **uppercase = absolute**, lowercase = relative. Each command +takes exactly those args. | Cmd | Job | Args | | --- | ---------------- | --------------------------------- | @@ -37,9 +34,11 @@ Geometric `path` / `circle` / `rect`. `viewBox` set. `fill="currentColor"` (or a | `A` | Arc | `rx ry x-rot large-arc sweep x y` | | `Z` | Close | — | -`A`: `large-arc` 0 = short, 1 = >180°. `sweep` 0 = CCW, 1 = CW. `C`: first control = leave, second = arrive. +`A`: `large-arc` 0 = short, 1 = >180°. `sweep` 0 = CCW, 1 = CW. `C`: first +control = leave, second = arrive. -Tab icon: `app/icon.svg`. In-app: `components/logo.tsx` with `cn('size-8', className)`. +Tab icon: `app/icon.svg`. In-app: `components/logo.tsx` with +`cn('size-8', className)`. ```tsx import { cn } from "@/lib/utils"; @@ -57,4 +56,6 @@ Done when it reads at **16px** and at **512px**. ## Motion -Property animation (draw-on, SMIL, morph): [animate.md](animate.md). Page choreography: installed **Skill** `motion` / `gsap`. SVG timeline editor: installed **Skill** `svgator`. +Property animation (draw-on, SMIL, morph): [animate.md](animate.md). Page +choreography: installed **Skill** `motion` / `gsap`. SVG timeline editor: +installed **Skill** `svgator`. diff --git a/marketplace/ui/svg/skills/svg/animate.md b/marketplace/system/visuals/skills/svg/animate.md similarity index 100% rename from marketplace/ui/svg/skills/svg/animate.md rename to marketplace/system/visuals/skills/svg/animate.md diff --git a/marketplace/system/visuals/skills/tokens/SKILL.md b/marketplace/system/visuals/skills/tokens/SKILL.md new file mode 100644 index 0000000..831d0d1 --- /dev/null +++ b/marketplace/system/visuals/skills/tokens/SKILL.md @@ -0,0 +1,35 @@ +--- +name: tokens +disable-user-invocation: true +description: >- + Wires project color and theme tokens. Use when adding or changing a color, + palette, dark mode, radius, or other --color-* / collection CSS. +--- + +# Tokens + +Read `app/tokens/collections.json` → `active` → `file`. That `col_*.css` is +the only file to edit for design values. + +| Path | Role | +| ------------------------- | ---------------------------------------------- | +| `app/tokens/tailwind.css` | Framework bootstrap. Do not add design colors. | +| `app/tokens/index.css` | Generated re-export. Do not edit. | +| `app/globals.css` | Imports the two sheets. No `@theme` here. | + +Light lives in `@theme`. Dark overrides in `.dark`. Pages use semantic +utilities (`bg-background`, `text-muted-foreground`) — they map from +`--color-*`. No raw hex in `className`. No `dark:bg-gray-950`. + +Canonical name is `--color-`. shadcn short aliases stay in lockstep: + +```css +--color-brand: oklch(0.55 0.12 250); +--brand: var(--color-brand); +``` + +New color: both `@theme` and `.dark` if it must switch. Match neighboring +`oklch(...)`. Font roles: **Skill** `fonts`. + +Done when the page uses the utility or `var(--color-*)` and the collection +file holds the value. diff --git a/marketplace/ui/21st/assets/logo.png b/marketplace/ui/21st/assets/logo.png index 45d9d51..91eb150 100644 Binary files a/marketplace/ui/21st/assets/logo.png and b/marketplace/ui/21st/assets/logo.png differ diff --git a/marketplace/ui/aceternity/.reforma-plugin/plugin.json b/marketplace/ui/aceternity/.reforma-plugin/plugin.json index c8cb3bc..b65abda 100644 --- a/marketplace/ui/aceternity/.reforma-plugin/plugin.json +++ b/marketplace/ui/aceternity/.reforma-plugin/plugin.json @@ -6,6 +6,10 @@ "name": "Aceternity" }, "homepage": "https://ui.aceternity.com", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "Aceternity", "brandColor": "#000000", diff --git a/marketplace/ui/coss/.reforma-plugin/plugin.json b/marketplace/ui/coss/.reforma-plugin/plugin.json index e6d5ea1..9cf1c12 100644 --- a/marketplace/ui/coss/.reforma-plugin/plugin.json +++ b/marketplace/ui/coss/.reforma-plugin/plugin.json @@ -8,6 +8,10 @@ "homepage": "https://coss.com/ui", "repository": "https://github.com/cosscom/coss", "license": "MIT", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "coss", "brandColor": "#111111" diff --git a/marketplace/ui/flexnative/.reforma-plugin/plugin.json b/marketplace/ui/flexnative/.reforma-plugin/plugin.json index b4c842e..65bf935 100644 --- a/marketplace/ui/flexnative/.reforma-plugin/plugin.json +++ b/marketplace/ui/flexnative/.reforma-plugin/plugin.json @@ -8,6 +8,10 @@ "homepage": "https://ui.flexnative.com", "repository": "https://github.com/felipemenezes098/ui-flx", "license": "AGPL-3.0", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "Flexnative", "brandColor": "#0A0A0A", diff --git a/marketplace/ui/magic-ui/.reforma-plugin/plugin.json b/marketplace/ui/magic-ui/.reforma-plugin/plugin.json index ce22224..bb7cb59 100644 --- a/marketplace/ui/magic-ui/.reforma-plugin/plugin.json +++ b/marketplace/ui/magic-ui/.reforma-plugin/plugin.json @@ -8,6 +8,10 @@ "homepage": "https://magicui.design", "repository": "https://github.com/magicuidesign/magicui", "license": "MIT", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "Magic UI", "brandColor": "#9E7AFF" diff --git a/marketplace/ui/svg/.reforma-plugin/plugin.json b/marketplace/ui/svg/.reforma-plugin/plugin.json deleted file mode 100644 index 55b479c..0000000 --- a/marketplace/ui/svg/.reforma-plugin/plugin.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "svg", - "description": "Logos, favicons, and inline SVG. Icons stay on Lucide or the project’s pack.", - "logo": "assets/logo.svg", - "author": { - "name": "Reforma" - }, - "interface": { - "displayName": "SVG", - "brandColor": "#171717" - } -} diff --git a/marketplace/ui/svg/assets/logo.svg b/marketplace/ui/svg/assets/logo.svg deleted file mode 100644 index b33f0ef..0000000 --- a/marketplace/ui/svg/assets/logo.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/marketplace/ui/tailark/.reforma-plugin/plugin.json b/marketplace/ui/tailark/.reforma-plugin/plugin.json index 33ec159..7739fc3 100644 --- a/marketplace/ui/tailark/.reforma-plugin/plugin.json +++ b/marketplace/ui/tailark/.reforma-plugin/plugin.json @@ -6,6 +6,10 @@ "name": "Tailark" }, "homepage": "https://tailark.com", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "Tailark", "brandColor": "#9FA87F", diff --git a/marketplace/workspace/context7/.reforma-plugin/plugin.json b/marketplace/workspace/context7/.reforma-plugin/plugin.json index 0c78bd6..a87f455 100644 --- a/marketplace/workspace/context7/.reforma-plugin/plugin.json +++ b/marketplace/workspace/context7/.reforma-plugin/plugin.json @@ -7,5 +7,9 @@ "brandColor": "#000000", "displayName": "Context7" }, - "mcpServers": "./mcp.json" + "mcpServers": "./mcp.json", + "agent": { + "discover": true, + "installApproval": false + } } diff --git a/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json b/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json index f7b9f5c..8d01a27 100644 --- a/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json +++ b/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json @@ -1,5 +1,5 @@ { - "name": "github-mcp", + "name": "github", "description": "GitHub in the project — issues, pull requests, and the repo", "author": { "name": "GitHub", @@ -7,9 +7,12 @@ }, "logo": "assets/logo.svg", "mcpServers": "./mcp.json", + "agent": { + "discover": true + }, "interface": { "displayName": "GitHub", - "brandColor": "#181717", + "brandColor": "#FFFFFF", "logo": "assets/logo.svg" } } diff --git a/marketplace/workspace/github-mcp/assets/logo.svg b/marketplace/workspace/github-mcp/assets/logo.svg index 400b0ca..987a617 100644 --- a/marketplace/workspace/github-mcp/assets/logo.svg +++ b/marketplace/workspace/github-mcp/assets/logo.svg @@ -1,3 +1,3 @@ - +