算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
design-system【设计与创意】Unified design system enforcement for Flutter and Angular. Routes all UI tasks through the correct stack-specific tokens, rules, and interaction contracts. Use when auditing UI compliance, reviewing design consistency, or building any user-facing surface.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Iron Law: Never hardcode colors, spacing, or typography — always use design tokens; run /lint-design-system before declaring any UI change complete.
Single entry point for all design system enforcement across Flutter and Angular.
When to use: Any UI task — building screens, reviewing components, auditing design drift, or running design lint.
Determine the stack from file context, then load the correct references:
What are you working on?
|
+-- Flutter (lib/**/*.dart, pubspec.yaml)
| |
| +-- Tokens (colors, spacing, typography, radius)
| | → Read: .claude/skills/ui-standards-tokens/reference/ui-design-tokens.md
| |
| +-- Accessibility (semantics, focus, contrast)
| | → Read: .claude/skills/ui-standards-tokens/reference/ui-accessibility-patterns.md
| |
| +-- Polish (animations, glassmorphism, theme extensions)
| → Read: .claude/skills/flutter-mobile/reference/flutter-design-polish.md
|
+-- Angular (src/app/**/*.ts|html|scss)
| |
| +-- Component styling (daisyUI classes, semantic tokens)
| | → Read: .claude/skills/angular-spa/reference/daisyui-v5-components.md
| |
| +-- Tailwind config (spacing, breakpoints, CSS vars)
| | → Read: .claude/skills/angular-spa/reference/tailwind-v4-config.md
| |
| +-- Conventions (design principles, form patterns)
| | → Read: .claude/skills/angular-spa/reference/angular-conventions.md
| |
| +-- Animations (timing, keyframes, reduced motion)
| → Read: .claude/skills/angular-spa/reference/animations.md
|
+-- Cross-stack (interaction contracts, visual direction)
|
+-- Surface/interaction contracts (modals, forms, lists, errors)
| → Read: .claude/skills/design-system/reference/interaction-contracts.md
|
+-- Visual design direction (anti-patterns, typography philosophy)
→ Read: .claude/skills/frontend-design/reference/frontend-design-principles.md
These are non-negotiable. Violations are caught by hookify rules at write-time.
#3b82f6, Color(0xFF...))rgb(), rgba(), hsl(), hsla() literalsTheme.of(context).colorScheme.*bg-primary, text-base-content)EdgeInsets.all(16), mt-3)AppSpacing.xs/sm/md/lg/xl/xxlTextStyle(fontSize: 14), text-[14px])Theme.of(context).textTheme.*text-sm, text-lg, text-xl)<input>, <select>, <textarea> without framework bindingsformControlNamestyle="..." in Angular templates — use Tailwind utilities or SCSSStyle widgets in Flutter — use theme extensions| Rule | Stack | What It Catches |
|---|---|---|
hookify.design-no-hardcoded-colors-dart | Flutter | Color(0xFF...), Colors.blue |
hookify.design-no-raw-spacing-dart | Flutter | EdgeInsets.all(16), SizedBox(height: 8) |
hookify.design-no-raw-textstyle-dart | Flutter | TextStyle(fontSize: N) |
hookify.design-no-hex-angular | Angular | bg-[#...], color: #..., rgb(), hsl() |
hookify.design-no-raw-spacing-angular | Angular | mt-3, px-4, gap-2 |
hookify.design-no-raw-typography-angular | Angular | text-[14px], font-[...], font-size: N |
hookify.design-no-raw-form-inputs | Angular | bare <input>, <select> without formControl |
All rules respect // ignore-design: [reason] exception markers.
| Command | Scope |
|---|---|
/lint-design-system | Orchestrator — runs all checks for detected stack(s) |
dart analyze | Flutter static analysis |
ng lint | Angular static analysis |
Before declaring any UI work done, these must pass (from verification-and-reporting.md):
/lint-design-system run with zero violations// ignore-design: [reason]) reviewed and justifiedWhen a design rule must be violated intentionally:
// ignore-design: [short reason] or <!-- ignore-design: [reason] -->ignore-design and remove stale exceptions| Surface | Status | Rationale |
|---|---|---|
| Logged-in app screens (Flutter + Angular) | ENFORCED | Primary user experience — consistency here drives retention and trust |
| Shared/reusable components | ENFORCED | Foundation — drift here cascades everywhere |
| Theme definitions | ENFORCED | Single source of truth for tokens |
| Surface | Status | Rationale |
|---|---|---|
| Admin panels / internal tools | DEFERRED | Lower user impact — enforce when dedicated redesign pass happens |
| Legacy/migration pages | DEFERRED | Will be replaced — enforce on new version only |
| Marketing / landing pages | DEFERRED | Often need custom creative direction that conflicts with app tokens |
| Test files | EXCLUDED | Test code can use raw values for assertion clarity |
Generated code (*.g.dart, *.freezed.dart) | EXCLUDED | Machine-generated — not human-authored |
| Stack | Included | Excluded |
|---|---|---|
| Flutter | lib/ | test/, *.g.dart, *.freezed.dart, build output |
| Angular | src/app/ | node_modules/, *.spec.ts, config files |
Score the current UI across these 10 dimensions (0–10 each). For each dimension provide: score, specific file:line example, and a concrete fix.
bg-primary, colorScheme.primary) or hardcoded hex values (Color(0xFF3b82f6), #3b82f6 in SCSS)?Theme.of(context).textTheme.* (Flutter) or Tailwind typography scale (text-sm, text-lg, text-xl) (Angular)? Or raw TextStyle(fontSize: N) / text-[14px] scattered throughout?AppSpacing.* (Flutter) or Tailwind semantic scale (Angular)? Or arbitrary EdgeInsets.all(16) / mt-3 / px-4 that break the grid?sm:/md:/lg: breakpoints applied? Flutter: LayoutBuilder / MediaQuery used for adaptive layouts?colorScheme (Flutter) / daisyUI semantic tokens (Angular)? Or half-done with hardcoded light values that break in dark mode?null renders?CircularProgressIndicator / skeleton screens), error states (user-visible feedback), and micro-transitions present and consistent?Total score / 100.
For each dimension scored below 7: file the specific file:line violation and state the concrete fix using the correct token or pattern for the stack.
Flag these patterns immediately — they signal generic AI-generated UI with no design intention. Each flag requires the exact file:line and the replacement pattern.
| Pattern | Signal | Replacement |
|---|---|---|
Purple-to-blue gradient as primary background (from-purple-500 to-blue-500, LinearGradient([Color(0xFF...purple), Color(0xFF...blue)])) | Generic AI hero aesthetic | Use brand color tokens from colorScheme (Flutter) or daisyUI semantic bg-primary (Angular); gradients only for deliberate decorative surfaces |
Glass morphism cards with no semantic purpose (backdrop-blur, bg-white/10, BackdropFilter on every card) | Trendy filler masking weak content hierarchy | Use solid surface tokens (colorScheme.surface, bg-base-100); reserve blur effects for modal overlays where focus isolation is the intent |
Excessive border-radius on everything including data tables and code blocks (rounded-2xl on <table>, BorderRadius.circular(24) on list tiles) | Indiscriminate softening | Apply radius intentionally: cards and buttons use AppRadius.* tokens; data-dense surfaces (tables, code) use rounded-none or rounded-sm |
Scroll-triggered animations on every section (IntersectionObserver on 10+ elements, AnimationController firing on every scroll event) | Cargo-culted engagement pattern | Use entrance animations only for primary hero or key CTAs; all other content renders immediately; see flutter-design-polish.md and animations.md for approved patterns |
Generic centered hero: [Big Title] [Subtitle] [Primary Button] [Secondary Button] over gradient background | Uncustomized template output | Differentiate with brand-specific layout, real imagery or illustration, and a single focused CTA |
| Inter / Roboto / Space Grotesk as the only fonts with no display personality (same weight, same size hierarchy everywhere) | Default font stack, zero typographic intention | Add a display typeface for headings that matches brand tone; establish a deliberate type scale with size AND weight contrast between levels |
Symmetrical 3-column feature card grid: icon + title + body, all equal height, all centered (grid-cols-3, Column(children: [Icon, Text, Text]) × N) | The AI feature section template | Vary layout rhythm — mix wide + narrow cards, use real screenshots or illustrations instead of icons, break the grid for emphasis |
Shadow stacking — shadow-lg on a container that already has shadow-md, nested inside shadow-sm (BoxShadow arrays with 3+ layers on the same widget) | Depth miscalculation, not intentional elevation | Use a single elevation token per surface level; Flutter: one BoxShadow per widget matching colorScheme.shadow; Angular: one daisyUI shadow utility per element |