flux
Use when the project uses `livewire/flux` — dispatched by `directives/ui/{apply,review,polish}.ts`. Covers Flux components, slots, variants, and form primitives.
SKILL.mdsrc/skills/flux/SKILL.md
GitHubflux
Grounded stack guidance: Tailwind-layer Do/Don't + docs URLs via
node <skills-root>/corpus-grounding/scripts/ground.mjs search --manifest <skills-root>/design-intelligence/data/manifest.json --stack html-tailwind "<topic>". Seedesign-intelligence.
Positioning — dispatched, not standalone
flux is the primitive-library executor for projects on the
Livewire + Flux stack. It is invoked by
directives/ui/apply.ts
once the design brief is locked, and revisited by review.ts /
polish.ts during the design-review loop. It does not own the
flow, does not drive the audit, and does not lock the design.
| Concern | Owner |
|---|---|
| Audit + token inventory (mandatory pre-step) | existing-ui-audit |
| Design brief (layout / states / microcopy) | directives/ui/design.ts |
| Universal design heuristics | fe-design |
| Component logic / state / actions | livewire |
| Static Blade partials | blade-ui |
When to use
Cite this skill when:
- The project depends on
livewire/fluxanddirectives/ui/apply.tsdispatches Flux primitives - Building forms, modals, dropdowns, toasts, or other standard UI elements that Flux already provides
Do NOT use when:
- Raw Blade templates without Flux (use
blade-uiskill) - Livewire component logic / state (use
livewireskill) - React + shadcn (use
react-shadcn-uiskill) - Driving the full UI flow yourself — that is the
directives/ui/orchestrator
Procedure: Create a Flux view
Step 0: Inspect
- Confirm Flux is installed — check
composer.jsonforlivewire/flux. - Check existing views — match Flux component usage patterns.
- Check Flux docs — https://fluxui.dev/docs for latest API.
Step 1: Build the view
- Use
<flux:*>components instead of raw HTML. - Use
variantprop for styling (not custom Tailwind for standard styles). - Use
wire:modelfor Livewire binding. - Use
labelprop on form fields (accessibility).
Step 2: Validate
- No raw HTML form elements where Flux equivalents exist.
- No manual error rendering (Flux has built-in validation display).
- No conflicting Tailwind classes overriding Flux styles.
Conventions
→ See guideline php/flux.md for component reference, variants, forms, icons.
Output format
- Blade view using Flux components with correct props and slots
- Livewire component class if interactive behavior is needed
Review pass — a11y findings + preview envelope
When this skill is dispatched by directives/ui/review.ts (test slot)
or directives/ui/polish.ts (verify slot) — i.e. a review/polish run,
not the initial apply — it also emits:
state.ui_review.a11y—{violations: [{rule, selector, severity}, ...], severity_floor?, accepted_violations?}. Use the same(rule, selector)shape asstate.ui_audit.a11y_baselineso the engine's de-dup matches pre-existing entries on replay. Omit the envelope on apply passes; the engine's_apply_a11y_gateonly fires when a baseline is present.state.ui_review.preview—{render_ok: bool, screenshot_path?, dom_dump_path?, error?, skipped?}.render_ok: falsewitherrorpopulated triggers thepreview_render_failedhalt;render_ok: truewithscreenshot_paththreads the screenshot into the delivery report'sartifactslist. Browser tooling (Playwright/Cypress/…) is a consumer-project dependency — this package does not ship one.
Polish dispatch: when the dispatcher skips review because a previous
review pass already returned SUCCESS, this skill MUST itself
synthesise the updated state.ui_review.findings (including any
remaining a11y_violation entries) so the engine's gate sees the
current state on the next polish round.
Gotcha
- The model tends to use old Flux API syntax — always check latest docs.
- Flux has built-in validation display — don't add manual error rendering alongside it.
- Don't mix Flux with raw HTML form elements in the same form.
Taste Dials
When DESIGN.md declares ## Taste Dials, honour them: Variance → layout-family spread + asymmetry tolerance; Motion → animation budget + reduced-motion posture; Density → spacing scale + information-per-viewport. Absent → follow the design brief's inferred dials.
Do NOT
- Do NOT use raw
<input>,<select>,<button>when Flux equivalents exist. - Do NOT override Flux styles with conflicting Tailwind — use variants or slots.
- Do NOT skip the
labelprop on form fields — accessibility.
Anti-slop
Flux primitives carry sane defaults, but composition still drifts into slop —
pull docs/guidelines/design-antipatterns.md
and check Layout (L1/L2 hero-metric + identical-card grids) and Color
(C1 gradient defaults) before shipping. Tailwind-level bans:
tailwind-engineer.
Auto-trigger keywords
- Flux UI
- Livewire components
- Flux component
- Laravel Flux