--- description: Vue 3, TypeScript, and Vuexy patterns for EventCrew platform globs: ["apps/**/*.{vue,ts,tsx}"] alwaysApply: true --- # Vue + Vuexy Rules ## Core Principles 1. **Composition API only** - Always ` Events Manage events for your organisation Create Event {{ error?.message ?? 'Failed to load events' }} {{ item.name }} {{ item.start_date }} - {{ item.end_date }} {{ item.status_label }} ``` ### Navigation Menu (Organizer App) ```typescript // src/navigation/vertical/index.ts import type { VerticalNavItems } from '@/@layouts/types' export default [ { title: 'Dashboard', to: { name: 'dashboard' }, icon: { icon: 'tabler-smart-home' }, }, { heading: 'Event Management' }, { title: 'Events', to: { name: 'events' }, icon: { icon: 'tabler-calendar-event' }, }, { title: 'Festival Sections', to: { name: 'festival-sections' }, icon: { icon: 'tabler-layout-grid' }, }, { title: 'Time Slots & Shifts', to: { name: 'shifts' }, icon: { icon: 'tabler-clock' }, }, { heading: 'People' }, { title: 'Persons', to: { name: 'persons' }, icon: { icon: 'tabler-users' }, }, { title: 'Artists', to: { name: 'artists' }, icon: { icon: 'tabler-music' }, }, { title: 'Volunteers', to: { name: 'volunteers' }, icon: { icon: 'tabler-heart-handshake' }, }, { heading: 'Operations' }, { title: 'Accreditation', to: { name: 'accreditation' }, icon: { icon: 'tabler-id-badge-2' }, }, { title: 'Briefings', to: { name: 'briefings' }, icon: { icon: 'tabler-mail' }, }, { title: 'Mission Control', to: { name: 'mission-control' }, icon: { icon: 'tabler-broadcast' }, }, { heading: 'Insights' }, { title: 'Reports', to: { name: 'reports' }, icon: { icon: 'tabler-chart-bar' }, }, ] as VerticalNavItems ``` ## Forms with VeeValidate + Zod ```vue Create Event ``` ## Best Practices ### Always Use - `
Manage events for your organisation