# Mariavel Implementation Plan Mariavel is a modern, high-performance database management tool designed to bridge the gap between the power of Laravel and the elegance of React. It aims to replace traditional, clunky database management interfaces with a sleek, developer-centric experience. ## 1. Technical Architecture | Layer | Technology | Responsibility | | :--- | :--- | :--- | | **Backend** | Laravel 11 + Sanctum | API Management (SOLID), Dynamic Schema Discovery, CLI Bridge, Authentication. | | **Frontend** | React (TSX) + Vite | High-performance SPA adhering to SOLID component principles. | | **UI Library** | Material UI (MUI) | Dashboard Layout, Navigation, Modals, and consistent Design System. | | **Data Engine** | **DevExtreme DataGrid** | Virtual Scrolling for millions of rows, Excel-like cell editing. | | **CLI Engine** | Laravel Process | Asynchronous `mysqldump` and `mysql` command execution. | | **Real-time** | Laravel Reverb | WebSocket notifications for long-running CLI tasks (Import/Export). | --- ## 2. Design Principles (SOLID) To ensure long-term maintainability and scalability, Mariavel follows **SOLID** principles across both stacks: ### Backend (Laravel) * **Single Responsibility (SRP):** Controllers handle requests, Services handle business logic, and Repositories handle data access. * **Open/Closed (OCP):** Database connection and schema discovery logic are abstracted behind interfaces, allowing support for new DB engines (PostgreSQL, SQLite) without changing core code. * **Liskov Substitution (LSP):** All database driver implementations adhere to a strict `DatabaseDriverInterface`. * **Interface Segregation (ISP):** Clients don't depend on methods they don't use; interfaces are split into `SchemaDiscoveryInterface`, `DataManipulationInterface`, etc. * **Dependency Inversion (DIP):** High-level modules (Controllers) depend on abstractions (Interfaces), not low-level implementations. ### Frontend (React) * **Single Responsibility:** Logic is extracted into Custom Hooks (`useSchema`, `useDataGrid`), while components focus purely on rendering. * **Component Composition:** Building complex UIs from small, specialized components rather than monolithic ones. * **Prop Typing & Interfaces:** Strict TypeScript interfaces for all component props and API responses to ensure type safety and predictability. --- ## 3. Implementation Phases ### Phase 1: Backend Core & Dynamic Connectivity The backend must handle database connections dynamically rather than relying on a static `config/database.php`. * **Dynamic Connection Middleware:** Develop a middleware that injects database credentials (host, user, password) into the application container at runtime based on the authenticated request. * **Schema Discovery Engine:** * `GET /api/databases`: List all available databases. * `GET /api/tables/{db}`: List tables within a database. * `GET /api/schema/{table}`: Retrieve column definitions, data types, and Foreign Key relationships. * **Sanctum Integration:** Secure API endpoints with token-based authentication. ### Phase 2: Frontend Foundation & MUI Shell Establishing the "Shell" of the application with a focus on modern UX. * **MUI Dashboard Layout:** * Collapsible `Drawer` for database/table tree navigation. * `Tabs` system for managing multiple open tables or SQL editors. * **State Management (Zustand):** Efficiently manage global states like `activeDatabase`, `activeTable`, and `connectionStatus`. * **Theming & Aesthetics:** * Custom Material UI theme with Dark/Light mode support. * Injection of `dx.material.custom-scheme.css` to align DevExtreme components with MUI styles. ### Phase 3: High-Performance DataGrid Integration The heart of Mariavel is the data management interface. * **DevExtreme CustomStore:** * Implement `remoteOperations` (paging, filtering, sorting) to ensure the backend does the heavy lifting. * Server-side filtering mapping DevExtreme filters to Eloquent/Query Builder. * **Advanced Editing Features:** * `editing.mode = 'cell'` for rapid, Excel-style data entry. * Bulk actions (Multi-select delete, batch updates). * **Virtual Scrolling:** Enable high-performance rendering for tables with 100k+ records. ### Phase 4: CLI-Powered Import/Export (The Power Engine) Bypassing PHP's memory and execution limits for large data operations. * **Async Export Tool:** * Trigger `mysqldump --opt --user={user} --password={pass} {db} > {path}.sql` via `Laravel Process`. * Run in the background to avoid timeout issues. * **Async Import Tool:** * Multipart file upload support for large `.sql` files. * Execute `mysql --user={user} --password={pass} {db} < {path}.sql`. * **Real-time Feedback:** Use **Laravel Reverb** (WebSockets) to stream progress and completion status back to the React UI. --- ## 4. Key Differentiators (Killer Features) 1. **Zero-Lag Performance:** Leverage DevExtreme's virtual scrolling to navigate massive datasets without browser lag. 2. **Smart SQL Editor:** Integrate **Monaco Editor** (the engine behind VS Code) for an intelligent SQL authoring experience with syntax highlighting and autocomplete. 3. **Security First:** Database credentials are never stored in plain text; connection strings are ephemeral or encrypted. 4. **Desktop Ready:** The decoupled architecture allows for easy packaging into **Electron** or **NativePHP** for a native desktop experience. --- ## 5. Next Steps & Priorities 1. **Repository Setup:** Initialize Laravel 11 and React/Vite projects. 2. **Database Connection Factory:** Implement the logic to create `PDO` connections on the fly. 3. **Initial UI Prototype:** Build the MUI sidebar with a mock database tree.