Foundation for the next-generation AI content surface UI: - 16 Cursor rules files covering philosophy, Vue conventions, design system, content surfaces, plugin system, AI integration, renderers, security, Bitcoin-only policy, dev/prod modes, accessibility, performance, animation, mobile UX, and git workflow - pnpm workspaces + Turborepo monorepo (@aiui/core, @aiui/app) - Vue 3 + Vite + TypeScript + Tailwind CSS 4 - Core type system: plugins, renderers, messages, content blocks - Plugin registry with renderer registration - 50 mock film fixtures with search/filter utilities - App shell with chat page layout - Environment config templates Made-with: Cursor
102 lines
2.9 KiB
Plaintext
102 lines
2.9 KiB
Plaintext
---
|
|
description: Development vs production configuration, feature flags, mock data patterns
|
|
globs: "**/*"
|
|
alwaysApply: false
|
|
---
|
|
|
|
# Dev & Prod Modes
|
|
|
|
## Development Mode
|
|
|
|
### Environment
|
|
```env
|
|
# .env.local (gitignored)
|
|
VITE_OPENROUTER_API_KEY=sk-or-...
|
|
VITE_TMDB_API_KEY=...
|
|
VITE_DEV_MODE=true
|
|
VITE_MOCK_MEDIA_SOURCES=true
|
|
VITE_DISABLE_CRYPTO=true
|
|
```
|
|
|
|
### What's Enabled
|
|
- Hot reload via Vite HMR
|
|
- Debug panel overlay (AI context, plugin status, renderer registry, message data)
|
|
- Mock media source plugins (Plex, YouTube, Nextcloud from JSON fixtures)
|
|
- OpenRouter AI connection (real API, free models available)
|
|
- Component playground (Storybook/Histoire)
|
|
- Verbose logging
|
|
- TypeScript strict mode
|
|
- All renderers available without lazy loading (for dev speed)
|
|
|
|
### What's Disabled
|
|
- E2E encryption (plain text messages for debugging)
|
|
- Storage encryption (plain IndexedDB)
|
|
- Tauri features (dev runs as pure web app)
|
|
- Production optimizations (tree-shaking, minification)
|
|
- Service worker / offline mode
|
|
|
|
### Mock Data
|
|
- Film fixtures: 50-100 films with real TMDB poster URLs
|
|
- Media source mocks: JSON files returning fake Plex/YouTube/Nextcloud responses
|
|
- Located in: `packages/app/src/mocks/`
|
|
- Auto-loaded when `VITE_MOCK_MEDIA_SOURCES=true`
|
|
- Mock data must match production data interfaces exactly
|
|
|
|
### Dev Scripts
|
|
```
|
|
pnpm dev # Web dev server
|
|
pnpm dev:desktop # Tauri dev (when needed)
|
|
pnpm storybook # Component playground
|
|
pnpm test # Vitest
|
|
pnpm lint # ESLint + Prettier
|
|
pnpm typecheck # TypeScript
|
|
pnpm build # Production build
|
|
pnpm turbo build # Turborepo cached build
|
|
```
|
|
|
|
## Production Mode
|
|
|
|
### What's Enabled
|
|
- E2E encryption for all messages
|
|
- Encrypted local storage
|
|
- Key management via OS keychain (Tauri) or encrypted IndexedDB (web)
|
|
- User-configured AI providers (settings page)
|
|
- Real media source connections (Plex API, YouTube, etc.)
|
|
- Optimized builds (tree-shaken, code-split, minified)
|
|
- Lazy loading for all heavy renderers
|
|
- Service worker for offline support
|
|
- Auto-update (Tauri)
|
|
|
|
### What's Disabled
|
|
- Debug panels
|
|
- Mock data
|
|
- Dev logging
|
|
- Source maps (in distributed builds)
|
|
- `VITE_DISABLE_CRYPTO` flag (must not exist)
|
|
|
|
### Build Targets
|
|
- Web: Static SPA bundle (< 250KB initial gzipped)
|
|
- Desktop: Tauri app (macOS .dmg, Windows .msi, Linux .AppImage)
|
|
- Mobile: Tauri mobile (iOS .ipa, Android .apk)
|
|
|
|
## Feature Flags
|
|
Use composable `useFeatureFlags()`:
|
|
```typescript
|
|
const { isDev, isTauri, isMobile, isCryptoEnabled, isMockData } = useFeatureFlags()
|
|
```
|
|
|
|
Gate platform-specific features:
|
|
```typescript
|
|
if (isTauri()) {
|
|
// Native file system access
|
|
} else {
|
|
// File System Access API or file picker
|
|
}
|
|
```
|
|
|
|
## Environment Variable Rules
|
|
- All env vars prefixed with `VITE_` (Vite requirement)
|
|
- Secrets only in `.env.local` (gitignored)
|
|
- `.env.example` committed with placeholder values
|
|
- Never read `process.env` directly — use typed config module
|