Adhere to these fundamental principles in all development activities:
- 
Simplicity First (KISS & YAGNI):
- Always seek the simplest practical solution.
 
- Prioritize Functionality Sources:
- Built-in Nuxt 3 features (auto-imports, composables, utilities).
 
- Functionality from installed Nuxt modules (e.g., shadcn-nuxt, PWA).
 
- Utilities from already installed packages (e.g., 
@vueuse/core, zod). 
- New Dependencies (Last Resort): Only add new packages or modules if essential functionality cannot be reasonably achieved otherwise. Justify any new additions.
 
 
- Avoid unnecessary features or complexity. If you don't need it now, don't build it.
 
 
- 
Client-Side Rendering (CSR) & PWA Focus:
- The application is primarily CSR. Design components and logic for the client environment.
 
- Server-Side Rendering (SSR) is an exception, used only for essential online-only operations like authentication (
/login, /auth/**). 
- Prioritize fast initial load times (First Contentful Paint, Time To Interactive) and smooth client-side interactions.
 
- Implement robust loading states (e.g., skeleton components) and user-friendly error states for all asynchronous operations or data fetching.
 
 
- 
Offline-First Design:
- Strive to make all features as functional as possible without an internet connection.
 
- Utilize 
useSecureStorage extensively for encrypted client-side data persistence, making user data and application state available offline. 
- Implement intelligent data synchronization: load from local cache first, then update from the network when online. Keep data fresh without disrupting the user experience.
 
- Leverage 
useDebounce where appropriate (e.g., user input, frequent state updates) to optimize performance and reduce unnecessary operations. 
- Strictly follow PWA best practices for caching, service workers, and background sync (see 
pwa-rules.mdc). 
 
- 
Reusability (DRY - Don't Repeat Yourself):
- Before creating new components, composables, or utilities, check if existing ones can be reused or adapted.
 
- Promote the use of shared composables in 
/composables for cross-cutting concerns. 
 
- 
Elegance & Intuitiveness (SINE):
- Write clean, readable, and maintainable code.
 
- Design intuitive user interfaces and application flows.
 
 
- 
Security (SINE):
- Prioritize the security of user data, especially when stored client-side via 
useSecureStorage. 
- Follow security best practices for API interactions and data handling.
 
 
Architecture & Structure
Maintain the established project structure and architectural patterns:
- 
Project Structure:
- Adhere to the defined directory layout (
/components, /composables, /pages, /server, /types, etc.). Place files in their designated locations. 
 
- 
UI & Styling:
- Component Library: Use 
shadcn-vue components (located in components/ui/) as the foundation for all UI elements. These are auto-imported; do not import them manually. 
- Styling: Use Tailwind CSS utility classes exclusively. Adhere to the theme variables defined in 
assets/css/tailwind.css and tailwind.config.js. 
- Theming: Ensure all components respect light/dark modes using the defined CSS variables.
 
- Glass Effects: Apply glass effect classes (
glass-effect, glass-card, etc.) consistently as defined in tailwind.css. 
- Refer to 
ui-components-rules.mdc for detailed UI guidelines. 
 
- 
Data Management & Storage:
- Database: Use Prisma ORM for server-side database operations via API endpoints.
 
- Media/Object Storage: Interact with Linode Object Storage (S3 compatible) only through the 
useAppStorage composable for media files. 
- Persistent Client Storage: Use 
useSecureStorage for all sensitive or persistent client-side data that needs to be available offline. Data is automatically encrypted. 
- Temporary Client State: Use 
useMemoryStorage or standard Vue refs/reactives (useState for shared state) for temporary, non-sensitive UI state or draft data. 
- Refer to 
storage-rules.mdc for comprehensive storage rules. 
 
- 
State Management:
- Local: Use Vue Composition API (
ref, computed, reactive) within components. 
- Shared (Client-side): Use Nuxt's 
useState for simple state sharing between components within the client session. 
- Persistent: Use 
useSecureStorage for state that needs to persist across sessions and be available offline. 
 
Development Practices
Follow these practices during implementation:
- 
Component Design:
- Build components with a single responsibility.
 
- Always include appropriate loading, error, and offline states. Use skeleton loaders for a better user experience.
 
 
- 
Data Fetching:
- Use the standard 
useAsyncData or $fetch patterns optimized for CSR and offline use:
- Always use 
server: false. 
- Implement cache-first logic (check 
useSecureStorage before network). 
- Provide default data structures.
 
- Refresh data in the background when online.
 
- Use 
lazy: true for non-critical data. 
 
- Refer to 
pwa-rules.mdc for detailed patterns. 
 
- 
Error Handling:
- Implement robust and user-friendly error handling throughout the application.
 
- Distinguish between network errors, API errors, and application errors.
 
- Provide clear feedback and recovery options (e.g., retry buttons).
 
- Handle offline scenarios gracefully.
 
- Refer to 
error-handling-rules.mdc. 
 
- 
API Integration:
- Interact with server API endpoints consistently.
 
- Design APIs and client-side logic to support offline data queuing and background synchronization.
 
- Refer to 
api-integration-rules.mdc. 
 
- 
Imports:
- Do Not Import Auto-Imports: Never manually import functions/components auto-imported by Nuxt 3 or Vue (e.g., 
ref, computed, defineNuxtConfig, Button, Input). 
- Use type-only imports (
import type { ... }) where appropriate. 
 
- 
Nuxt Best Practices:
- Follow established Nuxt 3 conventions and best practices.
 
- Keep Nuxt 4 compatibility in mind where practical, but prioritize clean Nuxt 3 implementation.
 
 
- 
Caching:
- Leverage caching at multiple levels: Service Worker (asset/API caching), 
useSecureStorage (data caching), useAsyncData (built-in caching). 
- Implement intelligent caching strategies (e.g., stale-while-revalidate) where appropriate.
 
 
- 
Testing:
- Write tests as needed, focusing on critical functionality, composables, and utility functions. Utilize Vitest and related testing libraries integrated into the project.