diff --git a/README.md b/README.md index 58620a0e..80fc5900 100644 --- a/README.md +++ b/README.md @@ -14,302 +14,111 @@ --- -# Exosphere: Distributed AI Workflow Infrastructure +# Exosphere: Reliability Runtime for AI Agents -**Exosphere** is an open-source, Kubernetes-native infrastructure platform designed to run distributed AI workflows and autonomous agents at scale. Built with Python and based on a flexible node-based architecture, Exosphere enables developers to create, deploy, and manage robust AI workflows that can handle large-scale data processing and long-running operations. +**Exosphere** is a lightweight runtime to make AI agents resilient to failure and infinite scaling across distributed compute. With a few changes to your existing agent code, take your agent from demo to deployment. -![Example Workflow Run](/assets/workflow-run.png) - -## 🚀 What Exosphere Can Do +## Why Exosphere? Exosphere provides a powerful foundation for building and orchestrating AI applications with these key capabilities: -### **Reliable AI Workflows at Scale** -- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure -- **Dynamic State Management**: Create and manage state at runtime with persistent storage -- **Fault Tolerance**: Built-in failure handling and recovery mechanisms for production reliability -- **Core Concepts**: Fanout, Unite, Signals, Retry Policy, Store, Triggers +| Feature | Description | +|---------|-------------| +| [**Lightweight Runtime**](https://docs.exosphere.host/exosphere/architecture) | Execute workflows reliably with minimal overhead across distributed infrastructure using a state-based execution model. | +| [**Inbuilt Failure Handling**](https://docs.exosphere.host/exosphere/retry-policy) | Built-in retry policies with exponential backoff and jitter strategies for resilient, production-grade execution. | +| [**Infinite Parallel Agents**](https://docs.exosphere.host/exosphere/fanout) | Scale to unlimited parallel agents with automatic load distribution and dynamic fanout at runtime. | +| [**Dynamic Execution Graphs**](https://docs.exosphere.host/exosphere/concepts) | Durable execution designed for agentic flows with node-based control of execution. | +| [**Native State Persistence**](https://docs.exosphere.host/exosphere/store) | Persist workflow state across restarts and failures with graph-level key-value storage. | +| [**Observability**](https://docs.exosphere.host/exosphere/dashboard) | Visual monitoring, debugging, and management of workflows with real-time execution tracking. | -### **Smooth Developer Experience** -- **Plug-and-Play Nodes**: Create reusable, atomic workflow components that can be mixed and matched -- **Python-First**: Native Python support with Pydantic models for type-safe inputs/outputs -- **Interactive Dashboard**: Visual workflow management, monitoring, and debugging tools +Whether you're building data pipelines, AI agents, or complex workflow orchestrations, Exosphere provides the infrastructure backbone to make your AI applications production-ready and scalable. -### **Production Ready Infrastructure** -- **Kubernetes Native**: Deploy seamlessly on Kubernetes clusters for enterprise-grade scalability -- **State Persistence**: Maintain workflow state across restarts and failures -- **API Integration**: Connect to external services and APIs through configurable nodes -### **Built for AI Agents** -- **Autonomous Execution**: Build agents that can make decisions and execute complex workflows -- **Data Processing**: Handle large datasets with distributed processing capabilities -- **Long-Running Operations**: Support for workflows that run for hours, days, or indefinitely +--- -Whether you're building data pipelines, AI agents, or complex workflow orchestrations, Exosphere provides the infrastructure backbone to make your AI applications production-ready and scalable. +## Run Your First Agent -## 🎯 Use Cases & Applications +| Step | Description | +|------|-------------| +| [**Getting Started**](https://docs.exosphere.host/getting-started) | Get the Exosphere State Manager and Dashboard running locally for development. | +| [**Run Your First Node**](https://docs.exosphere.host/exosphere/register-node) | Create your first node and register it with the Exosphere runtime. | +| [**Trigger Agent**](https://docs.exosphere.host/exosphere/trigger-graph) | Learn how to trigger your agent workflows and manage execution flows. | +| [**Deploy and Monitor**](https://docs.exosphere.host/exosphere/dashboard) | Deploy your agents and monitor their execution with the visual dashboard. | -Exosphere is perfect for a wide range of AI and automation scenarios: +![How does this work?](assets/how.png) -- **Data Processing & ETL Pipelines** -- **AI Agent Orchestration** -- **Content Generation & Analysis** -- **API Integration & Automation** +--- -## Architecture Overview +## Architecture Overview Exosphere is built on a flexible, node-based architecture that makes it easy to create complex workflows: ![Exosphere Architecture](assets/exosphere-concepts.png) -### **Core Components** +### Core Components -- **Nodes**: Atomic, reusable units of work that can be AI agents, API calls, data processors, or any custom logic -- **Runtime**: The execution environment that manages and orchestrates your nodes -- **State Manager**: Handles persistent state across workflow executions -- **Dashboard**: Visual interface for monitoring and managing workflows -- **Graphs**: Define the flow and dependencies between nodes +| Component | Description | +|-----------|-------------| +| **Nodes** | Atomic, reusable units of work that can be AI agents, API calls, data processors, or any custom logic | +| **Runtime** | The execution environment that manages and orchestrates your nodes | +| **State Manager** | Handles persistent state across workflow executions | +| **Dashboard** | Visual interface for monitoring and managing workflows | +| **Graphs** | Define the flow and dependencies between nodes | -### **Key Concepts** +### Key Concepts ![Building blocks of Exosphere](assets/exosphere-components.png) -- **Fanout**: Distribute work across multiple parallel instances of a node -- **Unite**: Combine results from multiple parallel executions -- **Signals**: Inter-node communication and event handling -- **Retry Policy**: Configurable failure handling and recovery -- **Store**: Persistent storage for workflow state and data -- **Triggers**: Automatic scheduling with cron expressions - -## ⏰ Automatic Scheduling Example - -Schedule your workflows to run automatically using cron expressions: - -!!! info "Beta Feature" - Available in `beta-latest` Docker tag and SDK version `0.0.3b1` - -```python -from exospherehost import StateManager, GraphNodeModel, CronTrigger - -# Define triggers for automatic execution -triggers = [ - CronTrigger(expression="0 9 * * 1-5"), # Every weekday at 9 AM - CronTrigger(expression="0 */6 * * *") # Every 6 hours -] - -# Create graph with automatic scheduling -result = await state_manager.upsert_graph( - graph_name="data-pipeline", - graph_nodes=graph_nodes, - secrets={"api_key": "your-key"}, - triggers=triggers # Enable automatic execution (Beta) -) -``` - -### **Deployment Options** - -- **Local Development**: Run with Docker Compose for quick setup -- **Kubernetes**: Production-ready deployment on K8s clusters -- **Cloud**: Deploy on any cloud provider with Kubernetes support - -## 🚀 Getting Started - -### Prerequisites - -- Python 3.12+ -- [uv](https://docs.astral.sh/uv/) (recommended) or pip - -### Step 1: Installation - -```bash -uv add exospherehost -``` - -### Step 2: Create Your First Node - - Each node is an atomic, reusable unit in Exosphere. Once registered, you can plug it into any workflow. Nodes can be AI agents, API calls, data processors, or any custom logic you want to execute. - - ```python - from exospherehost import BaseNode - from pydantic import BaseModel - - class CityAnalyzerNode(BaseNode): - """A node that analyzes and describes a city using AI""" - - class Inputs(BaseModel): - city: str - analysis_type: str = "general" # general, tourism, business, etc. - - class Outputs(BaseModel): - description: str - key_features: str - score: str - - class Secrets(BaseModel): - openai_api_key: str # Optional: for AI-powered analysis - - async def execute(self) -> Outputs: - # Your custom logic here - could be: - # - AI agent calls - # - API requests - # - Data processing - # - Database queries - # - Any Python code! - - description = f"Analysis of {self.inputs.city}" - features = ["culture", "economy", "lifestyle"] - score = 8.5 - - return self.Outputs( - description=description, - key_features=json.dumps(features), - score=str(score) - ) - ``` - - - -### Step 3: Create and Start the Runtime - -Create the runtime and register your nodes: - ```python - from exospherehost import Runtime - - # Initialize the runtime with your nodes - runtime = Runtime( - name="city-analysis-runtime", - namespace="my-project", - nodes=[CityAnalyzerNode] - ) - - # Start the runtime (this will block the main thread) - runtime.start() - ``` - - **Run your application:** - ```bash - uv run main.py - ``` - - Your runtime is now running and ready to process workflows! 🎉 - -### Step 4: Define Your First Graph - - Graphs can be defined using JSON objects or with the new model-based Python SDK (beta) for better type safety and validation. See [Graph definitions](https://docs.exosphere.host/exosphere/create-graph/) for more examples. - - - - ```python - from exospherehost import StateManager, GraphNodeModel, RetryPolicyModel, RetryStrategyEnum - - async def create_graph(): - state_manager = StateManager(namespace="hello-world") - - graph_nodes = [ - GraphNodeModel( - node_name="MyFirstNode", - namespace="hello-world", - identifier="describe_city", - inputs={"city": "initial"}, - next_nodes=[] - ) - ] - - # Optional: Define retry policy (beta) - retry_policy = RetryPolicyModel( - max_retries=3, - strategy=RetryStrategyEnum.EXPONENTIAL, - backoff_factor=2000 - ) - - # Create graph with model-based approach (beta) - result = await state_manager.upsert_graph( - graph_name="my-first-graph", - graph_nodes=graph_nodes, - secrets={}, - retry_policy=retry_policy # beta - ) - ``` - -## Quick Start with Docker Compose - -Get Exosphere running locally in under 2 minutes: - -```bash -# Option 1: With cloud MongoDB (recommended) -echo "MONGO_URI=your-mongodb-connection-string" > .env -curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml -docker compose up -d - -# Option 2: With local MongoDB (development) -curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml -docker compose -f docker-compose-with-mongodb.yml up -d -``` - -**Environment Configuration:** -- Docker Compose automatically loads `.env` files from the working directory -- Create your `.env` file in the same directory as your docker-compose file - -Access your services: - -- **Dashboard**: `http://localhost:3000` -- **API**: `http://localhost:8000` - -> **📝 Note**: This configuration is for **development and testing only**. For production deployments, environment variable customization, and advanced configuration options, please read the complete **[Docker Compose Setup Guide](https://docs.exosphere.host/docker-compose-setup)**. - -## 📚 Documentation & Resources +| Concept | Description | +|---------|-------------| +| **Fanout** | Distribute work across multiple parallel instances of a node | +| **Unite** | Combine results from multiple parallel executions | +| **Signals** | Inter-node communication and event handling | +| **Retry Policy** | Configurable failure handling and recovery | +| **Store** | Persistent storage for workflow state and data | +| **Triggers** | Automatic scheduling with cron expressions | -### **Essential Guides** -- **[Getting Started Guide](https://docs.exosphere.host/getting-started)**: Complete walkthrough for new users -- **[Docker Compose Setup](https://docs.exosphere.host/docker-compose-setup)**: Run Exosphere locally in minutes -- **[Architecture Guide](https://docs.exosphere.host/exosphere/architecture)**: Understand core concepts like fanout and unite -- **[Youtube Walkthroughs](https://www.youtube.com/@exospherehost)**: Step by step demos on Exosphere and how to build reliable flows with sample code. -- **[Featured Exosphere Projects](https://github.com/exospherehost/exosphereprojects)**: Templates on common projects on Exosphere, pull and run! +--- -### **Advanced Topics** -- **[State Manager Setup](https://docs.exosphere.host/exosphere/state-manager-setup)**: Production deployment guide -- **[Dashboard Guide](https://docs.exosphere.host/exosphere/dashboard)**: Visual workflow management -- **[Graph Definitions](https://docs.exosphere.host/exosphere/create-graph/)**: Building complex workflows +## Resources -### **Community & Support** -- **[Official Documentation](https://docs.exosphere.host)**: Complete reference and tutorials -- **[Discord Community](https://discord.com/invite/zT92CAgvkj)**: Get help and connect with other developers -- **[GitHub Issues](https://github.com/exospherehost/exospherehost/issues)**: Report bugs and request features -- **[PyPI Package](https://pypi.org/project/exospherehost/)**: Latest stable releases +| Resource | Notes | +|----------|-------------| +| [**Getting Started Guide**](https://docs.exosphere.host/getting-started) | Complete walkthrough for new users | +| [**Docker Compose Setup**](https://docs.exosphere.host/docker-compose-setup) | Run Exosphere locally in minutes | +| [**Architecture Guide**](https://docs.exosphere.host/exosphere/architecture) | Understand core concepts like fanout and unite | +| [**YouTube Walkthroughs**](https://www.youtube.com/@exospherehost) | Step-by-step demos on Exosphere with sample code | +| [**Featured Projects**](https://github.com/exospherehost/exosphereprojects) | Templates on common projects, pull and run | +### Community and Support +| Resource | Description | +|----------|-------------| +| [**Official Documentation**](https://docs.exosphere.host) | Complete reference and tutorials | +| [**Discord Community**](https://discord.com/invite/zT92CAgvkj) | Get help and connect with other developers | +| [**GitHub Issues**](https://github.com/exospherehost/exospherehost/issues) | Report bugs and request features | +| [**PyPI Package**](https://pypi.org/project/exospherehost/) | Latest stable releases | -## 🌟 Open Source Commitment +--- -We believe that open source is the foundation of innovation and progress. Exosphere is our contribution to this movement, and we're committed to supporting the community in multiple ways: +## Open Source Commitment -### **Our Promise to the Community** +We believe that humanity would not have been able to achieve the level of innovation and progress we have today without the support of open source and community. We want to be a part of this movement. -1. **🔄 Open Source First**: The majority of our codebase is open source and available to everyone -2. **💰 Giving Back**: A portion of our profits goes directly to supporting open source projects and communities -3. **🎓 Mentorship**: We actively collaborate with student programs to mentor the next generation of developers -4. **🤝 Community Driven**: We welcome contributions, feedback, and collaboration from developers worldwide +Please feel free to reach out to us at [nivedit@exosphere.host](mailto:nivedit@exosphere.host). Let's push the boundaries of possibilities for humanity together. -### **Get Involved** +--- -- **Contributors**: Help us build the future of AI infrastructure -- **Users**: Your feedback shapes our roadmap and priorities -- **Students**: Join our mentorship programs and grow your skills -- **Organizations**: Partner with us to advance open source AI tools +## Release Cycle and Roadmap -**Ready to make a difference?** Reach out to us at [nivedit@exosphere.host](mailto:nivedit@exosphere.host) and let's push the boundaries of what's possible together! 🚀 - -## 🎯 Ready to Get Started? +Exosphere follows a predictable, calendar-based release process: -Exosphere is designed to make AI workflow development accessible, scalable, and production-ready. Whether you're building your first AI agent or scaling to thousands of parallel workflows, Exosphere provides the infrastructure you need. - -### **Next Steps:** -1. **⭐ Star this repository** to show your support -2. **🚀 Try the quick start** with our Docker Compose setup -3. **💬 Join our Discord** community for help and discussions -4. **📖 Read the docs** for comprehensive guides and examples -5. **🤝 Contribute** to help us build the future of AI infrastructure +| Aspect | Description | +|--------|-------------| +| **Monthly Releases** | A new stable version ships at the end of every month | +| **Issue and PR Labelling** | Work intended for a release is tagged `YYYY:Mon` (e.g., `2026:Jan`). Filter by this label in GitHub to see exactly what is planned | +| **Living Roadmap** | The collection of items carrying the current month's label is our public roadmap. Follow along in GitHub Projects to track progress in real time | --- @@ -317,7 +126,6 @@ Exosphere is designed to make AI workflow development accessible, scalable, and We welcome community contributions. For guidelines, refer to our [CONTRIBUTING.md](https://github.com/exospherehost/exospherehost/blob/main/CONTRIBUTING.md). -![exosphere.host Contributors](https://contrib.rocks/image?repo=exospherehost/exospherehost) - - +Thanks to our awesome contributors! +![exosphere.host Contributors](https://contrib.rocks/image?repo=exospherehost/exospherehost) diff --git a/assets/how.png b/assets/how.png new file mode 100644 index 00000000..f9b81ef9 Binary files /dev/null and b/assets/how.png differ diff --git a/docs/docs/exosphere/concepts.md b/docs/docs/exosphere/concepts.md index 61f441e5..b28ab82b 100644 --- a/docs/docs/exosphere/concepts.md +++ b/docs/docs/exosphere/concepts.md @@ -1,6 +1,6 @@ -# Exosphere Concepts +# Concepts -Exosphere is built around several core concepts that make it unique in the workflow orchestration space. This page provides an overview of these key features and how they work together. +Exosphere is built around several core concepts that make it uniquely positioned for reliable orchestration of agents. This page provides an overview of these key features and how they work together. ## Core Concepts Overview diff --git a/docs/docs/index.md b/docs/docs/index.md index 7a4fcd63..48933aff 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -1,4 +1,6 @@ -![exosphere logo](assets/logo-with-bg.png) +

+exosphere logo +

Docs @@ -11,175 +13,127 @@

-# Exosphere: Distributed AI Workflow Infrastructure +# Exosphere: Reliability runtime for AI agents -**Exosphere** is an open-source, Kubernetes-native infrastructure platform designed to run distributed AI workflows and autonomous agents at scale. Built with Python and based on a flexible node-based architecture, Exosphere enables developers to create, deploy, and manage robust AI workflows that can handle large-scale data processing and long-running operations. +**Exosphere** is a lightweight runtime to make AI agents resilient to failure and infinite scaling across distributed compute. With a few changes to your existing agent code, take your agent from demo to deployment. -## What Exosphere Can Do +## Why Exosphere? Exosphere provides a powerful foundation for building and orchestrating AI applications with these key capabilities: -### **Scalable AI Workflows** -- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure -- **Dynamic State Management**: Create and manage state at runtime with persistent storage -- **Fault Tolerance**: Built-in failure handling and recovery mechanisms for production reliability -- **Core Concepts**: [Fanout](./exosphere/fanout.md), [Unite](./exosphere/unite.md), [Signals](./exosphere/signals.md), [Retry Policy](./exosphere/retry-policy.md), [Store](./exosphere/store.md) +
-### **Developer Experience** -- **Plug-and-Play Nodes**: Create reusable, atomic workflow components that can be mixed and matched -- **Python-First**: Native Python support with Pydantic models for type-safe inputs/outputs +
-### **Production Infrastructure** -- **Kubernetes Native**: Deploy seamlessly on Kubernetes clusters for enterprise-grade scalability -- **State Persistence**: Maintain workflow state across restarts and failures -- **Interactive Dashboard**: Visual workflow management, monitoring, and debugging tools +### [Lightweight Runtime](./exosphere/architecture.md) -### **AI Agent Capabilities** -- **Autonomous Execution**: Build agents that can make decisions and execute complex workflows -- **Data Processing**: Handle large datasets with distributed processing capabilities -- **API Integration**: Connect to external services and APIs through configurable nodes +Execute workflows reliably with minimal overhead across distributed infrastructure using a state-based execution model. -Whether you're building data pipelines, AI agents, or complex workflow orchestrations, Exosphere provides the infrastructure backbone to make your AI applications production-ready and scalable. +
---- +
-**Watch the Step by Step Demo**: +### [Inbuilt Failure Handling](./exosphere/retry-policy.md) - - Step by Step Execution of an Exosphere Workflow - +Built-in retry policies with exponential backoff and jitter strategies for resilient, production-grade execution. +
---- +
-## Requirements +### [Infinite Parallel Agents](./exosphere/fanout.md) -Python 3.12+ +Scale to unlimited parallel agents with automatic load distribution and dynamic fanout at runtime. -## Installation +
-```bash -uv add exospherehost -``` +
-## Example +### [Dynamic Execution Graphs](./exosphere/concepts.md) -### Create +Durable execution designed for agentic flows with node based control of execution. -Create a file `main.py` with: +
-```python -from exospherehost import Runtime, BaseNode -from pydantic import BaseModel +
-class HelloWorldNode(BaseNode): - class Inputs(BaseModel): - name: str +### [Native State Persistence](./exosphere/store.md) - class Outputs(BaseModel): - message: str +Persist workflow state across restarts and failures with graph-level key-value storage. - class Secrets(BaseModel): - pass +
- async def execute(self) -> Outputs: - return self.Outputs( - message=f"Hello, {self.inputs.name}!" - ) +
-# Initialize the runtime -Runtime( - namespace="MyProject", - name="HelloWorld", - nodes=[HelloWorldNode] -).start() # Note: This blocks the main thread -``` +### [Observability](./exosphere/dashboard.md) -!!! info "Interactive Environments" - If you're using Jupyter notebooks or Python REPLs, `Runtime.start()` will block your session. See the [Getting Started guide](./getting-started.md#important-blocking-behavior) for non-blocking alternatives. +Visual monitoring, debugging, and management of workflows with real-time execution tracking. -### Run +
-Run the server with: +
-```bash -uv run main.py -``` +Whether you're building data pipelines, AI agents, or complex workflow orchestrations, Exosphere provides the infrastructure backbone to make your AI applications production-ready and scalable. -### Check +--- -Your runtime is now running and ready to process workflows! +**Watch the Step by Step Demo**: + + Step by Step Execution of an Exosphere Workflow + + + +--- -### Local Development +## Run your first agent -Get the Exosphere State Manager and Dashboard ready to start building workflows locally. +
-Ref: [Local Setup](./exosphere/local-setup.md) +
-## Example graph +### [Getting Started](./getting-started.md) -Now modify the file `main.py` to add more complex processing: +Get the Exosphere State Manager and Dashboard running locally for development. -```python -from exospherehost import Runtime, BaseNode -from pydantic import BaseModel -import json +
-class DataProcessorNode(BaseNode): - class Inputs(BaseModel): - data: str - operation: str +
- class Outputs(BaseModel): - result: str - status: str +### [Run your first Node](./exosphere/register-node.md) - class Secrets(BaseModel): - api_key: str +Create your first node and register it with the Exosphere runtime. - async def execute(self) -> Outputs: - # Parse the input data - try: - data = json.loads(self.inputs.data) - except json.JSONDecodeError as e: - return self.Outputs( - result="", - status=f"error: invalid json (line {e.lineno}, column {e.colno})" - ) +
- # Process based on operation - if self.inputs.operation == "transform": - result = {"transformed": data, "processed": True} - else: - result = {"original": data, "processed": False} +
- return self.Outputs(result=json.dumps(result), status="success") +### [Trigger Agent](./exosphere/trigger-graph.md) +Learn how to trigger your agent workflows and manage execution flows. -# Initialize the runtime -Runtime( - namespace="MyProject", - name="DataProcessor", - nodes=[DataProcessorNode] -).start() -``` +
-The runtime will automatically reload and register the updated node. +
+ +### [Deploy & Monitor](./exosphere/dashboard.md) + +Deploy your agents and monitor their execution with the visual dashboard. + +
+ +
## Open Source Commitment We believe that humanity would not have been able to achieve the level of innovation and progress we have today without the support of open source and community, we want to be a part of this movement! -1. We will be open sourcing majority of our codebase for exosphere.host and making it available to the community. We welcome all sort of contributions and feedback from the community and will be actively listening. -2. For whatever the profits which we generate from exosphere.host, we will be donating a portion of it to open source projects and communities. If you have any questions, suggestions or ideas. -3. We would be further collaborating with various open source student programs to provide with the support and encourage and mentor the next generation of open source contributors. - Please feel free to reach out to us at [nivedit@exosphere.host](mailto:nivedit@exosphere.host). Let's push the boundaries of possibilities for humanity together! ## Contributing We welcome community contributions. For guidelines, refer to our [CONTRIBUTING.md](https://github.com/exospherehost/exospherehost/blob/main/CONTRIBUTING.md). +Thanks to our awesome contributors! ![exosphere.host Contributors](https://contrib.rocks/image?repo=exospherehost/exospherehost) diff --git a/docs/docs/stylesheets/extra.css b/docs/docs/stylesheets/extra.css index 8b12987c..1098562b 100644 --- a/docs/docs/stylesheets/extra.css +++ b/docs/docs/stylesheets/extra.css @@ -95,4 +95,83 @@ --md-footer-fg-color: #FFFFFF; --md-footer-bg-color: #031035; +} + +/* Decrease margins for main content */ +.md-content__inner { + margin: 0rem 0rem !important; +} + +.md-typeset { + margin: 0.5rem 0 !important; +} + +.md-content { + margin: 0rem 0 !important; +} + +.md-grid{ + max-width: 100% !important; +} + +/* Feature Grid Styles */ +.feature-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.5rem; + margin: 2rem 0; +} + +.feature-card { + background: var(--md-default-bg-color); + border-radius: 8px; + padding: 1.5rem; + border: 1px solid var(--md-default-fg-color--lighter); + transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; +} + +.feature-card:hover { + transform: translateY(-4px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); + border-color: var(--md-accent-fg-color); +} + +.feature-card h3 { + margin: 0 0 0.5rem 0; +} + +.feature-card h3 a { + color: var(--md-typeset-a-color); + text-decoration: none; + transition: color 0.2s ease; +} + +.feature-card h3 a:hover { + color: var(--md-accent-fg-color); +} + +.feature-card p { + margin: 0; + color: var(--md-typeset-color); + font-size: 0.9rem; + line-height: 1.5; + opacity: 0.85; +} + +[data-md-color-scheme="exosphere-dark"] .feature-card { + background: var(--md-default-bg-color); + border-color: rgba(102, 209, 181, 0.2); +} + +[data-md-color-scheme="exosphere-dark"] .feature-card:hover { + border-color: var(--md-accent-fg-color); +} + +[data-md-color-scheme="exosphere-light"] .feature-card { + background: #ffffff; + border-color: rgba(9, 17, 41, 0.1); +} + +[data-md-color-scheme="exosphere-light"] .feature-card:hover { + border-color: var(--md-accent-fg-color); } \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 44bf3d6a..927d39dd 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -121,6 +121,8 @@ plugins: - exosphere/architecture.md markdown_extensions: + - attr_list + - md_in_html - pymdownx.highlight: anchor_linenums: true line_spans: __span @@ -144,8 +146,8 @@ nav: - Orchestrator: - Introduction: index.md - Getting Started: getting-started.md - - Exosphere Concepts: - - Overview: exosphere/concepts.md + - Why Exosphere?: + - Concepts Overview: exosphere/concepts.md - Architecture: exosphere/architecture.md - Fanout: exosphere/fanout.md - Unite: exosphere/unite.md @@ -162,8 +164,8 @@ nav: - Create Runtime: exosphere/create-runtime.md - Create Graph: - Overview: exosphere/create-graph.md - - Components: exosphere/graph-components.md - - Validation: exosphere/graph-validation.md + - Graph Components: exosphere/graph-components.md + - Graph Validation: exosphere/graph-validation.md - Python SDK: exosphere/python-sdk-graph.md - Trigger Graph: exosphere/trigger-graph.md - Inference APIs: inference.md \ No newline at end of file