docs: add Vuexy-first strategy and frontend conventions to CLAUDE.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
30
CLAUDE.md
30
CLAUDE.md
@@ -80,6 +80,36 @@ Configure three frontend origins in both Laravel (`config/cors.php` via env) and
|
|||||||
|
|
||||||
## Frontend rules (strict)
|
## Frontend rules (strict)
|
||||||
|
|
||||||
|
### Vuexy-first strategy
|
||||||
|
|
||||||
|
Before writing ANY frontend component, consult `/dev-docs/VUEXY_COMPONENTS.md` and follow this decision tree:
|
||||||
|
|
||||||
|
1. **Can a standard Vuetify component do this?** → Use it with default props.
|
||||||
|
Do not wrap it in a custom component.
|
||||||
|
2. **Does Vuexy provide an @core component for this?** → Use it. Check
|
||||||
|
`/dev-docs/VUEXY_COMPONENTS.md` section 1 for the full registry.
|
||||||
|
3. **Does an existing Crewli page already solve a similar UI pattern?** →
|
||||||
|
Copy that pattern exactly. Check `/dev-docs/VUEXY_COMPONENTS.md` section 3
|
||||||
|
for established patterns and their reference implementations.
|
||||||
|
4. **None of the above?** → Only then write custom code. Add `<style scoped>`
|
||||||
|
with a comment explaining why Vuexy/Vuetify couldn't handle it.
|
||||||
|
|
||||||
|
Concrete component rules:
|
||||||
|
- Tables: `v-data-table-server` with server-side pagination — never client-side for API data
|
||||||
|
- Cards: `v-card` directly, or `AppCardActions` when collapse/refresh/remove is needed
|
||||||
|
- Forms in dialogs: `v-dialog` + `v-card` + `v-form` — follow the established dialog pattern
|
||||||
|
- Detail panels: `v-navigation-drawer` with `temporary` and `location="end"` — follow ShiftDetailPanel pattern
|
||||||
|
- Date/time pickers: `AppDateTimePicker` from @core — never raw input[type=date]
|
||||||
|
- Status indicators: `v-chip` with color prop — never custom styled spans
|
||||||
|
- Loading states: `v-skeleton-loader` — never custom spinners
|
||||||
|
- Error states: `v-alert` with retry button — never custom error divs
|
||||||
|
- Empty states: `v-card` with icon + message + action button
|
||||||
|
- Notifications: `v-snackbar` — never custom toast components
|
||||||
|
- Page layout: `v-row` + `v-col` with Vuetify breakpoint props — never CSS grid or custom flexbox
|
||||||
|
|
||||||
|
**Before ANY frontend task:** read `/dev-docs/VUEXY_COMPONENTS.md` to verify
|
||||||
|
you are using available components rather than building custom ones.
|
||||||
|
|
||||||
### Vue components
|
### Vue components
|
||||||
|
|
||||||
- Always `<script setup lang="ts">` — never the Options API
|
- Always `<script setup lang="ts">` — never the Options API
|
||||||
|
|||||||
Reference in New Issue
Block a user