firebase-app-hosting-basics
Deploy and manage web apps with Firebase App Hosting. Use this skill when deploying Next.js/Angular apps with backends.
impeccable
Frontend design and iteration for production-grade interfaces, from concept to ship.
Full skill instructions
Designs and iterates production-grade frontend interfaces. Real working code, committed design choices, exceptional craft.
You MUST do these steps before proceeding:
node .cursor/skills/impeccable/scripts/context.mjs once per session; if the runtime shows this skill's loaded base directory, run node <skill-base-dir>/scripts/context.mjs instead. Keep cwd/workdir at the user's project, not the skill directory. If the request names or implies a file, route, or app inside a monorepo, infer the concrete path and append --target <path> to the same command. If you've already seen its output in this conversation, do not re-run it. The script either prints the project's PRODUCT.md (and DESIGN.md when present) as a markdown block, or tells you it's missing. Follow whatever it prints. If it reports NO_PRODUCT_MD: divert into reference/init.md first when the user invoked init, teach, craft, or shape, or when their wording clearly maps to one of those from-scratch build flows (for example: "build/create/make a landing page", "design a new app", or "shape a feature"). Captured product context is the point of those flows. For any other command, a scoped evaluate / refine / enhance / fix / iterate request against existing code, do not divert into init. The existing code is the context: proceed with the requested command, infer the register from the surface in focus (step 4), and offer /impeccable init once as a suggestion the user can take later. A missing PRODUCT.md must never block a scoped request. If the output ends with an UPDATE_AVAILABLE directive, follow it (ask the user once about updating, then continue). It never blocks the current task.craft, shape, audit, polish, ...), you MUST read the command's reference next: reference/<command>.md, or the native variant from the Commands table (e.g. reference/audit.native.md) when the project platform is native (ios / android / adaptive, per the context.mjs directive). One file, not both. Non-optional. The reference defines the command's flow; without it you will skip steps the user expects.reference/brand.md. If it is app UI, admin, a dashboard, or a tool (design SERVES the product), read reference/product.md. Pick by first match: (1) task cue ("landing page" vs "dashboard"); (2) surface in focus (the page, file, or route being worked on); (3) register field in PRODUCT.md.## Platform is ios or android, also read reference/<platform>.md (HIG / Material 3 conventions). adaptive (cross-platform, ships both) reads both files. web, absent, or unrecognized: nothing extra to read. context.mjs prints the directive when one applies.node .cursor/skills/impeccable/scripts/palette.mjs to receive a brand seed color and composition guidance. This is the anchor for your primary brand color. Compose the rest of the palette (bg, surface, ink, accent, muted) around it per the script's instructions. Use OKLCH throughout. Skip this step only if step 3 found committed brand colors in existing tokens; in that case identity-preservation wins.Produce ready-to-ship, production-grade code, not prototypes or starting points. Take no shortcuts unless the user asks for them (when in doubt, ask). Don't stop until arriving at a complete implementation (beautiful, responsive, fast, precise, bug-free, on brand). You take attention to detail seriously: every page, section or component crafted is battle tested using the tools available to you (browser screenshotting, computer use, etc). the model is capable of extraordinary work. Don't hold back.
text-wrap: balance on h1–h3 for even line lengths; text-wrap: pretty on long prose to reduce orphans.flex-wrap would be simpler.repeat(auto-fit, minmax(280px, 1fr)).@media (prefers-reduced-motion: reduce) alternative: typically a crossfade or instant transition.position: absolute inside an overflow: hidden or overflow: auto container will be clipped. Use the native <dialog> / popover API, position: fixed, or a portal to escape the stacking context.--paper, --cream, --sand, --bone, --flour, --linen, --parchment, --wheat, --biscuit, --ivory are tells in themselves. If the brief is "warm, traditional, family-coastal-Italian" or "magazine-warm" or "editorial-restraint", DO NOT translate that into a near-white warm-tinted bg; that's the AI move. Pick: (a) a saturated brand color as the body (terracotta, oxblood, deep ochre, near-black), (b) a true off-white at chroma 0 (or chroma toward the brand's own hue, not toward warmth-by-default), or (c) a darker mid-tone tinted neutral that's clearly the brand's own. "Warmth" in the brand is carried by accent + typography + imagery, not by body bg.Match-and-refuse. If you're about to write any of these, rewrite the element with different structure.
border-left or border-right greater than 1px as a colored accent on cards, list items, callouts, or alerts. Never intentional. Rewrite with full borders, background tints, leading numbers/icons, or nothing.background-clip: text combined with a gradient background. Decorative, never meaningful. Use a single solid color. Emphasis via weight or size.01 · About / 02 · Process / 03 · Pricing above every section is the eyebrow trope one tier deeper: reach for it because "landing pages do this" and you're scaffolding by reflex. Numbers earn their place when the section actually IS a sequence (a real 3-step process, an ordered flow, a typed timeline) and the order carries information the reader needs. One deliberate numbered sequence on one page is voice; numbered eyebrows on every section across the site is AI grammar.If someone could look at this interface and say "AI made that" without doubt, it's failed. Cross-register failures are the absolute bans above. Register-specific failures live in each reference.
Category-reflex check. Run at two altitudes; the second one catches what the first one misses.
| Command | Category | Description | Reference |
|---|---|---|---|
craft [feature] | Build | Shape, then build a feature end-to-end | reference/craft.md |
shape [feature] | Build | Plan UX/UI before writing code | reference/shape.md |
init | Build | Set up project context: PRODUCT.md, DESIGN.md, live config, next steps | reference/init.md |
document | Build | Generate DESIGN.md from existing project code | reference/document.md |
extract [target] | Build | Pull reusable tokens and components into design system | reference/extract.md |
critique [target] | Evaluate | UX design review with heuristic scoring | reference/critique.md |
audit [target] | Evaluate | Technical quality checks (a11y, perf, responsive) | reference/audit.md · native: reference/audit.native.md |
polish [target] | Refine | Final quality pass before shipping | reference/polish.md |
bolder [target] | Refine | Amplify safe or bland designs | reference/bolder.md |
quieter [target] | Refine | Tone down aggressive or overstimulating designs | reference/quieter.md |
distill [target] | Refine | Strip to essence, remove complexity | reference/distill.md |
harden [target] | Refine | Production-ready: errors, i18n, edge cases | reference/harden.md |
onboard [target] | Refine | Design first-run flows, empty states, activation | reference/onboard.md |
animate [target] | Enhance | Add purposeful animations and motion | reference/animate.md |
colorize [target] | Enhance | Add strategic color to monochromatic UIs | reference/colorize.md |
typeset [target] | Enhance | Improve typography hierarchy and fonts | reference/typeset.md |
layout [target] | Enhance | Fix spacing, rhythm, and visual hierarchy | reference/layout.md |
delight [target] | Enhance | Add personality and memorable touches | reference/delight.md |
overdrive [target] | Enhance | Push past conventional limits | reference/overdrive.md |
clarify [target] | Fix | Improve UX copy, labels, and error messages | reference/clarify.md |
adapt [target] | Fix | Adapt for different devices and screen sizes | reference/adapt.md · native: reference/adapt.native.md |
optimize [target] | Fix | Diagnose and fix UI performance | reference/optimize.md |
live | Iterate | Visual variant mode: pick elements in the browser, generate alternatives | reference/live.md |
Plus three management commands: pin <command>, unpin <command>, and hooks <on|off|status|...>, detailed below.
No argument: the user is asking "what should I do?" Make the menu context-aware instead of static. Setup has already run context.mjs; if that reported NO_PRODUCT_MD the project has no captured context yet, so lead the menu with /impeccable init as the top recommendation (one line on why) and still show the rest below; don't silently jump into init. Otherwise run node .cursor/skills/impeccable/scripts/context-signals.mjs once and read its JSON, then lead with the 2-3 highest-value next commands, each with a one-line reason pulled from the signals, followed by the full menu (the table above, grouped by category). Never auto-run a command; the recommendation is a suggestion the user confirms.
Reason over the signals; there is no score to obey:
setup.hasDesign false while setup.hasCode true → document (capture the visual system).critique.latest is null → the project has never been critiqued; for a set-up project with a real surface, offering /impeccable critique <surface> is a strong default.critique.latest with a low score or non-zero p0 / p1 → polish (it reads that snapshot as its backlog), or re-run critique if the snapshot looks stale.git.changedFiles pointing at one surface → scope audit or polish to those files specifically, naming them.devServer.running true → live is available for in-browser iteration; if false, don't lead with live. live and the bundled detect.mjs are web-only. If setup.platform is ios, android, or adaptive, don't lead with either; the browser overlay and the HTML rule engine don't apply to native app code.setup.register.If scan.targets is non-empty and setup.platform is not ios/android/adaptive, run node .cursor/skills/impeccable/scripts/detect.mjs --json <scan.targets joined by spaces> once (the bundled detector over local files: no network, no npx; it reads HTML/CSS, so skip it for native projects). scan.via tells you what they are: git-changes (the markup/style files in your dirty tree, the most relevant set), source-dir (e.g. src, app), html, or root. Fold the hits into your picks: many quality / contrast hits → audit or polish; a specific slop family → the matching command (gradient text or eyebrows → quieter / typeset, flat or gray palette → colorize, and so on). It's a real, current signal that beats guessing. If detect errors or the tree is large and slow, skip it and recommend the user run audit themselves; never block the suggestion on it.
Keep it to 2-3 pointed picks with the exact command to type. The menu stays the fallback; the recommendation is the lede.
First word matches a command (table above OR pin / unpin / hooks): load its reference file (on native platforms, the table's native variant; Setup step 2's one-file rule) and follow its instructions. Everything after the command name is the target.
First word doesn't match, but the intent clearly maps to one command (e.g. "fix the spacing" → layout, "rewrite this error message" → clarify, "the colors feel flat" → colorize): load that command's reference (same native-variant rule) and proceed as if invoked. If two commands could fit, ask once which.
No clear command match: general design invocation. Apply the setup steps, the General rules, and the loaded register reference, using the full argument as context.
Setup (context gathering, register) is already loaded by then; sub-commands don't re-invoke /impeccable.
If the first word is craft or shape, or routing rule 3 clearly maps the user's intent to either command, setup still runs first, but the matching reference (reference/craft.md or reference/shape.md) owns the rest of the flow. Both are from-scratch build flows: if setup invokes init as a blocker, finish init, refresh context, then resume the original command and target.
teach is a deprecated alias for init: if the user types it, load reference/init.md and proceed as if they ran init.
Pin creates a standalone shortcut so /<command> invokes /impeccable <command> directly. Unpin removes it. The script writes to every harness directory present in the project.
node .cursor/skills/impeccable/scripts/pin.mjs <pin|unpin> <command>
Valid <command> is any command from the table above. Report the script's result concisely. Confirm the new shortcut on success, relay stderr verbatim on error.
/impeccable hooks <on|off|status|ignore-rule|ignore-file|ignore-value|reset> manages the design detector hook for this project. The hook auto-runs the detector after direct UI file edits and surfaces findings as system reminders. Full flow is in reference/hooks.md; load it when the user invokes /impeccable hooks with any argument.
Deploy and manage web apps with Firebase App Hosting. Use this skill when deploying Next.js/Angular apps with backends.
Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "deploy and give me the link", "push this live", or "create a preview deployment".
Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".
Tag-driven music generation, inpainting, and outpainting via StepFun-AI's ACE Step model.
Use for Vercel cost and performance optimization on deployed projects, especially Next.js, SvelteKit, Nuxt, and limited Astro apps. Collect Vercel metrics, usage, project config, and code scan results first; investigate only metric-backed candidates; produce ranked recommendations grounded in verified files and version-aware Vercel/framework docs. Trigger for Vercel bill reduction, slow or expensive routes, caching opportunities, Function Invocations, Build Minutes, Fast Data Transfer, Core Web Vitals, Bot Management, Fluid compute, or cost breakdown requests.
Prepares production launches. Use when preparing to deploy to production. Use when you need a pre-launch checklist, when setting up monitoring, when planning a staged rollout, or when you need a rollback strategy.
Posts content and articles to X (Twitter). Supports regular posts with images/videos and X Articles (long-form Markdown). In Codex, honor explicit requests for the Codex Chrome plugin/@chrome by using the Chrome Extension workflow; otherwise use Chrome Computer Use when available and fall back to real Chrome CDP scripts only when allowed. Use when user asks to "post to X", "tweet", "publish to Twitter", or "share on X".
Universal release workflow. Auto-detects version files and changelogs. Supports Node.js, Python, Rust, Claude Plugin, GitHub Releases, annotated tags, historical release backfill, and generic projects. Use when user says "release", "发布", "new version", "bump version", "push", "推送", "release notes", "GitHub Release", or "回填 Release".
Posts content to Weibo (微博). Supports regular posts with text, images, and videos, and headline articles (头条文章) with Markdown input via Chrome CDP. Use when user asks to "post to Weibo", "发微博", "发布微博", "publish to Weibo", "share on Weibo", "写微博", or "微博头条文章".
linear release setup
NuGet package management for .NET projects using dotnet CLI with strict workflows for adds, removes, and version updates.
Automate changelog generation from commits following Conventional Commits and Keep a Changelog standards.
Opus.ai: Revolutionize Your Web Experience
Build a no-code AI app in minutes.
An IDE for code migration from legacy to modern frameworks through coding agents.
Automate CGI animation in live-action scenes
Branded artistic QR-code concepts
Launch a website in seconds with AI.
Streamline Your Coding Experience with AI Code Helper
Convert any screenshot or design to clean code.