commit 30a59d7e4e6013d27b048037f6a17df2ae4843e3 Author: ycc Date: Tue Jan 20 19:49:41 2026 +0100 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d298be1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +public/ \ No newline at end of file diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..85cc4ee --- /dev/null +++ b/config.toml @@ -0,0 +1,45 @@ +# The URL the site will be built for +base_url = "https://www.o-cloud.io" + +title = "OpenCloud" +description = "Open-source sovereign distributed cloud for trusted peer-to-peer infrastructures." + +default_language = "en" +compile_sass = true +theme = "opencloud" +generate_sitemap = true +build_search_index = true + +[markdown] +highlight_code = true +highlight_theme = "base16-ocean-dark" + +[extra] +project_name = "OpenCloud" +project_short = " " +tagline = "A sovereign, peer-to-peer distributed cloud for trusted partners." +repo_url = "https://cloud.o-forge.io/explore/repos" +primary_cta_label = "Explore the project" +primary_cta_url = "/project" +secondary_cta_label = "View the source" +secondary_cta_url = "https://cloud.o-forge.io" + +[[extra.nav_items]] +name = "Project" +url = "/project" + +[[extra.nav_items]] +name = "Architecture" +url = "/project/architecture" + +[[extra.nav_items]] +name = "Roadmap" +url = "/project/roadmap" + +[[extra.nav_items]] +name = "Documentation" +url = "/documentation" + +[[extra.nav_items]] +name = "Downloads" +url = "/downloads" \ No newline at end of file diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..8a1b63d --- /dev/null +++ b/content/_index.md @@ -0,0 +1,427 @@ ++++ +title = "OpenCloud" +description = "Open-source distributed cloud to share, sell, or rent infrastructure resources across trusted peers." +template = "index.html" ++++ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Public cloudsPrivate infrastructures federation + +
+ +OpenCloud is an open-source, **distributed cloud fabric** that lets you selectively **share, sell, or rent** your infrastructure resources — data, algorithms, compute power, and storage — with other OpenCloud peers. + +It provides a **peer-to-peer execution layer** that can orchestrate distributed workflows across multiple organizations, while each participant keeps full **sovereign control** over data, infrastructure, and trust relationships. + +Distributed execution within the network can be optimized according to your own priorities: + +- **Maximal sovereignty** +- **Accelerated computation** +- **Cost minimization** +- **Optimized infrastructure investments** + +Each OpenCloud instance includes: + +- an **OpenID-based distributed authentication system** +- a fully **decentralized architecture** with **no central authority** and **no single point of failure** +- **transaction tracking and peer-to-peer billing**, ensuring fair compensation for all partners + +[Explore the Project →](/project) +[View the Source Code →](https://cloud.o-forge.io) diff --git a/content/documentation/_index.md b/content/documentation/_index.md new file mode 100644 index 0000000..4b3ef48 --- /dev/null +++ b/content/documentation/_index.md @@ -0,0 +1,238 @@ ++++ +title = "Documentation" +description = "OpenCloud Technical Documentation — Work in Progress" +template = "section.html" ++++ + +# OpenCloud Documentation +*Work in Progress* + +This documentation site provides a unified and structured view of all core concepts behind **OpenCloud**, the sovereign, distributed, peer-to-peer cloud platform. + +All OpenCloud microservices expose **OpenAPI-compliant specifications**, ensuring that: + +- API structures and endpoints are always discoverable +- Code generation can be automated +- Integrators can explore service capabilities +- Implementations remain consistent across deployments + +The full set of OpenAPI definitions will be progressively published as the platform stabilizes and services reach higher maturity levels. + +--- + +# Documentation Status + +This documentation is currently **under construction**. + +Each section below represents a major technical capability of OpenCloud. +Pages will be expanded iteratively to include: + +- Concepts & design principles +- Architecture diagrams +- API references (via OpenAPI) +- Usage scenarios +- Configuration guidelines +- Deployment instructions +- Best practices & integration patterns + +If you want detailed or early-access drafts for any section, feel free to request them. + +--- + +# Table of Contents + +Below is the initial Table of Contents for the OpenCloud documentation. +Every topic listed here will eventually become a dedicated page or section. + +--- + +## 1. Introduction to OpenCloud +- What is OpenCloud? +- Sovereignty principles +- Federated trust model +- Architecture overview +- Glossary of OpenCloud concepts + +--- + +## 2. Resource Catalog +The Catalog is the foundation of all OpenCloud interactions. + +- Resource model +- Metadata definitions (`catalog_metadata`) +- Data resources +- Algorithm resources +- Compute Units +- Storage resources +- Workflow templates +- Resource visibility (public / restricted / private) +- Access rules (credentials, payment, agreements) +- API endpoints (OpenAPI) + +--- + +## 3. Peer Discovery & Connectivity +OpenCloud’s decentralization starts with peer discovery. + +- Peer registration +- Peer identities +- Distributed trust graph +- Community/group definitions +- Private federations +- Peer health and presence +- Networking models (P2P overlays, WAN, LAN) +- API endpoints (OpenAPI) + +--- + +## 4. Authentication & Authorization +Identity and access control across distributed partners. + +- OpenID-based distributed authentication +- Federation of identity providers +- Session and token management +- Access scopes & privileges +- Fine-grained access control +- Collaborative area rule enforcement +- API endpoints (OpenAPI) + +--- + +## 5. Workspace Management +Organizing data, algorithms, and services for distributed workflows. + +- Workspaces lifecycle +- Resource selection +- Project and team organization +- Collaboration patterns +- Integration with workflows +- API endpoints (OpenAPI) + +--- + +## 6. Workflow Design & Distributed Execution +The heart of OpenCloud’s capabilities. + +- Workflow design principles +- Editor interface concepts +- Distributed data flows +- Execution strategies + - Sovereignty-optimized + - Performance-optimized + - Cost-optimized + - Hybrid strategies +- Multi-cloud and edge execution +- Stateless vs. stateful operations +- Error handling & retries +- Workflow templates and sharing +- API endpoints (OpenAPI) + +--- + +## 7. Deployment & Resource Booking +Running services and reserving infrastructure across peers. + +- Deployment model +- Resource reservation (compute, storage, algorithms) +- SLA & QoS considerations +- Scheduling and placement policies +- Deployment on datacenter vs. edge nodes +- Public-cloud hybrid deployments +- API endpoints (OpenAPI) + +--- + +## 8. Monitoring & Observability +Understanding system state across distributed deployments. + +- Metrics collection +- Execution tracing +- Peer availability & health +- Resource usage dashboards +- Alerts & notifications +- Integration with Prometheus, Loki, Grafana +- API endpoints (OpenAPI) + +--- + +## 9. Accounting & Peer-to-Peer Billing +Tracking distributed resource consumption. + +- Transaction capture +- Usage metering models +- Resource pricing +- Peer-to-peer cost settlement +- Billing transparency +- Audit logs +- API endpoints (OpenAPI) + +--- + +## 10. Collaborative Areas +Governance for multi-organization projects. + +- Workspace sharing +- Policy rules (open-source only, no personal data, legal restrictions, visibility constraints) +- Auto-enforced vs. manually-reviewed rules +- Community membership +- Compliance workflows +- API endpoints (OpenAPI) + +--- + +## 11. Platform Components & Microservices +Detailed documentation for each service. + +- Service overview +- Responsibilities & isolation +- Deployment diagrams +- Configuration parameters +- Inter-service API contracts (OpenAPI) + +--- + +## 12. Deployment Guides +Instructions for various environments. + +- Local developer installations +- Bare-metal and VM deployments +- Kubernetes & containerized environments +- Edge deployments (ARM SBCs) +- Cloud provider deployment +- High-availability patterns + +--- + +## 13. Security +Security is an essential dimension of OpenCloud. + +- Communication security +- Mutual authentication +- Data confidentiality +- Integrity & non-repudiation +- Threat models +- Secure default configurations + +--- + +## 14. Roadmap & Future Evolutions +- Upcoming features +- Long-term vision +- Governance model +- Community contributions +- API deprecations + +--- + +## 15. API Reference (auto-generated) +All microservices expose: + +- REST endpoints +- JSON schema definitions +- Error codes +- Webhooks (if any) +- Tooling for client generation + +These pages are directly generated from the OpenAPI contract. + +--- diff --git a/content/downloads/_index.md b/content/downloads/_index.md new file mode 100644 index 0000000..088d5f4 --- /dev/null +++ b/content/downloads/_index.md @@ -0,0 +1,75 @@ ++++ +title = "Downloads" +description = "Source code" ++++ +Right now OpenCloud is only distributed as source code. + +It can be accessed though our forge [https://cloud.o-forge.io](https://cloud.o-forge.io) + +--- + +# Development + +OpenCloud relies on a micro services architecture. +Each component could be developed using specific technologies. +However, in order to preserve product consistency and ease maintenance activities, we strongly encourage using the following technological stacks. + +## Web services + +Web services are developped in Go using Beego stack + +### Environment setup + +When using pricate repositories like the OpenCloud git forge, you should define it as a private repository + + export GOPRIVATE=cloud.o-forge.io + +The Beego stack provides the bee cli tool to ease building process : + + go get github.com/beego/bee/v2@latest + +### Project initialization + +New component creation + + go mod init oc-mycomponent + +Refer to other services component main.go file to write a consitent initialisation process + +### Project build + +In order to build the software : + + bee run -downdoc=true -gendoc=true + +The -downdoc=true -gendoc=true will automatically generate swagger documentation in the /swagger path + +If default Swagger page is displayed instead of your api, change url in swagger/index.html file to : + + url: "swagger.json" + +If annotations are modified without any code changed, a rebuild might not reflect the changes. +To force routing information update : + + bee generate routers + +## GUI components + +The GUI are developped using Flutter framework + +### Environment setup + +* Install Flutter framework +* Install Android Studio +* In "Tools"->"SDK Manager"->"Apparenace & Behaviour/System Settings/Android SDK", go to "SDK tools" and tick the "Android SDK command line tools" +* Run flutter doctor commmand and follow instructions to accept SDK licenses +* Add Vscode flutter plugin and use Vscode Command palette to create a Flutter project +* Also set the target Device using command Palette + +### Project build + +Depending on your target platform : + + flutter build web + flutter build linux + flutter build windows \ No newline at end of file diff --git a/content/project/_index.md b/content/project/_index.md new file mode 100644 index 0000000..fc2934c --- /dev/null +++ b/content/project/_index.md @@ -0,0 +1,58 @@ ++++ +title = "The OpenCloud Project" +description = "A sovereign, peer-to-peer distributed cloud fabric for sharing infrastructure and resources across trusted partners." ++++ + +Each participant can selectively share: + +- **Data** +- **Algorithms** +- **Compute power** +- **Storage** +- **Pre-built workflows and services** + +with other OpenCloud peers, under rules they fully control. + +## What OpenCloud Enables + +With OpenCloud, organizations can: + +- Build **cross-organization workflows** that run across multiple infrastructures +- **Monetize resources** (share, sell, or rent capacity and services) +- Create **private communities of peers** for sensitive or strategic projects +- Maintain full **control over data location and access policies** +- Track **resource consumption and billing** transparently between partners + +## Optimization on Your Own Terms + +Distributed execution in OpenCloud is not tied to a single global policy. +Each instance can optimize workflows for its own objectives: + +- **Maximal sovereignty** – prioritize data locality, compliance, and strategic autonomy +- **Accelerated computation** – prioritize time-to-result and performance +- **Cost minimization** – route workloads based on cost constraints +- **Optimized infrastructure investments** – improve utilization of existing assets + +## Key Concepts + +OpenCloud instances expose a set of integrated services: + +- **Resource Catalog** – index and describe data, algorithms, compute units, storage, and workflows +- **Workspace Management** – organize resources of interest into project-oriented workspaces +- **Workflow Editor** – build distributed workflows and permanent services from catalog elements +- **Collaborative Areas** – define rules and constraints for shared workspaces and workflows +- **Peer Management** – configure trust relationships and access rights between peers and groups + +These services together create a **cooperation framework** that covers both **technical** and **organizational/legal** aspects of distributed projects. + +## Who Is OpenCloud For? + +OpenCloud targets organizations that: + +- Need to collaborate on **data- and compute-intensive projects** +- Care about **sovereignty, compliance, and resilience** +- Want to avoid **vendor lock-in** and opaque proprietary platforms +- Intend to run workloads **from datacenter to edge** and possibly on **public cloud** when appropriate + +[Discover the Architecture →](/project/architecture) +[Explore Features and Benefits →](/project/features) diff --git a/content/project/architecture.md b/content/project/architecture.md new file mode 100644 index 0000000..5e0e4cc --- /dev/null +++ b/content/project/architecture.md @@ -0,0 +1,4894 @@ ++++ +title = "Architecture" +description = "OpenCloud is built as a peer-to-peer, fully decentralized cloud fabric. " ++++ + + +Each OpenCloud instance is both: + +- a **sovereign controller** of its own infrastructure and resources, and +- a **peer node** in a broader distributed network of partners. + +There is **no central authority**, no single registry, and no single point of failure. + +--- + +## Core Architectural Principles + +- **Sovereignty by Design** + Each instance maintains full control over its resources, policies, and trust relationships. + +- **Decentralization** + The system is architected as a **mesh of peers** instead of a hub-and-spoke model. + +- **Pluggable Workflows & Services** + Workflows and services are defined on top of a common fabric of cataloged resources. + +- **Observability & Accounting** + All resource usage is tracked to enable transparent **peer-to-peer billing** and accountability. + +--- + +## General Architecture + +
+ + + + + + +OpenCloud API + + +ComputeServerlessDistributed filesystemsNoSQLdatabasesGroundsegmentsAItrainingSOCIOTHealth researchDefenceapplicationsUserapplicationsOpenCloudinterfaceTechnicalinfrastructuredistributed accountingdistributed schedulingautomateddeploymentSQLdatabasesResourcescatalogpeerdiscovery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Public cloudsEdge devicesPrivate infrastructures    Raspberry Pi 3 Model B V1.2 + +Power +HDMI +Audio +USB 2x +USB 2x +ETHERNET +DSI (DISPLAY) +CSI (CAMERA) +GPIO +© Raspberry Pi 2015 + +
+ +## Authentication and Identity + +Each OpenCloud instance includes an **OpenID-based distributed authentication system**. + +This allows: + +- Federated authentication across multiple organizations +- Integration with existing identity providers +- Consistent user identity across peers and collaborative areas + +Access control is enforced at multiple levels: **resources, workspaces, workflows, collaborative areas, peers, and groups**. + +--- + +## Execution Fabric + +The execution layer orchestrates **distributed workflows** across multiple peers. + +Key characteristics: + +- Workflows may span **several independent infrastructures** +- Execution strategies can be tuned per instance for **sovereignty**, **performance**, or **cost** +- Workloads can run on **datacenters**, **edge nodes**, or **public cloud** instances running OpenCloud + +--- + +## Runtime Footprint + +The core OpenCloud services are implemented in **Go**, delivering: + +- **Native code** for efficient CPU and memory usage +- Lightweight **scratch containers** for deployment + +This enables: + +- High-density deployments in datacenters +- Efficient execution on resource-constrained edge devices (e.g., ARM-based single-board computers) + +The user interfaces are built with **Flutter** and rendered as **HTML/JS**, reducing client requirements to a standard web browser. + +--- + +## Accounting and Billing + +OpenCloud provides **transaction tracking** mechanisms that: + +- Record distributed resource usage +- Provide a basis for **peer-to-peer billing** +- Increase transparency and trust among partners + +This makes it possible to build **economic models** (sharing, selling, renting resources) on top of the technical platform. + +--- + +## Hybrid Deployment Scenarios + +OpenCloud can be deployed: + +- On-premises, within one or multiple datacenters +- At the edge, close to data sources or sensors +- On public cloud providers for scalable, non-sensitive workloads + +These instances can all be **peers in the same OpenCloud fabric**, enabling a **hybrid and multi-cloud** architecture under a consistent sovereignty framework. diff --git a/content/project/faq.md b/content/project/faq.md new file mode 100644 index 0000000..8e257e9 --- /dev/null +++ b/content/project/faq.md @@ -0,0 +1,17 @@ ++++ +title = "FAQ" ++++ + +# Frequently Asked Questions + +**Is OpenCloud a replacement for traditional cloud providers?** +It might be a substitute for some users with very strong privacy concerns, but generally it complements them by enabling sovereign interconnections between private clouds. + +**Who controls the data?** +Each participant retains full control of its own resources and data flows. + +**How is trust managed?** +Trust is peer-defined. Nodes explicitly accept or reject partnerships. + +**Is the project open-source?** +Yes, under a permissive license — link available on the home page. diff --git a/content/project/features.md b/content/project/features.md new file mode 100644 index 0000000..32a1dc2 --- /dev/null +++ b/content/project/features.md @@ -0,0 +1,204 @@ ++++ +title = "Features & Benefits" +description = "Core services, collaboration capabilities, and strategic benefits of the OpenCloud distributed cloud fabric." ++++ + +# Features & Benefits + +Each OpenCloud instance runs a collection of services that allow users to interact with their own deployment and with other OpenCloud participants. +Together, these services form a **federated cloud fabric** that is both technically powerful and strategically aligned with sovereignty goals. + +--- + +## Core Services + +### Resource Catalog + +The **Resource Catalog** indexes all resources provided by an OpenCloud instance, including: + +- **Data** +- **Algorithms** +- **Compute Units** +- **Storages** +- **Processing Workflows** + +Every resource is described by metadata (see the `catalog_metadata` definition) and can be: + +- **Public** – visible to all OpenCloud peers +- **Restricted** – visible only to selected partners, projects, entities, or groups + +Access to specific resources may require: + +- Credentials +- Payment +- Contractual or policy-based agreements + +This catalog is the foundation for **discoverability, interoperability, and monetization** of resources. + +--- + +### Workspace Management + +Each OpenCloud user can create **workspaces** to organize resources of interest. +Within a workspace, users can: + +- Aggregate data, algorithms, and compute/storage units from their own instance and from peers +- Prepare resources that will be used in **processing workflows** or **permanent services** +- Structure projects by theme, partner, or business objective + +Workspaces make complex, multi-partner projects more manageable and traceable. + +--- + +### Workflow Editor + +Using resources collected in a workspace, users can build: + +- **Distributed processing workflows** +- **Permanent services** running on top of the OpenCloud fabric + +The **integrated workflow editor** provides a user-friendly interface to define and manage: + +- Processing chains spanning multiple peers +- Data flows and storage locations +- Execution policies aligned with sovereignty, cost, or performance objectives + +This enables **end-to-end distributed workflows** without central orchestration dependencies. + +--- + +### Collaborative Areas + +OpenCloud supports the creation of **Collaborative Areas**, where: + +- Workspaces and workflows can be shared with selected partners +- Rules and constraints can be defined and enforced (automatically or via manual review) + +Examples of rules include: + +- Only **open-source components** allowed in the workflows +- **No personal data** allowed, or strict constraints on its use +- Specific **result visibility** and sharing policies +- **Legal and compliance limitations** tied to jurisdictions or contracts + +Collaborative Areas provide a robust framework for **governed, multi-party collaboration**. + +--- + +### Peer Management + +OpenCloud allows you to define and manage relationships with other peers, enabling the creation of: + +- Private communities of trusted partners +- Thematic or project-based federations + +Access rights and trust levels can be configured: + +- At a **global peer scope** +- For **specific groups** or communities within the peer network + +This supports **fine-grained, community-aware access control** across the distributed cloud. + +--- + +## Strategic Benefits + +### Complete Control Over Data Location + +OpenCloud encourages users to **host their own data**. +When external storage is required, OpenCloud allows you to: + +- Carefully select **where** data is replicated +- Choose **which peers** can host copies +- Ensure **privacy, compliance, and performance** through data locality control + +--- + +### Cooperation Framework + +OpenCloud provides a structured **cooperation framework** that covers: + +- **Data sharing and common workspaces** +- **Usage and access regulations** +- Alignment between **technical mechanisms** and **legal/contractual rules** + +This framework is particularly suited for **cross-organization, regulated, or high-stakes projects**. + +--- + +### Data Redundancy with Sovereignty + +Like public clouds, OpenCloud supports **data redundancy** for availability and resilience. +However, it does so with **finer-grained control**: + +- You decide on which peers and in which jurisdictions your data is replicated +- Redundancy policies can reflect **regulatory** or **strategic** constraints + +--- + +### Hybrid Compatibility with Public Cloud + +When workloads require **massive storage or computational capabilities** beyond what your peer network can provide, you can: + +- Deploy an OpenCloud instance on a **public cloud provider** +- Use it as an extension of your federated infrastructure +- Offload **non-sensitive or non-strategic workloads** to public cloud capacity + +This enables a **hybrid architecture** where sovereignty-sensitive workloads remain under your control, while others can scale on demand. + +--- + +### Fine-Grained Access Control + +OpenCloud offers **fine-grained access control** mechanisms that allow you to: + +- Define **who** can access **what**, **from where**, and **under which conditions** +- Apply policies at the level of **resources, workspaces, collaborative areas, and peers** +- Combine **technical controls** with **organizational rules** + +--- + +### Lightweight for Datacenter and Edge + +The OpenCloud stack is developed in **Go**, generating: + +- **Native binaries** +- Minimal **scratch containers** + +All selected COTS components for OpenCloud services follow the same design philosophy. + +As a result, OpenCloud can run: + +- In **datacenters**, to support large-scale processing workflows +- On **ARM-based single-board computers**, to handle concurrent payloads such as: + - Sensor preprocessing + - Image recognition + - Data filtering + +Graphical interfaces are implemented in **Flutter** and rendered as **HTML/JS**, enabling lightweight deployment with standard web technologies. + +--- + +### Fully Distributed and Resilient + +OpenCloud has a **fully distributed architecture**: + +- No central administrator +- No central registry or authority +- No single point of failure + +Partners can join or leave the network without disrupting the broader community, making the system inherently **resilient** and suitable for **long-lived collaborations**. + +--- + +### Open Source and AGPL v3 Licensed + +To foster trust and prevent opaque forks, OpenCloud is released as **open-source software** under the **AGPL v3** license. + +This ensures that: + +- The codebase remains **transparent and auditable** +- Contributions and modifications remain **aligned with the community** +- Closed, private forks cannot undermine the **trust and openness** of the ecosystem + +The source code is publicly available for review, security audits, and community contributions. diff --git a/content/project/governance.md b/content/project/governance.md new file mode 100644 index 0000000..e17a746 --- /dev/null +++ b/content/project/governance.md @@ -0,0 +1,18 @@ ++++ +title = "Governance" ++++ + +# Governance + +OpenCloud promotes **transparent, community-driven governance**. + +## Decision-Making Principles +- Shared control across contributors +- No dependency on a single vendor +- Long-term sustainability + +## Participation +Any organization can: +- Host nodes +- Contribute code +- Join working groups diff --git a/content/project/roadmap.md b/content/project/roadmap.md new file mode 100644 index 0000000..fc8c937 --- /dev/null +++ b/content/project/roadmap.md @@ -0,0 +1,31 @@ ++++ +title = "Roadmap" ++++ + +## Proofs Of Concept +- 2019-2021: Distributed environemental data processin ecosystem +- 2021: Distributed Space Situation Awareness processing GUI demonstrator +- 2024: Distributed Digital twin factory infrastructure design +- 2025: Resilient and Sovereign Space Edge Computing System Orchestration + + +## Current Status +- Resource catalog: **Stable** +- Workflow editor: **Stable** +- Distributed Wokflow execution: **Functional** +- Shared workspaces: **Functional** +- Core P2P communication layer: **Under design** +- Resource sharing prototype: **Functional** +- Sovereignty rules engine: **In development** +- Web-based admin console: **In development** +- Services accounting and monitoring: **Under design** + + +## Next Milestones +- 2026 — Heterogeneous target deployment and operation +- 2026 — Monitoring, accounting and billing demonstration + + +## Future Evolutions +- Policy-driven data and processing placement +- Advanced cryptographic trust models diff --git a/static/architecture.svg b/static/architecture.svg new file mode 100644 index 0000000..e3d0383 --- /dev/null +++ b/static/architecture.svg @@ -0,0 +1,4798 @@ + + + + + + + + + +OpenCloud API + + +ComputeServerlessDistributed filesystemsNoSQLdatabasesGroundsegmentsAItrainingSOCIOTHealth researchDefenceapplicationsUserapplicationsOpenCloudinterfaceTechnicalinfrastructuredistributed accountingdistributed schedulingautomateddeploymentSQLdatabasesResourcescatalogpeerdiscovery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Public cloudsEdge devicesPrivate infrastructures    Raspberry Pi 3 Model B V1.2 + +Power +HDMI +Audio +USB 2x +USB 2x +ETHERNET +DSI (DISPLAY) +CSI (CAMERA) +GPIO +© Raspberry Pi 2015 + diff --git a/static/favicon.svg b/static/favicon.svg new file mode 100644 index 0000000..bb32afc --- /dev/null +++ b/static/favicon.svg @@ -0,0 +1,86 @@ + + + + + + + + image/svg+xml + + + + + + + +   + + + diff --git a/static/google28f3bfdf72dcc3b2.html b/static/google28f3bfdf72dcc3b2.html new file mode 100644 index 0000000..1607b36 --- /dev/null +++ b/static/google28f3bfdf72dcc3b2.html @@ -0,0 +1 @@ +google-site-verification: google28f3bfdf72dcc3b2.html \ No newline at end of file diff --git a/static/logo.svg b/static/logo.svg new file mode 100644 index 0000000..893c5ca --- /dev/null +++ b/static/logo.svg @@ -0,0 +1,115 @@ + + + + + + + + image/svg+xml + + + + + + + +   + + CLOUD + pen + + diff --git a/static/logo_IRT Saint Exupery_RVB_300x166.png b/static/logo_IRT Saint Exupery_RVB_300x166.png new file mode 100644 index 0000000..a40497d Binary files /dev/null and b/static/logo_IRT Saint Exupery_RVB_300x166.png differ diff --git a/static/logo_path.svg b/static/logo_path.svg new file mode 100644 index 0000000..2f058b2 --- /dev/null +++ b/static/logo_path.svg @@ -0,0 +1,59 @@ + + + + + + + image/svg+xml + + + + + + +   + + + + + diff --git a/static/public-distributed.svg b/static/public-distributed.svg new file mode 100644 index 0000000..fb77542 --- /dev/null +++ b/static/public-distributed.svg @@ -0,0 +1,401 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Public cloudsPrivate infrastructures federation diff --git a/static/robots.txt b/static/robots.txt new file mode 100644 index 0000000..677573e --- /dev/null +++ b/static/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://www.o-cloud.io/sitemap.xml diff --git a/static/screenshots/workflow_gui.png b/static/screenshots/workflow_gui.png new file mode 100644 index 0000000..49feb96 Binary files /dev/null and b/static/screenshots/workflow_gui.png differ diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..b0585a8 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,134 @@ + + + + + + + + + + + + {# ------------------------- + TITLE + ------------------------- #} + + {% if page is defined and page.title %} + {{ page.title }} – {{ config.title }} + {% elif section is defined and section.title %} + {{ section.title }} – {{ config.title }} + {% else %} + {{ config.title }} + {% endif %} + + + {# ------------------------- + META DESCRIPTION + ------------------------- #} + {% if page is defined and page.description %} + + {% elif section is defined and section.description %} + + {% elif config.description %} + + {% endif %} + + {# ------------------------- + OPEN GRAPH + ------------------------- #} + + + + + + + {# Optional: add when you have one #} + {# #} + + {# ------------------------- + TWITTER + ------------------------- #} + + + + + {# Optional #} + {# #} + + {# ------------------------- + STRUCTURED DATA (JSON-LD) + ------------------------- #} + + + {# ------------------------- + STYLES + ------------------------- #} + + + + + + {% include "partials/header.html" %} + +
+ {% block content %}{% endblock content %} +
+ + {% include "partials/footer.html" %} + + {# ------------------------- + THEME TOGGLE SCRIPT + ------------------------- #} + + + + diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..3beaa37 --- /dev/null +++ b/templates/page.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block content %} +
+
+

{{ page.title }}

+ {% if page.description %} +

{{ page.description }}

+ {% endif %} +
+ +
+ {{ page.content | safe }} +
+
+{% endblock content %} diff --git a/templates/partials/footer.html b/templates/partials/footer.html new file mode 100644 index 0000000..3e903ec --- /dev/null +++ b/templates/partials/footer.html @@ -0,0 +1,30 @@ + diff --git a/templates/partials/header.html b/templates/partials/header.html new file mode 100644 index 0000000..1e5f930 --- /dev/null +++ b/templates/partials/header.html @@ -0,0 +1,57 @@ +
+
+ + + + + + + + + + + + + +
+
diff --git a/templates/partials/hero.html b/templates/partials/hero.html new file mode 100644 index 0000000..3c4c40b --- /dev/null +++ b/templates/partials/hero.html @@ -0,0 +1,48 @@ +
+
+
+

+ {% if section is defined and section.title %} + {{ section.title }} + {% else %} + {{ config.extra.project_name | default(value="OpenCloud") }} + {% endif %} +

+ +

+ {{ config.extra.tagline | default(value="A sovereign, peer-to-peer distributed cloud for trusted partners.") }} +

+ + {% if section is defined and section.content %} +
+ {{ section.content | safe }} +
+ {% endif %} + +
+ {% if config.extra.primary_cta_label and config.extra.primary_cta_url %} + + {{ config.extra.primary_cta_label }} + + {% endif %} + {% if config.extra.secondary_cta_label and config.extra.secondary_cta_url %} + + {{ config.extra.secondary_cta_label }} + + {% endif %} +
+
+ +
+
+

Distributed • Sovereign • Resilient

+
    +
  • Peer-to-peer federation of private clouds
  • +
  • Trust controlled by each participant
  • +
  • No central authority, no lock-in
  • +
  • Open-source and auditable by design
  • +
+
+
+
+
diff --git a/templates/section.html b/templates/section.html new file mode 100644 index 0000000..c4aa453 --- /dev/null +++ b/templates/section.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} + +{% block content %} +
+
+

{{ section.title }}

+ {% if section.description %} +

{{ section.description }}

+ {% endif %} +
+ +
+ {{ section.content | safe }} +
+ + {% if section.pages | length > 0 %} +
+ {% for page in section.pages %} + + {% endfor %} +
+ {% endif %} +
+{% endblock content %} diff --git a/themes/opencloud/sass/main.scss b/themes/opencloud/sass/main.scss new file mode 100644 index 0000000..a28830a --- /dev/null +++ b/themes/opencloud/sass/main.scss @@ -0,0 +1,670 @@ +/* --- CSS Variables & Reset --- */ + +/* Default: LIGHT THEME */ +:root { + --oc-header-bg: #ffffff; + --oc-header-border: rgba(0, 0, 0, 0.08); + --oc-footer-bg: #ffffff; + --oc-footer-border: rgba(0, 0, 0, 0.08); + + /* Optional: subtle light gradient */ + --oc-header-bg-gradient: linear-gradient( + to right, + #ffffff, + #fafafa, + #ffffff + ); + + --oc-footer-bg-gradient: linear-gradient( + to bottom, + #ffffff, + #f8f8f8 + ); + --oc-bg: #f3f4f6; + --oc-bg-alt: #ffffff; + --oc-bg-muted: #e5e7eb; + --oc-card-bg: #ffffff; + --oc-accent: #0ea5e9; + --oc-accent-soft: rgba(14, 165, 233, 0.08); + --oc-accent-strong: #0284c7; + --oc-text: #111827; + --oc-text-muted: #6b7280; + --oc-border: #d1d5db; + --oc-radius-lg: 18px; + --oc-radius-xl: 24px; + --oc-shadow-soft: 0 18px 45px rgba(148, 163, 184, 0.4); + --oc-shadow-card: 0 10px 30px rgba(148, 163, 184, 0.35); +} + +/* DARK THEME */ +[data-theme="dark"] { + --oc-header-bg: rgba(15, 23, 42, 0.92); + --oc-header-border: rgba(148, 163, 184, 0.14); + --oc-footer-bg: rgba(15, 23, 42, 0.96); + --oc-footer-border: rgba(148, 163, 184, 0.18); + + --oc-header-bg-gradient: linear-gradient( + to right, + rgba(15, 23, 42, 0.92), + rgba(15, 23, 42, 0.88), + rgba(15, 23, 42, 0.92) + ); + + --oc-footer-bg-gradient: linear-gradient( + to bottom, + rgba(15, 23, 42, 0.96), + rgba(15, 23, 42, 0.92) + ); + --oc-bg: #050816; + --oc-bg-alt: #0a1020; + --oc-bg-muted: #0e1729; + --oc-card-bg: #0f172a; + --oc-accent: #38bdf8; + --oc-accent-soft: rgba(56, 189, 248, 0.15); + --oc-accent-strong: #0ea5e9; + --oc-text: #e5e7eb; + --oc-text-muted: #9ca3af; + --oc-border: #1f2937; + --oc-radius-lg: 18px; + --oc-radius-xl: 24px; + --oc-shadow-soft: 0 18px 45px rgba(15, 23, 42, 0.8); + --oc-shadow-card: 0 10px 30px rgba(15, 23, 42, 0.7); +} + + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html, body { + margin: 0; + padding: 0; +} + +body { + font-family: system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", sans-serif; + background: var(--oc-bg); + color: var(--oc-text); + line-height: 1.6; +} + +[data-theme="dark"] body { + background: radial-gradient(circle at top left, #1e293b 0, #020617 45%, #000 100%); +} +/* --- Layout --- */ + +.oc-container { + width: 100%; + max-width: 1120px; + margin: 0 auto; + padding: 0 1.5rem; +} + +.oc-main { + padding-top: 72px; +} + +/* --- Header --- */ + +.oc-header { + position: sticky; + top: 0; + z-index: 40; + backdrop-filter: blur(18px); + background: var(--oc-header-bg-gradient); + border-bottom: 1px solid var(--oc-header-border); +} + +.oc-header-inner { + display: flex; + align-items: center; + justify-content: space-between; + height: 72px; +} + + +.oc-header-right { + display: flex; + align-items: center; + gap: 1rem; +} + +.oc-theme-toggle { + border-radius: 999px; + border: 1px solid var(--oc-border); + background: var(--oc-bg-alt); + color: var(--oc-text-muted); + font-size: 0.78rem; + padding: 0.28rem 0.7rem; + cursor: pointer; + white-space: nowrap; +} + +.oc-theme-toggle:hover { + color: var(--oc-text); + border-color: var(--oc-accent); +} + +/* Logo */ + +.oc-logo { + display: inline-flex; + align-items: center; + gap: 0.6rem; + text-decoration: none; + color: var(--oc-text); +} + +.oc-logo-mark { + width: 32px; + height: 32px; + border-radius: 999px; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 18px; + background: radial-gradient(circle at 20% 20%, #38bdf8, #0ea5e9 40%, #0369a1 100%); + box-shadow: 0 0 30px rgba(56, 189, 248, 0.7); +} + +.oc-logo-text { + font-weight: 650; + letter-spacing: 0.03em; + font-size: 1.05rem; +} + +.oc-logo-svg { + width: 70px; /* adjust this value to make it bigger/smaller */ + height: auto; + display: block; + color: var(--oc-text); /* black in light theme, white in dark theme */ +} + +/* Navigation */ + +.oc-nav-toggle { + display: none; +} + +.oc-nav-toggle-label { + display: none; + cursor: pointer; + flex-direction: column; + gap: 4px; +} + +.oc-nav-toggle-label span { + width: 20px; + height: 2px; + background: var(--oc-text); + border-radius: 999px; +} + +.oc-nav ul { + list-style: none; + display: flex; + gap: 1.5rem; + margin: 0; + padding: 0; +} + +.oc-nav a { + text-decoration: none; + font-size: 0.95rem; + color: var(--oc-text-muted); + padding: 0.3rem 0; + border-bottom: 2px solid transparent; + transition: color 0.2s ease, border-color 0.2s ease; +} + +.oc-nav a:hover { + color: var(--oc-text); +} + +.oc-nav-active { + color: var(--oc-accent-strong) !important; + border-color: var(--oc-accent-strong); +} + +/* --- Hero --- */ + +.oc-hero { + padding: 3.5rem 0 2.5rem; +} + +.oc-hero-inner { + display: grid; + grid-template-columns: minmax(0, 1.6fr) minmax(0, 1.2fr); + gap: 3rem; + align-items: center; +} + +.oc-hero-text h1 { + font-size: clamp(2.1rem, 3vw, 2.7rem); + line-height: 1.15; + margin: 0 0 0.8rem; +} + +.oc-hero-tagline { + margin: 0 0 1.5rem; + font-size: 1.05rem; + color: var(--oc-text-muted); +} + +.oc-hero-body { + margin-bottom: 1.75rem; + color: var(--oc-text-muted); +} + +.oc-hero-ctas { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; +} + +/* Hero visual */ + +.oc-hero-visual { + display: flex; + justify-content: center; +} + +.oc-hero-card { + background: linear-gradient(145deg, rgba(15, 23, 42, 0.96), rgba(15, 23, 42, 0.98)); + border-radius: 24px; + padding: 1.5rem 1.7rem; + box-shadow: var(--oc-shadow-soft); + border: 1px solid rgba(148, 163, 184, 0.22); + position: relative; + overflow: hidden; +} + +/* LIGHT THEME hero card */ +:root .oc-hero-card { + background: #ffffff; + border-radius: 20px; + border: 1px solid rgba(148, 163, 184, 0.25); + box-shadow: 0 16px 40px rgba(15, 23, 42, 0.08); +} + +/* The glow background is too strong on white → soften it or remove it */ +:root .oc-hero-card::before { + opacity: 0.18; /* or set to 0 to disable completely */ +} + +/* Try a slightly subtler subtitle style on light */ +:root .oc-hero-card h2 { + color: var(--oc-text-muted); +} + +/* DARK THEME: keep your original look */ +[data-theme="dark"] .oc-hero-card { + background: linear-gradient(145deg, rgba(15, 23, 42, 0.96), rgba(15, 23, 42, 0.98)); + border-radius: 24px; + border: 1px solid rgba(148, 163, 184, 0.22); + box-shadow: var(--oc-shadow-soft); +} + +[data-theme="dark"] .oc-hero-card::before { + opacity: 0.7; +} + +.oc-hero-card::before { + content: ""; + position: absolute; + inset: -40%; + background: radial-gradient(circle at 10% 0, rgba(56, 189, 248, 0.25), transparent 55%), + radial-gradient(circle at 90% 100%, rgba(129, 140, 248, 0.25), transparent 55%); + opacity: 0.7; + pointer-events: none; +} + +.oc-hero-card h2 { + position: relative; + margin: 0 0 1rem; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 0.18em; + color: var(--oc-text-muted); +} + +.oc-hero-card ul { + position: relative; + list-style: none; + padding: 0; + margin: 0; +} + +.oc-hero-card li { + display: flex; + align-items: center; + gap: 0.45rem; + margin-bottom: 0.6rem; + font-size: 0.94rem; +} + +.oc-hero-card li::before { + content: ""; + width: 7px; + height: 7px; + border-radius: 999px; + background: radial-gradient(circle, #22c55e, #22c55e 60%, transparent 100%); + margin-right: 0.1rem; +} + +/* --- Sections & Content --- */ + +.oc-section { + padding: 2.5rem 0; +} + +.oc-section-muted { + background: radial-gradient(circle at top center, rgba(15, 23, 42, 0.8), rgba(15, 23, 42, 0.96)); + border-top: 1px solid rgba(148, 163, 184, 0.12); + border-bottom: 1px solid rgba(148, 163, 184, 0.12); +} + +.oc-section-header { + margin-bottom: 1.75rem; +} + +.oc-section-header h1 { + font-size: 2rem; + margin: 0 0 0.5rem; +} + +.oc-section-description { + margin: 0; + color: var(--oc-text-muted); +} + +.oc-content { + max-width: 760px; +} + +.oc-content h2 { + margin-top: 1.8rem; + font-size: 1.35rem; +} + +.oc-content h3 { + margin-top: 1.3rem; + font-size: 1.1rem; +} + +.oc-content p { + margin: 0.6rem 0; + color: var(--oc-text-muted); +} + +.oc-content ul, +.oc-content ol { + margin: 0.4rem 0 0.9rem 1.1rem; +} + +/* --- Grid & Cards --- */ + +.oc-grid-3 { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1.5rem; +} + +.oc-grid-2 { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 1.5rem; +} + +.oc-card { + background: var(--oc-card-bg); + border-radius: var(--oc-radius-lg); + padding: 1.25rem 1.3rem; + border: 1px solid var(--oc-border); + box-shadow: var(--oc-shadow-card); +} + +.oc-card h2 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +.oc-card p { + margin-top: 0; + margin-bottom: 0.6rem; + color: var(--oc-text-muted); +} + +.oc-card-link h2 a { + text-decoration: none; + color: var(--oc-text); +} + +.oc-card-link h2 a:hover { + color: var(--oc-accent-strong); +} + +/* Split layout */ + +.oc-split { + display: grid; + grid-template-columns: minmax(0, 1.3fr) minmax(0, 1.2fr); + gap: 2rem; +} + +/* Lists */ + +.oc-list-check { + list-style: none; + padding-left: 0; +} + +.oc-list-check li { + position: relative; + padding-left: 1.4rem; + margin-bottom: 0.5rem; + color: var(--oc-text-muted); +} + +.oc-list-check li::before { + content: "✔"; + position: absolute; + left: 0; + top: 0; + font-size: 0.9rem; + color: #22c55e; +} + +/* Links & Buttons */ + +.oc-link-arrow { + display: inline-flex; + align-items: center; + gap: 0.1rem; + font-size: 0.92rem; + color: var(--oc-accent); + text-decoration: none; +} + +.oc-link-arrow:hover { + color: var(--oc-accent-strong); +} + +.oc-btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.55rem 1.1rem; + border-radius: 999px; + font-size: 0.95rem; + font-weight: 500; + text-decoration: none; + border: 1px solid transparent; + cursor: pointer; + transition: background 0.18s ease, border-color 0.18s ease, transform 0.1s ease; +} + +.oc-btn-primary { + background: linear-gradient(135deg, var(--oc-accent), var(--oc-accent-strong)); + color: #0f172a; + box-shadow: 0 12px 30px rgba(56, 189, 248, 0.55); +} + +.oc-btn-primary:hover { + transform: translateY(-1px); +} + +.oc-btn-secondary { + background: rgba(15, 23, 42, 0.9); + color: var(--oc-text); + border-color: rgba(148, 163, 184, 0.5); +} + +.oc-btn-secondary:hover { + border-color: var(--oc-accent); + color: var(--oc-accent-strong); +} + +.oc-btn-outline { + background: transparent; + border-color: rgba(148, 163, 184, 0.45); + color: var(--oc-text); +} + +.oc-btn-outline:hover { + border-color: var(--oc-accent); +} + +/* --- Footer --- */ + +.oc-footer { + background: var(--oc-footer-bg-gradient); + border-top: 1px solid var(--oc-footer-border); + padding: 1.3rem 0 1.5rem; +} + +.oc-footer-inner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.25rem; +} + +.oc-footer-left p { + margin: 0; +} + +.oc-footer-tagline { + font-size: 0.9rem; + color: var(--oc-text-muted); +} + +.oc-footer-link { + color: var(--oc-accent); + text-decoration: none; + font-size: 0.92rem; +} + +.oc-footer-link:hover { + color: var(--oc-accent-strong); +} + +.oc-footer-left { + display: flex; + align-items: center; + gap: 0.9rem; +} + +.oc-footer-logo { + height: 64px; /* adjust size here */ + width: auto; + opacity: 0.9; /* looks good in both themes */ +} + +.oc-footer-text p { + margin: 0; + line-height: 1.3; +} + +/* Optional: adapt PNG brightness for dark theme */ +[data-theme="dark"] .oc-footer-logo { + filter: brightness(1.3); +} + + +/* --- Responsive --- */ + +@media (max-width: 900px) { + .oc-hero-inner { + grid-template-columns: minmax(0, 1fr); + } + + .oc-grid-3 { + grid-template-columns: minmax(0, 1fr); + } + + .oc-grid-2, + .oc-split { + grid-template-columns: minmax(0, 1fr); + } + + .oc-footer-inner { + flex-direction: column; + align-items: flex-start; + } +} + +@media (max-width: 720px) { + .oc-nav-toggle-label { + display: flex; + } + + .oc-nav { + position: absolute; + top: 72px; + left: 0; + right: 0; + background: rgba(15, 23, 42, 0.98); + border-bottom: 1px solid rgba(148, 163, 184, 0.22); + transform-origin: top; + transform: scaleY(0); + transition: transform 0.15s ease-out; + } + + .oc-nav ul { + flex-direction: column; + padding: 0.8rem 1.5rem 1.1rem; + gap: 0.7rem; + } + + .oc-nav-toggle:checked ~ .oc-nav { + transform: scaleY(1); + } +} + +:root .oc-btn-secondary { + background: #ffffff; + border-color: rgba(148, 163, 184, 0.6); + color: var(--oc-text); + box-shadow: 0 8px 20px rgba(15, 23, 42, 0.04); +} + +:root .oc-btn-secondary:hover { + border-color: var(--oc-accent); + color: var(--oc-accent-strong); + box-shadow: 0 10px 26px rgba(15, 23, 42, 0.06); +} + +/* DARK THEME: preserve the existing design */ +[data-theme="dark"] .oc-btn-secondary { + background: rgba(15, 23, 42, 0.9); + color: var(--oc-text); + border-color: rgba(148, 163, 184, 0.5); +} + +[data-theme="dark"] .oc-btn-secondary:hover { + border-color: var(--oc-accent); + color: var(--oc-accent-strong); +} diff --git a/themes/opencloud/templates/base.html b/themes/opencloud/templates/base.html new file mode 100644 index 0000000..c7f7752 --- /dev/null +++ b/themes/opencloud/templates/base.html @@ -0,0 +1,74 @@ + + + + + + + + {%- if page is defined and page.title -%} + {{ page.title }} – {{ config.title }} + {%- elif section is defined and section.title -%} + {{ section.title }} – {{ config.title }} + {%- else -%} + {{ config.title }} + {%- endif -%} + + + {# Description meta #} + {% if page is defined and page.description %} + + {% elif section is defined and section.description %} + + {% else %} + + {% endif %} + + + + + {% include "partials/header.html" %} + +
+ {% block content %}{% endblock content %} +
+ + {% include "partials/footer.html" %} + + + + diff --git a/themes/opencloud/templates/index.html b/themes/opencloud/templates/index.html new file mode 100644 index 0000000..b71a684 --- /dev/null +++ b/themes/opencloud/templates/index.html @@ -0,0 +1,66 @@ +{% extends "base.html" %} + +{% block content %} + {% if section is defined %} + {% include "partials/hero.html" %} + {% endif %} + +
+
+
+

Why OpenCloud?

+

+ OpenCloud interconnects private clouds with a secure, peer-to-peer control plane. + Each participant keeps full sovereignty while benefiting from shared resilience and capacity. +

+ Discover the project → +
+ +
+

Architecture

+

+ A distributed mesh overlay connects independent nodes, enabling resource sharing, + trust-based federation, and multi-site fault tolerance. +

+ View the architecture → +
+ +
+

Open Source

+

+ OpenCloud is developed in the open, with transparent governance and a commitment + to interoperability and long-term independence. +

+ {% if config.extra.repo_url %} + + Browse the source → + {% endif %} +
+
+
+ +
+
+
+

Key benefits for decision-makers

+
    +
  • Keep strategic control over data and infrastructure
  • +
  • Build resilience across multiple sites and partners
  • +
  • Avoid vendor lock-in and opaque proprietary stacks
  • +
  • Align technical architecture with sovereignty policies
  • +
+
+
+

From prototype to production

+

+ OpenCloud is evolving from a research-grade prototype to a production-ready + federated cloud fabric. Follow the roadmap to understand current capabilities + and planned milestones. +

+ + View the roadmap + +
+
+
+{% endblock content %} diff --git a/themes/opencloud/theme.toml b/themes/opencloud/theme.toml new file mode 100644 index 0000000..48f9abe --- /dev/null +++ b/themes/opencloud/theme.toml @@ -0,0 +1,8 @@ +name = "opencloud" +description = "A clean, modern theme for the OpenCloud distributed sovereign cloud project." +license = "MIT" +homepage = "https://opencloud.example.com" +min_version = "0.19.0" + +[extra] +# You can put theme-specific options here later if needed.