# Welcome to Metabase

Your guide to understanding the codebase

## Learning Path

15 units • 5 levels

### Orchestration & APIs
- Pipelines, workflows, public interfaces • 3 units
- API Layer and State Management
- Data Model and Entity Framework
- Component Library and UI Patterns
- Core Logic & Data
    - Business rules, schemas, models • 3 units
- Database Connections and Data Management
- Dashboard and Parameter System
- Query Builder and Visualization Engine

### Interaction & Integration
- UI components, external connectors • 3 units
- Enterprise Features and Embedding SDK
- Security and Multi-tenancy
- Actions, Alerts, and Automation
- Cross-Cutting Concerns
    - Auth, logging, config, testing • 2 units
- Infrastructure and Admin Systems
- Testing, Error Handling, and Versioning
- Edge Cases & Resilience
    - Error handling, fault tolerance • 1 units

### Additional Error Handling Patterns

### Test Your Knowledge
24 questions across all levels

#### Progress
- 0/24 answered

### Levels
- Level 1: 6 questions
- Level 2: 6 questions
- Level 3: 6 questions
- Level 4: 6 questions

### Hands-On Assignment
90-120 minutes

#### Your Challenge
Build a custom visualization plugin that adds a new chart type to Metabase's visualization engine. Your plugin should register itself through the plugin system, accept configuration options from users, and render data from a query result. This will require understanding how Metabase's plugin architecture works, how visualizations consume data, and how the UI components integrate with the visualization system.

### Starting Points

- `enterprise/frontend/src/metabase-enterprise/plugins.js:1-52`
    - Examine how enterprise plugins are loaded and registered in the system

- `enterprise/frontend/src/metabase-enterprise/redux.ts:1-11`
    - See how enterprise features integrate with the Redux state management

- `frontend/src/metabase/visualizations/register.js`
    - This is where core visualizations are registered - you'll follow a similar pattern

- `frontend/src/metabase/visualizations/components`
    - Browse existing visualization components to understand the structure and props they receive

- `frontend/src/metabase/visualizations/lib/settings`
    - Study how visualization settings and configuration options are defined

- `frontend/src/metabase/visualizations/visualizations`
    - Create your new visualization component here following the established patterns

### Success Criteria
- Your visualization appears in the visualization type picker with a custom icon and name.
- The visualization correctly renders data from a query result with at least 2 columns.
- Users can configure at least 2 settings (e.g., colors, labels) through the sidebar UI.
- The visualization handles empty data gracefully without crashing.
- Your code follows the same patterns as existing visualizations (proper exports, metadata structure).
- The visualization is interactive - clicking elements triggers `onVisualizationClick` with appropriate data.

### Hints
- (click to reveal)
    - Hint 1: Understanding the visualization lifecycle concept.
    - Hint 2: Plugin registration mechanism code location.
    - Hint 3: Data transformation patterns implementation.
    - Hint 4: Settings and configuration UI implementation.
    - Hint 5: Testing your visualization implementation.

### Prerequisites
- React component patterns
- Data visualization concepts
- Plugin architecture basics
- Redux state management (optional but helpful)
