diff --git a/README.md b/README.md
index 9615732..8d433e6 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,35 @@
# π§ Brian - Your Personal Knowledge Base
-
-> A play on "brain" - Brian is your intelligent knowledge repository with vector-based similarity search, beautiful graph visualization, and seamless Goose integration. Because I cannot spell 9/10 times and I make this mistake all the time now you can too!
-
+[](https://opensource.org/licenses/MIT)
+[](https://www.python.org/downloads/)
+[](https://nodejs.org/)
+[](https://pnpm.io/)
-
+
+> *A play on "brain" - Brian is your intelligent knowledge repository with vector-based similarity search, beautiful graph visualization, and seamless Goose integration. Because I cannot spell 9/10 times and I make this mistake all the time, now you can too!*
+---
+
+## π Table of Contents
+
+- [π Features](#-features)
+- [ποΈ Architecture Overview](#-architecture-overview)
+- [π Quick Start](#-quick-start)
+- [π Usage](#-usage)
+- [π§ Configuration](#-configuration)
+- [π οΈ Development](#-development)
+- [π Goose MCP Tools](#-goose-mcp-tools)
+- [π Similarity Algorithm](#-similarity-algorithm)
+- [π Comparison with Alternatives](#-comparison-with-alternatives)
+- [π Troubleshooting](#-troubleshooting)
+- [π€ Contributing](#-contributing)
+- [π License](#-license)
+- [π Acknowledgments](#-acknowledgments)
+- [π Documentation](#-documentation)
+- [πΊοΈ Roadmap](#-roadmap)
+
+---
## β¨ Features
@@ -17,14 +40,12 @@
- **π Link Previews**: Automatic metadata extraction from URLs
- **π Google Docs Support**: Seamless integration with Google Drive documents
-
-
+
### Multi-Project Knowledge Bases
- **ποΈ Multiple Projects**: Organize knowledge into separate project spaces
-
-
+
### Graph Visualization
- **πΈοΈ Force-Directed Graph**: Interactive D3.js visualization showing connections
@@ -33,7 +54,7 @@
- **π Knowledge Universe**: Zoom out to see all projects as "galaxies" in a unified space
- **π Knowledge Regions**: Group related items with visual boundaries
-
+
### Hierarchical Zoom (Knowledge Universe)
- **π Multi-Scale View**: Seamlessly zoom from individual items to entire knowledge universe
@@ -41,14 +62,107 @@
- **β¨ Semantic Rendering**: Labels, nodes, and links adapt based on zoom level
- **π Zoom Indicator**: Real-time display of zoom level and current semantic view
-
### AI Integration
- **π€ Goose Integration**: Use Brian directly from Goose AI assistant via MCP
- **π§ Region Profiles**: Configure AI behavior per knowledge region
- **π‘ Smart Context**: Get relevant knowledge context for any topic
-
+
+
+---
+
+## ποΈ Architecture Overview
+
+Brian is built with a **modular architecture** separating backend, frontend, and AI integration layers:
+
+```
+brian/
+βββ brian/ # Backend (Python + FastAPI)
+β βββ api/ # REST API routes
+β β βββ items.py # Knowledge item endpoints
+β β βββ projects.py # Project management endpoints
+β β βββ regions.py # Region management endpoints
+β β βββ connections.py # Explicit connection endpoints
+β β βββ search.py # Search and similarity endpoints
+β βββ database/ # SQLite database layer
+β β βββ migrations.py # Database migrations
+β β βββ repository.py # Data access layer (CRUD operations)
+β β βββ schema.py # Database schema (SQLAlchemy models)
+β βββ models/ # Business models
+β β βββ knowledge_item.py # Knowledge item model
+β β βββ project.py # Project model
+β β βββ region.py # Region model
+β β βββ connection.py # Connection model
+β βββ services/ # Business logic
+β βββ similarity.py # TF-IDF + cosine similarity
+β βββ clustering.py # Item clustering for graph layout
+β βββ embedding.py # Vector embedding utilities
+β
+βββ brian_mcp/ # MCP Server (Goose Integration)
+β βββ server.py # MCP server implementation
+β βββ tools/ # MCP tool definitions
+β
+βββ frontend/ # Frontend (React + Vite + D3.js)
+β βββ public/ # Static assets
+β βββ src/
+β βββ components/ # React components
+β β βββ SimilarityGraph.jsx # Main graph visualization (D3.js)
+β β βββ ProjectSelector.jsx # Project management UI
+β β βββ ProjectPill.jsx # Project indicator
+β β βββ Timeline.jsx # Chronological view
+β β βββ InfinitePinboard.jsx # Spatial canvas
+β β βββ RegionEditDialog.jsx # Region management
+β β βββ Settings.jsx # App settings
+β β βββ ...
+β βββ contexts/ # React contexts
+β β βββ SettingsContext.jsx # Global settings
+β βββ store/ # State management (Zustand)
+β β βββ useStore.js # Centralized state
+β βββ lib/ # Utilities
+β β βββ api.js # API client
+β β βββ constants.js # App constants
+β β βββ utils.js # Helper functions
+β βββ App.jsx # Main app component
+β βββ main.jsx # Entry point
+β
+βββ scripts/ # Helper scripts
+β βββ setup.sh # One-command installation
+β βββ start.sh # Start backend + frontend
+β βββ stop.sh # Stop all servers
+β
+βββ pyproject.toml # Python project config
+βββ requirements.txt # Python dependencies
+βββ package.json # Frontend dependencies (in frontend/)
+βββ README.md # This file
+```
+
+### Data Flow
+```
+User Interaction (Web UI / Goose)
+ β
+ Frontend (React) β API Requests β Backend (FastAPI)
+ β
+ Database (SQLite) ββ Similarity Engine (TF-IDF)
+ β
+ Graph Layout (D3.js Force-Directed)
+ β
+ Visual Rendering (Canvas / SVG)
+```
+
+### Key Technologies
+| Layer | Technology | Purpose |
+|-------|------------|---------|
+| Backend | FastAPI | REST API server |
+| Database | SQLite + SQLAlchemy | Data persistence |
+| Frontend | React + Vite | UI framework |
+| Graph Visualization | D3.js | Interactive graph rendering |
+| State Management | Zustand | Client-side state |
+| AI Integration | MCP (Model Context Protocol) | Goose AI assistant integration |
+| Styling | Tailwind CSS + shadcn/ui | UI components |
+| Icons | Lucide | Icon library |
+| Animations | Framer Motion | Smooth transitions |
+---
## π Quick Start
@@ -57,25 +171,26 @@
- **Python 3.8+** - [Download](https://www.python.org/downloads/)
- **Node.js 16+** - [Download](https://nodejs.org/)
- **pnpm** - [Install](https://pnpm.io/installation) (`npm install -g pnpm`)
-- **Goose** (optional) - For AI assistant integration - https://github.com/block/goose
+- **Goose** (optional) - For AI assistant integration - [https://github.com/block/goose](https://github.com/block/goose)
### One-Command Installation
```bash
# Clone the repository
-git clone https://github.com/yourusername/brian.git
+git clone https://github.com/spencrmartin/brian.git
cd brian
# Run the setup script
+chmod +x setup.sh
./setup.sh
```
That's it! The setup script will:
-- β
Install all Python dependencies
+- β
Install all Python dependencies in a virtual environment
- β
Install all frontend dependencies
-- β
Create the Brian data directory
-- β
Configure the Goose extension automatically
-- β
Create convenient start/stop scripts
+- β
Create the Brian data directory at `~/.brian/`
+- β
Configure the Goose extension (if Goose is installed)
+- β
Create convenient `start.sh` and `stop.sh` scripts
### Start Brian
@@ -83,9 +198,9 @@ That's it! The setup script will:
./start.sh
```
-This starts both the backend (port 8080) and frontend (port 5173) servers.
-
-Open your browser to: **http://localhost:5173**
+This starts both servers:
+- **Backend**: http://localhost:8080
+- **Frontend**: http://localhost:5173
### Stop Brian
@@ -93,15 +208,17 @@ Open your browser to: **http://localhost:5173**
./stop.sh
```
+---
+
## π Usage
### Adding Knowledge Items
**Via Web UI:**
-1. Open http://localhost:5173
+1. Open [http://localhost:5173](http://localhost:5173)
2. Click the "+" button
-3. Choose item type (link, note, snippet, paper)
-4. Fill in the details and add tags
+3. Choose item type: **Link**, **Note**, **Snippet**, or **Paper**
+4. Fill in the details (title, content, URL, tags)
5. Save!
**Via Goose:**
@@ -113,14 +230,14 @@ Goose: β Added to your knowledge base!
### Managing Projects
**Creating a Project:**
-1. Click the Project Selector at the top center
-2. Click "New Project"
+1. Click the **Project Selector** at the top center
+2. Click **"New Project"**
3. Enter name, description, choose an icon and color
-4. Click Create
+4. Click **Create**
**Switching Projects:**
- Click the Project Selector and choose a project
-- Select "All Projects" to view everything across all knowledge bases
+- Select **"All Projects"** to view everything across all knowledge bases
**Editing Projects:**
- Hover over a project in the selector and click the edit (pencil) icon
@@ -128,39 +245,45 @@ Goose: β Added to your knowledge base!
### Graph Visualization
-The graph view shows connections between items based on content similarity:
+The graph view shows connections between items based on **content similarity**:
-- **Node Colors**: Blue (links), Green (notes), Amber (snippets), Purple (papers)
-- **Line Thickness**: Indicates similarity strength
-- **Theme Highlighting**: Hover over tags to see themed connections
+- **Node Colors**:
+ - π΅ Blue = Links
+ - π’ Green = Notes
+ - π‘ Amber = Snippets
+ - π£ Purple = Papers
+- **Line Thickness**: Indicates similarity strength (thicker = more similar)
+- **Theme Highlighting**: Hover over tags to see themed connections with colored drop shadows
- **Node Details**: Click any node to see full details in a bottom sheet
- **Zoom & Pan**: Scroll to zoom, drag to pan
- **Drag Nodes**: Reposition nodes by dragging
### Knowledge Universe (Hierarchical Zoom)
-When viewing "All Projects", you can explore your entire knowledge universe:
+When viewing **"All Projects"**, explore your entire knowledge universe:
-1. **Zoom Out** (scale < 0.3): See all projects as distinct clusters with hull boundaries
-2. **Mid Zoom** (scale 0.3-0.5): See knowledge regions within projects
-3. **Zoom In** (scale > 0.5): See individual items with full labels
+| Zoom Level | Scale Range | View |
+|------------|-------------|------|
+| **Universe** | < 0.3 | All projects as distinct "galaxies" with hull boundaries |
+| **Regions** | 0.3 - 0.5 | Knowledge regions within projects |
+| **Items** | > 0.5 | Individual items with full labels |
-The zoom indicator in the bottom-left shows your current zoom level and semantic view.
+The **zoom indicator** in the bottom-left shows your current zoom level and semantic view.
### Knowledge Regions
Regions help organize related items within a project:
-1. Click the Regions button in the toolbar
+1. Click the **Regions** button in the toolbar
2. Create a new region with a name and color
3. Add items to regions by selecting them in the graph
-4. Regions appear as visual boundaries in the graph view
+4. Regions appear as **visual boundaries** in the graph view
### Searching
**Via Web UI:**
- Use the search bar at the top
-- Results show both exact matches and similar items
+- Results show both **exact matches** and **similar items**
- Filter by type, tags, or project
**Via Goose:**
@@ -169,6 +292,8 @@ You: Search Brian for "machine learning"
Goose: Found 5 items related to machine learning...
```
+---
+
## π§ Configuration
### Environment Variables
@@ -212,6 +337,8 @@ extensions:
**After setup, restart Goose to load the Brian extension.**
+---
+
## π οΈ Development
### Manual Setup
@@ -221,7 +348,7 @@ If you prefer manual installation:
```bash
# Backend setup
python3 -m venv venv
-source venv/bin/activate
+source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e .
# Frontend setup
@@ -288,228 +415,119 @@ python test_mcp_simple.py
python test_search_fix.py
```
-## π¨ UI Features
-
-### Project Selector
-- Large pill-shaped button at top center
-- Shows current project with icon, name, and item count
-- "All Projects" mode shows universe icon with total counts
-- Dropdown with all projects, create new, and edit options
-- 25+ Lucide icons to choose from
-
-### Timeline View
-- Chronological display of all items
-- Grouped by date
-- Project pills showing item origin
-- Theme lines connecting related items
-- Smooth animations
-
-### Graph View
-- Force-directed layout with D3.js
-- Real-time similarity calculations
-- Interactive node selection
-- Theme-based filtering with drop shadows
-- Bottom sheet for detailed view with project pills
-- Pulsing animation on selected nodes
-- **Hierarchical zoom** with semantic rendering
-- **Project hulls** when viewing all projects
-- **Zoom indicator** showing current level
-
-### Navigation
-- Circular icon buttons matching modern UI patterns
-- Smooth transitions between views
-- Responsive design
-- Keyboard shortcuts (coming soon)
+---
## π Goose MCP Tools
-When integrated with Goose, Brian provides these tools:
+When integrated with Goose, Brian provides the following tools:
### Knowledge Management
-#### `create_knowledge_item`
-Add new items to your knowledge base.
-```
-Parameters:
-- title: Item title
-- content: Main content
-- item_type: link, note, snippet, or paper
-- url: Optional URL
-- tags: Optional list of tags
-- project_id: Optional project to add to
-```
-
-#### `search_knowledge`
-Search your knowledge base with full-text and similarity search.
-```
-Parameters:
-- query: Search query
-- limit: Max results (default: 10)
-- project_id: Optional project filter
-```
-
-#### `find_similar_items`
-Find items similar to a given item.
-```
-Parameters:
-- item_id: UUID of the reference item
-- limit: Max results (default: 5)
-```
-
-#### `get_item_details`
-Get full details of a specific item.
-```
-Parameters:
-- item_id: UUID of the item
-```
-
-#### `update_knowledge_item`
-Update an existing knowledge item's content, tags, or other properties.
-```
-Parameters:
-- item_id: UUID of the item to update
-- title: Optional new title
-- content: Optional new content
-- tags: Optional new tags list
-- url: Optional new URL
-```
-
-#### `delete_knowledge_item`
-Delete a knowledge item from the database. This action cannot be undone.
-```
-Parameters:
-- item_id: UUID of the item to delete
-```
+| Tool | Description | Parameters |
+|------|-------------|------------|
+| `create_knowledge_item` | Add new items to your knowledge base | `title`, `content`, `item_type`, `url`, `tags`, `project_id` |
+| `search_knowledge` | Search with full-text and similarity | `query`, `limit`, `project_id` |
+| `find_similar_items` | Find items similar to a given item | `item_id`, `limit` |
+| `get_item_details` | Get full details of a specific item | `item_id` |
+| `update_knowledge_item` | Update an existing item | `item_id`, `title`, `content`, `tags`, `url` |
+| `delete_knowledge_item` | Delete an item (cannot be undone) | `item_id` |
### Project Management
-#### `list_projects`
-List all knowledge base projects.
-
-#### `create_project`
-Create a new knowledge base project.
-```
-Parameters:
-- name: Project name
-- description: Optional description
-- icon: Optional emoji icon
-- color: Optional hex color
-```
-
-#### `switch_project`
-Switch the default project for new items.
-```
-Parameters:
-- project_id: UUID of the project
-```
-
-#### `get_project_context`
-Get knowledge context from a specific project.
-```
-Parameters:
-- project_id: Optional project ID
-- query: Optional query to filter items
-- limit: Max items (default: 20)
-```
+| Tool | Description | Parameters |
+|------|-------------|------------|
+| `list_projects` | List all knowledge base projects | - |
+| `create_project` | Create a new project | `name`, `description`, `icon`, `color` |
+| `switch_project` | Switch default project for new items | `project_id` |
+| `get_project_context` | Get context from a specific project | `project_id`, `query`, `limit` |
### Region Management
-#### `list_regions`
-List all knowledge regions.
+| Tool | Description | Parameters |
+|------|-------------|------------|
+| `list_regions` | List all knowledge regions | - |
+| `create_region` | Create a new region | `name`, `description`, `color`, `item_ids` |
+| `get_region_context` | Get context from a specific region | `region_id`, `query` |
-#### `create_region`
-Create a new knowledge region.
-```
-Parameters:
-- name: Region name
-- description: Optional description
-- color: Optional hex color
-- item_ids: Optional items to include
-```
+### Context & Intelligence
-#### `get_region_context`
-Get knowledge context from a specific region.
-```
-Parameters:
-- region_id: UUID of the region
-- query: Optional query to filter items
-```
+| Tool | Description | Parameters |
+|------|-------------|------------|
+| `get_knowledge_context` | Get relevant items for a topic | `topic`, `limit` |
+| `suggest_regions` | Suggest relevant regions for a query | `query`, `limit` |
+| `debug_item_connections` | Debug similarity connections | `item_id` |
-### Context & Intelligence
+### Connection Management
-#### `get_knowledge_context`
-Get relevant knowledge items for a topic.
-```
-Parameters:
-- topic: Topic to get context for
-- limit: Max items (default: 5)
-```
+| Tool | Description | Parameters |
+|------|-------------|------------|
+| `create_connection` | Create explicit connection between items | `source_item_id`, `target_item_id`, `connection_type`, `strength`, `notes` |
+| `get_item_connections` | Get all connections for an item | `item_id` |
+| `update_connection` | Update an existing connection | `connection_id`, `connection_type`, `strength`, `notes` |
+| `delete_connection` | Delete a connection | `connection_id` |
-#### `suggest_regions`
-Suggest relevant regions for a query.
-```
-Parameters:
-- query: Query to find relevant regions
-- limit: Max regions (default: 3)
-```
+---
-#### `debug_item_connections`
-Debug similarity connections for an item.
-```
-Parameters:
-- item_id: UUID of the item to debug
-```
+## π Similarity Algorithm
-### Connection Management
+Brian uses a **hybrid approach** for finding connections between knowledge items:
-Explicit connections between knowledge items for the graph and relationship tracking.
+1. **TF-IDF Vectorization**: Converts text content to numerical vectors
+ - Term Frequency (TF): How often a word appears in a document
+ - Inverse Document Frequency (IDF): How important a word is across all documents
-#### `create_connection`
-Create an explicit connection between two items.
-```
-Parameters:
-- source_item_id: UUID of the source item
-- target_item_id: UUID of the target item
-- connection_type: Optional - related, references, extracted_from, inspired_by, etc.
-- strength: Optional - 0.0 to 1.0 (default: 1.0)
-- notes: Optional notes about the connection
-```
+2. **Cosine Similarity**: Measures the angle between vectors
+ - Range: `-1` (opposite) to `1` (identical)
+ - Brian uses values from `0` to `1`
-#### `get_item_connections`
-Get all explicit connections for an item.
-```
-Parameters:
-- item_id: UUID of the item
-```
+3. **Threshold Filtering**: Only shows connections above **0.15 similarity**
+ - Adjustable via configuration
-#### `update_connection`
-Update an existing connection.
-```
-Parameters:
-- connection_id: ID of the connection to update
-- connection_type: Optional new type
-- strength: Optional new strength 0.0-1.0
-- notes: Optional new notes
-```
+4. **Global IDF Scores**: Pre-computed for all documents for efficiency
-#### `delete_connection`
-Delete an explicit connection between items.
-```
-Parameters:
-- connection_id: ID of the connection to delete
-```
+5. **Project-Aware**: Can filter connections by project
-## π Similarity Algorithm
+### Algorithm Workflow
+```
+Input: All knowledge items
+ β
+1. Preprocess text (tokenize, lowercase, remove stopwords)
+ β
+2. Build TF-IDF matrix for all documents
+ β
+3. Compute cosine similarity between all pairs
+ β
+4. Filter by threshold (default: > 0.15)
+ β
+5. Return top-N similar items for each item
+```
+
+### Performance
+- **Time Complexity**: O(nΒ²) for similarity matrix (n = number of items)
+- **Space Complexity**: O(n * m) where m = vocabulary size
+- **Optimizations**:
+ - Cached TF-IDF vectors
+ - Lazy similarity computation
+ - Project-based filtering
-Brian uses a hybrid approach for finding connections:
+---
-1. **TF-IDF Vectorization**: Converts text to numerical vectors
-2. **Cosine Similarity**: Measures angle between vectors
-3. **Threshold Filtering**: Only shows connections above 0.15 similarity
-4. **Global IDF Scores**: Pre-computed for all documents
-5. **Project-Aware**: Can filter connections by project
+## π Comparison with Alternatives
+
+| Feature | Brian | Obsidian | Logseq | Roam Research | Notion |
+|---------|-------|----------|--------|----------------|--------|
+| **Local-First** | β
Yes | β
Yes | β
Yes | β No | β No |
+| **Graph Visualization** | β
Yes (D3.js) | β
Yes (Plugins) | β
Yes | β
Yes | β No |
+| **Vector Search** | β
Yes (TF-IDF) | β No | β No | β No | β No |
+| **AI Integration** | β
Yes (Goose MCP) | β No | β No | β No | β
Yes |
+| **Multi-Project** | β
Yes | β
Yes (Vaults) | β
Yes | β
Yes | β
Yes |
+| **Open Source** | β
Yes | β
Yes | β
Yes | β No | β No |
+| **Self-Hosted** | β
Yes | β
Yes | β
Yes | β No | β No |
+| **Real-Time Collaboration** | β No | β No | β No | β
Yes | β
Yes |
+| **Mobile App** | β No | β
Yes | β
Yes | β
Yes | β
Yes |
+| **Plugin Ecosystem** | β No | β
Yes | β
Yes | β
Yes | β
Yes |
-This creates meaningful connections between related items without manual linking.
+---
## π Troubleshooting
@@ -553,26 +571,70 @@ ls -la ~/.brian/brian.db
# Reset database (WARNING: deletes all data)
rm ~/.brian/brian.db
# Restart backend to recreate
+./stop.sh
+./start.sh
```
### Graph not showing project hulls
-- Ensure you're in "All Projects" mode (click Project Selector β All Projects)
+- Ensure you're in **"All Projects"** mode (click Project Selector β All Projects)
- Zoom out significantly (scale < 0.4) to see project boundaries
- Check that you have items in multiple projects
+---
+
## π€ Contributing
-Contributions are welcome! Please feel free to submit a Pull Request.
+Contributions are welcome! Here's how you can help:
+### Getting Started
1. Fork the repository
-2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
-3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
-4. Push to the branch (`git push origin feature/AmazingFeature`)
-5. Open a Pull Request
+2. Clone your fork:
+ ```bash
+ git clone https://github.com/yourusername/brian.git
+ cd brian
+ ```
+3. Create a feature branch:
+ ```bash
+ git checkout -b feature/amazing-feature
+ ```
+4. Make your changes and commit them:
+ ```bash
+ git commit -m 'Add some amazing feature'
+ ```
+5. Push to the branch:
+ ```bash
+ git push origin feature/amazing-feature
+ ```
+6. Open a Pull Request
+
+### Contribution Guidelines
+- Follow the existing code style (PEP 8 for Python, ESLint for JavaScript)
+- Add tests for new features
+- Update documentation as needed
+- Keep commits atomic and well-described
+- Reference any related issues in your PR description
+
+### Development Workflow
+```mermaid
+graph TD
+ A[Fork Repository] --> B[Clone Locally]
+ B --> C[Create Feature Branch]
+ C --> D[Make Changes]
+ D --> E[Write Tests]
+ E --> F[Commit Changes]
+ F --> G[Push to Fork]
+ G --> H[Open Pull Request]
+ H --> I[Address Review Feedback]
+ I --> H
+```
+
+---
## π License
-This project is licensed under the MIT License - see the LICENSE file for details.
+This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.
+
+---
## π Acknowledgments
@@ -585,14 +647,19 @@ This project is licensed under the MIT License - see the LICENSE file for detail
- Animations with [Framer Motion](https://www.framer.com/motion/)
- Goose integration via [MCP](https://modelcontextprotocol.io/)
+---
+
## π Documentation
- [Quick Start Guide](QUICKSTART.md)
+- [Installation Guide](INSTALL.md)
- [Commands Reference](COMMANDS.md)
- [Google Drive Integration](GOOGLE_DRIVE_INTEGRATION.md)
- [Graph Visualization Guide](GRAPH_VISUALIZATION_EXPLAINED.md)
- [Theme Filtering](THEME_FILTERING.md)
+---
+
## πΊοΈ Roadmap
### Recently Completed
@@ -602,7 +669,7 @@ This project is licensed under the MIT License - see the LICENSE file for detail
- β
Project hulls and semantic zoom
- β
All Projects view
- β
Project pills in Timeline and Graph
-- β
Dynamic port configuration (VITE_PORT, VITE_API_URL env vars)
+- β
Dynamic port configuration (`VITE_PORT`, `VITE_API_URL` env vars)
- β
Automatic project assignment for new regions
- β
Fixed Universe Mode initial load issues
- β
Fixed region persistence across project views