diff --git a/export/blog.json b/export/blog.json index a902c089..569da364 100644 --- a/export/blog.json +++ b/export/blog.json @@ -1 +1 @@ -[{"id":52,"title":{"en":"Understanding Actions and the Action SDK","de":"Understanding Actions and the Action SDK"},"slug":"actions-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A truly future-proof automation platform must be able to grow alongside the technology it manages. While many tools limit users to a fixed set of features, CodeZero is built on a foundation of infinite modularity. The key to this flexibility is the Actions system. Actions are the plugins that extend our runtimes, allowing developers to define new flow types, custom nodes, and unique triggers that meet specific business requirements.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extending the Runtime with Custom Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In the CodeZero architecture, the runtime components like Aquila and Taurus handle the heavy lifting of execution, but they are designed to be \"Action-aware.\" An Action is a standalone package that connects to the runtime and tells it how to handle new types of processes. By developing and deploying an Action, you aren't just adding a script; you are expanding the fundamental capabilities of your entire automation infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Developer Experience: The Action SDK","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To make this extensibility accessible, we have created the CodeZero Action SDK. This specialized toolkit provides developers with everything they need to build their own plugins independently of the core backend. Using the SDK, you can map out the logic for a specialized industry tool, integrate a proprietary database, or create custom AI-driven decision nodes. These Actions can be developed, versioned, and deployed as modular units, ensuring that your core system remains clean and stable while your capabilities expand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Modular Architecture for Hybrid Environments","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Because Actions are decoupled from the central Sagittarius service, they support the true spirit of a hybrid cloud setup. You can develop a custom Action to interact with local hardware or sensitive on-premise data and deploy it specifically on your local runtime. This ensures that the specialized logic and the data it processes remain within your sovereign network, while the flow itself is still managed through the global CodeZero interface.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Community-Driven Ecosystem","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The modular nature of Actions invites collaboration and contribution. As the CodeZero community grows, so does the library of available Actions. This ecosystem allows users to benefit from the work of others, whether that means a new connector for a popular CRM or a sophisticated adapter for MQTT-based IoT communication. Every new Action added to a runtime immediately populates the Suggestion Menu in the Flow Builder, making new power available to every member of your organization.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Future-Proofing Your Automation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Actions system is what prevents CodeZero from ever becoming a \"black box\" solution. By providing the tools to build, manage, and share custom logic through the Action SDK, we empower you to solve the automation challenges of today and the unforeseen requirements of tomorrow. Your automation platform should be as unique as your business, and with Actions, it finally can be.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"block","fields":{"id":"69c4fd2bf5fffad10edaead9","source":"si:sap Triggers on order creation within SAP;\ncrm:hubspot Syncs new contact data into HubSpot;\nerp:oracle Starts invoice validation in Oracle ERP;\ndb:postgres Stores approved order records in Postgres;\napi:stripe Triggers payment capture through Stripe API;\nmsg:rabbitmq Pushes fulfillment event into RabbitMQ;\nmail:sendgrid Sends confirmation email via SendGrid;\nbi:powerbi Refreshes sales dashboard in Power BI;","blockName":"","blockType":"trigger"},"format":"","version":2},{"type":"block","fields":{"id":"69c4fd47f5fffad10edaeada","source":"API -> Queue\nTest -> Queue","blockName":"","blockType":"graph"},"format":"","version":2},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A truly future-proof automation platform must be able to grow alongside the technology it manages. While many tools limit users to a fixed set of features, CodeZero is built on a foundation of infinite modularity. The key to this flexibility is the Actions system. Actions are the plugins that extend our runtimes, allowing developers to define new flow types, custom nodes, and unique triggers that meet specific business requirements.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extending the Runtime with Custom Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In the CodeZero architecture, the runtime components like Aquila and Taurus handle the heavy lifting of execution, but they are designed to be \"Action-aware.\" An Action is a standalone package that connects to the runtime and tells it how to handle new types of processes. By developing and deploying an Action, you aren't just adding a script; you are expanding the fundamental capabilities of your entire automation infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Developer Experience: The Action SDK","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To make this extensibility accessible, we have created the CodeZero Action SDK. This specialized toolkit provides developers with everything they need to build their own plugins independently of the core backend. Using the SDK, you can map out the logic for a specialized industry tool, integrate a proprietary database, or create custom AI-driven decision nodes. These Actions can be developed, versioned, and deployed as modular units, ensuring that your core system remains clean and stable while your capabilities expand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Modular Architecture for Hybrid Environments","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Because Actions are decoupled from the central Sagittarius service, they support the true spirit of a hybrid cloud setup. You can develop a custom Action to interact with local hardware or sensitive on-premise data and deploy it specifically on your local runtime. This ensures that the specialized logic and the data it processes remain within your sovereign network, while the flow itself is still managed through the global CodeZero interface.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Community-Driven Ecosystem","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The modular nature of Actions invites collaboration and contribution. As the CodeZero community grows, so does the library of available Actions. This ecosystem allows users to benefit from the work of others, whether that means a new connector for a popular CRM or a sophisticated adapter for MQTT-based IoT communication. Every new Action added to a runtime immediately populates the Suggestion Menu in the Flow Builder, making new power available to every member of your organization.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Future-Proofing Your Automation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Actions system is what prevents CodeZero from ever becoming a \"black box\" solution. By providing the tools to build, manage, and share custom logic through the Action SDK, we empower you to solve the automation challenges of today and the unforeseen requirements of tomorrow. Your automation platform should be as unique as your business, and with Actions, it finally can be.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Unlock infinite extensibility with CodeZero Actions. Discover how the Action SDK allows you to build custom nodes, triggers, and flow types to create a tailored automation infrastructure that scales with your unique business needs.","de":"Unlock infinite extensibility with CodeZero Actions. Discover how the Action SDK allows you to build custom nodes, triggers, and flow types to create a tailored automation infrastructure that scales with your unique business needs."},"heroImage":{"id":141,"alt":"Github action SDK CodeZero","href":null,"updatedAt":"2026-03-25T12:01:38.170Z","createdAt":"2026-03-25T12:01:38.169Z","url":"/api/media/file/Github_Action_SDK_CodeZero.png","thumbnailURL":null,"filename":"Github_Action_SDK_CodeZero.png","mimeType":"image/png","filesize":524187,"width":2940,"height":1666,"focalX":50,"focalY":50},"ogImage":{"id":141,"alt":"Github action SDK CodeZero","href":null,"updatedAt":"2026-03-25T12:01:38.170Z","createdAt":"2026-03-25T12:01:38.169Z","url":"/api/media/file/Github_Action_SDK_CodeZero.png","thumbnailURL":null,"filename":"Github_Action_SDK_CodeZero.png","mimeType":"image/png","filesize":524187,"width":2940,"height":1666,"focalX":50,"focalY":50},"twitterImage":{"id":141,"alt":"Github action SDK CodeZero","href":null,"updatedAt":"2026-03-25T12:01:38.170Z","createdAt":"2026-03-25T12:01:38.169Z","url":"/api/media/file/Github_Action_SDK_CodeZero.png","thumbnailURL":null,"filename":"Github_Action_SDK_CodeZero.png","mimeType":"image/png","filesize":524187,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"description":{"en":"Unlock infinite extensibility with CodeZero Actions. Discover how the Action SDK allows you to build custom nodes, triggers, and flow types to create a tailored automation infrastructure that scales with your unique business needs.","de":"Unlock infinite extensibility with CodeZero Actions. Discover how the Action SDK allows you to build custom nodes, triggers, and flow types to create a tailored automation infrastructure that scales with your unique business needs."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:29.508Z","createdAt":"2026-03-25T12:01:51.272Z"},{"id":53,"title":{"en":"Accelerating Workflows with the CodeZero Suggestion Menu","de":"Accelerating Workflows with the CodeZero Suggestion Menu"},"slug":"flow-builder-suggestion-menu-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Efficiency in automation is not just about how fast a process runs, but how quickly it can be built. In the CodeZero Flow Builder, the transition from a conceptual idea to a functional node sequence is powered by the Suggestion Menu. This intelligent interface acts as a real-time catalog of your entire automation toolkit, ensuring that the right logic is always just a click away.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Intelligent Node Selection at Your Fingertips","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Suggestion Menu is the central entry point for expanding any flow. As you develop your automation, the menu provides a searchable and categorized list of every available node type. This includes everything from standard boolean logic and control flow operators to specialized HTTP request nodes. By presenting these options in a structured overlay, CodeZero eliminates the need to navigate deep sub-menus, allowing you to maintain your creative momentum.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Library of Modular Capabilities","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Every item in the Suggestion Menu represents a modular capability of the CodeZero runtime. These building blocks are organized into logical groups such as:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Standard Control: Manage the flow of execution with \"If-Else\" conditions, \"Return\" statements, and \"Stop\" functions.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Data Handling: Transform and validate information using boolean operations and list processing tools.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"External Integration: Trigger and respond to REST API calls to bridge your flow with third-party services.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extensibility in Real-Time","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Because CodeZero is built on a modular plugin architecture, the Suggestion Menu is dynamic. When you add new \"Actions\" via our Action SDK, the custom nodes and triggers defined in those plugins automatically populate the menu. This means that as you extend your runtime capabilities, your design interface evolves alongside it, immediately offering your new custom tools for use in any project.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Flow Construction","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The menu is designed to support the \"sequence of connected nodes\" that defines a CodeZero flow. By allowing you to \"Add next node\" through a simple search, the interface helps you visualize the directed graph as it grows. This tight integration between the visual builder and the underlying logic parameters ensures that every connection is valid and every step is configured correctly from the start.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Empowering Fast and Flexible Automation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Suggestion Menu is more than just a search bar; it is the bridge between your technical requirements and the Taurus execution engine. By making the platform's extensive library of nodes instantly accessible, CodeZero empowers you to build, test, and iterate on complex business logic with unprecedented speed. High-performance automation begins with an interface that works at the speed of your thoughts.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Efficiency in automation is not just about how fast a process runs, but how quickly it can be built. In the CodeZero Flow Builder, the transition from a conceptual idea to a functional node sequence is powered by the Suggestion Menu. This intelligent interface acts as a real-time catalog of your entire automation toolkit, ensuring that the right logic is always just a click away.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Intelligent Node Selection at Your Fingertips","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Suggestion Menu is the central entry point for expanding any flow. As you develop your automation, the menu provides a searchable and categorized list of every available node type. This includes everything from standard boolean logic and control flow operators to specialized HTTP request nodes. By presenting these options in a structured overlay, CodeZero eliminates the need to navigate deep sub-menus, allowing you to maintain your creative momentum.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Library of Modular Capabilities","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Every item in the Suggestion Menu represents a modular capability of the CodeZero runtime. These building blocks are organized into logical groups such as:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Standard Control: Manage the flow of execution with \"If-Else\" conditions, \"Return\" statements, and \"Stop\" functions.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Data Handling: Transform and validate information using boolean operations and list processing tools.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"External Integration: Trigger and respond to REST API calls to bridge your flow with third-party services.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extensibility in Real-Time","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Because CodeZero is built on a modular plugin architecture, the Suggestion Menu is dynamic. When you add new \"Actions\" via our Action SDK, the custom nodes and triggers defined in those plugins automatically populate the menu. This means that as you extend your runtime capabilities, your design interface evolves alongside it, immediately offering your new custom tools for use in any project.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Flow Construction","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The menu is designed to support the \"sequence of connected nodes\" that defines a CodeZero flow. By allowing you to \"Add next node\" through a simple search, the interface helps you visualize the directed graph as it grows. This tight integration between the visual builder and the underlying logic parameters ensures that every connection is valid and every step is configured correctly from the start.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Empowering Fast and Flexible Automation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Suggestion Menu is more than just a search bar; it is the bridge between your technical requirements and the Taurus execution engine. By making the platform's extensive library of nodes instantly accessible, CodeZero empowers you to build, test, and iterate on complex business logic with unprecedented speed. High-performance automation begins with an interface that works at the speed of your thoughts.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Speed up your workflow development with the CodeZero Suggestion Menu. Discover how to instantly access triggers, logic blocks, and custom nodes to build powerful automated flows without ever leaving the builder.","de":"Speed up your workflow development with the CodeZero Suggestion Menu. Discover how to instantly access triggers, logic blocks, and custom nodes to build powerful automated flows without ever leaving the builder."},"heroImage":{"id":142,"alt":"Flow builder suggestion menu CodeZero","href":null,"updatedAt":"2026-03-25T11:55:33.672Z","createdAt":"2026-03-25T11:55:33.672Z","url":"/api/media/file/Flow_Builder_Suggestion_Menu_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Suggestion_Menu_Feature.png","mimeType":"image/png","filesize":490427,"width":2940,"height":1664,"focalX":50,"focalY":50},"ogImage":{"id":142,"alt":"Flow builder suggestion menu CodeZero","href":null,"updatedAt":"2026-03-25T11:55:33.672Z","createdAt":"2026-03-25T11:55:33.672Z","url":"/api/media/file/Flow_Builder_Suggestion_Menu_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Suggestion_Menu_Feature.png","mimeType":"image/png","filesize":490427,"width":2940,"height":1664,"focalX":50,"focalY":50},"twitterImage":{"id":142,"alt":"Flow builder suggestion menu CodeZero","href":null,"updatedAt":"2026-03-25T11:55:33.672Z","createdAt":"2026-03-25T11:55:33.672Z","url":"/api/media/file/Flow_Builder_Suggestion_Menu_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Suggestion_Menu_Feature.png","mimeType":"image/png","filesize":490427,"width":2940,"height":1664,"focalX":50,"focalY":50},"meta":{"description":{"en":"Speed up your workflow development with the CodeZero Suggestion Menu. Discover how to instantly access triggers, logic blocks, and custom nodes to build powerful automated flows without ever leaving the builder.","de":"Speed up your workflow development with the CodeZero Suggestion Menu. Discover how to instantly access triggers, logic blocks, and custom nodes to build powerful automated flows without ever leaving the builder."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:31.431Z","createdAt":"2026-03-25T11:57:48.287Z"},{"id":54,"title":{"en":"Architecture of Execution: Understanding Runtime Types in CodeZero","de":"Architecture of Execution: Understanding Runtime Types in CodeZero"},"slug":"runtime-type-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The power of an automation platform is measured by how it executes the logic you design. CodeZero provides a sophisticated runtime architecture that allows you to choose exactly how your flows are deployed and processed. By categorizing runtimes into two distinct dimensions—Deployment Method and Execution Mode—we empower you to optimize for either extreme flexibility or maximum performance.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Deployment Strategy: Static vs. Dynamic Runtimes","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The first choice in setting up your CodeZero infrastructure is determining how your flows are delivered to the execution engine. This choice defines the relationship between your design environment (the IDE) and the active runtime.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Static Runtimes for Autonomous Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In a static setup, the runtime operates independently of the IDE. Your flows are stored as physical files directly within the runtime environment. This approach is ideal for production systems that require total autonomy. Even if the central application interface is offline, the static runtime continues to execute its local files without interruption.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Dynamic Runtimes for Real-Time Development","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Dynamic runtimes offer the exact opposite experience by maintaining a live connection to the IDE. Instead of relying on local files, these runtimes load and update flows on the fly as you make changes in the interface. This creates a seamless developer experience where logic can be tested and tweaked in real-time without manual deployment steps.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Execution Performance: Interpreted vs. Compiled Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The second dimension of the CodeZero architecture defines how the runtime actually processes the underlying JSON structure of your flow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Interpreted Execution for High Flexibility","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"An interpreted runtime processes the flow step-by-step. It reads the JSON definition of each node at the moment of execution and performs the logic sequentially. This mode is highly versatile and allows for rapid debugging and easy adjustments, making it the preferred choice for most standard automation tasks.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Compiled Execution for Peak Performance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"For high-volume environments where every millisecond counts, CodeZero offers a compiled execution mode. In this scenario, the entire JSON flow is transformed into optimized, executable code before it runs. By eliminating the overhead of step-by-step interpretation, compiled flows achieve significantly higher throughput and reduced latency for enterprise-grade workloads.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Combining Categories for Custom Solutions","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The true strength of CodeZero lies in the ability to combine these categories to suit your specific use case. You might choose a Dynamic-Interpreted setup during the prototyping phase to benefit from instant updates and easy debugging. Conversely, a mission-critical logistics operation might deploy a Static-Compiled runtime to ensure the system runs autonomously at the highest possible speed.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Tailored Execution for Every Use Case","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"By decoupling the deployment method from the execution mode, CodeZero provides a modular infrastructure that fits any requirement. Whether you need the agility of a live-updated development tool or the rock-solid stability of a compiled autonomous engine, our runtime architecture ensures your business logic is always running exactly where and how it should.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The power of an automation platform is measured by how it executes the logic you design. CodeZero provides a sophisticated runtime architecture that allows you to choose exactly how your flows are deployed and processed. By categorizing runtimes into two distinct dimensions—Deployment Method and Execution Mode—we empower you to optimize for either extreme flexibility or maximum performance.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Deployment Strategy: Static vs. Dynamic Runtimes","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The first choice in setting up your CodeZero infrastructure is determining how your flows are delivered to the execution engine. This choice defines the relationship between your design environment (the IDE) and the active runtime.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Static Runtimes for Autonomous Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In a static setup, the runtime operates independently of the IDE. Your flows are stored as physical files directly within the runtime environment. This approach is ideal for production systems that require total autonomy. Even if the central application interface is offline, the static runtime continues to execute its local files without interruption.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Dynamic Runtimes for Real-Time Development","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Dynamic runtimes offer the exact opposite experience by maintaining a live connection to the IDE. Instead of relying on local files, these runtimes load and update flows on the fly as you make changes in the interface. This creates a seamless developer experience where logic can be tested and tweaked in real-time without manual deployment steps.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Execution Performance: Interpreted vs. Compiled Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The second dimension of the CodeZero architecture defines how the runtime actually processes the underlying JSON structure of your flow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Interpreted Execution for High Flexibility","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"An interpreted runtime processes the flow step-by-step. It reads the JSON definition of each node at the moment of execution and performs the logic sequentially. This mode is highly versatile and allows for rapid debugging and easy adjustments, making it the preferred choice for most standard automation tasks.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Compiled Execution for Peak Performance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"For high-volume environments where every millisecond counts, CodeZero offers a compiled execution mode. In this scenario, the entire JSON flow is transformed into optimized, executable code before it runs. By eliminating the overhead of step-by-step interpretation, compiled flows achieve significantly higher throughput and reduced latency for enterprise-grade workloads.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Combining Categories for Custom Solutions","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The true strength of CodeZero lies in the ability to combine these categories to suit your specific use case. You might choose a Dynamic-Interpreted setup during the prototyping phase to benefit from instant updates and easy debugging. Conversely, a mission-critical logistics operation might deploy a Static-Compiled runtime to ensure the system runs autonomously at the highest possible speed.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Tailored Execution for Every Use Case","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"By decoupling the deployment method from the execution mode, CodeZero provides a modular infrastructure that fits any requirement. Whether you need the agility of a live-updated development tool or the rock-solid stability of a compiled autonomous engine, our runtime architecture ensures your business logic is always running exactly where and how it should.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Explore the flexibility of CodeZero Runtime Types. Learn the differences between Static vs. Dynamic deployment and Interpreted vs. Compiled execution to optimize your automation for speed, autonomy, and scale.","de":"Explore the flexibility of CodeZero Runtime Types. Learn the differences between Static vs. Dynamic deployment and Interpreted vs. Compiled execution to optimize your automation for speed, autonomy, and scale."},"heroImage":{"id":143,"alt":"Runtime overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:53:05.308Z","createdAt":"2026-03-25T11:53:05.307Z","url":"/api/media/file/Runtime_Overview_Page.png","thumbnailURL":null,"filename":"Runtime_Overview_Page.png","mimeType":"image/png","filesize":333824,"width":2940,"height":1668,"focalX":50,"focalY":50},"ogImage":{"id":143,"alt":"Runtime overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:53:05.308Z","createdAt":"2026-03-25T11:53:05.307Z","url":"/api/media/file/Runtime_Overview_Page.png","thumbnailURL":null,"filename":"Runtime_Overview_Page.png","mimeType":"image/png","filesize":333824,"width":2940,"height":1668,"focalX":50,"focalY":50},"twitterImage":{"id":143,"alt":"Runtime overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:53:05.308Z","createdAt":"2026-03-25T11:53:05.307Z","url":"/api/media/file/Runtime_Overview_Page.png","thumbnailURL":null,"filename":"Runtime_Overview_Page.png","mimeType":"image/png","filesize":333824,"width":2940,"height":1668,"focalX":50,"focalY":50},"meta":{"description":{"en":"Explore the flexibility of CodeZero Runtime Types. Learn the differences between Static vs. Dynamic deployment and Interpreted vs. Compiled execution to optimize your automation for speed, autonomy, and scale.","de":"Explore the flexibility of CodeZero Runtime Types. Learn the differences between Static vs. Dynamic deployment and Interpreted vs. Compiled execution to optimize your automation for speed, autonomy, and scale."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:33.502Z","createdAt":"2026-03-25T11:53:15.132Z"},{"id":55,"title":{"en":"The Building Blocks of Automation: Understanding Nodes in CodeZero","de":"The Building Blocks of Automation: Understanding Nodes in CodeZero"},"slug":"flow-builder-node-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"At the heart of every automated process within CodeZero lies the \"Flow,\" a directed graph that transforms complex business logic into a visual and manageable sequence. The fundamental unit of these flows is the Node. Each node represents a distinct, individual step in a process, acting as the essential building block for everything from simple data transfers to sophisticated AI-driven operations.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"What is a Node?","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In the CodeZero ecosystem, a node is more than just a visual element. It is a functional container that holds specific parameters and logic. By connecting these nodes, users define the path that data takes and the actions that occur at every stage of a workflow. This modular approach ensures that even the most intricate systems remain understandable and easy to maintain.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Logic and Parameters","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Every node is defined by its parameters, which dictate its input and configuration. For example, a \"Trigger\" node might wait for an incoming HTTP request, while a \"Function\" node processes that data before passing it to the next step. This granular configuration allows for \"Complex Flow Logic,\" enabling the system to handle loops, conditional branches, and error handling without requiring traditional coding.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extensibility through the Action SDK","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the most powerful aspects of CodeZero is that the variety of available nodes is not fixed. Through our Action SDK, developers can create custom \"Actions\" that extend the runtime with entirely new node types. This plugin system allows organizations to build specialized nodes for their unique needs, whether that involves connecting to legacy hardware via MQTT or deploying custom AI agents.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Scalable Execution","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"While nodes are designed and organized within the \"Sculptor\" frontend, their actual execution is handled by the \"Taurus\" runtime. This separation of concerns ensures that your logic remains platform-agnostic. Whether a node is performing a simple calculation or a deep integration with an enterprise ERP like SAP, the underlying infrastructure scales automatically to meet the demand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Designing with Precision","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"By mastering the use of nodes, you gain the ability to map any business process into a high-performance automated hub. CodeZero provides the canvas and the tools, but the nodes provide the power. Start building your sequences today and see how modular logic can transform your organizational management.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"At the heart of every automated process within CodeZero lies the \"Flow,\" a directed graph that transforms complex business logic into a visual and manageable sequence. The fundamental unit of these flows is the Node. Each node represents a distinct, individual step in a process, acting as the essential building block for everything from simple data transfers to sophisticated AI-driven operations.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"What is a Node?","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In the CodeZero ecosystem, a node is more than just a visual element. It is a functional container that holds specific parameters and logic. By connecting these nodes, users define the path that data takes and the actions that occur at every stage of a workflow. This modular approach ensures that even the most intricate systems remain understandable and easy to maintain.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Logic and Parameters","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Every node is defined by its parameters, which dictate its input and configuration. For example, a \"Trigger\" node might wait for an incoming HTTP request, while a \"Function\" node processes that data before passing it to the next step. This granular configuration allows for \"Complex Flow Logic,\" enabling the system to handle loops, conditional branches, and error handling without requiring traditional coding.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extensibility through the Action SDK","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the most powerful aspects of CodeZero is that the variety of available nodes is not fixed. Through our Action SDK, developers can create custom \"Actions\" that extend the runtime with entirely new node types. This plugin system allows organizations to build specialized nodes for their unique needs, whether that involves connecting to legacy hardware via MQTT or deploying custom AI agents.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Scalable Execution","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"While nodes are designed and organized within the \"Sculptor\" frontend, their actual execution is handled by the \"Taurus\" runtime. This separation of concerns ensures that your logic remains platform-agnostic. Whether a node is performing a simple calculation or a deep integration with an enterprise ERP like SAP, the underlying infrastructure scales automatically to meet the demand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Designing with Precision","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"By mastering the use of nodes, you gain the ability to map any business process into a high-performance automated hub. CodeZero provides the canvas and the tools, but the nodes provide the power. Start building your sequences today and see how modular logic can transform your organizational management.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Unlock the power of modular automation with CodeZero Nodes. Learn how to use individual logic blocks to build complex flows, integrate third-party data, and scale your business processes with ease.","de":"Unlock the power of modular automation with CodeZero Nodes. Learn how to use individual logic blocks to build complex flows, integrate third-party data, and scale your business processes with ease."},"heroImage":{"id":144,"alt":"Flow builder nodes feature CodeZero","href":null,"updatedAt":"2026-03-25T11:38:02.809Z","createdAt":"2026-03-25T11:38:02.809Z","url":"/api/media/file/Flow_Builder_Nodes_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Nodes_Feature.png","mimeType":"image/png","filesize":407177,"width":2940,"height":1666,"focalX":50,"focalY":50},"ogImage":{"id":144,"alt":"Flow builder nodes feature CodeZero","href":null,"updatedAt":"2026-03-25T11:38:02.809Z","createdAt":"2026-03-25T11:38:02.809Z","url":"/api/media/file/Flow_Builder_Nodes_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Nodes_Feature.png","mimeType":"image/png","filesize":407177,"width":2940,"height":1666,"focalX":50,"focalY":50},"twitterImage":{"id":144,"alt":"Flow builder nodes feature CodeZero","href":null,"updatedAt":"2026-03-25T11:38:02.809Z","createdAt":"2026-03-25T11:38:02.809Z","url":"/api/media/file/Flow_Builder_Nodes_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Nodes_Feature.png","mimeType":"image/png","filesize":407177,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"description":{"en":"Unlock the power of modular automation with CodeZero Nodes. Learn how to use individual logic blocks to build complex flows, integrate third-party data, and scale your business processes with ease.","de":"Unlock the power of modular automation with CodeZero Nodes. Learn how to use individual logic blocks to build complex flows, integrate third-party data, and scale your business processes with ease."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:35.446Z","createdAt":"2026-03-25T11:40:33.195Z"},{"id":56,"title":{"en":"Managing Organizations in CodeZero","de":"Managing Organizations in CodeZero"},"slug":"organization-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The highest level of structure within the CodeZero ecosystem is the Organization. While projects and flows handle the technical execution, the Organization layer provides the administrative framework necessary for business-wide management. This architectural layer is designed to represent a company or a large department, serving as the ultimate container for users, projects, and shared resources.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Centralized Management for Complex Teams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Organizations allow administrators to manage a group of users and a multitude of projects from a single centralized interface. This is especially useful for companies running parallel automation initiatives across different departments such as marketing, logistics, and customer success. By using organizations, you can ensure that each department has its own dedicated space while maintaining global visibility for high-level stakeholders.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Building Your Organizational Framework","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Creating an organization is the first step toward building a scalable automation strategy. This process establishes the root namespace where all subsequent projects and roles will reside. By defining clear organization names and structures, businesses can replicate their real-world corporate hierarchy within the CodeZero platform, making it easier to manage large-scale digital transformations.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Resource Sharing and Data Sovereignty","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the primary advantages of the Organization layer is the ability to manage global runtimes. These shared runtimes can be utilized across multiple projects within the same organization, optimizing infrastructure costs and performance. Because CodeZero allows for hybrid setups, an organization can choose to link its own local runtimes to the global orchestrator, ensuring that the company maintains total sovereignty over its sensitive data processing.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Cross-Project Collaboration and Governance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Organizations facilitate a higher level of governance by allowing for role definitions that span across multiple projects. This means a security officer can be assigned a role at the organizational level to oversee all automation projects, while developers are limited to the specific project workspaces they are assigned to. This multi-layered approach to access control is what makes CodeZero a truly enterprise-ready platform.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The Foundation of Digital Maturity","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Organization layer is what transforms CodeZero from a simple automation tool into a comprehensive process management system. By providing a clear structure for users, projects, and runtimes, we enable businesses to scale their automation efforts with confidence. Establishing a strong organizational foundation today ensures that your automated future is secure, transparent, and built to grow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The highest level of structure within the CodeZero ecosystem is the Organization. While projects and flows handle the technical execution, the Organization layer provides the administrative framework necessary for business-wide management. This architectural layer is designed to represent a company or a large department, serving as the ultimate container for users, projects, and shared resources.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Centralized Management for Complex Teams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Organizations allow administrators to manage a group of users and a multitude of projects from a single centralized interface. This is especially useful for companies running parallel automation initiatives across different departments such as marketing, logistics, and customer success. By using organizations, you can ensure that each department has its own dedicated space while maintaining global visibility for high-level stakeholders.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Building Your Organizational Framework","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Creating an organization is the first step toward building a scalable automation strategy. This process establishes the root namespace where all subsequent projects and roles will reside. By defining clear organization names and structures, businesses can replicate their real-world corporate hierarchy within the CodeZero platform, making it easier to manage large-scale digital transformations.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Resource Sharing and Data Sovereignty","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the primary advantages of the Organization layer is the ability to manage global runtimes. These shared runtimes can be utilized across multiple projects within the same organization, optimizing infrastructure costs and performance. Because CodeZero allows for hybrid setups, an organization can choose to link its own local runtimes to the global orchestrator, ensuring that the company maintains total sovereignty over its sensitive data processing.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Cross-Project Collaboration and Governance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Organizations facilitate a higher level of governance by allowing for role definitions that span across multiple projects. This means a security officer can be assigned a role at the organizational level to oversee all automation projects, while developers are limited to the specific project workspaces they are assigned to. This multi-layered approach to access control is what makes CodeZero a truly enterprise-ready platform.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The Foundation of Digital Maturity","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Organization layer is what transforms CodeZero from a simple automation tool into a comprehensive process management system. By providing a clear structure for users, projects, and runtimes, we enable businesses to scale their automation efforts with confidence. Establishing a strong organizational foundation today ensures that your automated future is secure, transparent, and built to grow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Learn how CodeZero Organizations provide the essential framework for managing complex teams and projects. Discover how to establish namespaces, share runtimes, and maintain enterprise-grade governance over your entire automation ecosystem.","de":"Learn how CodeZero Organizations provide the essential framework for managing complex teams and projects. Discover how to establish namespaces, share runtimes, and maintain enterprise-grade governance over your entire automation ecosystem."},"heroImage":{"id":145,"alt":"Organization overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:30:37.189Z","createdAt":"2026-03-25T11:30:37.189Z","url":"/api/media/file/Organization_Overview_Page.png","thumbnailURL":null,"filename":"Organization_Overview_Page.png","mimeType":"image/png","filesize":340618,"width":2940,"height":1666,"focalX":50,"focalY":50},"ogImage":{"id":145,"alt":"Organization overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:30:37.189Z","createdAt":"2026-03-25T11:30:37.189Z","url":"/api/media/file/Organization_Overview_Page.png","thumbnailURL":null,"filename":"Organization_Overview_Page.png","mimeType":"image/png","filesize":340618,"width":2940,"height":1666,"focalX":50,"focalY":50},"twitterImage":{"id":145,"alt":"Organization overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:30:37.189Z","createdAt":"2026-03-25T11:30:37.189Z","url":"/api/media/file/Organization_Overview_Page.png","thumbnailURL":null,"filename":"Organization_Overview_Page.png","mimeType":"image/png","filesize":340618,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"description":{"en":"Learn how CodeZero Organizations provide the essential framework for managing complex teams and projects. Discover how to establish namespaces, share runtimes, and maintain enterprise-grade governance over your entire automation ecosystem.","de":"Learn how CodeZero Organizations provide the essential framework for managing complex teams and projects. Discover how to establish namespaces, share runtimes, and maintain enterprise-grade governance over your entire automation ecosystem."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:37.804Z","createdAt":"2026-03-25T11:32:36.516Z"},{"id":57,"title":{"en":"Designing Custom Permissions with CodeZero Role Management","de":"Designing Custom Permissions with CodeZero Role Management"},"slug":"role-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In any professional automation environment, the ability to control access is as important as the automation itself. As organizations grow, the \"all or nothing\" approach to permissions becomes a security risk and an operational bottleneck. CodeZero addresses this by offering a sophisticated Role Management system that allows administrators to define exactly what each user can see, edit, and execute across the entire infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Power of Role-Based Access Control","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Role Management in CodeZero serves as the security backbone of your workspace. It ensures that developers have the tools they need to build flows while restricting sensitive organizational settings to high-level administrators. By decoupling users from static permissions and instead assigning them to dynamic roles, the platform provides a flexible framework that adapts to any team structure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Precision Engineering for Permissions","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The true strength of CodeZero lies in its granular control. Administrators are not limited to generic presets. Instead, the platform allows for the toggling of specific permissions across member management, project administration, and role creation itself. This level of detail ensures that your security policy reflects your actual business processes.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Streamlining Setup with Role Templates","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To accelerate the onboarding process, CodeZero includes pre-defined role templates designed for common industry personas. Whether you need a \"Flow Developer\" who focuses on logic or a \"Runtime Manager\" who oversees infrastructure, these templates provide a secure starting point that can be further customized as needed.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Ownership and Sovereignty in Large Teams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"As your organization scales into multiple projects, the Role Management system keeps the environment manageable. By assigning roles to specific projects, you prevent cross-contamination of logic and ensure that sensitive API keys or runtime configurations remain protected. This structured approach to governance allows teams to move fast without breaking critical security protocols.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Secure Growth through Modular Governance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero empowers organizations to scale their automation without sacrificing control. By providing an intuitive interface for managing complex permissions, the platform ensures that every team member has a clear scope of action. A well-defined role system is the first step toward a secure and professional automation strategy.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In any professional automation environment, the ability to control access is as important as the automation itself. As organizations grow, the \"all or nothing\" approach to permissions becomes a security risk and an operational bottleneck. CodeZero addresses this by offering a sophisticated Role Management system that allows administrators to define exactly what each user can see, edit, and execute across the entire infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Power of Role-Based Access Control","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Role Management in CodeZero serves as the security backbone of your workspace. It ensures that developers have the tools they need to build flows while restricting sensitive organizational settings to high-level administrators. By decoupling users from static permissions and instead assigning them to dynamic roles, the platform provides a flexible framework that adapts to any team structure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Precision Engineering for Permissions","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The true strength of CodeZero lies in its granular control. Administrators are not limited to generic presets. Instead, the platform allows for the toggling of specific permissions across member management, project administration, and role creation itself. This level of detail ensures that your security policy reflects your actual business processes.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Streamlining Setup with Role Templates","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To accelerate the onboarding process, CodeZero includes pre-defined role templates designed for common industry personas. Whether you need a \"Flow Developer\" who focuses on logic or a \"Runtime Manager\" who oversees infrastructure, these templates provide a secure starting point that can be further customized as needed.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Ownership and Sovereignty in Large Teams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"As your organization scales into multiple projects, the Role Management system keeps the environment manageable. By assigning roles to specific projects, you prevent cross-contamination of logic and ensure that sensitive API keys or runtime configurations remain protected. This structured approach to governance allows teams to move fast without breaking critical security protocols.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Secure Growth through Modular Governance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero empowers organizations to scale their automation without sacrificing control. By providing an intuitive interface for managing complex permissions, the platform ensures that every team member has a clear scope of action. A well-defined role system is the first step toward a secure and professional automation strategy.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Discover how CodeZero Role Management provides granular control over your automation workspace. Learn to use role templates and custom permissions to secure your projects and empower your team safely.","de":"Discover how CodeZero Role Management provides granular control over your automation workspace. Learn to use role templates and custom permissions to secure your projects and empower your team safely."},"heroImage":{"id":147,"alt":"Role overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.738Z","createdAt":"2026-03-25T11:21:38.738Z","url":"/api/media/file/Role_Overview_Page.png","thumbnailURL":null,"filename":"Role_Overview_Page.png","mimeType":"image/png","filesize":396501,"width":2940,"height":1666,"focalX":50,"focalY":50},"ogImage":{"id":147,"alt":"Role overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.738Z","createdAt":"2026-03-25T11:21:38.738Z","url":"/api/media/file/Role_Overview_Page.png","thumbnailURL":null,"filename":"Role_Overview_Page.png","mimeType":"image/png","filesize":396501,"width":2940,"height":1666,"focalX":50,"focalY":50},"twitterImage":{"id":147,"alt":"Role overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.738Z","createdAt":"2026-03-25T11:21:38.738Z","url":"/api/media/file/Role_Overview_Page.png","thumbnailURL":null,"filename":"Role_Overview_Page.png","mimeType":"image/png","filesize":396501,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"description":{"en":"Discover how CodeZero Role Management provides granular control over your automation workspace. Learn to use role templates and custom permissions to secure your projects and empower your team safely.","de":"Discover how CodeZero Role Management provides granular control over your automation workspace. Learn to use role templates and custom permissions to secure your projects and empower your team safely."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:39.756Z","createdAt":"2026-03-25T11:26:01.351Z"},{"id":58,"title":{"en":"Collaboration at Scale: Mastering Member Management in CodeZero","de":"Collaboration at Scale: Mastering Member Management in CodeZero"},"slug":"member-management-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automation is rarely a solo endeavor. As processes become more integrated into a company’s core operations, the need for secure, structured, and fine-grained user management becomes paramount. At CodeZero, we provide a comprehensive Member Management system designed to facilitate seamless collaboration while maintaining strict security standards.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Foundation of Collaborative Workspaces","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In CodeZero, collaboration happens within the context of Organizations and Projects. The \"Members\" section is your central command for seeing exactly who has access to your automation ecosystem. Whether you are working with internal developers or external stakeholders, the interface provides a clear overview of every participant in your workspace.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Onboarding: Adding New Talent","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Bringing new members into your project should be frictionless. CodeZero allows administrators to quickly add users to a project or organization. This streamlined onboarding process ensures that team members can get to work immediately without navigating complex setup hurdles.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Fine-Grained Permissions: Defining Roles","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Security in automation means ensuring that users only have the permissions they truly need. CodeZero utilizes a robust Role-Based Access Control (RBAC) system. Administrators can assign specific roles—such as Owner, Maintainer, or Member—to define exactly what an individual can do, from managing high-level organizational settings to simply editing specific flows.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Maintaining a Clean Workspace","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"As teams evolve, so do their access requirements. CodeZero makes it easy to audit and adjust your member list. If a team member changes roles or leaves a project, administrators can revoke access or remove members instantly, ensuring that your automation infrastructure remains secure and up-to-date.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Secure Teamwork for Complex Workflows","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero’s Member Management is built for teams that value both speed and security. By providing clear visibility into user roles and making access control intuitive, we empower organizations to build complex automated systems together. True scalability is not just about the number of flows you run—it is about how effectively your team can manage them together.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automation is rarely a solo endeavor. As processes become more integrated into a company’s core operations, the need for secure, structured, and fine-grained user management becomes paramount. At CodeZero, we provide a comprehensive Member Management system designed to facilitate seamless collaboration while maintaining strict security standards.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Foundation of Collaborative Workspaces","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In CodeZero, collaboration happens within the context of Organizations and Projects. The \"Members\" section is your central command for seeing exactly who has access to your automation ecosystem. Whether you are working with internal developers or external stakeholders, the interface provides a clear overview of every participant in your workspace.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Onboarding: Adding New Talent","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Bringing new members into your project should be frictionless. CodeZero allows administrators to quickly add users to a project or organization. This streamlined onboarding process ensures that team members can get to work immediately without navigating complex setup hurdles.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Fine-Grained Permissions: Defining Roles","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Security in automation means ensuring that users only have the permissions they truly need. CodeZero utilizes a robust Role-Based Access Control (RBAC) system. Administrators can assign specific roles—such as Owner, Maintainer, or Member—to define exactly what an individual can do, from managing high-level organizational settings to simply editing specific flows.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Maintaining a Clean Workspace","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"As teams evolve, so do their access requirements. CodeZero makes it easy to audit and adjust your member list. If a team member changes roles or leaves a project, administrators can revoke access or remove members instantly, ensuring that your automation infrastructure remains secure and up-to-date.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Secure Teamwork for Complex Workflows","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero’s Member Management is built for teams that value both speed and security. By providing clear visibility into user roles and making access control intuitive, we empower organizations to build complex automated systems together. True scalability is not just about the number of flows you run—it is about how effectively your team can manage them together.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Empower your team with CodeZero’s robust Member Management. Learn how to onboard users, assign fine-grained roles, and secure your automation workflows through intuitive, enterprise-grade access control.","de":"Empower your team with CodeZero’s robust Member Management. Learn how to onboard users, assign fine-grained roles, and secure your automation workflows through intuitive, enterprise-grade access control."},"heroImage":{"id":150,"alt":"Member overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.805Z","createdAt":"2026-03-25T11:13:20.805Z","url":"/api/media/file/Member_Overview_Page.png","thumbnailURL":null,"filename":"Member_Overview_Page.png","mimeType":"image/png","filesize":390811,"width":2940,"height":1668,"focalX":50,"focalY":50},"ogImage":{"id":150,"alt":"Member overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.805Z","createdAt":"2026-03-25T11:13:20.805Z","url":"/api/media/file/Member_Overview_Page.png","thumbnailURL":null,"filename":"Member_Overview_Page.png","mimeType":"image/png","filesize":390811,"width":2940,"height":1668,"focalX":50,"focalY":50},"twitterImage":{"id":150,"alt":"Member overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.805Z","createdAt":"2026-03-25T11:13:20.805Z","url":"/api/media/file/Member_Overview_Page.png","thumbnailURL":null,"filename":"Member_Overview_Page.png","mimeType":"image/png","filesize":390811,"width":2940,"height":1668,"focalX":50,"focalY":50},"meta":{"description":{"en":"Empower your team with CodeZero’s robust Member Management. Learn how to onboard users, assign fine-grained roles, and secure your automation workflows through intuitive, enterprise-grade access control.","de":"Empower your team with CodeZero’s robust Member Management. Learn how to onboard users, assign fine-grained roles, and secure your automation workflows through intuitive, enterprise-grade access control."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:41.155Z","createdAt":"2026-03-25T11:15:53.179Z"},{"id":59,"title":{"en":"Mastering Organization: Managing Workflows with CodeZero Projects","de":"Mastering Organization: Managing Workflows with CodeZero Projects"},"slug":"project-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"In the world of complex automation, organization is the difference between a scalable operation and a chaotic one. As your automation needs grow—spanning from logistics integration to AI-driven bots—the ability to group, isolate, and manage these processes becomes critical. At CodeZero, we solve this through our fundamental organizational unit: The Project.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"What is a CodeZero Project?","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"A Project is more than just a folder for your flows. It is a dedicated workspace that serves as the central hub for your automation resources, configurations, and team collaboration. It allows you to partition your business logic—for example, keeping your \"Logistics Automation\" strictly separate from your \"Customer Support AI\"—while maintaining a bird's-eye view of your entire infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Structured for Scalability","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Every project in CodeZero is designed to be self-contained but globally accessible within your organization. This structure provides three core benefits:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Logical Grouping: Group related flows, such as those connecting Shopify to GLS, into a single environment.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Resource Allocation: Assign specific runtimes (like your local Taurus engine) to a project to ensure dedicated processing power.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Security and Access Control: Projects act as the primary boundary for permissions. By assigning roles to members at the project level, you ensure that only the right people have the power to create or modify critical flows.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Creating Your First Workspace","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Starting a new initiative in CodeZero is simple but powerful. When you create a new project, you aren't just naming a container; you are defining the scope of a new automation ecosystem.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Project Lifecycle","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"As your project evolves, CodeZero’s modular architecture allows it to scale with you. You can start with a single flow in a sample project and gradually expand into a multi-node, high-volume operation. Because runtimes are assigned per project, you can migrate a project from a shared cloud runtime to a dedicated local runtime as your data sovereignty or performance requirements increase.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Foundation for Excellence","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Effective automation starts with effective organization. By utilizing Projects, CodeZero users can build complex, enterprise-ready systems that remain manageable, secure, and easy to navigate. Whether you are a small team or a global organization, the Project structure is your foundation for operational excellence.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"In the world of complex automation, organization is the difference between a scalable operation and a chaotic one. As your automation needs grow—spanning from logistics integration to AI-driven bots—the ability to group, isolate, and manage these processes becomes critical. At CodeZero, we solve this through our fundamental organizational unit: The Project.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"What is a CodeZero Project?","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"A Project is more than just a folder for your flows. It is a dedicated workspace that serves as the central hub for your automation resources, configurations, and team collaboration. It allows you to partition your business logic—for example, keeping your \"Logistics Automation\" strictly separate from your \"Customer Support AI\"—while maintaining a bird's-eye view of your entire infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Structured for Scalability","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Every project in CodeZero is designed to be self-contained but globally accessible within your organization. This structure provides three core benefits:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Logical Grouping: Group related flows, such as those connecting Shopify to GLS, into a single environment.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Resource Allocation: Assign specific runtimes (like your local Taurus engine) to a project to ensure dedicated processing power.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Security and Access Control: Projects act as the primary boundary for permissions. By assigning roles to members at the project level, you ensure that only the right people have the power to create or modify critical flows.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Creating Your First Workspace","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Starting a new initiative in CodeZero is simple but powerful. When you create a new project, you aren't just naming a container; you are defining the scope of a new automation ecosystem.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Project Lifecycle","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"As your project evolves, CodeZero’s modular architecture allows it to scale with you. You can start with a single flow in a sample project and gradually expand into a multi-node, high-volume operation. Because runtimes are assigned per project, you can migrate a project from a shared cloud runtime to a dedicated local runtime as your data sovereignty or performance requirements increase.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Foundation for Excellence","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Effective automation starts with effective organization. By utilizing Projects, CodeZero users can build complex, enterprise-ready systems that remain manageable, secure, and easy to navigate. Whether you are a small team or a global organization, the Project structure is your foundation for operational excellence.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Streamline your automation management with CodeZero Projects. Learn how to organize workflows, manage team roles, and scale your business logic within a secure, modular workspace designed for enterprise-grade orchestration.","de":"Streamline your automation management with CodeZero Projects. Learn how to organize workflows, manage team roles, and scale your business logic within a secure, modular workspace designed for enterprise-grade orchestration."},"heroImage":{"id":154,"alt":"Project overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:05:42.234Z","createdAt":"2026-03-25T11:05:42.234Z","url":"/api/media/file/Project_Overview_Feature.png","thumbnailURL":null,"filename":"Project_Overview_Feature.png","mimeType":"image/png","filesize":330250,"width":2940,"height":1666,"focalX":50,"focalY":50},"ogImage":{"id":154,"alt":"Project overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:05:42.234Z","createdAt":"2026-03-25T11:05:42.234Z","url":"/api/media/file/Project_Overview_Feature.png","thumbnailURL":null,"filename":"Project_Overview_Feature.png","mimeType":"image/png","filesize":330250,"width":2940,"height":1666,"focalX":50,"focalY":50},"twitterImage":{"id":154,"alt":"Project overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:05:42.234Z","createdAt":"2026-03-25T11:05:42.234Z","url":"/api/media/file/Project_Overview_Feature.png","thumbnailURL":null,"filename":"Project_Overview_Feature.png","mimeType":"image/png","filesize":330250,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"description":{"en":"Streamline your automation management with CodeZero Projects. Learn how to organize workflows, manage team roles, and scale your business logic within a secure, modular workspace designed for enterprise-grade orchestration.","de":"Streamline your automation management with CodeZero Projects. Learn how to organize workflows, manage team roles, and scale your business logic within a secure, modular workspace designed for enterprise-grade orchestration."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:42.278Z","createdAt":"2026-03-25T11:06:22.085Z"},{"id":60,"title":{"en":"Smart AI agents with CodeZero automation","de":"Smart AI agents with CodeZero automation"},"slug":"smart-ai-agents-use-case","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The rapid evolution of Artificial Intelligence has moved beyond simple chat interfaces. Today, the real value lies in \"Agentic Workflows\"—AI agents that don't just talk, but act. However, many businesses find themselves locked into closed ecosystems or rigid platforms. At CodeZero, we provide a sovereign alternative, allowing you to build sophisticated AI agents that remain independent of a single provider while integrating deeply into your existing tech stack.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Model Agnostic: Total Flexibility in LLM Selection","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the biggest risks in modern AI implementation is vendor lock-in. A model that performs perfectly today might be surpassed by a competitor tomorrow. CodeZero addresses this by being entirely model-agnostic. You can select your preferred Large Language Model (LLM)—whether it is OpenAI, Anthropic, or Mistral—and switch between them with a single configuration change. This ensures that your automated workflows always benefit from the best-performing intelligence available on the market.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extending Intelligence with MCP Tool Integration","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"An AI model is only as powerful as the data it can access and the actions it can perform. By utilizing the Model Context Protocol (MCP), CodeZero allows you to attach a vast array of compatible tools to your AI agents. Whether it is querying a local database, interacting with specialized APIs, or reading internal documentation, MCP integration provides your agents with the necessary context and \"hands\" to perform real-world tasks autonomously.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Complex Flow Logic for Sophisticated Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"True automation requires more than just a single prompt; it requires a structured sequence of decisions and actions. Our platform enables the creation of complex flow logic where AI models are embedded into multi-step processes. You can define specific system prompts for different stages of a workflow, allowing the AI to handle everything from initial data analysis to final execution. This ensures that the agent follows your business logic while maintaining the flexibility to handle edge cases.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Deployment and Enterprise Readiness","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Moving from a prototype to a production-ready AI agent often involves significant infrastructure hurdles. CodeZero simplifies this transition by providing a stable, high-performance environment for your automated flows. By combining your custom-defined prompts with professional-grade tool-calling capabilities, you can deploy agents that handle high-volume tasks with precision and reliability.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Empowering the Next Generation of AI Agents","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The ability to combine the reasoning power of top-tier LLMs with the practical utility of MCP-compatible tools marks a new era in automation. CodeZero empowers you to build these systems without the constraints of a single ecosystem. By focusing on model independence and logical flow construction, you can create a future-proof AI infrastructure that evolves alongside the industry.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The rapid evolution of Artificial Intelligence has moved beyond simple chat interfaces. Today, the real value lies in \"Agentic Workflows\"—AI agents that don't just talk, but act. However, many businesses find themselves locked into closed ecosystems or rigid platforms. At CodeZero, we provide a sovereign alternative, allowing you to build sophisticated AI agents that remain independent of a single provider while integrating deeply into your existing tech stack.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Model Agnostic: Total Flexibility in LLM Selection","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the biggest risks in modern AI implementation is vendor lock-in. A model that performs perfectly today might be surpassed by a competitor tomorrow. CodeZero addresses this by being entirely model-agnostic. You can select your preferred Large Language Model (LLM)—whether it is OpenAI, Anthropic, or Mistral—and switch between them with a single configuration change. This ensures that your automated workflows always benefit from the best-performing intelligence available on the market.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extending Intelligence with MCP Tool Integration","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"An AI model is only as powerful as the data it can access and the actions it can perform. By utilizing the Model Context Protocol (MCP), CodeZero allows you to attach a vast array of compatible tools to your AI agents. Whether it is querying a local database, interacting with specialized APIs, or reading internal documentation, MCP integration provides your agents with the necessary context and \"hands\" to perform real-world tasks autonomously.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Complex Flow Logic for Sophisticated Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"True automation requires more than just a single prompt; it requires a structured sequence of decisions and actions. Our platform enables the creation of complex flow logic where AI models are embedded into multi-step processes. You can define specific system prompts for different stages of a workflow, allowing the AI to handle everything from initial data analysis to final execution. This ensures that the agent follows your business logic while maintaining the flexibility to handle edge cases.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Deployment and Enterprise Readiness","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Moving from a prototype to a production-ready AI agent often involves significant infrastructure hurdles. CodeZero simplifies this transition by providing a stable, high-performance environment for your automated flows. By combining your custom-defined prompts with professional-grade tool-calling capabilities, you can deploy agents that handle high-volume tasks with precision and reliability.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Empowering the Next Generation of AI Agents","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The ability to combine the reasoning power of top-tier LLMs with the practical utility of MCP-compatible tools marks a new era in automation. CodeZero empowers you to build these systems without the constraints of a single ecosystem. By focusing on model independence and logical flow construction, you can create a future-proof AI infrastructure that evolves alongside the industry.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Build sovereign, model-agnostic AI agents with CodeZero. Leverage the Model Context Protocol (MCP) to integrate custom tools, define complex flow logic, and create automated agentic workflows that scale without vendor lock-in.","de":"Build sovereign, model-agnostic AI agents with CodeZero. Leverage the Model Context Protocol (MCP) to integrate custom tools, define complex flow logic, and create automated agentic workflows that scale without vendor lock-in."},"heroImage":{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},"ogImage":{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},"twitterImage":{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},"meta":{"description":{"en":"Build sovereign, model-agnostic AI agents with CodeZero. Leverage the Model Context Protocol (MCP) to integrate custom tools, define complex flow logic, and create automated agentic workflows that scale without vendor lock-in.","de":"Build sovereign, model-agnostic AI agents with CodeZero. Leverage the Model Context Protocol (MCP) to integrate custom tools, define complex flow logic, and create automated agentic workflows that scale without vendor lock-in."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:43.474Z","createdAt":"2026-03-25T10:45:01.566Z"},{"id":61,"title":{"en":"Smart chatbots with CodeZero automation","de":"Smart chatbots with CodeZero automation"},"slug":"smart-chatbots-use-case","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Discord has evolved from a simple communication tool into a mission-critical hub for communities, brands, and automated operations. However, the true potential of a server is often locked behind complex coding requirements and expensive developer hours. At CodeZero, we are breaking these barriers by enabling anyone to build sophisticated, fully functional Discord bots through an intuitive flow-based configuration.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Empowering Community Management through Visual Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The foundation of a great Discord experience is a bot that reflects the unique needs of its community. Our Visual Bot Builder allows users to define complex interactions by connecting logical blocks and triggers. This approach removes the steep learning curve of programming languages, allowing community managers to go from a conceptual idea to a live bot in minutes by simply configuring the desired behavior.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Intelligent Automation for Seamless Moderation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Managing a growing server requires constant vigilance, which can quickly become an overwhelming manual task. CodeZero introduces intelligent automation that handles everything from welcoming new members to sophisticated moderation flows. By setting up custom triggers and automated responses within your flow, you can ensure your server remains a safe and organized environment without requiring 24/7 human supervision.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Bridging the Gap with Deep Third-Party Integrations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Discord bot truly becomes powerful when it can interact with the world outside of the chat app. CodeZero enables deep integrations that allow your bot to pull real-time data from external APIs, update your internal databases, or connect to your existing tech stack. Whether you need to sync member roles with your CRM or provide live project updates directly in a channel, our platform handles the technical heavy lifting of data exchange.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Total Customization and Scalability","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We believe that no-code should not mean limited functionality. Every bot built on CodeZero is highly customizable, allowing you to define unique commands, personalities, and multi-step workflows. As your server scales from a few dozen members to several thousand, the underlying infrastructure scales automatically to ensure your bot remains responsive and reliable under high traffic.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The New Era of Community Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The future of Discord lies in automation that is accessible to everyone. By combining a logical flow builder with powerful automation and deep integration capabilities, CodeZero empowers you to transform your server into a high-performance automated hub. Start building today and focus on what truly matters: engaging your community and growing your brand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Discord has evolved from a simple communication tool into a mission-critical hub for communities, brands, and automated operations. However, the true potential of a server is often locked behind complex coding requirements and expensive developer hours. At CodeZero, we are breaking these barriers by enabling anyone to build sophisticated, fully functional Discord bots through an intuitive flow-based configuration.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Empowering Community Management through Visual Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The foundation of a great Discord experience is a bot that reflects the unique needs of its community. Our Visual Bot Builder allows users to define complex interactions by connecting logical blocks and triggers. This approach removes the steep learning curve of programming languages, allowing community managers to go from a conceptual idea to a live bot in minutes by simply configuring the desired behavior.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Intelligent Automation for Seamless Moderation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Managing a growing server requires constant vigilance, which can quickly become an overwhelming manual task. CodeZero introduces intelligent automation that handles everything from welcoming new members to sophisticated moderation flows. By setting up custom triggers and automated responses within your flow, you can ensure your server remains a safe and organized environment without requiring 24/7 human supervision.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Bridging the Gap with Deep Third-Party Integrations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Discord bot truly becomes powerful when it can interact with the world outside of the chat app. CodeZero enables deep integrations that allow your bot to pull real-time data from external APIs, update your internal databases, or connect to your existing tech stack. Whether you need to sync member roles with your CRM or provide live project updates directly in a channel, our platform handles the technical heavy lifting of data exchange.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Total Customization and Scalability","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We believe that no-code should not mean limited functionality. Every bot built on CodeZero is highly customizable, allowing you to define unique commands, personalities, and multi-step workflows. As your server scales from a few dozen members to several thousand, the underlying infrastructure scales automatically to ensure your bot remains responsive and reliable under high traffic.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The New Era of Community Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The future of Discord lies in automation that is accessible to everyone. By combining a logical flow builder with powerful automation and deep integration capabilities, CodeZero empowers you to transform your server into a high-performance automated hub. Start building today and focus on what truly matters: engaging your community and growing your brand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Build powerful Discord bots without writing a single line of code. Use CodeZero’s intuitive flow-based builder to automate community management, integrate real-time data from third-party APIs, and transform your server into a fully automated hub.","de":"Build powerful Discord bots without writing a single line of code. Use CodeZero’s intuitive flow-based builder to automate community management, integrate real-time data from third-party APIs, and transform your server into a fully automated hub."},"heroImage":{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},"ogImage":{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},"twitterImage":{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},"meta":{"description":{"en":"Build powerful Discord bots without writing a single line of code. Use CodeZero’s intuitive flow-based builder to automate community management, integrate real-time data from third-party APIs, and transform your server into a fully automated hub.","de":"Build powerful Discord bots without writing a single line of code. Use CodeZero’s intuitive flow-based builder to automate community management, integrate real-time data from third-party APIs, and transform your server into a fully automated hub."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:44.626Z","createdAt":"2026-03-25T10:42:24.535Z"},{"id":62,"title":{"en":"Smart logistic with CodeZero automation","de":"Smart logistic with CodeZero automation"},"slug":"smart-logistic-use-case","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The modern logistics landscape is reaching a digital turning point. While e-commerce platforms like Shopify and marketplaces such as Amazon continue to drive rapid global growth, the operational fulfillment in the background often remains trapped in manual workflows. Many companies struggle with the challenge of maintaining data consistency between their ERP systems like SAP, their storefront platforms, and shipping carriers like GLS.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Challenge of Fragmented Data Streams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The primary bottleneck in many shipping departments lies in the lack of communication between individual software solutions. When order data must be manually transferred from Shopify to GLS, delays and errors become inevitable. These manual interfaces often result in incorrect address data, delayed label creation, and a lack of transparency for the end customer, as tracking numbers often appear in the system with a significant time lag.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automation as a Strategic Competitive Advantage","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero acts as an intelligent bridge between these disparate worlds, creating an automated data flow from the moment an order is placed to the final delivery. As soon as a customer completes a purchase on Amazon or Shopify, the relevant shipping information is transmitted to GLS without any human intervention. This process guarantees the immediate generation of shipping labels and ensures that the logistics chain never stalls due to administrative bottlenecks.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Integration with SAP and Enterprise Systems","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"For larger organizations, returning logistics data to the primary system of record is a critical requirement. CodeZero automates this feedback loop by recording shipping statuses and tracking IDs directly back into SAP as soon as they are generated by GLS. This eliminates the need for daily spreadsheet reconciliations, while accounting and inventory management teams can access real-time data at any time.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Proactive Customer Communication via Real-Time Updates","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A vital component of logistics automation involves the post-purchase customer experience. By directly linking the GLS interface with the company’s communication tools, customers receive automated updates at every delivery milestone. This significantly reduces the volume of support inquiries and strengthens brand trust through a policy of transparent and proactive information sharing.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Scalability Without Increasing Administrative Overhead","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The architecture of CodeZero is designed to grow alongside the demands of the business. Because the processes are modular, there is no difference in administrative effort whether ten or ten thousand parcels are shipped per day. Companies can thus scale their order volume effectively without being forced to increase their staff within logistics administration.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The Future of Efficient Logistics","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automating the logistics chain is no longer a luxury but a necessity for competitive enterprises. By intelligently connecting sales channels, ERP systems, and shipping carriers, CodeZero creates an infrastructure that eliminates errors and frees up resources for core business activities. Investing in this digital architecture today ensures the operational excellence required for the markets of tomorrow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The modern logistics landscape is reaching a digital turning point. While e-commerce platforms like Shopify and marketplaces such as Amazon continue to drive rapid global growth, the operational fulfillment in the background often remains trapped in manual workflows. Many companies struggle with the challenge of maintaining data consistency between their ERP systems like SAP, their storefront platforms, and shipping carriers like GLS.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Challenge of Fragmented Data Streams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The primary bottleneck in many shipping departments lies in the lack of communication between individual software solutions. When order data must be manually transferred from Shopify to GLS, delays and errors become inevitable. These manual interfaces often result in incorrect address data, delayed label creation, and a lack of transparency for the end customer, as tracking numbers often appear in the system with a significant time lag.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automation as a Strategic Competitive Advantage","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero acts as an intelligent bridge between these disparate worlds, creating an automated data flow from the moment an order is placed to the final delivery. As soon as a customer completes a purchase on Amazon or Shopify, the relevant shipping information is transmitted to GLS without any human intervention. This process guarantees the immediate generation of shipping labels and ensures that the logistics chain never stalls due to administrative bottlenecks.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Integration with SAP and Enterprise Systems","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"For larger organizations, returning logistics data to the primary system of record is a critical requirement. CodeZero automates this feedback loop by recording shipping statuses and tracking IDs directly back into SAP as soon as they are generated by GLS. This eliminates the need for daily spreadsheet reconciliations, while accounting and inventory management teams can access real-time data at any time.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Proactive Customer Communication via Real-Time Updates","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A vital component of logistics automation involves the post-purchase customer experience. By directly linking the GLS interface with the company’s communication tools, customers receive automated updates at every delivery milestone. This significantly reduces the volume of support inquiries and strengthens brand trust through a policy of transparent and proactive information sharing.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Scalability Without Increasing Administrative Overhead","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The architecture of CodeZero is designed to grow alongside the demands of the business. Because the processes are modular, there is no difference in administrative effort whether ten or ten thousand parcels are shipped per day. Companies can thus scale their order volume effectively without being forced to increase their staff within logistics administration.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The Future of Efficient Logistics","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automating the logistics chain is no longer a luxury but a necessity for competitive enterprises. By intelligently connecting sales channels, ERP systems, and shipping carriers, CodeZero creates an infrastructure that eliminates errors and frees up resources for core business activities. Investing in this digital architecture today ensures the operational excellence required for the markets of tomorrow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Maximize your shipping efficiency by automating the link between Shopify, SAP, and GLS. Learn how CodeZero eliminates manual data entry, reduces errors, and scales your logistics from checkout to delivery with seamless no-code integrations.","de":"Maximize your shipping efficiency by automating the link between Shopify, SAP, and GLS. Learn how CodeZero eliminates manual data entry, reduces errors, and scales your logistics from checkout to delivery with seamless no-code integrations."},"heroImage":{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},"ogImage":{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},"twitterImage":{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},"meta":{"description":{"en":"Maximize your shipping efficiency by automating the link between Shopify, SAP, and GLS. Learn how CodeZero eliminates manual data entry, reduces errors, and scales your logistics from checkout to delivery with seamless no-code integrations.","de":"Maximize your shipping efficiency by automating the link between Shopify, SAP, and GLS. Learn how CodeZero eliminates manual data entry, reduces errors, and scales your logistics from checkout to delivery with seamless no-code integrations."},"keywords":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:45.813Z","createdAt":"2026-03-25T10:35:34.698Z"}] \ No newline at end of file +[{"id":52,"title":{"en":"Understanding Actions and the Action SDK","de":"Understanding Actions and the Action SDK"},"slug":"actions-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A truly future-proof automation platform must be able to grow alongside the technology it manages. While many tools limit users to a fixed set of features, CodeZero is built on a foundation of infinite modularity. The key to this flexibility is the Actions system. Actions are the plugins that extend our runtimes, allowing developers to define new flow types, custom nodes, and unique triggers that meet specific business requirements.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extending the Runtime with Custom Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In the CodeZero architecture, the runtime components like Aquila and Taurus handle the heavy lifting of execution, but they are designed to be \"Action-aware.\" An Action is a standalone package that connects to the runtime and tells it how to handle new types of processes. By developing and deploying an Action, you aren't just adding a script; you are expanding the fundamental capabilities of your entire automation infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Developer Experience: The Action SDK","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To make this extensibility accessible, we have created the CodeZero Action SDK. This specialized toolkit provides developers with everything they need to build their own plugins independently of the core backend. Using the SDK, you can map out the logic for a specialized industry tool, integrate a proprietary database, or create custom AI-driven decision nodes. These Actions can be developed, versioned, and deployed as modular units, ensuring that your core system remains clean and stable while your capabilities expand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Modular Architecture for Hybrid Environments","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Because Actions are decoupled from the central Sagittarius service, they support the true spirit of a hybrid cloud setup. You can develop a custom Action to interact with local hardware or sensitive on-premise data and deploy it specifically on your local runtime. This ensures that the specialized logic and the data it processes remain within your sovereign network, while the flow itself is still managed through the global CodeZero interface.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Community-Driven Ecosystem","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The modular nature of Actions invites collaboration and contribution. As the CodeZero community grows, so does the library of available Actions. This ecosystem allows users to benefit from the work of others, whether that means a new connector for a popular CRM or a sophisticated adapter for MQTT-based IoT communication. Every new Action added to a runtime immediately populates the Suggestion Menu in the Flow Builder, making new power available to every member of your organization.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Future-Proofing Your Automation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Actions system is what prevents CodeZero from ever becoming a \"black box\" solution. By providing the tools to build, manage, and share custom logic through the Action SDK, we empower you to solve the automation challenges of today and the unforeseen requirements of tomorrow. Your automation platform should be as unique as your business, and with Actions, it finally can be.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"block","fields":{"id":"69c4fd2bf5fffad10edaead9","source":"si:sap Triggers on order creation within SAP;\ncrm:hubspot Syncs new contact data into HubSpot;\nerp:oracle Starts invoice validation in Oracle ERP;\ndb:postgres Stores approved order records in Postgres;\napi:stripe Triggers payment capture through Stripe API;\nmsg:rabbitmq Pushes fulfillment event into RabbitMQ;\nmail:sendgrid Sends confirmation email via SendGrid;\nbi:powerbi Refreshes sales dashboard in Power BI;","blockName":"","blockType":"trigger"},"format":"","version":2},{"type":"block","fields":{"id":"69c4fd47f5fffad10edaeada","source":"API -> Queue\nTest -> Queue","blockName":"","blockType":"graph"},"format":"","version":2},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A truly future-proof automation platform must be able to grow alongside the technology it manages. While many tools limit users to a fixed set of features, CodeZero is built on a foundation of infinite modularity. The key to this flexibility is the Actions system. Actions are the plugins that extend our runtimes, allowing developers to define new flow types, custom nodes, and unique triggers that meet specific business requirements.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extending the Runtime with Custom Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In the CodeZero architecture, the runtime components like Aquila and Taurus handle the heavy lifting of execution, but they are designed to be \"Action-aware.\" An Action is a standalone package that connects to the runtime and tells it how to handle new types of processes. By developing and deploying an Action, you aren't just adding a script; you are expanding the fundamental capabilities of your entire automation infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Developer Experience: The Action SDK","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To make this extensibility accessible, we have created the CodeZero Action SDK. This specialized toolkit provides developers with everything they need to build their own plugins independently of the core backend. Using the SDK, you can map out the logic for a specialized industry tool, integrate a proprietary database, or create custom AI-driven decision nodes. These Actions can be developed, versioned, and deployed as modular units, ensuring that your core system remains clean and stable while your capabilities expand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Modular Architecture for Hybrid Environments","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Because Actions are decoupled from the central Sagittarius service, they support the true spirit of a hybrid cloud setup. You can develop a custom Action to interact with local hardware or sensitive on-premise data and deploy it specifically on your local runtime. This ensures that the specialized logic and the data it processes remain within your sovereign network, while the flow itself is still managed through the global CodeZero interface.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Community-Driven Ecosystem","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The modular nature of Actions invites collaboration and contribution. As the CodeZero community grows, so does the library of available Actions. This ecosystem allows users to benefit from the work of others, whether that means a new connector for a popular CRM or a sophisticated adapter for MQTT-based IoT communication. Every new Action added to a runtime immediately populates the Suggestion Menu in the Flow Builder, making new power available to every member of your organization.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Future-Proofing Your Automation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Actions system is what prevents CodeZero from ever becoming a \"black box\" solution. By providing the tools to build, manage, and share custom logic through the Action SDK, we empower you to solve the automation challenges of today and the unforeseen requirements of tomorrow. Your automation platform should be as unique as your business, and with Actions, it finally can be.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Unlock infinite extensibility with CodeZero Actions. Discover how the Action SDK allows you to build custom nodes, triggers, and flow types to create a tailored automation infrastructure that scales with your unique business needs.","de":"Unlock infinite extensibility with CodeZero Actions. Discover how the Action SDK allows you to build custom nodes, triggers, and flow types to create a tailored automation infrastructure that scales with your unique business needs."},"heroImage":{"id":141,"alt":"Github action SDK CodeZero","href":null,"updatedAt":"2026-03-25T12:01:38.170Z","createdAt":"2026-03-25T12:01:38.169Z","url":"/api/media/file/Github_Action_SDK_CodeZero.png","thumbnailURL":null,"filename":"Github_Action_SDK_CodeZero.png","mimeType":"image/png","filesize":524187,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Unlock infinite extensibility with CodeZero Actions. Discover how the Action SDK allows you to build custom nodes, triggers, and flow types to create a tailored automation infrastructure that scales with your unique business needs.","de":"Unlock infinite extensibility with CodeZero Actions. Discover how the Action SDK allows you to build custom nodes, triggers, and flow types to create a tailored automation infrastructure that scales with your unique business needs."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:29.508Z","createdAt":"2026-03-25T12:01:51.272Z"},{"id":53,"title":{"en":"Accelerating Workflows with the CodeZero Suggestion Menu","de":"Accelerating Workflows with the CodeZero Suggestion Menu"},"slug":"flow-builder-suggestion-menu-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Efficiency in automation is not just about how fast a process runs, but how quickly it can be built. In the CodeZero Flow Builder, the transition from a conceptual idea to a functional node sequence is powered by the Suggestion Menu. This intelligent interface acts as a real-time catalog of your entire automation toolkit, ensuring that the right logic is always just a click away.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Intelligent Node Selection at Your Fingertips","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Suggestion Menu is the central entry point for expanding any flow. As you develop your automation, the menu provides a searchable and categorized list of every available node type. This includes everything from standard boolean logic and control flow operators to specialized HTTP request nodes. By presenting these options in a structured overlay, CodeZero eliminates the need to navigate deep sub-menus, allowing you to maintain your creative momentum.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Library of Modular Capabilities","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Every item in the Suggestion Menu represents a modular capability of the CodeZero runtime. These building blocks are organized into logical groups such as:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Standard Control: Manage the flow of execution with \"If-Else\" conditions, \"Return\" statements, and \"Stop\" functions.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Data Handling: Transform and validate information using boolean operations and list processing tools.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"External Integration: Trigger and respond to REST API calls to bridge your flow with third-party services.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extensibility in Real-Time","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Because CodeZero is built on a modular plugin architecture, the Suggestion Menu is dynamic. When you add new \"Actions\" via our Action SDK, the custom nodes and triggers defined in those plugins automatically populate the menu. This means that as you extend your runtime capabilities, your design interface evolves alongside it, immediately offering your new custom tools for use in any project.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Flow Construction","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The menu is designed to support the \"sequence of connected nodes\" that defines a CodeZero flow. By allowing you to \"Add next node\" through a simple search, the interface helps you visualize the directed graph as it grows. This tight integration between the visual builder and the underlying logic parameters ensures that every connection is valid and every step is configured correctly from the start.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Empowering Fast and Flexible Automation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Suggestion Menu is more than just a search bar; it is the bridge between your technical requirements and the Taurus execution engine. By making the platform's extensive library of nodes instantly accessible, CodeZero empowers you to build, test, and iterate on complex business logic with unprecedented speed. High-performance automation begins with an interface that works at the speed of your thoughts.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Efficiency in automation is not just about how fast a process runs, but how quickly it can be built. In the CodeZero Flow Builder, the transition from a conceptual idea to a functional node sequence is powered by the Suggestion Menu. This intelligent interface acts as a real-time catalog of your entire automation toolkit, ensuring that the right logic is always just a click away.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Intelligent Node Selection at Your Fingertips","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Suggestion Menu is the central entry point for expanding any flow. As you develop your automation, the menu provides a searchable and categorized list of every available node type. This includes everything from standard boolean logic and control flow operators to specialized HTTP request nodes. By presenting these options in a structured overlay, CodeZero eliminates the need to navigate deep sub-menus, allowing you to maintain your creative momentum.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Library of Modular Capabilities","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Every item in the Suggestion Menu represents a modular capability of the CodeZero runtime. These building blocks are organized into logical groups such as:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Standard Control: Manage the flow of execution with \"If-Else\" conditions, \"Return\" statements, and \"Stop\" functions.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Data Handling: Transform and validate information using boolean operations and list processing tools.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"External Integration: Trigger and respond to REST API calls to bridge your flow with third-party services.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extensibility in Real-Time","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Because CodeZero is built on a modular plugin architecture, the Suggestion Menu is dynamic. When you add new \"Actions\" via our Action SDK, the custom nodes and triggers defined in those plugins automatically populate the menu. This means that as you extend your runtime capabilities, your design interface evolves alongside it, immediately offering your new custom tools for use in any project.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Flow Construction","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The menu is designed to support the \"sequence of connected nodes\" that defines a CodeZero flow. By allowing you to \"Add next node\" through a simple search, the interface helps you visualize the directed graph as it grows. This tight integration between the visual builder and the underlying logic parameters ensures that every connection is valid and every step is configured correctly from the start.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Empowering Fast and Flexible Automation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Suggestion Menu is more than just a search bar; it is the bridge between your technical requirements and the Taurus execution engine. By making the platform's extensive library of nodes instantly accessible, CodeZero empowers you to build, test, and iterate on complex business logic with unprecedented speed. High-performance automation begins with an interface that works at the speed of your thoughts.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Speed up your workflow development with the CodeZero Suggestion Menu. Discover how to instantly access triggers, logic blocks, and custom nodes to build powerful automated flows without ever leaving the builder.","de":"Speed up your workflow development with the CodeZero Suggestion Menu. Discover how to instantly access triggers, logic blocks, and custom nodes to build powerful automated flows without ever leaving the builder."},"heroImage":{"id":142,"alt":"Flow builder suggestion menu CodeZero","href":null,"updatedAt":"2026-03-25T11:55:33.672Z","createdAt":"2026-03-25T11:55:33.672Z","url":"/api/media/file/Flow_Builder_Suggestion_Menu_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Suggestion_Menu_Feature.png","mimeType":"image/png","filesize":490427,"width":2940,"height":1664,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Speed up your workflow development with the CodeZero Suggestion Menu. Discover how to instantly access triggers, logic blocks, and custom nodes to build powerful automated flows without ever leaving the builder.","de":"Speed up your workflow development with the CodeZero Suggestion Menu. Discover how to instantly access triggers, logic blocks, and custom nodes to build powerful automated flows without ever leaving the builder."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:31.431Z","createdAt":"2026-03-25T11:57:48.287Z"},{"id":54,"title":{"en":"Architecture of Execution: Understanding Runtime Types in CodeZero","de":"Architecture of Execution: Understanding Runtime Types in CodeZero"},"slug":"runtime-type-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The power of an automation platform is measured by how it executes the logic you design. CodeZero provides a sophisticated runtime architecture that allows you to choose exactly how your flows are deployed and processed. By categorizing runtimes into two distinct dimensions—Deployment Method and Execution Mode—we empower you to optimize for either extreme flexibility or maximum performance.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Deployment Strategy: Static vs. Dynamic Runtimes","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The first choice in setting up your CodeZero infrastructure is determining how your flows are delivered to the execution engine. This choice defines the relationship between your design environment (the IDE) and the active runtime.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Static Runtimes for Autonomous Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In a static setup, the runtime operates independently of the IDE. Your flows are stored as physical files directly within the runtime environment. This approach is ideal for production systems that require total autonomy. Even if the central application interface is offline, the static runtime continues to execute its local files without interruption.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Dynamic Runtimes for Real-Time Development","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Dynamic runtimes offer the exact opposite experience by maintaining a live connection to the IDE. Instead of relying on local files, these runtimes load and update flows on the fly as you make changes in the interface. This creates a seamless developer experience where logic can be tested and tweaked in real-time without manual deployment steps.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Execution Performance: Interpreted vs. Compiled Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The second dimension of the CodeZero architecture defines how the runtime actually processes the underlying JSON structure of your flow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Interpreted Execution for High Flexibility","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"An interpreted runtime processes the flow step-by-step. It reads the JSON definition of each node at the moment of execution and performs the logic sequentially. This mode is highly versatile and allows for rapid debugging and easy adjustments, making it the preferred choice for most standard automation tasks.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Compiled Execution for Peak Performance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"For high-volume environments where every millisecond counts, CodeZero offers a compiled execution mode. In this scenario, the entire JSON flow is transformed into optimized, executable code before it runs. By eliminating the overhead of step-by-step interpretation, compiled flows achieve significantly higher throughput and reduced latency for enterprise-grade workloads.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Combining Categories for Custom Solutions","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The true strength of CodeZero lies in the ability to combine these categories to suit your specific use case. You might choose a Dynamic-Interpreted setup during the prototyping phase to benefit from instant updates and easy debugging. Conversely, a mission-critical logistics operation might deploy a Static-Compiled runtime to ensure the system runs autonomously at the highest possible speed.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Tailored Execution for Every Use Case","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"By decoupling the deployment method from the execution mode, CodeZero provides a modular infrastructure that fits any requirement. Whether you need the agility of a live-updated development tool or the rock-solid stability of a compiled autonomous engine, our runtime architecture ensures your business logic is always running exactly where and how it should.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The power of an automation platform is measured by how it executes the logic you design. CodeZero provides a sophisticated runtime architecture that allows you to choose exactly how your flows are deployed and processed. By categorizing runtimes into two distinct dimensions—Deployment Method and Execution Mode—we empower you to optimize for either extreme flexibility or maximum performance.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Deployment Strategy: Static vs. Dynamic Runtimes","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The first choice in setting up your CodeZero infrastructure is determining how your flows are delivered to the execution engine. This choice defines the relationship between your design environment (the IDE) and the active runtime.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Static Runtimes for Autonomous Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In a static setup, the runtime operates independently of the IDE. Your flows are stored as physical files directly within the runtime environment. This approach is ideal for production systems that require total autonomy. Even if the central application interface is offline, the static runtime continues to execute its local files without interruption.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Dynamic Runtimes for Real-Time Development","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Dynamic runtimes offer the exact opposite experience by maintaining a live connection to the IDE. Instead of relying on local files, these runtimes load and update flows on the fly as you make changes in the interface. This creates a seamless developer experience where logic can be tested and tweaked in real-time without manual deployment steps.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Execution Performance: Interpreted vs. Compiled Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The second dimension of the CodeZero architecture defines how the runtime actually processes the underlying JSON structure of your flow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Interpreted Execution for High Flexibility","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"An interpreted runtime processes the flow step-by-step. It reads the JSON definition of each node at the moment of execution and performs the logic sequentially. This mode is highly versatile and allows for rapid debugging and easy adjustments, making it the preferred choice for most standard automation tasks.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Compiled Execution for Peak Performance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"For high-volume environments where every millisecond counts, CodeZero offers a compiled execution mode. In this scenario, the entire JSON flow is transformed into optimized, executable code before it runs. By eliminating the overhead of step-by-step interpretation, compiled flows achieve significantly higher throughput and reduced latency for enterprise-grade workloads.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Combining Categories for Custom Solutions","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The true strength of CodeZero lies in the ability to combine these categories to suit your specific use case. You might choose a Dynamic-Interpreted setup during the prototyping phase to benefit from instant updates and easy debugging. Conversely, a mission-critical logistics operation might deploy a Static-Compiled runtime to ensure the system runs autonomously at the highest possible speed.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Tailored Execution for Every Use Case","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"By decoupling the deployment method from the execution mode, CodeZero provides a modular infrastructure that fits any requirement. Whether you need the agility of a live-updated development tool or the rock-solid stability of a compiled autonomous engine, our runtime architecture ensures your business logic is always running exactly where and how it should.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Explore the flexibility of CodeZero Runtime Types. Learn the differences between Static vs. Dynamic deployment and Interpreted vs. Compiled execution to optimize your automation for speed, autonomy, and scale.","de":"Explore the flexibility of CodeZero Runtime Types. Learn the differences between Static vs. Dynamic deployment and Interpreted vs. Compiled execution to optimize your automation for speed, autonomy, and scale."},"heroImage":{"id":143,"alt":"Runtime overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:53:05.308Z","createdAt":"2026-03-25T11:53:05.307Z","url":"/api/media/file/Runtime_Overview_Page.png","thumbnailURL":null,"filename":"Runtime_Overview_Page.png","mimeType":"image/png","filesize":333824,"width":2940,"height":1668,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Explore the flexibility of CodeZero Runtime Types. Learn the differences between Static vs. Dynamic deployment and Interpreted vs. Compiled execution to optimize your automation for speed, autonomy, and scale.","de":"Explore the flexibility of CodeZero Runtime Types. Learn the differences between Static vs. Dynamic deployment and Interpreted vs. Compiled execution to optimize your automation for speed, autonomy, and scale."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:33.502Z","createdAt":"2026-03-25T11:53:15.132Z"},{"id":55,"title":{"en":"The Building Blocks of Automation: Understanding Nodes in CodeZero","de":"The Building Blocks of Automation: Understanding Nodes in CodeZero"},"slug":"flow-builder-node-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"At the heart of every automated process within CodeZero lies the \"Flow,\" a directed graph that transforms complex business logic into a visual and manageable sequence. The fundamental unit of these flows is the Node. Each node represents a distinct, individual step in a process, acting as the essential building block for everything from simple data transfers to sophisticated AI-driven operations.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"What is a Node?","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In the CodeZero ecosystem, a node is more than just a visual element. It is a functional container that holds specific parameters and logic. By connecting these nodes, users define the path that data takes and the actions that occur at every stage of a workflow. This modular approach ensures that even the most intricate systems remain understandable and easy to maintain.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Logic and Parameters","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Every node is defined by its parameters, which dictate its input and configuration. For example, a \"Trigger\" node might wait for an incoming HTTP request, while a \"Function\" node processes that data before passing it to the next step. This granular configuration allows for \"Complex Flow Logic,\" enabling the system to handle loops, conditional branches, and error handling without requiring traditional coding.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extensibility through the Action SDK","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the most powerful aspects of CodeZero is that the variety of available nodes is not fixed. Through our Action SDK, developers can create custom \"Actions\" that extend the runtime with entirely new node types. This plugin system allows organizations to build specialized nodes for their unique needs, whether that involves connecting to legacy hardware via MQTT or deploying custom AI agents.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Scalable Execution","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"While nodes are designed and organized within the \"Sculptor\" frontend, their actual execution is handled by the \"Taurus\" runtime. This separation of concerns ensures that your logic remains platform-agnostic. Whether a node is performing a simple calculation or a deep integration with an enterprise ERP like SAP, the underlying infrastructure scales automatically to meet the demand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Designing with Precision","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"By mastering the use of nodes, you gain the ability to map any business process into a high-performance automated hub. CodeZero provides the canvas and the tools, but the nodes provide the power. Start building your sequences today and see how modular logic can transform your organizational management.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"At the heart of every automated process within CodeZero lies the \"Flow,\" a directed graph that transforms complex business logic into a visual and manageable sequence. The fundamental unit of these flows is the Node. Each node represents a distinct, individual step in a process, acting as the essential building block for everything from simple data transfers to sophisticated AI-driven operations.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"What is a Node?","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In the CodeZero ecosystem, a node is more than just a visual element. It is a functional container that holds specific parameters and logic. By connecting these nodes, users define the path that data takes and the actions that occur at every stage of a workflow. This modular approach ensures that even the most intricate systems remain understandable and easy to maintain.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Logic and Parameters","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Every node is defined by its parameters, which dictate its input and configuration. For example, a \"Trigger\" node might wait for an incoming HTTP request, while a \"Function\" node processes that data before passing it to the next step. This granular configuration allows for \"Complex Flow Logic,\" enabling the system to handle loops, conditional branches, and error handling without requiring traditional coding.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extensibility through the Action SDK","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the most powerful aspects of CodeZero is that the variety of available nodes is not fixed. Through our Action SDK, developers can create custom \"Actions\" that extend the runtime with entirely new node types. This plugin system allows organizations to build specialized nodes for their unique needs, whether that involves connecting to legacy hardware via MQTT or deploying custom AI agents.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Scalable Execution","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"While nodes are designed and organized within the \"Sculptor\" frontend, their actual execution is handled by the \"Taurus\" runtime. This separation of concerns ensures that your logic remains platform-agnostic. Whether a node is performing a simple calculation or a deep integration with an enterprise ERP like SAP, the underlying infrastructure scales automatically to meet the demand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Designing with Precision","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"By mastering the use of nodes, you gain the ability to map any business process into a high-performance automated hub. CodeZero provides the canvas and the tools, but the nodes provide the power. Start building your sequences today and see how modular logic can transform your organizational management.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Unlock the power of modular automation with CodeZero Nodes. Learn how to use individual logic blocks to build complex flows, integrate third-party data, and scale your business processes with ease.","de":"Unlock the power of modular automation with CodeZero Nodes. Learn how to use individual logic blocks to build complex flows, integrate third-party data, and scale your business processes with ease."},"heroImage":{"id":144,"alt":"Flow builder nodes feature CodeZero","href":null,"updatedAt":"2026-03-25T11:38:02.809Z","createdAt":"2026-03-25T11:38:02.809Z","url":"/api/media/file/Flow_Builder_Nodes_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Nodes_Feature.png","mimeType":"image/png","filesize":407177,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Unlock the power of modular automation with CodeZero Nodes. Learn how to use individual logic blocks to build complex flows, integrate third-party data, and scale your business processes with ease.","de":"Unlock the power of modular automation with CodeZero Nodes. Learn how to use individual logic blocks to build complex flows, integrate third-party data, and scale your business processes with ease."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:35.446Z","createdAt":"2026-03-25T11:40:33.195Z"},{"id":56,"title":{"en":"Managing Organizations in CodeZero","de":"Managing Organizations in CodeZero"},"slug":"organization-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The highest level of structure within the CodeZero ecosystem is the Organization. While projects and flows handle the technical execution, the Organization layer provides the administrative framework necessary for business-wide management. This architectural layer is designed to represent a company or a large department, serving as the ultimate container for users, projects, and shared resources.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Centralized Management for Complex Teams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Organizations allow administrators to manage a group of users and a multitude of projects from a single centralized interface. This is especially useful for companies running parallel automation initiatives across different departments such as marketing, logistics, and customer success. By using organizations, you can ensure that each department has its own dedicated space while maintaining global visibility for high-level stakeholders.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Building Your Organizational Framework","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Creating an organization is the first step toward building a scalable automation strategy. This process establishes the root namespace where all subsequent projects and roles will reside. By defining clear organization names and structures, businesses can replicate their real-world corporate hierarchy within the CodeZero platform, making it easier to manage large-scale digital transformations.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Resource Sharing and Data Sovereignty","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the primary advantages of the Organization layer is the ability to manage global runtimes. These shared runtimes can be utilized across multiple projects within the same organization, optimizing infrastructure costs and performance. Because CodeZero allows for hybrid setups, an organization can choose to link its own local runtimes to the global orchestrator, ensuring that the company maintains total sovereignty over its sensitive data processing.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Cross-Project Collaboration and Governance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Organizations facilitate a higher level of governance by allowing for role definitions that span across multiple projects. This means a security officer can be assigned a role at the organizational level to oversee all automation projects, while developers are limited to the specific project workspaces they are assigned to. This multi-layered approach to access control is what makes CodeZero a truly enterprise-ready platform.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The Foundation of Digital Maturity","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Organization layer is what transforms CodeZero from a simple automation tool into a comprehensive process management system. By providing a clear structure for users, projects, and runtimes, we enable businesses to scale their automation efforts with confidence. Establishing a strong organizational foundation today ensures that your automated future is secure, transparent, and built to grow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The highest level of structure within the CodeZero ecosystem is the Organization. While projects and flows handle the technical execution, the Organization layer provides the administrative framework necessary for business-wide management. This architectural layer is designed to represent a company or a large department, serving as the ultimate container for users, projects, and shared resources.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Centralized Management for Complex Teams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Organizations allow administrators to manage a group of users and a multitude of projects from a single centralized interface. This is especially useful for companies running parallel automation initiatives across different departments such as marketing, logistics, and customer success. By using organizations, you can ensure that each department has its own dedicated space while maintaining global visibility for high-level stakeholders.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Building Your Organizational Framework","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Creating an organization is the first step toward building a scalable automation strategy. This process establishes the root namespace where all subsequent projects and roles will reside. By defining clear organization names and structures, businesses can replicate their real-world corporate hierarchy within the CodeZero platform, making it easier to manage large-scale digital transformations.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Resource Sharing and Data Sovereignty","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the primary advantages of the Organization layer is the ability to manage global runtimes. These shared runtimes can be utilized across multiple projects within the same organization, optimizing infrastructure costs and performance. Because CodeZero allows for hybrid setups, an organization can choose to link its own local runtimes to the global orchestrator, ensuring that the company maintains total sovereignty over its sensitive data processing.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Cross-Project Collaboration and Governance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Organizations facilitate a higher level of governance by allowing for role definitions that span across multiple projects. This means a security officer can be assigned a role at the organizational level to oversee all automation projects, while developers are limited to the specific project workspaces they are assigned to. This multi-layered approach to access control is what makes CodeZero a truly enterprise-ready platform.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The Foundation of Digital Maturity","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Organization layer is what transforms CodeZero from a simple automation tool into a comprehensive process management system. By providing a clear structure for users, projects, and runtimes, we enable businesses to scale their automation efforts with confidence. Establishing a strong organizational foundation today ensures that your automated future is secure, transparent, and built to grow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Learn how CodeZero Organizations provide the essential framework for managing complex teams and projects. Discover how to establish namespaces, share runtimes, and maintain enterprise-grade governance over your entire automation ecosystem.","de":"Learn how CodeZero Organizations provide the essential framework for managing complex teams and projects. Discover how to establish namespaces, share runtimes, and maintain enterprise-grade governance over your entire automation ecosystem."},"heroImage":{"id":145,"alt":"Organization overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:30:37.189Z","createdAt":"2026-03-25T11:30:37.189Z","url":"/api/media/file/Organization_Overview_Page.png","thumbnailURL":null,"filename":"Organization_Overview_Page.png","mimeType":"image/png","filesize":340618,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Learn how CodeZero Organizations provide the essential framework for managing complex teams and projects. Discover how to establish namespaces, share runtimes, and maintain enterprise-grade governance over your entire automation ecosystem.","de":"Learn how CodeZero Organizations provide the essential framework for managing complex teams and projects. Discover how to establish namespaces, share runtimes, and maintain enterprise-grade governance over your entire automation ecosystem."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:37.804Z","createdAt":"2026-03-25T11:32:36.516Z"},{"id":57,"title":{"en":"Designing Custom Permissions with CodeZero Role Management","de":"Designing Custom Permissions with CodeZero Role Management"},"slug":"role-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In any professional automation environment, the ability to control access is as important as the automation itself. As organizations grow, the \"all or nothing\" approach to permissions becomes a security risk and an operational bottleneck. CodeZero addresses this by offering a sophisticated Role Management system that allows administrators to define exactly what each user can see, edit, and execute across the entire infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Power of Role-Based Access Control","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Role Management in CodeZero serves as the security backbone of your workspace. It ensures that developers have the tools they need to build flows while restricting sensitive organizational settings to high-level administrators. By decoupling users from static permissions and instead assigning them to dynamic roles, the platform provides a flexible framework that adapts to any team structure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Precision Engineering for Permissions","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The true strength of CodeZero lies in its granular control. Administrators are not limited to generic presets. Instead, the platform allows for the toggling of specific permissions across member management, project administration, and role creation itself. This level of detail ensures that your security policy reflects your actual business processes.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Streamlining Setup with Role Templates","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To accelerate the onboarding process, CodeZero includes pre-defined role templates designed for common industry personas. Whether you need a \"Flow Developer\" who focuses on logic or a \"Runtime Manager\" who oversees infrastructure, these templates provide a secure starting point that can be further customized as needed.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Ownership and Sovereignty in Large Teams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"As your organization scales into multiple projects, the Role Management system keeps the environment manageable. By assigning roles to specific projects, you prevent cross-contamination of logic and ensure that sensitive API keys or runtime configurations remain protected. This structured approach to governance allows teams to move fast without breaking critical security protocols.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Secure Growth through Modular Governance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero empowers organizations to scale their automation without sacrificing control. By providing an intuitive interface for managing complex permissions, the platform ensures that every team member has a clear scope of action. A well-defined role system is the first step toward a secure and professional automation strategy.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In any professional automation environment, the ability to control access is as important as the automation itself. As organizations grow, the \"all or nothing\" approach to permissions becomes a security risk and an operational bottleneck. CodeZero addresses this by offering a sophisticated Role Management system that allows administrators to define exactly what each user can see, edit, and execute across the entire infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Power of Role-Based Access Control","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Role Management in CodeZero serves as the security backbone of your workspace. It ensures that developers have the tools they need to build flows while restricting sensitive organizational settings to high-level administrators. By decoupling users from static permissions and instead assigning them to dynamic roles, the platform provides a flexible framework that adapts to any team structure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Precision Engineering for Permissions","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The true strength of CodeZero lies in its granular control. Administrators are not limited to generic presets. Instead, the platform allows for the toggling of specific permissions across member management, project administration, and role creation itself. This level of detail ensures that your security policy reflects your actual business processes.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Streamlining Setup with Role Templates","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To accelerate the onboarding process, CodeZero includes pre-defined role templates designed for common industry personas. Whether you need a \"Flow Developer\" who focuses on logic or a \"Runtime Manager\" who oversees infrastructure, these templates provide a secure starting point that can be further customized as needed.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Ownership and Sovereignty in Large Teams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"As your organization scales into multiple projects, the Role Management system keeps the environment manageable. By assigning roles to specific projects, you prevent cross-contamination of logic and ensure that sensitive API keys or runtime configurations remain protected. This structured approach to governance allows teams to move fast without breaking critical security protocols.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Secure Growth through Modular Governance","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero empowers organizations to scale their automation without sacrificing control. By providing an intuitive interface for managing complex permissions, the platform ensures that every team member has a clear scope of action. A well-defined role system is the first step toward a secure and professional automation strategy.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Discover how CodeZero Role Management provides granular control over your automation workspace. Learn to use role templates and custom permissions to secure your projects and empower your team safely.","de":"Discover how CodeZero Role Management provides granular control over your automation workspace. Learn to use role templates and custom permissions to secure your projects and empower your team safely."},"heroImage":{"id":147,"alt":"Role overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.738Z","createdAt":"2026-03-25T11:21:38.738Z","url":"/api/media/file/Role_Overview_Page.png","thumbnailURL":null,"filename":"Role_Overview_Page.png","mimeType":"image/png","filesize":396501,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Discover how CodeZero Role Management provides granular control over your automation workspace. Learn to use role templates and custom permissions to secure your projects and empower your team safely.","de":"Discover how CodeZero Role Management provides granular control over your automation workspace. Learn to use role templates and custom permissions to secure your projects and empower your team safely."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:39.756Z","createdAt":"2026-03-25T11:26:01.351Z"},{"id":58,"title":{"en":"Collaboration at Scale: Mastering Member Management in CodeZero","de":"Collaboration at Scale: Mastering Member Management in CodeZero"},"slug":"member-management-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automation is rarely a solo endeavor. As processes become more integrated into a company’s core operations, the need for secure, structured, and fine-grained user management becomes paramount. At CodeZero, we provide a comprehensive Member Management system designed to facilitate seamless collaboration while maintaining strict security standards.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Foundation of Collaborative Workspaces","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In CodeZero, collaboration happens within the context of Organizations and Projects. The \"Members\" section is your central command for seeing exactly who has access to your automation ecosystem. Whether you are working with internal developers or external stakeholders, the interface provides a clear overview of every participant in your workspace.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Onboarding: Adding New Talent","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Bringing new members into your project should be frictionless. CodeZero allows administrators to quickly add users to a project or organization. This streamlined onboarding process ensures that team members can get to work immediately without navigating complex setup hurdles.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Fine-Grained Permissions: Defining Roles","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Security in automation means ensuring that users only have the permissions they truly need. CodeZero utilizes a robust Role-Based Access Control (RBAC) system. Administrators can assign specific roles—such as Owner, Maintainer, or Member—to define exactly what an individual can do, from managing high-level organizational settings to simply editing specific flows.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Maintaining a Clean Workspace","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"As teams evolve, so do their access requirements. CodeZero makes it easy to audit and adjust your member list. If a team member changes roles or leaves a project, administrators can revoke access or remove members instantly, ensuring that your automation infrastructure remains secure and up-to-date.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Secure Teamwork for Complex Workflows","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero’s Member Management is built for teams that value both speed and security. By providing clear visibility into user roles and making access control intuitive, we empower organizations to build complex automated systems together. True scalability is not just about the number of flows you run—it is about how effectively your team can manage them together.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automation is rarely a solo endeavor. As processes become more integrated into a company’s core operations, the need for secure, structured, and fine-grained user management becomes paramount. At CodeZero, we provide a comprehensive Member Management system designed to facilitate seamless collaboration while maintaining strict security standards.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Foundation of Collaborative Workspaces","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"In CodeZero, collaboration happens within the context of Organizations and Projects. The \"Members\" section is your central command for seeing exactly who has access to your automation ecosystem. Whether you are working with internal developers or external stakeholders, the interface provides a clear overview of every participant in your workspace.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Onboarding: Adding New Talent","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Bringing new members into your project should be frictionless. CodeZero allows administrators to quickly add users to a project or organization. This streamlined onboarding process ensures that team members can get to work immediately without navigating complex setup hurdles.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Fine-Grained Permissions: Defining Roles","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Security in automation means ensuring that users only have the permissions they truly need. CodeZero utilizes a robust Role-Based Access Control (RBAC) system. Administrators can assign specific roles—such as Owner, Maintainer, or Member—to define exactly what an individual can do, from managing high-level organizational settings to simply editing specific flows.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Maintaining a Clean Workspace","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"As teams evolve, so do their access requirements. CodeZero makes it easy to audit and adjust your member list. If a team member changes roles or leaves a project, administrators can revoke access or remove members instantly, ensuring that your automation infrastructure remains secure and up-to-date.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Secure Teamwork for Complex Workflows","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero’s Member Management is built for teams that value both speed and security. By providing clear visibility into user roles and making access control intuitive, we empower organizations to build complex automated systems together. True scalability is not just about the number of flows you run—it is about how effectively your team can manage them together.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Empower your team with CodeZero’s robust Member Management. Learn how to onboard users, assign fine-grained roles, and secure your automation workflows through intuitive, enterprise-grade access control.","de":"Empower your team with CodeZero’s robust Member Management. Learn how to onboard users, assign fine-grained roles, and secure your automation workflows through intuitive, enterprise-grade access control."},"heroImage":{"id":150,"alt":"Member overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.805Z","createdAt":"2026-03-25T11:13:20.805Z","url":"/api/media/file/Member_Overview_Page.png","thumbnailURL":null,"filename":"Member_Overview_Page.png","mimeType":"image/png","filesize":390811,"width":2940,"height":1668,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Empower your team with CodeZero’s robust Member Management. Learn how to onboard users, assign fine-grained roles, and secure your automation workflows through intuitive, enterprise-grade access control.","de":"Empower your team with CodeZero’s robust Member Management. Learn how to onboard users, assign fine-grained roles, and secure your automation workflows through intuitive, enterprise-grade access control."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:41.155Z","createdAt":"2026-03-25T11:15:53.179Z"},{"id":59,"title":{"en":"Mastering Organization: Managing Workflows with CodeZero Projects","de":"Mastering Organization: Managing Workflows with CodeZero Projects"},"slug":"project-feature","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"In the world of complex automation, organization is the difference between a scalable operation and a chaotic one. As your automation needs grow—spanning from logistics integration to AI-driven bots—the ability to group, isolate, and manage these processes becomes critical. At CodeZero, we solve this through our fundamental organizational unit: The Project.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"What is a CodeZero Project?","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"A Project is more than just a folder for your flows. It is a dedicated workspace that serves as the central hub for your automation resources, configurations, and team collaboration. It allows you to partition your business logic—for example, keeping your \"Logistics Automation\" strictly separate from your \"Customer Support AI\"—while maintaining a bird's-eye view of your entire infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Structured for Scalability","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Every project in CodeZero is designed to be self-contained but globally accessible within your organization. This structure provides three core benefits:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Logical Grouping: Group related flows, such as those connecting Shopify to GLS, into a single environment.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Resource Allocation: Assign specific runtimes (like your local Taurus engine) to a project to ensure dedicated processing power.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Security and Access Control: Projects act as the primary boundary for permissions. By assigning roles to members at the project level, you ensure that only the right people have the power to create or modify critical flows.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Creating Your First Workspace","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Starting a new initiative in CodeZero is simple but powerful. When you create a new project, you aren't just naming a container; you are defining the scope of a new automation ecosystem.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Project Lifecycle","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"As your project evolves, CodeZero’s modular architecture allows it to scale with you. You can start with a single flow in a sample project and gradually expand into a multi-node, high-volume operation. Because runtimes are assigned per project, you can migrate a project from a shared cloud runtime to a dedicated local runtime as your data sovereignty or performance requirements increase.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Foundation for Excellence","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Effective automation starts with effective organization. By utilizing Projects, CodeZero users can build complex, enterprise-ready systems that remain manageable, secure, and easy to navigate. Whether you are a small team or a global organization, the Project structure is your foundation for operational excellence.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"In the world of complex automation, organization is the difference between a scalable operation and a chaotic one. As your automation needs grow—spanning from logistics integration to AI-driven bots—the ability to group, isolate, and manage these processes becomes critical. At CodeZero, we solve this through our fundamental organizational unit: The Project.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"What is a CodeZero Project?","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"A Project is more than just a folder for your flows. It is a dedicated workspace that serves as the central hub for your automation resources, configurations, and team collaboration. It allows you to partition your business logic—for example, keeping your \"Logistics Automation\" strictly separate from your \"Customer Support AI\"—while maintaining a bird's-eye view of your entire infrastructure.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Structured for Scalability","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Every project in CodeZero is designed to be self-contained but globally accessible within your organization. This structure provides three core benefits:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Logical Grouping: Group related flows, such as those connecting Shopify to GLS, into a single environment.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Resource Allocation: Assign specific runtimes (like your local Taurus engine) to a project to ensure dedicated processing power.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Security and Access Control: Projects act as the primary boundary for permissions. By assigning roles to members at the project level, you ensure that only the right people have the power to create or modify critical flows.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Creating Your First Workspace","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Starting a new initiative in CodeZero is simple but powerful. When you create a new project, you aren't just naming a container; you are defining the scope of a new automation ecosystem.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Project Lifecycle","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"As your project evolves, CodeZero’s modular architecture allows it to scale with you. You can start with a single flow in a sample project and gradually expand into a multi-node, high-volume operation. Because runtimes are assigned per project, you can migrate a project from a shared cloud runtime to a dedicated local runtime as your data sovereignty or performance requirements increase.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Foundation for Excellence","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"start","indent":0,"version":1,"children":[{"mode":"normal","text":"Effective automation starts with effective organization. By utilizing Projects, CodeZero users can build complex, enterprise-ready systems that remain manageable, secure, and easy to navigate. Whether you are a small team or a global organization, the Project structure is your foundation for operational excellence.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Streamline your automation management with CodeZero Projects. Learn how to organize workflows, manage team roles, and scale your business logic within a secure, modular workspace designed for enterprise-grade orchestration.","de":"Streamline your automation management with CodeZero Projects. Learn how to organize workflows, manage team roles, and scale your business logic within a secure, modular workspace designed for enterprise-grade orchestration."},"heroImage":{"id":154,"alt":"Project overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:05:42.234Z","createdAt":"2026-03-25T11:05:42.234Z","url":"/api/media/file/Project_Overview_Feature.png","thumbnailURL":null,"filename":"Project_Overview_Feature.png","mimeType":"image/png","filesize":330250,"width":2940,"height":1666,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Streamline your automation management with CodeZero Projects. Learn how to organize workflows, manage team roles, and scale your business logic within a secure, modular workspace designed for enterprise-grade orchestration.","de":"Streamline your automation management with CodeZero Projects. Learn how to organize workflows, manage team roles, and scale your business logic within a secure, modular workspace designed for enterprise-grade orchestration."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:42.278Z","createdAt":"2026-03-25T11:06:22.085Z"},{"id":60,"title":{"en":"Smart AI agents with CodeZero automation","de":"Smart AI agents with CodeZero automation"},"slug":"smart-ai-agents-use-case","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The rapid evolution of Artificial Intelligence has moved beyond simple chat interfaces. Today, the real value lies in \"Agentic Workflows\"—AI agents that don't just talk, but act. However, many businesses find themselves locked into closed ecosystems or rigid platforms. At CodeZero, we provide a sovereign alternative, allowing you to build sophisticated AI agents that remain independent of a single provider while integrating deeply into your existing tech stack.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Model Agnostic: Total Flexibility in LLM Selection","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the biggest risks in modern AI implementation is vendor lock-in. A model that performs perfectly today might be surpassed by a competitor tomorrow. CodeZero addresses this by being entirely model-agnostic. You can select your preferred Large Language Model (LLM)—whether it is OpenAI, Anthropic, or Mistral—and switch between them with a single configuration change. This ensures that your automated workflows always benefit from the best-performing intelligence available on the market.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extending Intelligence with MCP Tool Integration","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"An AI model is only as powerful as the data it can access and the actions it can perform. By utilizing the Model Context Protocol (MCP), CodeZero allows you to attach a vast array of compatible tools to your AI agents. Whether it is querying a local database, interacting with specialized APIs, or reading internal documentation, MCP integration provides your agents with the necessary context and \"hands\" to perform real-world tasks autonomously.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Complex Flow Logic for Sophisticated Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"True automation requires more than just a single prompt; it requires a structured sequence of decisions and actions. Our platform enables the creation of complex flow logic where AI models are embedded into multi-step processes. You can define specific system prompts for different stages of a workflow, allowing the AI to handle everything from initial data analysis to final execution. This ensures that the agent follows your business logic while maintaining the flexibility to handle edge cases.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Deployment and Enterprise Readiness","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Moving from a prototype to a production-ready AI agent often involves significant infrastructure hurdles. CodeZero simplifies this transition by providing a stable, high-performance environment for your automated flows. By combining your custom-defined prompts with professional-grade tool-calling capabilities, you can deploy agents that handle high-volume tasks with precision and reliability.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Empowering the Next Generation of AI Agents","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The ability to combine the reasoning power of top-tier LLMs with the practical utility of MCP-compatible tools marks a new era in automation. CodeZero empowers you to build these systems without the constraints of a single ecosystem. By focusing on model independence and logical flow construction, you can create a future-proof AI infrastructure that evolves alongside the industry.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The rapid evolution of Artificial Intelligence has moved beyond simple chat interfaces. Today, the real value lies in \"Agentic Workflows\"—AI agents that don't just talk, but act. However, many businesses find themselves locked into closed ecosystems or rigid platforms. At CodeZero, we provide a sovereign alternative, allowing you to build sophisticated AI agents that remain independent of a single provider while integrating deeply into your existing tech stack.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Model Agnostic: Total Flexibility in LLM Selection","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"One of the biggest risks in modern AI implementation is vendor lock-in. A model that performs perfectly today might be surpassed by a competitor tomorrow. CodeZero addresses this by being entirely model-agnostic. You can select your preferred Large Language Model (LLM)—whether it is OpenAI, Anthropic, or Mistral—and switch between them with a single configuration change. This ensures that your automated workflows always benefit from the best-performing intelligence available on the market.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Extending Intelligence with MCP Tool Integration","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"An AI model is only as powerful as the data it can access and the actions it can perform. By utilizing the Model Context Protocol (MCP), CodeZero allows you to attach a vast array of compatible tools to your AI agents. Whether it is querying a local database, interacting with specialized APIs, or reading internal documentation, MCP integration provides your agents with the necessary context and \"hands\" to perform real-world tasks autonomously.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Complex Flow Logic for Sophisticated Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"True automation requires more than just a single prompt; it requires a structured sequence of decisions and actions. Our platform enables the creation of complex flow logic where AI models are embedded into multi-step processes. You can define specific system prompts for different stages of a workflow, allowing the AI to handle everything from initial data analysis to final execution. This ensures that the agent follows your business logic while maintaining the flexibility to handle edge cases.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Deployment and Enterprise Readiness","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Moving from a prototype to a production-ready AI agent often involves significant infrastructure hurdles. CodeZero simplifies this transition by providing a stable, high-performance environment for your automated flows. By combining your custom-defined prompts with professional-grade tool-calling capabilities, you can deploy agents that handle high-volume tasks with precision and reliability.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: Empowering the Next Generation of AI Agents","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The ability to combine the reasoning power of top-tier LLMs with the practical utility of MCP-compatible tools marks a new era in automation. CodeZero empowers you to build these systems without the constraints of a single ecosystem. By focusing on model independence and logical flow construction, you can create a future-proof AI infrastructure that evolves alongside the industry.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Build sovereign, model-agnostic AI agents with CodeZero. Leverage the Model Context Protocol (MCP) to integrate custom tools, define complex flow logic, and create automated agentic workflows that scale without vendor lock-in.","de":"Build sovereign, model-agnostic AI agents with CodeZero. Leverage the Model Context Protocol (MCP) to integrate custom tools, define complex flow logic, and create automated agentic workflows that scale without vendor lock-in."},"heroImage":{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Build sovereign, model-agnostic AI agents with CodeZero. Leverage the Model Context Protocol (MCP) to integrate custom tools, define complex flow logic, and create automated agentic workflows that scale without vendor lock-in.","de":"Build sovereign, model-agnostic AI agents with CodeZero. Leverage the Model Context Protocol (MCP) to integrate custom tools, define complex flow logic, and create automated agentic workflows that scale without vendor lock-in."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:43.474Z","createdAt":"2026-03-25T10:45:01.566Z"},{"id":61,"title":{"en":"Smart chatbots with CodeZero automation","de":"Smart chatbots with CodeZero automation"},"slug":"smart-chatbots-use-case","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Discord has evolved from a simple communication tool into a mission-critical hub for communities, brands, and automated operations. However, the true potential of a server is often locked behind complex coding requirements and expensive developer hours. At CodeZero, we are breaking these barriers by enabling anyone to build sophisticated, fully functional Discord bots through an intuitive flow-based configuration.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Empowering Community Management through Visual Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The foundation of a great Discord experience is a bot that reflects the unique needs of its community. Our Visual Bot Builder allows users to define complex interactions by connecting logical blocks and triggers. This approach removes the steep learning curve of programming languages, allowing community managers to go from a conceptual idea to a live bot in minutes by simply configuring the desired behavior.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Intelligent Automation for Seamless Moderation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Managing a growing server requires constant vigilance, which can quickly become an overwhelming manual task. CodeZero introduces intelligent automation that handles everything from welcoming new members to sophisticated moderation flows. By setting up custom triggers and automated responses within your flow, you can ensure your server remains a safe and organized environment without requiring 24/7 human supervision.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Bridging the Gap with Deep Third-Party Integrations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Discord bot truly becomes powerful when it can interact with the world outside of the chat app. CodeZero enables deep integrations that allow your bot to pull real-time data from external APIs, update your internal databases, or connect to your existing tech stack. Whether you need to sync member roles with your CRM or provide live project updates directly in a channel, our platform handles the technical heavy lifting of data exchange.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Total Customization and Scalability","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We believe that no-code should not mean limited functionality. Every bot built on CodeZero is highly customizable, allowing you to define unique commands, personalities, and multi-step workflows. As your server scales from a few dozen members to several thousand, the underlying infrastructure scales automatically to ensure your bot remains responsive and reliable under high traffic.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The New Era of Community Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The future of Discord lies in automation that is accessible to everyone. By combining a logical flow builder with powerful automation and deep integration capabilities, CodeZero empowers you to transform your server into a high-performance automated hub. Start building today and focus on what truly matters: engaging your community and growing your brand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Discord has evolved from a simple communication tool into a mission-critical hub for communities, brands, and automated operations. However, the true potential of a server is often locked behind complex coding requirements and expensive developer hours. At CodeZero, we are breaking these barriers by enabling anyone to build sophisticated, fully functional Discord bots through an intuitive flow-based configuration.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Empowering Community Management through Visual Logic","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The foundation of a great Discord experience is a bot that reflects the unique needs of its community. Our Visual Bot Builder allows users to define complex interactions by connecting logical blocks and triggers. This approach removes the steep learning curve of programming languages, allowing community managers to go from a conceptual idea to a live bot in minutes by simply configuring the desired behavior.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Intelligent Automation for Seamless Moderation","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Managing a growing server requires constant vigilance, which can quickly become an overwhelming manual task. CodeZero introduces intelligent automation that handles everything from welcoming new members to sophisticated moderation flows. By setting up custom triggers and automated responses within your flow, you can ensure your server remains a safe and organized environment without requiring 24/7 human supervision.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Bridging the Gap with Deep Third-Party Integrations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A Discord bot truly becomes powerful when it can interact with the world outside of the chat app. CodeZero enables deep integrations that allow your bot to pull real-time data from external APIs, update your internal databases, or connect to your existing tech stack. Whether you need to sync member roles with your CRM or provide live project updates directly in a channel, our platform handles the technical heavy lifting of data exchange.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Total Customization and Scalability","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We believe that no-code should not mean limited functionality. Every bot built on CodeZero is highly customizable, allowing you to define unique commands, personalities, and multi-step workflows. As your server scales from a few dozen members to several thousand, the underlying infrastructure scales automatically to ensure your bot remains responsive and reliable under high traffic.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The New Era of Community Operations","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The future of Discord lies in automation that is accessible to everyone. By combining a logical flow builder with powerful automation and deep integration capabilities, CodeZero empowers you to transform your server into a high-performance automated hub. Start building today and focus on what truly matters: engaging your community and growing your brand.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Build powerful Discord bots without writing a single line of code. Use CodeZero’s intuitive flow-based builder to automate community management, integrate real-time data from third-party APIs, and transform your server into a fully automated hub.","de":"Build powerful Discord bots without writing a single line of code. Use CodeZero’s intuitive flow-based builder to automate community management, integrate real-time data from third-party APIs, and transform your server into a fully automated hub."},"heroImage":{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Build powerful Discord bots without writing a single line of code. Use CodeZero’s intuitive flow-based builder to automate community management, integrate real-time data from third-party APIs, and transform your server into a fully automated hub.","de":"Build powerful Discord bots without writing a single line of code. Use CodeZero’s intuitive flow-based builder to automate community management, integrate real-time data from third-party APIs, and transform your server into a fully automated hub."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:44.626Z","createdAt":"2026-03-25T10:42:24.535Z"},{"id":62,"title":{"en":"Smart logistic with CodeZero automation","de":"Smart logistic with CodeZero automation"},"slug":"smart-logistic-use-case","author":{"id":38,"name":"Marius Ahsmus","image":null,"shortDescription":{"en":null},"about":{"en":null},"role":{"en":"Software developer"},"joinedAt":null,"updatedAt":"2026-03-26T18:05:27.252Z","createdAt":"2026-03-01T18:39:55.157Z"},"content":{"en":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The modern logistics landscape is reaching a digital turning point. While e-commerce platforms like Shopify and marketplaces such as Amazon continue to drive rapid global growth, the operational fulfillment in the background often remains trapped in manual workflows. Many companies struggle with the challenge of maintaining data consistency between their ERP systems like SAP, their storefront platforms, and shipping carriers like GLS.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Challenge of Fragmented Data Streams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The primary bottleneck in many shipping departments lies in the lack of communication between individual software solutions. When order data must be manually transferred from Shopify to GLS, delays and errors become inevitable. These manual interfaces often result in incorrect address data, delayed label creation, and a lack of transparency for the end customer, as tracking numbers often appear in the system with a significant time lag.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automation as a Strategic Competitive Advantage","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero acts as an intelligent bridge between these disparate worlds, creating an automated data flow from the moment an order is placed to the final delivery. As soon as a customer completes a purchase on Amazon or Shopify, the relevant shipping information is transmitted to GLS without any human intervention. This process guarantees the immediate generation of shipping labels and ensures that the logistics chain never stalls due to administrative bottlenecks.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Integration with SAP and Enterprise Systems","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"For larger organizations, returning logistics data to the primary system of record is a critical requirement. CodeZero automates this feedback loop by recording shipping statuses and tracking IDs directly back into SAP as soon as they are generated by GLS. This eliminates the need for daily spreadsheet reconciliations, while accounting and inventory management teams can access real-time data at any time.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Proactive Customer Communication via Real-Time Updates","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A vital component of logistics automation involves the post-purchase customer experience. By directly linking the GLS interface with the company’s communication tools, customers receive automated updates at every delivery milestone. This significantly reduces the volume of support inquiries and strengthens brand trust through a policy of transparent and proactive information sharing.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Scalability Without Increasing Administrative Overhead","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The architecture of CodeZero is designed to grow alongside the demands of the business. Because the processes are modular, there is no difference in administrative effort whether ten or ten thousand parcels are shipped per day. Companies can thus scale their order volume effectively without being forced to increase their staff within logistics administration.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The Future of Efficient Logistics","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automating the logistics chain is no longer a luxury but a necessity for competitive enterprises. By intelligently connecting sales channels, ERP systems, and shipping carriers, CodeZero creates an infrastructure that eliminates errors and frees up resources for core business activities. Investing in this digital architecture today ensures the operational excellence required for the markets of tomorrow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"de":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The modern logistics landscape is reaching a digital turning point. While e-commerce platforms like Shopify and marketplaces such as Amazon continue to drive rapid global growth, the operational fulfillment in the background often remains trapped in manual workflows. Many companies struggle with the challenge of maintaining data consistency between their ERP systems like SAP, their storefront platforms, and shipping carriers like GLS.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Challenge of Fragmented Data Streams","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The primary bottleneck in many shipping departments lies in the lack of communication between individual software solutions. When order data must be manually transferred from Shopify to GLS, delays and errors become inevitable. These manual interfaces often result in incorrect address data, delayed label creation, and a lack of transparency for the end customer, as tracking numbers often appear in the system with a significant time lag.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automation as a Strategic Competitive Advantage","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero acts as an intelligent bridge between these disparate worlds, creating an automated data flow from the moment an order is placed to the final delivery. As soon as a customer completes a purchase on Amazon or Shopify, the relevant shipping information is transmitted to GLS without any human intervention. This process guarantees the immediate generation of shipping labels and ensures that the logistics chain never stalls due to administrative bottlenecks.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Seamless Integration with SAP and Enterprise Systems","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"For larger organizations, returning logistics data to the primary system of record is a critical requirement. CodeZero automates this feedback loop by recording shipping statuses and tracking IDs directly back into SAP as soon as they are generated by GLS. This eliminates the need for daily spreadsheet reconciliations, while accounting and inventory management teams can access real-time data at any time.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Proactive Customer Communication via Real-Time Updates","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"A vital component of logistics automation involves the post-purchase customer experience. By directly linking the GLS interface with the company’s communication tools, customers receive automated updates at every delivery milestone. This significantly reduces the volume of support inquiries and strengthens brand trust through a policy of transparent and proactive information sharing.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Scalability Without Increasing Administrative Overhead","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The architecture of CodeZero is designed to grow alongside the demands of the business. Because the processes are modular, there is no difference in administrative effort whether ten or ten thousand parcels are shipped per day. Companies can thus scale their order volume effectively without being forced to increase their staff within logistics administration.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Conclusion: The Future of Efficient Logistics","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Automating the logistics chain is no longer a luxury but a necessity for competitive enterprises. By intelligently connecting sales channels, ERP systems, and shipping carriers, CodeZero creates an infrastructure that eliminates errors and frees up resources for core business activities. Investing in this digital architecture today ensures the operational excellence required for the markets of tomorrow.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}}},"shortDescription":{"en":"Maximize your shipping efficiency by automating the link between Shopify, SAP, and GLS. Learn how CodeZero eliminates manual data entry, reduces errors, and scales your logistics from checkout to delivery with seamless no-code integrations.","de":"Maximize your shipping efficiency by automating the link between Shopify, SAP, and GLS. Learn how CodeZero eliminates manual data entry, reduces errors, and scales your logistics from checkout to delivery with seamless no-code integrations."},"heroImage":{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},"meta":{"title":{"en":null,"de":null},"description":{"en":"Maximize your shipping efficiency by automating the link between Shopify, SAP, and GLS. Learn how CodeZero eliminates manual data entry, reduces errors, and scales your logistics from checkout to delivery with seamless no-code integrations.","de":"Maximize your shipping efficiency by automating the link between Shopify, SAP, and GLS. Learn how CodeZero eliminates manual data entry, reduces errors, and scales your logistics from checkout to delivery with seamless no-code integrations."},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:45.813Z","createdAt":"2026-03-25T10:35:34.698Z"}] \ No newline at end of file diff --git a/export/media.json b/export/media.json index abe88130..c287b8e6 100644 --- a/export/media.json +++ b/export/media.json @@ -1 +1 @@ -[{"id":141,"alt":"Github action SDK CodeZero","href":null,"updatedAt":"2026-03-25T12:01:38.170Z","createdAt":"2026-03-25T12:01:38.169Z","url":"/api/media/file/Github_Action_SDK_CodeZero.png","thumbnailURL":null,"filename":"Github_Action_SDK_CodeZero.png","mimeType":"image/png","filesize":524187,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":142,"alt":"Flow builder suggestion menu CodeZero","href":null,"updatedAt":"2026-03-25T11:55:33.672Z","createdAt":"2026-03-25T11:55:33.672Z","url":"/api/media/file/Flow_Builder_Suggestion_Menu_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Suggestion_Menu_Feature.png","mimeType":"image/png","filesize":490427,"width":2940,"height":1664,"focalX":50,"focalY":50},{"id":143,"alt":"Runtime overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:53:05.308Z","createdAt":"2026-03-25T11:53:05.307Z","url":"/api/media/file/Runtime_Overview_Page.png","thumbnailURL":null,"filename":"Runtime_Overview_Page.png","mimeType":"image/png","filesize":333824,"width":2940,"height":1668,"focalX":50,"focalY":50},{"id":144,"alt":"Flow builder nodes feature CodeZero","href":null,"updatedAt":"2026-03-25T11:38:02.809Z","createdAt":"2026-03-25T11:38:02.809Z","url":"/api/media/file/Flow_Builder_Nodes_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Nodes_Feature.png","mimeType":"image/png","filesize":407177,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":145,"alt":"Organization overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:30:37.189Z","createdAt":"2026-03-25T11:30:37.189Z","url":"/api/media/file/Organization_Overview_Page.png","thumbnailURL":null,"filename":"Organization_Overview_Page.png","mimeType":"image/png","filesize":340618,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":146,"alt":"Organization create page CodeZero","href":null,"updatedAt":"2026-03-25T11:30:37.164Z","createdAt":"2026-03-25T11:30:37.164Z","url":"/api/media/file/Organization_Create_Page.png","thumbnailURL":null,"filename":"Organization_Create_Page.png","mimeType":"image/png","filesize":348465,"width":2940,"height":1664,"focalX":50,"focalY":50},{"id":147,"alt":"Role overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.738Z","createdAt":"2026-03-25T11:21:38.738Z","url":"/api/media/file/Role_Overview_Page.png","thumbnailURL":null,"filename":"Role_Overview_Page.png","mimeType":"image/png","filesize":396501,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":148,"alt":"Role add page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.691Z","createdAt":"2026-03-25T11:21:38.691Z","url":"/api/media/file/Role_Add_Page.png","thumbnailURL":null,"filename":"Role_Add_Page.png","mimeType":"image/png","filesize":338014,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":149,"alt":"Role permission page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.647Z","createdAt":"2026-03-25T11:21:38.647Z","url":"/api/media/file/Role_Permission_Page.png","thumbnailURL":null,"filename":"Role_Permission_Page.png","mimeType":"image/png","filesize":613737,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":150,"alt":"Member overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.805Z","createdAt":"2026-03-25T11:13:20.805Z","url":"/api/media/file/Member_Overview_Page.png","thumbnailURL":null,"filename":"Member_Overview_Page.png","mimeType":"image/png","filesize":390811,"width":2940,"height":1668,"focalX":50,"focalY":50},{"id":151,"alt":"Member remove feature CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.787Z","createdAt":"2026-03-25T11:13:20.787Z","url":"/api/media/file/Member_Remove_Feature.png","thumbnailURL":null,"filename":"Member_Remove_Feature.png","mimeType":"image/png","filesize":354065,"width":2940,"height":1664,"focalX":50,"focalY":50},{"id":152,"alt":"Member assign roles feature CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.769Z","createdAt":"2026-03-25T11:13:20.769Z","url":"/api/media/file/Member_Assign_Roles_Feature.png","thumbnailURL":null,"filename":"Member_Assign_Roles_Feature.png","mimeType":"image/png","filesize":379400,"width":2940,"height":1664,"focalX":50,"focalY":50},{"id":153,"alt":"Member add feature CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.742Z","createdAt":"2026-03-25T11:13:20.742Z","url":"/api/media/file/Member_Add_Feature.png","thumbnailURL":null,"filename":"Member_Add_Feature.png","mimeType":"image/png","filesize":350024,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":154,"alt":"Project overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:05:42.234Z","createdAt":"2026-03-25T11:05:42.234Z","url":"/api/media/file/Project_Overview_Feature.png","thumbnailURL":null,"filename":"Project_Overview_Feature.png","mimeType":"image/png","filesize":330250,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":155,"alt":"Create project in CodeZero","href":null,"updatedAt":"2026-03-25T11:05:01.102Z","createdAt":"2026-03-25T11:05:01.102Z","url":"/api/media/file/Create_Project_Feature.png","thumbnailURL":null,"filename":"Create_Project_Feature.png","mimeType":"image/png","filesize":378671,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},{"id":159,"alt":"Blog sample Image","href":null,"updatedAt":"2026-03-07T05:59:34.732Z","createdAt":"2026-03-07T05:59:34.731Z","url":"/api/media/file/blog-sample-image.jpg","thumbnailURL":null,"filename":"blog-sample-image.jpg","mimeType":"image/jpeg","filesize":75240,"width":864,"height":576,"focalX":50,"focalY":50},{"id":160,"alt":"Marius Ahsmus Bild","href":null,"updatedAt":"2026-03-07T05:28:39.443Z","createdAt":"2026-03-07T05:15:45.957Z","url":"/api/media/file/NDOLqYAv_400x400.jpg","thumbnailURL":null,"filename":"NDOLqYAv_400x400.jpg","mimeType":"image/jpeg","filesize":28513,"width":400,"height":400,"focalX":50,"focalY":50},{"id":161,"alt":"GLS Logo","href":"https://gls-group.com/","updatedAt":"2026-02-25T11:12:48.228Z","createdAt":"2026-02-25T11:08:24.824Z","url":"/api/media/file/gls_logo.png","thumbnailURL":null,"filename":"gls_logo.png","mimeType":"image/png","filesize":19352,"width":960,"height":337,"focalX":50,"focalY":50}] \ No newline at end of file +[{"id":162,"alt":"Code0 OG Image","href":null,"updatedAt":"2026-03-26T18:45:03.880Z","createdAt":"2026-03-26T18:45:03.880Z","url":"/api/media/file/og-image.png","thumbnailURL":null,"filename":"og-image.png","mimeType":"image/png","filesize":1003908,"width":1920,"height":1080,"focalX":50,"focalY":50},{"id":141,"alt":"Github action SDK CodeZero","href":null,"updatedAt":"2026-03-25T12:01:38.170Z","createdAt":"2026-03-25T12:01:38.169Z","url":"/api/media/file/Github_Action_SDK_CodeZero.png","thumbnailURL":null,"filename":"Github_Action_SDK_CodeZero.png","mimeType":"image/png","filesize":524187,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":142,"alt":"Flow builder suggestion menu CodeZero","href":null,"updatedAt":"2026-03-25T11:55:33.672Z","createdAt":"2026-03-25T11:55:33.672Z","url":"/api/media/file/Flow_Builder_Suggestion_Menu_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Suggestion_Menu_Feature.png","mimeType":"image/png","filesize":490427,"width":2940,"height":1664,"focalX":50,"focalY":50},{"id":143,"alt":"Runtime overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:53:05.308Z","createdAt":"2026-03-25T11:53:05.307Z","url":"/api/media/file/Runtime_Overview_Page.png","thumbnailURL":null,"filename":"Runtime_Overview_Page.png","mimeType":"image/png","filesize":333824,"width":2940,"height":1668,"focalX":50,"focalY":50},{"id":144,"alt":"Flow builder nodes feature CodeZero","href":null,"updatedAt":"2026-03-25T11:38:02.809Z","createdAt":"2026-03-25T11:38:02.809Z","url":"/api/media/file/Flow_Builder_Nodes_Feature.png","thumbnailURL":null,"filename":"Flow_Builder_Nodes_Feature.png","mimeType":"image/png","filesize":407177,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":145,"alt":"Organization overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:30:37.189Z","createdAt":"2026-03-25T11:30:37.189Z","url":"/api/media/file/Organization_Overview_Page.png","thumbnailURL":null,"filename":"Organization_Overview_Page.png","mimeType":"image/png","filesize":340618,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":146,"alt":"Organization create page CodeZero","href":null,"updatedAt":"2026-03-25T11:30:37.164Z","createdAt":"2026-03-25T11:30:37.164Z","url":"/api/media/file/Organization_Create_Page.png","thumbnailURL":null,"filename":"Organization_Create_Page.png","mimeType":"image/png","filesize":348465,"width":2940,"height":1664,"focalX":50,"focalY":50},{"id":147,"alt":"Role overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.738Z","createdAt":"2026-03-25T11:21:38.738Z","url":"/api/media/file/Role_Overview_Page.png","thumbnailURL":null,"filename":"Role_Overview_Page.png","mimeType":"image/png","filesize":396501,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":148,"alt":"Role add page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.691Z","createdAt":"2026-03-25T11:21:38.691Z","url":"/api/media/file/Role_Add_Page.png","thumbnailURL":null,"filename":"Role_Add_Page.png","mimeType":"image/png","filesize":338014,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":149,"alt":"Role permission page CodeZero","href":null,"updatedAt":"2026-03-25T11:21:38.647Z","createdAt":"2026-03-25T11:21:38.647Z","url":"/api/media/file/Role_Permission_Page.png","thumbnailURL":null,"filename":"Role_Permission_Page.png","mimeType":"image/png","filesize":613737,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":150,"alt":"Member overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.805Z","createdAt":"2026-03-25T11:13:20.805Z","url":"/api/media/file/Member_Overview_Page.png","thumbnailURL":null,"filename":"Member_Overview_Page.png","mimeType":"image/png","filesize":390811,"width":2940,"height":1668,"focalX":50,"focalY":50},{"id":151,"alt":"Member remove feature CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.787Z","createdAt":"2026-03-25T11:13:20.787Z","url":"/api/media/file/Member_Remove_Feature.png","thumbnailURL":null,"filename":"Member_Remove_Feature.png","mimeType":"image/png","filesize":354065,"width":2940,"height":1664,"focalX":50,"focalY":50},{"id":152,"alt":"Member assign roles feature CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.769Z","createdAt":"2026-03-25T11:13:20.769Z","url":"/api/media/file/Member_Assign_Roles_Feature.png","thumbnailURL":null,"filename":"Member_Assign_Roles_Feature.png","mimeType":"image/png","filesize":379400,"width":2940,"height":1664,"focalX":50,"focalY":50},{"id":153,"alt":"Member add feature CodeZero","href":null,"updatedAt":"2026-03-25T11:13:20.742Z","createdAt":"2026-03-25T11:13:20.742Z","url":"/api/media/file/Member_Add_Feature.png","thumbnailURL":null,"filename":"Member_Add_Feature.png","mimeType":"image/png","filesize":350024,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":154,"alt":"Project overview page CodeZero","href":null,"updatedAt":"2026-03-25T11:05:42.234Z","createdAt":"2026-03-25T11:05:42.234Z","url":"/api/media/file/Project_Overview_Feature.png","thumbnailURL":null,"filename":"Project_Overview_Feature.png","mimeType":"image/png","filesize":330250,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":155,"alt":"Create project in CodeZero","href":null,"updatedAt":"2026-03-25T11:05:01.102Z","createdAt":"2026-03-25T11:05:01.102Z","url":"/api/media/file/Create_Project_Feature.png","thumbnailURL":null,"filename":"Create_Project_Feature.png","mimeType":"image/png","filesize":378671,"width":2940,"height":1666,"focalX":50,"focalY":50},{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},{"id":159,"alt":"Blog sample Image","href":null,"updatedAt":"2026-03-07T05:59:34.732Z","createdAt":"2026-03-07T05:59:34.731Z","url":"/api/media/file/blog-sample-image.jpg","thumbnailURL":null,"filename":"blog-sample-image.jpg","mimeType":"image/jpeg","filesize":75240,"width":864,"height":576,"focalX":50,"focalY":50},{"id":160,"alt":"Marius Ahsmus Bild","href":null,"updatedAt":"2026-03-07T05:28:39.443Z","createdAt":"2026-03-07T05:15:45.957Z","url":"/api/media/file/NDOLqYAv_400x400.jpg","thumbnailURL":null,"filename":"NDOLqYAv_400x400.jpg","mimeType":"image/jpeg","filesize":28513,"width":400,"height":400,"focalX":50,"focalY":50},{"id":161,"alt":"GLS Logo","href":"https://gls-group.com/","updatedAt":"2026-02-25T11:12:48.228Z","createdAt":"2026-02-25T11:08:24.824Z","url":"/api/media/file/gls_logo.png","thumbnailURL":null,"filename":"gls_logo.png","mimeType":"image/png","filesize":19352,"width":960,"height":337,"focalX":50,"focalY":50}] \ No newline at end of file diff --git a/export/pages.json b/export/pages.json index 8aa83cc9..793b49a3 100644 --- a/export/pages.json +++ b/export/pages.json @@ -1 +1 @@ -[{"id":101,"title":{"en":"About us","de":"Über uns"},"slug":"about-us","layout":{"en":[{"id":"69b25d3a2b47cb300d5a3116","content":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"tag":"h1","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"About us","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"At CodeZero, we are reimagining the way organizations build, manage, and scale process automation. Founded in October 2023, our mission is to provide an open-source framework that bridges the gap between high-level orchestration and sovereign technical execution. We believe that automation should be modular, extensible, and above all, owned by the people who build it.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Our Story","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Our journey began in late 2023 with a vision to move beyond the limitations of closed-source automation tools. We recognized a growing need for a platform that allows businesses to maintain total data sovereignty while benefiting from a modern, cloud-native user interface. From our headquarters in Solingen, Germany, we have developed a hybrid architecture that empowers teams to keep their sensitive logic on-premise while leveraging powerful global management tools.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Team Behind the Vision","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We are a dedicated team of eight specialists distributed across Germany. Our diverse backgrounds in software engineering, system architecture, and product design allow us to approach automation from multiple angles. While our physical roots are in Solingen, our collaborative spirit spans the entire country, reflecting the same decentralized and flexible nature of the CodeZero platform itself.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Our Philosophy","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The core of our philosophy is modularity. We designed CodeZero to be a \"living\" system where every component, from the Sagittarius backend to the Taurus execution engine, can be scaled independently. By providing a robust Action SDK, we invite our community to extend the platform beyond its original scope, ensuring that CodeZero remains at the cutting edge of technological innovation.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Built with Passion","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero is more than just a software project for us. It is a commitment to the open-source community and a testament to what a small, focused team can achieve when driven by a shared goal. We are constantly evolving our system to help organizations of all sizes turn complex business logic into seamless, automated reality.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"blockName":null,"blockType":"markdown"}]},"updatedAt":"2026-03-26T18:04:56.601Z","createdAt":"2026-02-18T15:48:06.272Z"},{"id":102,"title":{"en":"Terms","de":"Datenschutz"},"slug":"terms","layout":{"en":[{"id":"6995de5f09329cbf85efcb37","content":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Test","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"blockName":null,"blockType":"markdown"}]},"updatedAt":"2026-03-26T18:04:57.983Z","createdAt":"2026-02-18T15:44:37.032Z"},{"id":103,"title":{"en":"Privacy","de":"Privatsphäre"},"slug":"privacy","layout":{"en":[{"id":"6995de4b09329cbf85efcb35","content":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"tag":"h1","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Privacy Policy","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Last updated: February 18th 2026, 4:44 PM","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"1. Controller","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The controller responsible for data processing on this website is:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Code0 UG (haftungsbeschränkt) i.G.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Grünewalder Str. 29-31","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"c/o Gründer- & Technologiezentrum, Haus 4","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"42657 Solingen","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"type":"autolink","fields":{"url":"mailto:nsammito@code0.tech","linkType":"custom"},"format":"","indent":0,"version":2,"children":[{"mode":"normal","text":"nsammito@code0.tech","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Managing Directors: Nico Sammito, Raphael Arun Götz","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"2. General Information","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We take the protection of your personal data seriously. This Privacy Policy explains what data we collect, how we use it, and your rights under applicable data protection laws, including the General Data Protection Regulation (GDPR).","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"3. Data We Collect","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We may collect and process the following personal data:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"a) When visiting the website","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"IP address","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Browser type and version","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Operating system","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Referrer URL","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":5,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Date and time of access","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"b) Contact form","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"When you contact us via our contact form, we collect:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Name","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Email address","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Message content","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"c) Application form","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"When you submit a job application, we collect:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Name","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Email address","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Message content","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Desired position","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"4. Purpose of Processing","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We process your data for the following purposes:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To provide and maintain our website","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To respond to inquiries","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To process job applications","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To analyze website usage and improve our services","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"5. Legal Basis","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We process personal data based on the following legal grounds:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Art. 6(1)(a) GDPR (consent)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Art. 6(1)(b) GDPR (performance of a contract or pre-contractual measures)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Art. 6(1)(f) GDPR (legitimate interests, e.g., website security and analytics)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"6. Analytics and Tracking","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We use **Google Analytics**, a web analytics service provided by Google, to understand how users interact with our website.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Google Analytics uses cookies and similar technologies to collect information such as:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Pages visited","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Time spent on the website","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Interaction data","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We also use **Google Search Console** to monitor and maintain our website’s presence in Google search results.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Data may be transferred to servers outside the EU. We rely on appropriate safeguards such as Standard Contractual Clauses where applicable.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"You can prevent the collection of your data by Google Analytics by using a browser plugin or adjusting your cookie preferences.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"7. Social Media Links","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Our website contains links to external social media platforms, including:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"GitHub","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Instagram","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"X (formerly Twitter)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"YouTube","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":5,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Discord","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"When you click on these links, you will be redirected to the respective platform. These platforms may collect personal data independently. Please refer to their respective privacy policies for more information.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"8. Data Sharing","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We do not sell your personal data. We only share data with third parties when necessary, such as:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Service providers (e.g., hosting providers)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Analytics providers (e.g., Google)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"9. Data Retention","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We retain personal data only for as long as necessary:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Contact inquiries: until resolved","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Application data: typically up to 6 months after the application process ends, unless consent for longer storage is given","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Technical data: according to operational necessity","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"10. Your Rights","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Under GDPR, you have the following rights:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right of access (Art. 15 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to rectification (Art. 16 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to erasure (Art. 17 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to restriction of processing (Art. 18 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":5,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to data portability (Art. 20 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":6,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to object (Art. 21 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"You also have the right to withdraw consent at any time.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"11. Right to Lodge a Complaint","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"You have the right to lodge a complaint with a supervisory authority if you believe your data is being processed unlawfully.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"12. Security Measures","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We implement appropriate technical and organizational measures to protect your data against unauthorized access, loss, or destruction.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"13. Changes to This Privacy Policy","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We may update this Privacy Policy from time to time. The latest version will always be available on this page.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"14. Contact","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"If you have any questions about this Privacy Policy, please contact us at:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"type":"autolink","fields":{"url":"mailto:nsammito@code0.tech","linkType":"custom"},"format":"","indent":0,"version":2,"children":[{"mode":"normal","text":"nsammito@code0.tech","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"blockName":null,"blockType":"markdown"}]},"updatedAt":"2026-03-26T18:04:59.227Z","createdAt":"2026-02-18T15:44:04.849Z"},{"id":104,"title":{"en":"Legal Notice","de":"Impressum"},"slug":"legal-notice","layout":{"en":[{"id":"6995de1509329cbf85efcb33","content":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"tag":"h1","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Legal Notice","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Code0 UG (haftungsbeschränkt) i.G.","type":"text","style":"","detail":0,"format":0,"version":1},{"type":"linebreak","version":1},{"type":"linebreak","version":1},{"mode":"normal","text":"Grünewalder Str. 29-31","type":"text","style":"","detail":0,"format":0,"version":1},{"type":"linebreak","version":1},{"mode":"normal","text":"c/o Gründer- & Technologiezentrum, Haus 4","type":"text","style":"","detail":0,"format":0,"version":1},{"type":"linebreak","version":1},{"mode":"normal","text":"42657 Solingen","type":"text","style":"","detail":0,"format":0,"version":1},{"type":"linebreak","version":1},{"type":"autolink","fields":{"url":"mailto:nsammito@code0.tech","linkType":"custom"},"format":"","indent":0,"version":2,"children":[{"mode":"normal","text":"nsammito@code0.tech","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"mode":"normal","text":" ","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Managing Directors: Nico Sammito, Raphael Arun Götz","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We are neither obligated nor willing to participate in dispute resolution proceedings before a consumer arbitration board.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"blockName":null,"blockType":"markdown"}]},"updatedAt":"2026-03-26T18:05:00.177Z","createdAt":"2026-02-18T15:43:24.547Z"},{"id":105,"title":{"en":"Contact","de":"Kontakt"},"slug":"contact","layout":{"en":[{"id":"6995ddfb09329cbf85efcb31","heading":"Contact us","nameLabel":"Name","namePlaceholder":"Your name","emailLabel":"Email","emailPlaceholder":"you@example.com","messageLabel":"Message","messagePlaceholder":"How can we help you?","submitLabel":"Send message","blockName":null,"blockType":"contact"}]},"updatedAt":"2026-03-26T18:05:01.091Z","createdAt":"2026-02-18T15:42:54.620Z"},{"id":106,"title":{"en":"Jobs","de":"Jobs"},"slug":"jobs","layout":{"en":[{"id":"6990a95041fa90fc8d755daf","heading":"Join Our Team","searchPlaceholder":"Search jobs","allLocationsLabel":"All locations","allJobTypesLabel":"All job types","allCategoriesLabel":"All categories","noJobsFoundLabel":"No jobs found for your filter.","applicationHeading":"Apply now","applicationNameLabel":"Name","applicationNamePlaceholder":"Your name","applicationEmailLabel":"Email","applicationEmailPlaceholder":"you@example.com","applicationMessageLabel":"Message","applicationMessagePlaceholder":"Tell us a bit about yourself...","applicationSubmitLabel":"Send application","blockName":null,"blockType":"jobs"}],"de":[{"id":"6990a91c41fa90fc8d755dad","heading":"Trete unserem Team bei","searchPlaceholder":"Suche Jobs","allLocationsLabel":"Alle Orte","allJobTypesLabel":"Alle Typen","allCategoriesLabel":"Alle Kategorien","noJobsFoundLabel":"Keine Jobs für diesen Filter gefunden.","applicationHeading":"Apply now","applicationNameLabel":"Name","applicationNamePlaceholder":"Your name","applicationEmailLabel":"Email","applicationEmailPlaceholder":"you@example.com","applicationMessageLabel":"Message","applicationMessagePlaceholder":"Tell us a bit about yourself...","applicationSubmitLabel":"Send application","blockName":null,"blockType":"jobs"}]},"updatedAt":"2026-03-26T18:05:02.034Z","createdAt":"2026-02-14T16:56:39.430Z"},{"id":107,"title":{"en":"main","de":"main"},"slug":"main","layout":{"en":[{"id":"6990a5be6ae95b3dc93760fc","badge":"v0.0.0-canary-2356067148","badge_link":"https://github.com/code0-tech/codezero/releases/tag/0.0.0-canary-2356067148-c06e576791513b10dbcb10aa3b0420b87178a205","heading":"Every great idea starts at zero. Start with CodeZero.","blockName":null,"texts":[{"id":"6990a5dc6ae95b3dc93760fe","text":"The automation world gets to the next era with the CodeZero's no-code platform."},{"id":"6990a5e66ae95b3dc9376100","text":"From end-to-end automation to scalable backend endpoints in no-time."}],"buttons":[{"id":"6990a5f06ae95b3dc9376102","label":"Read the docs","url":"https://docs.code0.tech","variant":"normal"},{"id":"6990a5fe6ae95b3dc9376104","label":"Start building","url":"https://docs.code0.tech","variant":"filled"}],"blockType":"hero"},{"id":"6990a60d6ae95b3dc9376106","description":"Our partners and developed extensions","blockName":null,"logos":[{"id":"699ed8115b5164abdccf58c9","logo":{"id":161,"alt":"GLS Logo","href":"https://gls-group.com/","updatedAt":"2026-02-25T11:12:48.228Z","createdAt":"2026-02-25T11:08:24.824Z","url":"/api/media/file/gls_logo.png","thumbnailURL":null,"filename":"gls_logo.png","mimeType":"image/png","filesize":19352,"width":960,"height":337,"focalX":50,"focalY":50}}],"blockType":"brand"},{"id":"6990a6186ae95b3dc9376108","blockName":null,"useCases":[{"id":"6990a61b6ae95b3dc937610a","label":"Logistic automation","title":"Logistic automation","description":"Streamline your shipping operations by bridging the gap between your systems and GLS. Our automation layer eliminates manual data entry, reduces human error, and ensures a frictionless flow from order to delivery.","image":{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Automated Label Generation","Real-Time Status Sync","Error-Resistant Workflows"],"link":{"label":"Learn more","url":"/blog/smart-logistic-use-case"}},{"id":"6990a62f6ae95b3dc937610c","label":"Chatbot building","title":"Chatbot building","description":"Turn your Discord server into a powerful automated hub. Build custom bots without writing a single line of code, enabling you to manage your community, automate moderation, and integrate third-party data seamlessly.","image":{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Visual Bot Builder","Intelligent Automation","Deep Integrations"],"link":{"label":"Learn more","url":"/blog/smart-chatbots-use-case"}},{"id":"6990a6396ae95b3dc937610e","label":"AI automation and integration","title":"AI automation and integration","description":"Build sophisticated AI agents without being locked into a single ecosystem. Select your preferred LLM, define your system prompts, and extend its capabilities by attaching any MCP-compatible tools to create a seamless, automated workflow.","image":{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Model Agnostic","MCP Tool Integration","Complex Flow Logic"],"link":{"label":"Learn more","url":"/blog/smart-ai-agents-use-case"}}],"blockType":"usecase"},{"id":"6990a6566ae95b3dc9376110","blockName":null,"items":[{"id":"6990a6596ae95b3dc9376112","question":"How does CodeZero work?","answer":"CodeZero allows you to build complex automations and backend logic through a visual interface without writing code."},{"id":"6990a6706ae95b3dc9376114","question":"Can i deploy my project anywhere?","answer":"Yes, CodeZero projects can be deployed on various environments including cloud providers."},{"id":"6990a6806ae95b3dc9376116","question":"Is there a free version?","answer":"Yes, we offer a free plan and also a community edition license to explore the core features."}],"blockType":"faq"},{"id":"6990a6906ae95b3dc9376118","heading":"Build better automations with CodeZero","subheading":"The automation world gets to the next era with the CodeZero's no-code platform. From end-to-end automation to scalable backend endpoints in no-time.","blockName":null,"blockType":"cta","ctaLink":{"label":"Start building","url":"https://docs.code0.tech"}},{"id":"6997f08e25746cbd0f1e4153","cloudTitle":"Cloud Hosting","cloudDescription":"Get started in minutes with our managed cloud setup. Updates, scaling, and monitoring are built in.","selfhostTitle":"Self-Hosting","selfhostDescription":"Run Code0 on your own infrastructure with full control over data, security, and deployment workflows.","dynamicTitle":"Dynamic-Hosting","dynamicDescription":"Run Code0 on your own infrastructure with full control over data, security, and deployment workflows.","blockName":null,"blockType":"deployment","cloudLink":{"label":"","url":""},"selfhostLink":{"label":"","url":""},"dynamicLink":{"label":"","url":""}}],"de":[{"id":"69c3dbdcd464f5d34f4fe97b","badge":"v0.0.0-canary-2356067148","badge_link":"https://github.com/code0-tech/codezero/releases/tag/0.0.0-canary-2356067148-c06e576791513b10dbcb10aa3b0420b87178a205","heading":"Every great idea starts at zero. Start with CodeZero.","blockName":null,"texts":[{"id":"69c3dbdcd464f5d34f4fe977","text":"The automation world gets to the next era with the CodeZero's no-code platform."},{"id":"69c3dbdcd464f5d34f4fe978","text":"From end-to-end automation to scalable backend endpoints in no-time."}],"buttons":[{"id":"69c3dbdcd464f5d34f4fe979","label":"Read the docs","url":"https://docs.code0.tech","variant":"normal"},{"id":"69c3dbdcd464f5d34f4fe97a","label":"Start building","url":"https://docs.code0.tech","variant":"filled"}],"blockType":"hero"},{"id":"69c3dbdcd464f5d34f4fe97d","description":"Our partners and developed extensions","blockName":null,"logos":[{"id":"69c3dbdcd464f5d34f4fe97c","logo":{"id":161,"alt":"GLS Logo","href":"https://gls-group.com/","updatedAt":"2026-02-25T11:12:48.228Z","createdAt":"2026-02-25T11:08:24.824Z","url":"/api/media/file/gls_logo.png","thumbnailURL":null,"filename":"gls_logo.png","mimeType":"image/png","filesize":19352,"width":960,"height":337,"focalX":50,"focalY":50}}],"blockType":"brand"},{"id":"69c3dbdcd464f5d34f4fe981","blockName":null,"useCases":[{"id":"69c3dbdcd464f5d34f4fe97e","label":"Logistic automation","title":"Logistic automation","description":"Streamline your shipping operations by bridging the gap between your systems and GLS. Our automation layer eliminates manual data entry, reduces human error, and ensures a frictionless flow from order to delivery.","image":{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Automated Label Generation","Real-Time Status Sync","Error-Resistant Workflows"],"link":{"label":"Learn more","url":"/blog/smart-logistic-use-case"}},{"id":"69c3dbdcd464f5d34f4fe97f","label":"Chatbot building","title":"Chatbot building","description":"Turn your Discord server into a powerful automated hub. Build custom bots without writing a single line of code, enabling you to manage your community, automate moderation, and integrate third-party data seamlessly.","image":{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Visual Bot Builder","Intelligent Automation","Deep Integrations"],"link":{"label":"Learn more","url":"/blog/smart-chatbots-use-case"}},{"id":"69c3dbdcd464f5d34f4fe980","label":"AI automation and integration","title":"AI automation and integration","description":"Build sophisticated AI agents without being locked into a single ecosystem. Select your preferred LLM, define your system prompts, and extend its capabilities by attaching any MCP-compatible tools to create a seamless, automated workflow.","image":{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Model Agnostic","MCP Tool Integration","Complex Flow Logic"],"link":{"label":"Learn more","url":"/blog/smart-ai-agents-use-case"}}],"blockType":"usecase"},{"id":"69c3dbdcd464f5d34f4fe985","blockName":null,"items":[{"id":"69c3dbdcd464f5d34f4fe982","question":"How does CodeZero work?","answer":"CodeZero allows you to build complex automations and backend logic through a visual interface without writing code."},{"id":"69c3dbdcd464f5d34f4fe983","question":"Can i deploy my project anywhere?","answer":"Yes, CodeZero projects can be deployed on various environments including cloud providers."},{"id":"69c3dbdcd464f5d34f4fe984","question":"Is there a free version?","answer":"Yes, we offer a free plan and also a community edition license to explore the core features."}],"blockType":"faq"},{"id":"69c3dbdcd464f5d34f4fe986","heading":"Build better automations with CodeZero","subheading":"The automation world gets to the next era with the CodeZero's no-code platform. From end-to-end automation to scalable backend endpoints in no-time.","blockName":null,"blockType":"cta","ctaLink":{"label":"Start building","url":"https://docs.code0.tech"}},{"id":"69c3dbdcd464f5d34f4fe987","cloudTitle":"Cloud Hosting","cloudDescription":"Get started in minutes with our managed cloud setup. Updates, scaling, and monitoring are built in.","selfhostTitle":"Self-Hosting","selfhostDescription":"Run Code0 on your own infrastructure with full control over data, security, and deployment workflows.","dynamicTitle":"Dynamic-Hosting","dynamicDescription":"Run Code0 on your own infrastructure with full control over data, security, and deployment workflows.","blockName":null,"blockType":"deployment","cloudLink":{"label":"","url":""},"selfhostLink":{"label":"","url":""},"dynamicLink":{"label":"","url":""}}]},"updatedAt":"2026-03-26T18:05:03.459Z","createdAt":"2026-02-13T06:35:27.227Z"}] \ No newline at end of file +[{"id":101,"title":{"en":"About us","de":"Über uns"},"slug":"about-us","layout":{"en":[{"id":"69b25d3a2b47cb300d5a3116","content":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"tag":"h1","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"About us","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"At CodeZero, we are reimagining the way organizations build, manage, and scale process automation. Founded in October 2023, our mission is to provide an open-source framework that bridges the gap between high-level orchestration and sovereign technical execution. We believe that automation should be modular, extensible, and above all, owned by the people who build it.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Our Story","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Our journey began in late 2023 with a vision to move beyond the limitations of closed-source automation tools. We recognized a growing need for a platform that allows businesses to maintain total data sovereignty while benefiting from a modern, cloud-native user interface. From our headquarters in Solingen, Germany, we have developed a hybrid architecture that empowers teams to keep their sensitive logic on-premise while leveraging powerful global management tools.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The Team Behind the Vision","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We are a dedicated team of eight specialists distributed across Germany. Our diverse backgrounds in software engineering, system architecture, and product design allow us to approach automation from multiple angles. While our physical roots are in Solingen, our collaborative spirit spans the entire country, reflecting the same decentralized and flexible nature of the CodeZero platform itself.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Our Philosophy","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The core of our philosophy is modularity. We designed CodeZero to be a \"living\" system where every component, from the Sagittarius backend to the Taurus execution engine, can be scaled independently. By providing a robust Action SDK, we invite our community to extend the platform beyond its original scope, ensuring that CodeZero remains at the cutting edge of technological innovation.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Built with Passion","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"CodeZero is more than just a software project for us. It is a commitment to the open-source community and a testament to what a small, focused team can achieve when driven by a shared goal. We are constantly evolving our system to help organizations of all sizes turn complex business logic into seamless, automated reality.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"blockName":null,"blockType":"markdown"}]},"meta":{"title":{"en":null,"de":null},"description":{"en":null,"de":null},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:04:56.601Z","createdAt":"2026-02-18T15:48:06.272Z"},{"id":102,"title":{"en":"Terms","de":"Datenschutz"},"slug":"terms","layout":{"en":[{"id":"6995de5f09329cbf85efcb37","content":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Test","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"blockName":null,"blockType":"markdown"}]},"meta":{"title":{"en":null,"de":null},"description":{"en":null,"de":null},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:04:57.983Z","createdAt":"2026-02-18T15:44:37.032Z"},{"id":103,"title":{"en":"Privacy","de":"Privatsphäre"},"slug":"privacy","layout":{"en":[{"id":"6995de4b09329cbf85efcb35","content":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"tag":"h1","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Privacy Policy","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Last updated: February 18th 2026, 4:44 PM","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"1. Controller","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"The controller responsible for data processing on this website is:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Code0 UG (haftungsbeschränkt) i.G.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Grünewalder Str. 29-31","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"c/o Gründer- & Technologiezentrum, Haus 4","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"42657 Solingen","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"type":"autolink","fields":{"url":"mailto:nsammito@code0.tech","linkType":"custom"},"format":"","indent":0,"version":2,"children":[{"mode":"normal","text":"nsammito@code0.tech","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Managing Directors: Nico Sammito, Raphael Arun Götz","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"2. General Information","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We take the protection of your personal data seriously. This Privacy Policy explains what data we collect, how we use it, and your rights under applicable data protection laws, including the General Data Protection Regulation (GDPR).","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"3. Data We Collect","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We may collect and process the following personal data:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"a) When visiting the website","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"IP address","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Browser type and version","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Operating system","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Referrer URL","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":5,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Date and time of access","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"b) Contact form","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"When you contact us via our contact form, we collect:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Name","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Email address","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Message content","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h3","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"c) Application form","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"When you submit a job application, we collect:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Name","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Email address","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Message content","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Desired position","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"4. Purpose of Processing","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We process your data for the following purposes:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To provide and maintain our website","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To respond to inquiries","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To process job applications","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"To analyze website usage and improve our services","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"5. Legal Basis","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We process personal data based on the following legal grounds:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Art. 6(1)(a) GDPR (consent)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Art. 6(1)(b) GDPR (performance of a contract or pre-contractual measures)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Art. 6(1)(f) GDPR (legitimate interests, e.g., website security and analytics)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"6. Analytics and Tracking","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We use **Google Analytics**, a web analytics service provided by Google, to understand how users interact with our website.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Google Analytics uses cookies and similar technologies to collect information such as:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Pages visited","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Time spent on the website","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Interaction data","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We also use **Google Search Console** to monitor and maintain our website’s presence in Google search results.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Data may be transferred to servers outside the EU. We rely on appropriate safeguards such as Standard Contractual Clauses where applicable.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"You can prevent the collection of your data by Google Analytics by using a browser plugin or adjusting your cookie preferences.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"7. Social Media Links","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Our website contains links to external social media platforms, including:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"GitHub","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Instagram","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"X (formerly Twitter)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"YouTube","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":5,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Discord","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"When you click on these links, you will be redirected to the respective platform. These platforms may collect personal data independently. Please refer to their respective privacy policies for more information.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"8. Data Sharing","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We do not sell your personal data. We only share data with third parties when necessary, such as:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Service providers (e.g., hosting providers)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Analytics providers (e.g., Google)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"9. Data Retention","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We retain personal data only for as long as necessary:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Contact inquiries: until resolved","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Application data: typically up to 6 months after the application process ends, unless consent for longer storage is given","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Technical data: according to operational necessity","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"10. Your Rights","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Under GDPR, you have the following rights:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"ul","type":"list","start":1,"format":"","indent":0,"version":1,"children":[{"type":"listitem","value":1,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right of access (Art. 15 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":2,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to rectification (Art. 16 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":3,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to erasure (Art. 17 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":4,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to restriction of processing (Art. 18 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":5,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to data portability (Art. 20 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"listitem","value":6,"format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Right to object (Art. 21 GDPR)","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"listType":"bullet","direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"You also have the right to withdraw consent at any time.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"11. Right to Lodge a Complaint","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"You have the right to lodge a complaint with a supervisory authority if you believe your data is being processed unlawfully.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"12. Security Measures","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We implement appropriate technical and organizational measures to protect your data against unauthorized access, loss, or destruction.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"13. Changes to This Privacy Policy","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We may update this Privacy Policy from time to time. The latest version will always be available on this page.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"tag":"h2","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"14. Contact","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"If you have any questions about this Privacy Policy, please contact us at:","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"type":"autolink","fields":{"url":"mailto:nsammito@code0.tech","linkType":"custom"},"format":"","indent":0,"version":2,"children":[{"mode":"normal","text":"nsammito@code0.tech","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"blockName":null,"blockType":"markdown"}]},"meta":{"title":{"en":null,"de":null},"description":{"en":null,"de":null},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:04:59.227Z","createdAt":"2026-02-18T15:44:04.849Z"},{"id":104,"title":{"en":"Legal Notice","de":"Impressum"},"slug":"legal-notice","layout":{"en":[{"id":"6995de1509329cbf85efcb33","content":{"root":{"type":"root","format":"","indent":0,"version":1,"children":[{"tag":"h1","type":"heading","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Legal Notice","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Code0 UG (haftungsbeschränkt) i.G.","type":"text","style":"","detail":0,"format":0,"version":1},{"type":"linebreak","version":1},{"type":"linebreak","version":1},{"mode":"normal","text":"Grünewalder Str. 29-31","type":"text","style":"","detail":0,"format":0,"version":1},{"type":"linebreak","version":1},{"mode":"normal","text":"c/o Gründer- & Technologiezentrum, Haus 4","type":"text","style":"","detail":0,"format":0,"version":1},{"type":"linebreak","version":1},{"mode":"normal","text":"42657 Solingen","type":"text","style":"","detail":0,"format":0,"version":1},{"type":"linebreak","version":1},{"type":"autolink","fields":{"url":"mailto:nsammito@code0.tech","linkType":"custom"},"format":"","indent":0,"version":2,"children":[{"mode":"normal","text":"nsammito@code0.tech","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null},{"mode":"normal","text":" ","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"Managing Directors: Nico Sammito, Raphael Arun Götz","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0},{"type":"paragraph","format":"","indent":0,"version":1,"children":[{"mode":"normal","text":"We are neither obligated nor willing to participate in dispute resolution proceedings before a consumer arbitration board.","type":"text","style":"","detail":0,"format":0,"version":1}],"direction":null,"textStyle":"","textFormat":0}],"direction":null}},"blockName":null,"blockType":"markdown"}]},"meta":{"title":{"en":null,"de":null},"description":{"en":null,"de":null},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:00.177Z","createdAt":"2026-02-18T15:43:24.547Z"},{"id":105,"title":{"en":"Contact","de":"Kontakt"},"slug":"contact","layout":{"en":[{"id":"6995ddfb09329cbf85efcb31","heading":"Contact us","nameLabel":"Name","namePlaceholder":"Your name","emailLabel":"Email","emailPlaceholder":"you@example.com","messageLabel":"Message","messagePlaceholder":"How can we help you?","submitLabel":"Send message","blockName":null,"blockType":"contact"}]},"meta":{"title":{"en":null,"de":null},"description":{"en":null,"de":null},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:01.091Z","createdAt":"2026-02-18T15:42:54.620Z"},{"id":106,"title":{"en":"Jobs","de":"Jobs"},"slug":"jobs","layout":{"en":[{"id":"6990a95041fa90fc8d755daf","heading":"Join Our Team","searchPlaceholder":"Search jobs","allLocationsLabel":"All locations","allJobTypesLabel":"All job types","allCategoriesLabel":"All categories","noJobsFoundLabel":"No jobs found for your filter.","applicationHeading":"Apply now","applicationNameLabel":"Name","applicationNamePlaceholder":"Your name","applicationEmailLabel":"Email","applicationEmailPlaceholder":"you@example.com","applicationMessageLabel":"Message","applicationMessagePlaceholder":"Tell us a bit about yourself...","applicationSubmitLabel":"Send application","blockName":null,"blockType":"jobs"}],"de":[{"id":"6990a91c41fa90fc8d755dad","heading":"Trete unserem Team bei","searchPlaceholder":"Suche Jobs","allLocationsLabel":"Alle Orte","allJobTypesLabel":"Alle Typen","allCategoriesLabel":"Alle Kategorien","noJobsFoundLabel":"Keine Jobs für diesen Filter gefunden.","applicationHeading":"Apply now","applicationNameLabel":"Name","applicationNamePlaceholder":"Your name","applicationEmailLabel":"Email","applicationEmailPlaceholder":"you@example.com","applicationMessageLabel":"Message","applicationMessagePlaceholder":"Tell us a bit about yourself...","applicationSubmitLabel":"Send application","blockName":null,"blockType":"jobs"}]},"meta":{"title":{"en":null,"de":null},"description":{"en":null,"de":null},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:05:02.034Z","createdAt":"2026-02-14T16:56:39.430Z"},{"id":107,"title":{"en":"main","de":"main"},"slug":"main","layout":{"en":[{"id":"6990a5be6ae95b3dc93760fc","badge":"v0.0.0-canary-2356067148","badge_link":"https://github.com/code0-tech/codezero/releases/tag/0.0.0-canary-2356067148-c06e576791513b10dbcb10aa3b0420b87178a205","heading":"Every great idea starts at zero. Start with CodeZero.","blockName":null,"texts":[{"id":"6990a5dc6ae95b3dc93760fe","text":"The automation world gets to the next era with the CodeZero's no-code platform."},{"id":"6990a5e66ae95b3dc9376100","text":"From end-to-end automation to scalable backend endpoints in no-time."}],"buttons":[{"id":"6990a5f06ae95b3dc9376102","label":"Read the docs","url":"https://docs.code0.tech","variant":"normal"},{"id":"6990a5fe6ae95b3dc9376104","label":"Start building","url":"https://docs.code0.tech","variant":"filled"}],"blockType":"hero"},{"id":"6990a60d6ae95b3dc9376106","description":"Our partners and developed extensions","blockName":null,"logos":[{"id":"699ed8115b5164abdccf58c9","logo":{"id":161,"alt":"GLS Logo","href":"https://gls-group.com/","updatedAt":"2026-02-25T11:12:48.228Z","createdAt":"2026-02-25T11:08:24.824Z","url":"/api/media/file/gls_logo.png","thumbnailURL":null,"filename":"gls_logo.png","mimeType":"image/png","filesize":19352,"width":960,"height":337,"focalX":50,"focalY":50}}],"blockType":"brand"},{"id":"6990a6186ae95b3dc9376108","blockName":null,"useCases":[{"id":"6990a61b6ae95b3dc937610a","label":"Logistic automation","title":"Logistic automation","description":"Streamline your shipping operations by bridging the gap between your systems and GLS. Our automation layer eliminates manual data entry, reduces human error, and ensures a frictionless flow from order to delivery.","image":{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Automated Label Generation","Real-Time Status Sync","Error-Resistant Workflows"],"link":{"label":"Learn more","url":"/blog/smart-logistic-use-case"}},{"id":"6990a62f6ae95b3dc937610c","label":"Chatbot building","title":"Chatbot building","description":"Turn your Discord server into a powerful automated hub. Build custom bots without writing a single line of code, enabling you to manage your community, automate moderation, and integrate third-party data seamlessly.","image":{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Visual Bot Builder","Intelligent Automation","Deep Integrations"],"link":{"label":"Learn more","url":"/blog/smart-chatbots-use-case"}},{"id":"6990a6396ae95b3dc937610e","label":"AI automation and integration","title":"AI automation and integration","description":"Build sophisticated AI agents without being locked into a single ecosystem. Select your preferred LLM, define your system prompts, and extend its capabilities by attaching any MCP-compatible tools to create a seamless, automated workflow.","image":{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Model Agnostic","MCP Tool Integration","Complex Flow Logic"],"link":{"label":"Learn more","url":"/blog/smart-ai-agents-use-case"}}],"blockType":"usecase"},{"id":"6990a6566ae95b3dc9376110","blockName":null,"items":[{"id":"6990a6596ae95b3dc9376112","question":"How does CodeZero work?","answer":"CodeZero allows you to build complex automations and backend logic through a visual interface without writing code."},{"id":"6990a6706ae95b3dc9376114","question":"Can i deploy my project anywhere?","answer":"Yes, CodeZero projects can be deployed on various environments including cloud providers."},{"id":"6990a6806ae95b3dc9376116","question":"Is there a free version?","answer":"Yes, we offer a free plan and also a community edition license to explore the core features."}],"blockType":"faq"},{"id":"6990a6906ae95b3dc9376118","heading":"Build better automations with CodeZero","subheading":"The automation world gets to the next era with the CodeZero's no-code platform. From end-to-end automation to scalable backend endpoints in no-time.","blockName":null,"blockType":"cta","ctaLink":{"label":"Start building","url":"https://docs.code0.tech"}},{"id":"6997f08e25746cbd0f1e4153","cloudTitle":"Cloud Hosting","cloudDescription":"Get started in minutes with our managed cloud setup. Updates, scaling, and monitoring are built in.","selfhostTitle":"Self-Hosting","selfhostDescription":"Run Code0 on your own infrastructure with full control over data, security, and deployment workflows.","dynamicTitle":"Dynamic-Hosting","dynamicDescription":"Run Code0 on your own infrastructure with full control over data, security, and deployment workflows.","blockName":null,"blockType":"deployment","cloudLink":{"label":"","url":""},"selfhostLink":{"label":"","url":""},"dynamicLink":{"label":"","url":""}}],"de":[{"id":"69c3dbdcd464f5d34f4fe97b","badge":"v0.0.0-canary-2356067148","badge_link":"https://github.com/code0-tech/codezero/releases/tag/0.0.0-canary-2356067148-c06e576791513b10dbcb10aa3b0420b87178a205","heading":"Every great idea starts at zero. Start with CodeZero.","blockName":null,"texts":[{"id":"69c3dbdcd464f5d34f4fe977","text":"The automation world gets to the next era with the CodeZero's no-code platform."},{"id":"69c3dbdcd464f5d34f4fe978","text":"From end-to-end automation to scalable backend endpoints in no-time."}],"buttons":[{"id":"69c3dbdcd464f5d34f4fe979","label":"Read the docs","url":"https://docs.code0.tech","variant":"normal"},{"id":"69c3dbdcd464f5d34f4fe97a","label":"Start building","url":"https://docs.code0.tech","variant":"filled"}],"blockType":"hero"},{"id":"69c3dbdcd464f5d34f4fe97d","description":"Our partners and developed extensions","blockName":null,"logos":[{"id":"69c3dbdcd464f5d34f4fe97c","logo":{"id":161,"alt":"GLS Logo","href":"https://gls-group.com/","updatedAt":"2026-02-25T11:12:48.228Z","createdAt":"2026-02-25T11:08:24.824Z","url":"/api/media/file/gls_logo.png","thumbnailURL":null,"filename":"gls_logo.png","mimeType":"image/png","filesize":19352,"width":960,"height":337,"focalX":50,"focalY":50}}],"blockType":"brand"},{"id":"69c3dbdcd464f5d34f4fe981","blockName":null,"useCases":[{"id":"69c3dbdcd464f5d34f4fe97e","label":"Logistic automation","title":"Logistic automation","description":"Streamline your shipping operations by bridging the gap between your systems and GLS. Our automation layer eliminates manual data entry, reduces human error, and ensures a frictionless flow from order to delivery.","image":{"id":156,"alt":"Logistic automation workflow GLS CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.175Z","createdAt":"2026-03-25T10:05:48.175Z","url":"/api/media/file/Logistic_Use-Case-1.png","thumbnailURL":null,"filename":"Logistic_Use-Case-1.png","mimeType":"image/png","filesize":113308,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Automated Label Generation","Real-Time Status Sync","Error-Resistant Workflows"],"link":{"label":"Learn more","url":"/blog/smart-logistic-use-case"}},{"id":"69c3dbdcd464f5d34f4fe97f","label":"Chatbot building","title":"Chatbot building","description":"Turn your Discord server into a powerful automated hub. Build custom bots without writing a single line of code, enabling you to manage your community, automate moderation, and integrate third-party data seamlessly.","image":{"id":157,"alt":"Discord bot automation CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.152Z","createdAt":"2026-03-25T10:05:48.152Z","url":"/api/media/file/Chatbot_Use-Case-1.png","thumbnailURL":null,"filename":"Chatbot_Use-Case-1.png","mimeType":"image/png","filesize":74140,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Visual Bot Builder","Intelligent Automation","Deep Integrations"],"link":{"label":"Learn more","url":"/blog/smart-chatbots-use-case"}},{"id":"69c3dbdcd464f5d34f4fe980","label":"AI automation and integration","title":"AI automation and integration","description":"Build sophisticated AI agents without being locked into a single ecosystem. Select your preferred LLM, define your system prompts, and extend its capabilities by attaching any MCP-compatible tools to create a seamless, automated workflow.","image":{"id":158,"alt":"AI Use Case ChatGPT MCP Claude CodeZero","href":null,"updatedAt":"2026-03-25T10:05:48.123Z","createdAt":"2026-03-25T10:05:48.123Z","url":"/api/media/file/AI_Use-Case-1.png","thumbnailURL":null,"filename":"AI_Use-Case-1.png","mimeType":"image/png","filesize":126673,"width":1920,"height":1080,"focalX":50,"focalY":50},"bulletPoints":["Model Agnostic","MCP Tool Integration","Complex Flow Logic"],"link":{"label":"Learn more","url":"/blog/smart-ai-agents-use-case"}}],"blockType":"usecase"},{"id":"69c3dbdcd464f5d34f4fe985","blockName":null,"items":[{"id":"69c3dbdcd464f5d34f4fe982","question":"How does CodeZero work?","answer":"CodeZero allows you to build complex automations and backend logic through a visual interface without writing code."},{"id":"69c3dbdcd464f5d34f4fe983","question":"Can i deploy my project anywhere?","answer":"Yes, CodeZero projects can be deployed on various environments including cloud providers."},{"id":"69c3dbdcd464f5d34f4fe984","question":"Is there a free version?","answer":"Yes, we offer a free plan and also a community edition license to explore the core features."}],"blockType":"faq"},{"id":"69c3dbdcd464f5d34f4fe986","heading":"Build better automations with CodeZero","subheading":"The automation world gets to the next era with the CodeZero's no-code platform. From end-to-end automation to scalable backend endpoints in no-time.","blockName":null,"blockType":"cta","ctaLink":{"label":"Start building","url":"https://docs.code0.tech"}},{"id":"69c3dbdcd464f5d34f4fe987","cloudTitle":"Cloud Hosting","cloudDescription":"Get started in minutes with our managed cloud setup. Updates, scaling, and monitoring are built in.","selfhostTitle":"Self-Hosting","selfhostDescription":"Run Code0 on your own infrastructure with full control over data, security, and deployment workflows.","dynamicTitle":"Dynamic-Hosting","dynamicDescription":"Run Code0 on your own infrastructure with full control over data, security, and deployment workflows.","blockName":null,"blockType":"deployment","cloudLink":{"label":"","url":""},"selfhostLink":{"label":"","url":""},"dynamicLink":{"label":"","url":""}}]},"meta":{"title":{"en":null,"de":null},"description":{"en":null,"de":null},"image":{"en":null,"de":null}},"updatedAt":"2026-03-26T18:46:02.285Z","createdAt":"2026-02-13T06:35:27.227Z"}] \ No newline at end of file diff --git a/media/og-image.png b/media/og-image.png new file mode 100644 index 00000000..d8fcad55 Binary files /dev/null and b/media/og-image.png differ diff --git a/package-lock.json b/package-lock.json index e7271b8b..5c751595 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5817,6 +5817,21 @@ "payload": "3.81.0" } }, + "node_modules/@payloadcms/plugin-seo": { + "version": "3.80.0", + "resolved": "https://registry.npmjs.org/@payloadcms/plugin-seo/-/plugin-seo-3.80.0.tgz", + "integrity": "sha512-pUIvrPqPd3SuJGp8VXjRWaTRquDdns0ADJYYvv2Bv8HWCEDl178tRNWtlUnlsOLplToXwfuAdTdcNiIZGx+2NA==", + "license": "MIT", + "dependencies": { + "@payloadcms/translations": "3.80.0", + "@payloadcms/ui": "3.80.0" + }, + "peerDependencies": { + "payload": "3.80.0", + "react": "^19.0.1 || ^19.1.2 || ^19.2.1", + "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1" + } + }, "node_modules/@payloadcms/richtext-lexical": { "version": "3.81.0", "resolved": "https://registry.npmjs.org/@payloadcms/richtext-lexical/-/richtext-lexical-3.81.0.tgz", diff --git a/package.json b/package.json index b8004c7d..baafb668 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "migrate": "payload migrate", "migrate:create": "payload migrate:create", "migrate:status": "payload migrate:status", + "generate:importmap": "payload generate:importmap", "lint": "next lint", "knip": "knip", "generate": "payload generate:types", diff --git a/public/og-image.png b/public/og-image.png new file mode 100644 index 00000000..d8fcad55 Binary files /dev/null and b/public/og-image.png differ diff --git a/scripts/import-data.ts b/scripts/import-data.ts index 73783ac1..697b4c1d 100644 --- a/scripts/import-data.ts +++ b/scripts/import-data.ts @@ -282,7 +282,11 @@ type ImportedBlogDocument = { } | number | string | null id?: number | string meta?: { + title?: Record | null description?: Record | null + image?: { + id?: number | string + } | number | string | null keywords?: Record | null } | null ogImage?: { @@ -572,6 +576,27 @@ const createImportReq = async (payload: PayloadInstance, importUser: ImportUser, return createLocalReq({ locale, user: importUser }, payload) } +const mapImportedBlogMetaForLocale = ( + doc: ImportedBlogDocument, + locale: "en" | "de", + mediaIDMap: Map +) => { + const title = doc.meta?.title?.[locale] ?? doc.title?.[locale] ?? undefined + const description = doc.meta?.description?.[locale] ?? undefined + const imageSource = doc.meta?.image ?? doc.ogImage ?? doc.twitterImage ?? doc.heroImage + const image = remapKnownRelationshipID(normalizeRelationshipID(imageSource), mediaIDMap) + + if (!title && !description && image === undefined) { + return undefined + } + + return { + description, + image, + title, + } +} + const syncLocalizedDocument = async ( payload: PayloadInstance, importUser: ImportUser, @@ -895,27 +920,15 @@ const importBlogCollection = async ( createdAt: doc.createdAt, heroImage: remapKnownRelationshipID(normalizeRelationshipID(doc.heroImage), mediaIDMap), id: normalizeNumericID(doc.id), - meta: doc.meta - ? { - description: doc.meta.description?.en ?? undefined, - keywords: doc.meta.keywords?.en ?? undefined, - } - : undefined, - ogImage: remapKnownRelationshipID(normalizeRelationshipID(doc.ogImage), mediaIDMap), + meta: mapImportedBlogMetaForLocale(doc, "en", mediaIDMap), shortDescription: doc.shortDescription?.en ?? undefined, slug: doc.slug ?? "", title: doc.title?.en ?? "", - twitterImage: remapKnownRelationshipID(normalizeRelationshipID(doc.twitterImage), mediaIDMap), updatedAt: doc.updatedAt, }), buildGermanData: (doc) => ({ content: doc.content?.de ? mapBlogContentForImport(doc.content.de, mediaIDMap) : undefined, - meta: doc.meta - ? { - description: doc.meta.description?.de ?? undefined, - keywords: doc.meta.keywords?.de ?? undefined, - } - : undefined, + meta: mapImportedBlogMetaForLocale(doc, "de", mediaIDMap), shortDescription: doc.shortDescription?.de ?? undefined, title: doc.title?.de ?? "", }), @@ -1021,7 +1034,7 @@ const formatImportError = (error: unknown) => { return String(error) } - const cause = error.cause as + const cause = (error as Error & { cause?: unknown }).cause as | { code?: string column?: string diff --git a/src/app/(landing)/[locale]/about-us/page.tsx b/src/app/(landing)/[locale]/about-us/page.tsx index 72be7c72..9a5071f1 100644 --- a/src/app/(landing)/[locale]/about-us/page.tsx +++ b/src/app/(landing)/[locale]/about-us/page.tsx @@ -4,9 +4,16 @@ import { Aurora } from "@/components/ui/Aurora" import { LandingContainer } from "@/components/ui/LandingContainer" import { MarkdownLayoutBlock, getLandingPage, getTeamMembers } from "@/lib/cms" import { isSupportedLocale } from "@/lib/i18n" +import { getLandingPageMetadata } from "@/lib/pageMetadata" import { convertLexicalToHTML } from "@payloadcms/richtext-lexical/html" +import type { Metadata } from "next" import { notFound } from "next/navigation" +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + return getLandingPageMetadata("about-us", locale) +} + export default async function AboutPage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params if (!isSupportedLocale(locale)) notFound() diff --git a/src/app/(landing)/[locale]/blog/[...slug]/page.tsx b/src/app/(landing)/[locale]/blog/[...slug]/page.tsx index b8987f40..5099e4ee 100644 --- a/src/app/(landing)/[locale]/blog/[...slug]/page.tsx +++ b/src/app/(landing)/[locale]/blog/[...slug]/page.tsx @@ -2,14 +2,25 @@ import { BlogPost } from "@/components/blog/BlogPost" import { BlogSkeleton } from "@/components/blog/BlogSkeleton" import { Aurora } from "@/components/ui/Aurora" import { LandingContainer } from "@/components/ui/LandingContainer" +import { type Media } from "@/payload-types" import { SUPPORTED_LOCALES, isSupportedLocale } from "@/lib/i18n" -import { getBlogSlugs, getLandingPage, type CtaLayoutBlock } from "@/lib/cms" +import { getBlogPostBySlug, getBlogSlugs, getLandingPage, type CtaLayoutBlock } from "@/lib/cms" +import { createMetadata, resolveSiteUrl } from "@/lib/siteConfig" +import type { Metadata } from "next" import { notFound } from "next/navigation" import Image from "next/image" import { Suspense } from "react" import { InteractiveGridPattern } from "@/components/InteractiveGridPattern" import { HapticButtonLink } from "@/components/ui/HapticButtonLink" +function getMediaUrl(value?: number | Media | null) { + if (!value || typeof value === "number" || !value.url) { + return undefined + } + + return new URL(value.url, resolveSiteUrl()).toString() +} + export default async function Page({ params }: { params: Promise<{ locale: string, slug: string[] }> }) { const { locale, slug } = await params if (!isSupportedLocale(locale)) notFound() @@ -75,6 +86,50 @@ export default async function Page({ params }: { params: Promise<{ locale: strin ) } +export async function generateMetadata({ params }: { params: Promise<{ locale: string, slug: string[] }> }): Promise { + const { locale, slug } = await params + if (!isSupportedLocale(locale)) { + return createMetadata() + } + + const normalizedSlug = slug?.join("/")?.trim() + if (!normalizedSlug) { + return createMetadata() + } + + const post = await getBlogPostBySlug(normalizedSlug, locale) + if (!post) { + return createMetadata() + } + + const title = post.meta?.title ?? post.title + const description = post.meta?.description ?? post.shortDescription ?? undefined + const canonicalPath = `/${locale}/blog/${post.slug}` + const canonicalUrl = new URL(canonicalPath, resolveSiteUrl()).toString() + const openGraphImage = getMediaUrl(post.meta?.image ?? post.heroImage) + const twitterImage = openGraphImage + + return createMetadata({ + title, + description, + alternates: { + canonical: canonicalPath, + }, + openGraph: { + title, + description, + url: canonicalUrl, + type: "article", + images: openGraphImage ? [openGraphImage] : undefined, + }, + twitter: { + title, + description, + images: twitterImage ? [twitterImage] : undefined, + }, + }) +} + export async function generateStaticParams() { const all = await Promise.all( SUPPORTED_LOCALES.map(async (locale) => { diff --git a/src/app/(landing)/[locale]/contact/page.tsx b/src/app/(landing)/[locale]/contact/page.tsx index dcd30bf9..8740c9a7 100644 --- a/src/app/(landing)/[locale]/contact/page.tsx +++ b/src/app/(landing)/[locale]/contact/page.tsx @@ -4,9 +4,16 @@ import { Aurora } from "@/components/ui/Aurora" import { LandingContainer } from "@/components/ui/LandingContainer" import { getLandingPage, type ContactLayoutBlock, type MarkdownLayoutBlock } from "@/lib/cms" import { isSupportedLocale } from "@/lib/i18n" +import { getLandingPageMetadata } from "@/lib/pageMetadata" import { convertLexicalToHTML } from "@payloadcms/richtext-lexical/html" +import type { Metadata } from "next" import { notFound } from "next/navigation" +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + return getLandingPageMetadata("contact", locale) +} + export default async function ContactPage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params if (!isSupportedLocale(locale)) notFound() diff --git a/src/app/(landing)/[locale]/features/page.tsx b/src/app/(landing)/[locale]/features/page.tsx index c0688e82..83354e5c 100644 --- a/src/app/(landing)/[locale]/features/page.tsx +++ b/src/app/(landing)/[locale]/features/page.tsx @@ -3,9 +3,16 @@ import { Aurora } from "@/components/ui/Aurora" import { LandingContainer } from "@/components/ui/LandingContainer" import { getLandingPage, type MarkdownLayoutBlock } from "@/lib/cms" import { isSupportedLocale } from "@/lib/i18n" +import { getLandingPageMetadata } from "@/lib/pageMetadata" import { convertLexicalToHTML } from "@payloadcms/richtext-lexical/html" +import type { Metadata } from "next" import { notFound } from "next/navigation" +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + return getLandingPageMetadata("features", locale) +} + export default async function FeaturesPage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params if (!isSupportedLocale(locale)) notFound() diff --git a/src/app/(landing)/[locale]/jobs/page.tsx b/src/app/(landing)/[locale]/jobs/page.tsx index b5eee54c..da972474 100644 --- a/src/app/(landing)/[locale]/jobs/page.tsx +++ b/src/app/(landing)/[locale]/jobs/page.tsx @@ -4,8 +4,15 @@ import { LandingContainer } from "@/components/ui/LandingContainer" import { isSupportedLocale } from "@/lib/i18n" import { getLandingPage, type JobsLayoutBlock } from "@/lib/cms" import { getJobs } from "@/lib/cms" +import { getLandingPageMetadata } from "@/lib/pageMetadata" +import type { Metadata } from "next" import { notFound } from "next/navigation" +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + return getLandingPageMetadata("jobs", locale) +} + export default async function JobPage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params if (!isSupportedLocale(locale)) notFound() diff --git a/src/app/(landing)/[locale]/legal-notice/page.tsx b/src/app/(landing)/[locale]/legal-notice/page.tsx index d0fddf03..46b99e1c 100644 --- a/src/app/(landing)/[locale]/legal-notice/page.tsx +++ b/src/app/(landing)/[locale]/legal-notice/page.tsx @@ -3,9 +3,16 @@ import { Aurora } from "@/components/ui/Aurora" import { LandingContainer } from "@/components/ui/LandingContainer" import { getLandingPage, type MarkdownLayoutBlock } from "@/lib/cms" import { isSupportedLocale } from "@/lib/i18n" +import { getLandingPageMetadata } from "@/lib/pageMetadata" import { convertLexicalToHTML } from "@payloadcms/richtext-lexical/html" +import type { Metadata } from "next" import { notFound } from "next/navigation" +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + return getLandingPageMetadata("legal-notice", locale) +} + export default async function LegalNoticePage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params if (!isSupportedLocale(locale)) notFound() diff --git a/src/app/(landing)/[locale]/page.tsx b/src/app/(landing)/[locale]/page.tsx index 7aaf789f..e7534db9 100644 --- a/src/app/(landing)/[locale]/page.tsx +++ b/src/app/(landing)/[locale]/page.tsx @@ -15,12 +15,19 @@ import type { CtaLayoutBlock } from "@/lib/cms" import type { FaqLayoutBlock } from "@/lib/cms" import type { UseCaseLayoutBlock } from "@/lib/cms" import { isSupportedLocale, SUPPORTED_LOCALES } from "@/lib/i18n" +import { getLandingPageMetadata } from "@/lib/pageMetadata" +import type { Metadata } from "next" import { notFound } from "next/navigation" export function generateStaticParams() { return SUPPORTED_LOCALES.map((locale) => ({ locale })) } +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + return getLandingPageMetadata("main", locale) +} + export default async function Page({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params if (!isSupportedLocale(locale)) { diff --git a/src/app/(landing)/[locale]/privacy/page.tsx b/src/app/(landing)/[locale]/privacy/page.tsx index 6de7da42..00ff156e 100644 --- a/src/app/(landing)/[locale]/privacy/page.tsx +++ b/src/app/(landing)/[locale]/privacy/page.tsx @@ -3,9 +3,16 @@ import { Aurora } from "@/components/ui/Aurora" import { LandingContainer } from "@/components/ui/LandingContainer" import { getLandingPage, type MarkdownLayoutBlock } from "@/lib/cms" import { isSupportedLocale } from "@/lib/i18n" +import { getLandingPageMetadata } from "@/lib/pageMetadata" import { convertLexicalToHTML } from "@payloadcms/richtext-lexical/html" +import type { Metadata } from "next" import { notFound } from "next/navigation" +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + return getLandingPageMetadata("privacy", locale) +} + export default async function PrivacyPage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params if (!isSupportedLocale(locale)) notFound() diff --git a/src/app/(landing)/[locale]/terms/page.tsx b/src/app/(landing)/[locale]/terms/page.tsx index 1a26b9c1..7cd90bcf 100644 --- a/src/app/(landing)/[locale]/terms/page.tsx +++ b/src/app/(landing)/[locale]/terms/page.tsx @@ -3,9 +3,16 @@ import { Aurora } from "@/components/ui/Aurora" import { LandingContainer } from "@/components/ui/LandingContainer" import { getLandingPage, type MarkdownLayoutBlock } from "@/lib/cms" import { isSupportedLocale } from "@/lib/i18n" +import { getLandingPageMetadata } from "@/lib/pageMetadata" import { convertLexicalToHTML } from "@payloadcms/richtext-lexical/html" +import type { Metadata } from "next" import { notFound } from "next/navigation" +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + return getLandingPageMetadata("terms", locale) +} + export default async function TermsPage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params if (!isSupportedLocale(locale)) notFound() diff --git a/src/app/(payload)/admin/importMap.js b/src/app/(payload)/admin/importMap.js index 6c569327..fbe179d1 100644 --- a/src/app/(payload)/admin/importMap.js +++ b/src/app/(payload)/admin/importMap.js @@ -28,6 +28,11 @@ import { StrikethroughFeatureClient as StrikethroughFeatureClient_e70f5e05f09f93 import { UnderlineFeatureClient as UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' import { BoldFeatureClient as BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { OverviewComponent as OverviewComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' +import { MetaTitleComponent as MetaTitleComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' +import { MetaDescriptionComponent as MetaDescriptionComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' +import { MetaImageComponent as MetaImageComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' +import { PreviewComponent as PreviewComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' import { FormatField as FormatField_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' import { LimitField as LimitField_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' import { Page as Page_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' @@ -75,6 +80,11 @@ export const importMap = { "@payloadcms/richtext-lexical/client#UnderlineFeatureClient": UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, "@payloadcms/richtext-lexical/client#BoldFeatureClient": BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, "@payloadcms/richtext-lexical/client#ItalicFeatureClient": ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/plugin-seo/client#OverviewComponent": OverviewComponent_a8a977ebc872c5d5ea7ee689724c0860, + "@payloadcms/plugin-seo/client#MetaTitleComponent": MetaTitleComponent_a8a977ebc872c5d5ea7ee689724c0860, + "@payloadcms/plugin-seo/client#MetaDescriptionComponent": MetaDescriptionComponent_a8a977ebc872c5d5ea7ee689724c0860, + "@payloadcms/plugin-seo/client#MetaImageComponent": MetaImageComponent_a8a977ebc872c5d5ea7ee689724c0860, + "@payloadcms/plugin-seo/client#PreviewComponent": PreviewComponent_a8a977ebc872c5d5ea7ee689724c0860, "@payloadcms/plugin-import-export/rsc#FormatField": FormatField_cdf7e044479f899a31f804427d568b36, "@payloadcms/plugin-import-export/rsc#LimitField": LimitField_cdf7e044479f899a31f804427d568b36, "@payloadcms/plugin-import-export/rsc#Page": Page_cdf7e044479f899a31f804427d568b36, diff --git a/src/collections/blog.ts b/src/collections/blog.ts index e8318d41..cfd6e714 100644 --- a/src/collections/blog.ts +++ b/src/collections/blog.ts @@ -58,34 +58,5 @@ export const Blog: CollectionConfig = { type: "upload", relationTo: "media", }, - { - name: "ogImage", - type: "upload", - relationTo: "media", - }, - { - name: "twitterImage", - type: "upload", - relationTo: "media", - }, - { - name: "meta", - type: "group", - fields: [ - { - name: "description", - type: "textarea", - localized: true, - }, - { - name: "keywords", - type: "text", - localized: true, - admin: { - description: "Comma-separated keywords for SEO metadata.", - }, - }, - ], - }, ], } diff --git a/src/lib/cms.ts b/src/lib/cms.ts index 7cd6121c..1bf248c0 100644 --- a/src/lib/cms.ts +++ b/src/lib/cms.ts @@ -39,6 +39,7 @@ type RoadmapItem = Pick & { heroImage?: (number | null) | Media + meta?: Blog["meta"] author: number | Pick } diff --git a/src/lib/pageMetadata.ts b/src/lib/pageMetadata.ts new file mode 100644 index 00000000..ec9376b0 --- /dev/null +++ b/src/lib/pageMetadata.ts @@ -0,0 +1,58 @@ +import { type Media, type Page } from "@/payload-types" +import { getLandingPage } from "@/lib/cms" +import { isSupportedLocale, type AppLocale } from "@/lib/i18n" +import { createMetadata, resolveSiteUrl } from "@/lib/siteConfig" +import type { Metadata } from "next" + +function getMediaUrl(value?: number | Media | null) { + if (!value || typeof value === "number" || !value.url) { + return undefined + } + + return new URL(value.url, resolveSiteUrl()).toString() +} + +function getPagePath(locale: AppLocale, slug: string) { + return slug === "main" ? `/${locale}` : `/${locale}/${slug}` +} + +export async function getLandingPageMetadata(slug: string, locale: string): Promise { + if (!isSupportedLocale(locale)) { + return createMetadata() + } + + const page = await getLandingPage(slug, locale) + if (!page) { + return createMetadata() + } + + return mapLandingPageToMetadata(page, locale) +} + +export function mapLandingPageToMetadata(page: Page, locale: AppLocale): Metadata { + const title = page.meta?.title ?? page.title + const description = page.meta?.description ?? undefined + const canonicalPath = getPagePath(locale, page.slug) + const canonicalUrl = new URL(canonicalPath, resolveSiteUrl()).toString() + const image = getMediaUrl(page.meta?.image) + + return createMetadata({ + title, + description, + alternates: { + canonical: canonicalPath, + }, + openGraph: { + title, + description, + url: canonicalUrl, + type: "website", + images: image ? [image] : undefined, + }, + twitter: { + title, + description, + images: image ? [image] : undefined, + }, + }) +} diff --git a/src/migrations/20260402_104807_003_seo_and_ogimage.json b/src/migrations/20260402_104807_003_seo_and_ogimage.json new file mode 100644 index 00000000..4d84bc67 --- /dev/null +++ b/src/migrations/20260402_104807_003_seo_and_ogimage.json @@ -0,0 +1,7015 @@ +{ + "version": "7", + "dialect": "postgresql", + "tables": { + "public.users_sessions": { + "name": "users_sessions", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "users_sessions_order_idx": { + "name": "users_sessions_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_sessions_parent_id_idx": { + "name": "users_sessions_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "users_sessions_parent_id_fk": { + "name": "users_sessions_parent_id_fk", + "tableFrom": "users_sessions", + "tableTo": "users", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "image_id": { + "name": "image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "email": { + "name": "email", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "reset_password_token": { + "name": "reset_password_token", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "reset_password_expiration": { + "name": "reset_password_expiration", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "salt": { + "name": "salt", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "hash": { + "name": "hash", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "login_attempts": { + "name": "login_attempts", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "lock_until": { + "name": "lock_until", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "users_image_idx": { + "name": "users_image_idx", + "columns": [ + { + "expression": "image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_updated_at_idx": { + "name": "users_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_created_at_idx": { + "name": "users_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_email_idx": { + "name": "users_email_idx", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "users_image_id_media_id_fk": { + "name": "users_image_id_media_id_fk", + "tableFrom": "users", + "tableTo": "media", + "columnsFrom": [ + "image_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.media": { + "name": "media", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "alt": { + "name": "alt", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "href": { + "name": "href", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "thumbnail_u_r_l": { + "name": "thumbnail_u_r_l", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filename": { + "name": "filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "mime_type": { + "name": "mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filesize": { + "name": "filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "height": { + "name": "height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_x": { + "name": "focal_x", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_y": { + "name": "focal_y", + "type": "numeric", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "media_updated_at_idx": { + "name": "media_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_created_at_idx": { + "name": "media_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_filename_idx": { + "name": "media_filename_idx", + "columns": [ + { + "expression": "filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.navbar_items_sub_menu": { + "name": "navbar_items_sub_menu", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "key": { + "name": "key", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "href": { + "name": "href", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "icon": { + "name": "icon", + "type": "enum_navbar_items_sub_menu_icon", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "color": { + "name": "color", + "type": "enum_navbar_items_sub_menu_color", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'brand'" + } + }, + "indexes": { + "navbar_items_sub_menu_order_idx": { + "name": "navbar_items_sub_menu_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navbar_items_sub_menu_parent_id_idx": { + "name": "navbar_items_sub_menu_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "navbar_items_sub_menu_parent_id_fk": { + "name": "navbar_items_sub_menu_parent_id_fk", + "tableFrom": "navbar_items_sub_menu", + "tableTo": "navbar_items", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.navbar_items_sub_menu_locales": { + "name": "navbar_items_sub_menu_locales", + "schema": "", + "columns": { + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "navbar_items_sub_menu_locales_locale_parent_id_unique": { + "name": "navbar_items_sub_menu_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "navbar_items_sub_menu_locales_parent_id_fk": { + "name": "navbar_items_sub_menu_locales_parent_id_fk", + "tableFrom": "navbar_items_sub_menu_locales", + "tableTo": "navbar_items_sub_menu", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.navbar_items": { + "name": "navbar_items", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "href": { + "name": "href", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "order": { + "name": "order", + "type": "numeric", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "navbar_items_updated_at_idx": { + "name": "navbar_items_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "navbar_items_created_at_idx": { + "name": "navbar_items_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.navbar_items_locales": { + "name": "navbar_items_locales", + "schema": "", + "columns": { + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "navbar_items_locales_locale_parent_id_unique": { + "name": "navbar_items_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "navbar_items_locales_parent_id_fk": { + "name": "navbar_items_locales_parent_id_fk", + "tableFrom": "navbar_items_locales", + "tableTo": "navbar_items", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sections": { + "name": "sections", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "section_type": { + "name": "section_type", + "type": "enum_sections_section_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "link_button_url": { + "name": "link_button_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "sections_updated_at_idx": { + "name": "sections_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sections_created_at_idx": { + "name": "sections_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sections_locales": { + "name": "sections_locales", + "schema": "", + "columns": { + "heading": { + "name": "heading", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "subheading": { + "name": "subheading", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "link_button_label": { + "name": "link_button_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "sections_locales_locale_parent_id_unique": { + "name": "sections_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "sections_locales_parent_id_fk": { + "name": "sections_locales_parent_id_fk", + "tableFrom": "sections_locales", + "tableTo": "sections", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.footer_social_links": { + "name": "footer_social_links", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "platform": { + "name": "platform", + "type": "enum_footer_social_links_platform", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "footer_social_links_order_idx": { + "name": "footer_social_links_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "footer_social_links_parent_id_idx": { + "name": "footer_social_links_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "footer_social_links_parent_id_fk": { + "name": "footer_social_links_parent_id_fk", + "tableFrom": "footer_social_links", + "tableTo": "footer", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.footer_groups_items": { + "name": "footer_groups_items", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "footer_groups_items_order_idx": { + "name": "footer_groups_items_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "footer_groups_items_parent_id_idx": { + "name": "footer_groups_items_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "footer_groups_items_parent_id_fk": { + "name": "footer_groups_items_parent_id_fk", + "tableFrom": "footer_groups_items", + "tableTo": "footer_groups", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.footer_groups_items_locales": { + "name": "footer_groups_items_locales", + "schema": "", + "columns": { + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "footer_groups_items_locales_locale_parent_id_unique": { + "name": "footer_groups_items_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "footer_groups_items_locales_parent_id_fk": { + "name": "footer_groups_items_locales_parent_id_fk", + "tableFrom": "footer_groups_items_locales", + "tableTo": "footer_groups_items", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.footer_groups": { + "name": "footer_groups", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + } + }, + "indexes": { + "footer_groups_order_idx": { + "name": "footer_groups_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "footer_groups_parent_id_idx": { + "name": "footer_groups_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "footer_groups_parent_id_fk": { + "name": "footer_groups_parent_id_fk", + "tableFrom": "footer_groups", + "tableTo": "footer", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.footer_groups_locales": { + "name": "footer_groups_locales", + "schema": "", + "columns": { + "heading": { + "name": "heading", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "footer_groups_locales_locale_parent_id_unique": { + "name": "footer_groups_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "footer_groups_locales_parent_id_fk": { + "name": "footer_groups_locales_parent_id_fk", + "tableFrom": "footer_groups_locales", + "tableTo": "footer_groups", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.footer": { + "name": "footer", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "footer_updated_at_idx": { + "name": "footer_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "footer_created_at_idx": { + "name": "footer_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.footer_locales": { + "name": "footer_locales", + "schema": "", + "columns": { + "company_name": { + "name": "company_name", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'CodeZero GmbH'" + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "footer_locales_locale_parent_id_unique": { + "name": "footer_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "footer_locales_parent_id_fk": { + "name": "footer_locales_parent_id_fk", + "tableFrom": "footer_locales", + "tableTo": "footer", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.cookie_banner": { + "name": "cookie_banner", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "cookie_banner_updated_at_idx": { + "name": "cookie_banner_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cookie_banner_created_at_idx": { + "name": "cookie_banner_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.cookie_banner_locales": { + "name": "cookie_banner_locales", + "schema": "", + "columns": { + "common_accept_all": { + "name": "common_accept_all", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "common_reject_all": { + "name": "common_reject_all", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "common_customize": { + "name": "common_customize", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "common_save": { + "name": "common_save", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "cookie_banner_title": { + "name": "cookie_banner_title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "cookie_banner_description": { + "name": "cookie_banner_description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "consent_manager_dialog_title": { + "name": "consent_manager_dialog_title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "consent_manager_dialog_description": { + "name": "consent_manager_dialog_description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "consent_types_necessary_title": { + "name": "consent_types_necessary_title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "consent_types_necessary_description": { + "name": "consent_types_necessary_description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "consent_types_measurement_title": { + "name": "consent_types_measurement_title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "consent_types_measurement_description": { + "name": "consent_types_measurement_description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "consent_types_marketing_title": { + "name": "consent_types_marketing_title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "consent_types_marketing_description": { + "name": "consent_types_marketing_description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "legal_links_privacy_policy_label": { + "name": "legal_links_privacy_policy_label", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "legal_links_privacy_policy_href": { + "name": "legal_links_privacy_policy_href", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "legal_links_terms_of_service_label": { + "name": "legal_links_terms_of_service_label", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "legal_links_terms_of_service_href": { + "name": "legal_links_terms_of_service_href", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "cookie_banner_locales_locale_parent_id_unique": { + "name": "cookie_banner_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "cookie_banner_locales_parent_id_fk": { + "name": "cookie_banner_locales_parent_id_fk", + "tableFrom": "cookie_banner_locales", + "tableTo": "cookie_banner", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_hero_texts": { + "name": "pages_blocks_hero_texts", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "text": { + "name": "text", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "pages_blocks_hero_texts_order_idx": { + "name": "pages_blocks_hero_texts_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_hero_texts_parent_id_idx": { + "name": "pages_blocks_hero_texts_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_hero_texts_locale_idx": { + "name": "pages_blocks_hero_texts_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_hero_texts_parent_id_fk": { + "name": "pages_blocks_hero_texts_parent_id_fk", + "tableFrom": "pages_blocks_hero_texts", + "tableTo": "pages_blocks_hero", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_hero_buttons": { + "name": "pages_blocks_hero_buttons", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "variant": { + "name": "variant", + "type": "enum_pages_blocks_hero_buttons_variant", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'normal'" + } + }, + "indexes": { + "pages_blocks_hero_buttons_order_idx": { + "name": "pages_blocks_hero_buttons_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_hero_buttons_parent_id_idx": { + "name": "pages_blocks_hero_buttons_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_hero_buttons_locale_idx": { + "name": "pages_blocks_hero_buttons_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_hero_buttons_parent_id_fk": { + "name": "pages_blocks_hero_buttons_parent_id_fk", + "tableFrom": "pages_blocks_hero_buttons", + "tableTo": "pages_blocks_hero", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_hero": { + "name": "pages_blocks_hero", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "badge": { + "name": "badge", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "badge_link": { + "name": "badge_link", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "heading": { + "name": "heading", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_hero_order_idx": { + "name": "pages_blocks_hero_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_hero_parent_id_idx": { + "name": "pages_blocks_hero_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_hero_path_idx": { + "name": "pages_blocks_hero_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_hero_locale_idx": { + "name": "pages_blocks_hero_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_hero_parent_id_fk": { + "name": "pages_blocks_hero_parent_id_fk", + "tableFrom": "pages_blocks_hero", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_brand_logos": { + "name": "pages_blocks_brand_logos", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "logo_id": { + "name": "logo_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "pages_blocks_brand_logos_order_idx": { + "name": "pages_blocks_brand_logos_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_brand_logos_parent_id_idx": { + "name": "pages_blocks_brand_logos_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_brand_logos_locale_idx": { + "name": "pages_blocks_brand_logos_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_brand_logos_logo_idx": { + "name": "pages_blocks_brand_logos_logo_idx", + "columns": [ + { + "expression": "logo_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_brand_logos_logo_id_media_id_fk": { + "name": "pages_blocks_brand_logos_logo_id_media_id_fk", + "tableFrom": "pages_blocks_brand_logos", + "tableTo": "media", + "columnsFrom": [ + "logo_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "pages_blocks_brand_logos_parent_id_fk": { + "name": "pages_blocks_brand_logos_parent_id_fk", + "tableFrom": "pages_blocks_brand_logos", + "tableTo": "pages_blocks_brand", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_brand": { + "name": "pages_blocks_brand", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_brand_order_idx": { + "name": "pages_blocks_brand_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_brand_parent_id_idx": { + "name": "pages_blocks_brand_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_brand_path_idx": { + "name": "pages_blocks_brand_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_brand_locale_idx": { + "name": "pages_blocks_brand_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_brand_parent_id_fk": { + "name": "pages_blocks_brand_parent_id_fk", + "tableFrom": "pages_blocks_brand", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_usecase_use_cases": { + "name": "pages_blocks_usecase_use_cases", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "label": { + "name": "label", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "image_id": { + "name": "image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "link_label": { + "name": "link_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "link_url": { + "name": "link_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_usecase_use_cases_order_idx": { + "name": "pages_blocks_usecase_use_cases_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_usecase_use_cases_parent_id_idx": { + "name": "pages_blocks_usecase_use_cases_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_usecase_use_cases_locale_idx": { + "name": "pages_blocks_usecase_use_cases_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_usecase_use_cases_image_idx": { + "name": "pages_blocks_usecase_use_cases_image_idx", + "columns": [ + { + "expression": "image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_usecase_use_cases_image_id_media_id_fk": { + "name": "pages_blocks_usecase_use_cases_image_id_media_id_fk", + "tableFrom": "pages_blocks_usecase_use_cases", + "tableTo": "media", + "columnsFrom": [ + "image_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "pages_blocks_usecase_use_cases_parent_id_fk": { + "name": "pages_blocks_usecase_use_cases_parent_id_fk", + "tableFrom": "pages_blocks_usecase_use_cases", + "tableTo": "pages_blocks_usecase", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_usecase": { + "name": "pages_blocks_usecase", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_usecase_order_idx": { + "name": "pages_blocks_usecase_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_usecase_parent_id_idx": { + "name": "pages_blocks_usecase_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_usecase_path_idx": { + "name": "pages_blocks_usecase_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_usecase_locale_idx": { + "name": "pages_blocks_usecase_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_usecase_parent_id_fk": { + "name": "pages_blocks_usecase_parent_id_fk", + "tableFrom": "pages_blocks_usecase", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_faq_items": { + "name": "pages_blocks_faq_items", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "question": { + "name": "question", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "answer": { + "name": "answer", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "pages_blocks_faq_items_order_idx": { + "name": "pages_blocks_faq_items_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_faq_items_parent_id_idx": { + "name": "pages_blocks_faq_items_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_faq_items_locale_idx": { + "name": "pages_blocks_faq_items_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_faq_items_parent_id_fk": { + "name": "pages_blocks_faq_items_parent_id_fk", + "tableFrom": "pages_blocks_faq_items", + "tableTo": "pages_blocks_faq", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_faq": { + "name": "pages_blocks_faq", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_faq_order_idx": { + "name": "pages_blocks_faq_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_faq_parent_id_idx": { + "name": "pages_blocks_faq_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_faq_path_idx": { + "name": "pages_blocks_faq_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_faq_locale_idx": { + "name": "pages_blocks_faq_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_faq_parent_id_fk": { + "name": "pages_blocks_faq_parent_id_fk", + "tableFrom": "pages_blocks_faq", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_cta": { + "name": "pages_blocks_cta", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "heading": { + "name": "heading", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "subheading": { + "name": "subheading", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "cta_link_label": { + "name": "cta_link_label", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "cta_link_url": { + "name": "cta_link_url", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_cta_order_idx": { + "name": "pages_blocks_cta_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_cta_parent_id_idx": { + "name": "pages_blocks_cta_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_cta_path_idx": { + "name": "pages_blocks_cta_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_cta_locale_idx": { + "name": "pages_blocks_cta_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_cta_parent_id_fk": { + "name": "pages_blocks_cta_parent_id_fk", + "tableFrom": "pages_blocks_cta", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_jobs": { + "name": "pages_blocks_jobs", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "heading": { + "name": "heading", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Join Our Team'" + }, + "search_placeholder": { + "name": "search_placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Search jobs'" + }, + "all_locations_label": { + "name": "all_locations_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'All locations'" + }, + "all_job_types_label": { + "name": "all_job_types_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'All job types'" + }, + "all_categories_label": { + "name": "all_categories_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'All categories'" + }, + "no_jobs_found_label": { + "name": "no_jobs_found_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'No jobs found for your filter.'" + }, + "application_heading": { + "name": "application_heading", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Apply now'" + }, + "application_name_label": { + "name": "application_name_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Name'" + }, + "application_name_placeholder": { + "name": "application_name_placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Your name'" + }, + "application_email_label": { + "name": "application_email_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Email'" + }, + "application_email_placeholder": { + "name": "application_email_placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'you@example.com'" + }, + "application_message_label": { + "name": "application_message_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Message'" + }, + "application_message_placeholder": { + "name": "application_message_placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Tell us a bit about yourself...'" + }, + "application_submit_label": { + "name": "application_submit_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Send application'" + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_jobs_order_idx": { + "name": "pages_blocks_jobs_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_jobs_parent_id_idx": { + "name": "pages_blocks_jobs_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_jobs_path_idx": { + "name": "pages_blocks_jobs_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_jobs_locale_idx": { + "name": "pages_blocks_jobs_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_jobs_parent_id_fk": { + "name": "pages_blocks_jobs_parent_id_fk", + "tableFrom": "pages_blocks_jobs", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_markdown": { + "name": "pages_blocks_markdown", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "content": { + "name": "content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_markdown_order_idx": { + "name": "pages_blocks_markdown_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_markdown_parent_id_idx": { + "name": "pages_blocks_markdown_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_markdown_path_idx": { + "name": "pages_blocks_markdown_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_markdown_locale_idx": { + "name": "pages_blocks_markdown_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_markdown_parent_id_fk": { + "name": "pages_blocks_markdown_parent_id_fk", + "tableFrom": "pages_blocks_markdown", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_contact": { + "name": "pages_blocks_contact", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "heading": { + "name": "heading", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Contact us'" + }, + "name_label": { + "name": "name_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Name'" + }, + "name_placeholder": { + "name": "name_placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Your name'" + }, + "email_label": { + "name": "email_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Email'" + }, + "email_placeholder": { + "name": "email_placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'you@example.com'" + }, + "message_label": { + "name": "message_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Message'" + }, + "message_placeholder": { + "name": "message_placeholder", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'How can we help you?'" + }, + "submit_label": { + "name": "submit_label", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'Send message'" + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_contact_order_idx": { + "name": "pages_blocks_contact_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_contact_parent_id_idx": { + "name": "pages_blocks_contact_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_contact_path_idx": { + "name": "pages_blocks_contact_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_contact_locale_idx": { + "name": "pages_blocks_contact_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_contact_parent_id_fk": { + "name": "pages_blocks_contact_parent_id_fk", + "tableFrom": "pages_blocks_contact", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_blocks_deployment": { + "name": "pages_blocks_deployment", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "cloud_title": { + "name": "cloud_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "cloud_description": { + "name": "cloud_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "cloud_link_label": { + "name": "cloud_link_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "cloud_link_url": { + "name": "cloud_link_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "selfhost_title": { + "name": "selfhost_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "selfhost_description": { + "name": "selfhost_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "selfhost_link_label": { + "name": "selfhost_link_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "selfhost_link_url": { + "name": "selfhost_link_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "dynamic_title": { + "name": "dynamic_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "dynamic_description": { + "name": "dynamic_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "dynamic_link_label": { + "name": "dynamic_link_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "dynamic_link_url": { + "name": "dynamic_link_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "block_name": { + "name": "block_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_blocks_deployment_order_idx": { + "name": "pages_blocks_deployment_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_deployment_parent_id_idx": { + "name": "pages_blocks_deployment_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_deployment_path_idx": { + "name": "pages_blocks_deployment_path_idx", + "columns": [ + { + "expression": "_path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_blocks_deployment_locale_idx": { + "name": "pages_blocks_deployment_locale_idx", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_blocks_deployment_parent_id_fk": { + "name": "pages_blocks_deployment_parent_id_fk", + "tableFrom": "pages_blocks_deployment", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages": { + "name": "pages", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "enum_pages_slug", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "pages_slug_idx": { + "name": "pages_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_updated_at_idx": { + "name": "pages_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_created_at_idx": { + "name": "pages_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_locales": { + "name": "pages_locales", + "schema": "", + "columns": { + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "meta_title": { + "name": "meta_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "meta_description": { + "name": "meta_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "meta_image_id": { + "name": "meta_image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "pages_meta_meta_image_idx": { + "name": "pages_meta_meta_image_idx", + "columns": [ + { + "expression": "meta_image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_locales_locale_parent_id_unique": { + "name": "pages_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_locales_meta_image_id_media_id_fk": { + "name": "pages_locales_meta_image_id_media_id_fk", + "tableFrom": "pages_locales", + "tableTo": "media", + "columnsFrom": [ + "meta_image_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "pages_locales_parent_id_fk": { + "name": "pages_locales_parent_id_fk", + "tableFrom": "pages_locales", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages_texts": { + "name": "pages_texts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "text": { + "name": "text", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "locale": { + "name": "locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "pages_texts_order_parent": { + "name": "pages_texts_order_parent", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_texts_locale_parent": { + "name": "pages_texts_locale_parent", + "columns": [ + { + "expression": "locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "pages_texts_parent_fk": { + "name": "pages_texts_parent_fk", + "tableFrom": "pages_texts", + "tableTo": "pages", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.features": { + "name": "features", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "enum_features_slug", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "link_url": { + "name": "link_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "features_slug_idx": { + "name": "features_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "features_updated_at_idx": { + "name": "features_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "features_created_at_idx": { + "name": "features_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.features_locales": { + "name": "features_locales", + "schema": "", + "columns": { + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "link_label": { + "name": "link_label", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "features_locales_locale_parent_id_unique": { + "name": "features_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "features_locales_parent_id_fk": { + "name": "features_locales_parent_id_fk", + "tableFrom": "features_locales", + "tableTo": "features", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jobs": { + "name": "jobs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "category": { + "name": "category", + "type": "enum_jobs_category", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "enum_jobs_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "location": { + "name": "location", + "type": "enum_jobs_location", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "order": { + "name": "order", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "jobs_slug_idx": { + "name": "jobs_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "jobs_updated_at_idx": { + "name": "jobs_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "jobs_created_at_idx": { + "name": "jobs_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jobs_locales": { + "name": "jobs_locales", + "schema": "", + "columns": { + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "content": { + "name": "content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "jobs_locales_locale_parent_id_unique": { + "name": "jobs_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "jobs_locales_parent_id_fk": { + "name": "jobs_locales_parent_id_fk", + "tableFrom": "jobs_locales", + "tableTo": "jobs", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.blog": { + "name": "blog", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "author_id": { + "name": "author_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "hero_image_id": { + "name": "hero_image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "blog_slug_idx": { + "name": "blog_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "blog_author_idx": { + "name": "blog_author_idx", + "columns": [ + { + "expression": "author_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "blog_hero_image_idx": { + "name": "blog_hero_image_idx", + "columns": [ + { + "expression": "hero_image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "blog_updated_at_idx": { + "name": "blog_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "blog_created_at_idx": { + "name": "blog_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "blog_author_id_team_members_id_fk": { + "name": "blog_author_id_team_members_id_fk", + "tableFrom": "blog", + "tableTo": "team_members", + "columnsFrom": [ + "author_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "blog_hero_image_id_media_id_fk": { + "name": "blog_hero_image_id_media_id_fk", + "tableFrom": "blog", + "tableTo": "media", + "columnsFrom": [ + "hero_image_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.blog_locales": { + "name": "blog_locales", + "schema": "", + "columns": { + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "content": { + "name": "content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "short_description": { + "name": "short_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "meta_title": { + "name": "meta_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "meta_description": { + "name": "meta_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "meta_image_id": { + "name": "meta_image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "blog_meta_meta_image_idx": { + "name": "blog_meta_meta_image_idx", + "columns": [ + { + "expression": "meta_image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "blog_locales_locale_parent_id_unique": { + "name": "blog_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "blog_locales_meta_image_id_media_id_fk": { + "name": "blog_locales_meta_image_id_media_id_fk", + "tableFrom": "blog_locales", + "tableTo": "media", + "columnsFrom": [ + "meta_image_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "blog_locales_parent_id_fk": { + "name": "blog_locales_parent_id_fk", + "tableFrom": "blog_locales", + "tableTo": "blog", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.roadmap_items": { + "name": "roadmap_items", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "roadmap_items_updated_at_idx": { + "name": "roadmap_items_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "roadmap_items_created_at_idx": { + "name": "roadmap_items_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.roadmap_items_locales": { + "name": "roadmap_items_locales", + "schema": "", + "columns": { + "time": { + "name": "time", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "roadmap_items_locales_locale_parent_id_unique": { + "name": "roadmap_items_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "roadmap_items_locales_parent_id_fk": { + "name": "roadmap_items_locales_parent_id_fk", + "tableFrom": "roadmap_items_locales", + "tableTo": "roadmap_items", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.team_members": { + "name": "team_members", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "image_id": { + "name": "image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "joined_at": { + "name": "joined_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "team_members_image_idx": { + "name": "team_members_image_idx", + "columns": [ + { + "expression": "image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "team_members_updated_at_idx": { + "name": "team_members_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "team_members_created_at_idx": { + "name": "team_members_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "team_members_image_id_media_id_fk": { + "name": "team_members_image_id_media_id_fk", + "tableFrom": "team_members", + "tableTo": "media", + "columnsFrom": [ + "image_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.team_members_locales": { + "name": "team_members_locales", + "schema": "", + "columns": { + "short_description": { + "name": "short_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "about": { + "name": "about", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "role": { + "name": "role", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "_locale": { + "name": "_locale", + "type": "_locales", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "team_members_locales_locale_parent_id_unique": { + "name": "team_members_locales_locale_parent_id_unique", + "columns": [ + { + "expression": "_locale", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "team_members_locales_parent_id_fk": { + "name": "team_members_locales_parent_id_fk", + "tableFrom": "team_members_locales", + "tableTo": "team_members", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.exports": { + "name": "exports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "format": { + "name": "format", + "type": "enum_exports_format", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'csv'" + }, + "limit": { + "name": "limit", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "page": { + "name": "page", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "default": 1 + }, + "sort": { + "name": "sort", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sort_order": { + "name": "sort_order", + "type": "enum_exports_sort_order", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "locale": { + "name": "locale", + "type": "enum_exports_locale", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'all'" + }, + "drafts": { + "name": "drafts", + "type": "enum_exports_drafts", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'yes'" + }, + "collection_slug": { + "name": "collection_slug", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'users'" + }, + "where": { + "name": "where", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'{}'::jsonb" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "thumbnail_u_r_l": { + "name": "thumbnail_u_r_l", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filename": { + "name": "filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "mime_type": { + "name": "mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filesize": { + "name": "filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "height": { + "name": "height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_x": { + "name": "focal_x", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_y": { + "name": "focal_y", + "type": "numeric", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "exports_updated_at_idx": { + "name": "exports_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "exports_created_at_idx": { + "name": "exports_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "exports_filename_idx": { + "name": "exports_filename_idx", + "columns": [ + { + "expression": "filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.exports_texts": { + "name": "exports_texts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "text": { + "name": "text", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "exports_texts_order_parent": { + "name": "exports_texts_order_parent", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "exports_texts_parent_fk": { + "name": "exports_texts_parent_fk", + "tableFrom": "exports_texts", + "tableTo": "exports", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.imports": { + "name": "imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "collection_slug": { + "name": "collection_slug", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'users'" + }, + "import_mode": { + "name": "import_mode", + "type": "enum_imports_import_mode", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "match_field": { + "name": "match_field", + "type": "varchar", + "primaryKey": false, + "notNull": false, + "default": "'id'" + }, + "status": { + "name": "status", + "type": "enum_imports_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'pending'" + }, + "summary_imported": { + "name": "summary_imported", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "summary_updated": { + "name": "summary_updated", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "summary_total": { + "name": "summary_total", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "summary_issues": { + "name": "summary_issues", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "summary_issue_details": { + "name": "summary_issue_details", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "thumbnail_u_r_l": { + "name": "thumbnail_u_r_l", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filename": { + "name": "filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "mime_type": { + "name": "mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filesize": { + "name": "filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "height": { + "name": "height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_x": { + "name": "focal_x", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_y": { + "name": "focal_y", + "type": "numeric", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "imports_updated_at_idx": { + "name": "imports_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "imports_created_at_idx": { + "name": "imports_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "imports_filename_idx": { + "name": "imports_filename_idx", + "columns": [ + { + "expression": "filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_kv": { + "name": "payload_kv", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "key": { + "name": "key", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "data": { + "name": "data", + "type": "jsonb", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "payload_kv_key_idx": { + "name": "payload_kv_key_idx", + "columns": [ + { + "expression": "key", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_jobs_log": { + "name": "payload_jobs_log", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "executed_at": { + "name": "executed_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true + }, + "completed_at": { + "name": "completed_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true + }, + "task_slug": { + "name": "task_slug", + "type": "enum_payload_jobs_log_task_slug", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "task_i_d": { + "name": "task_i_d", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "input": { + "name": "input", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "output": { + "name": "output", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "state": { + "name": "state", + "type": "enum_payload_jobs_log_state", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "error": { + "name": "error", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "payload_jobs_log_order_idx": { + "name": "payload_jobs_log_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_log_parent_id_idx": { + "name": "payload_jobs_log_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "payload_jobs_log_parent_id_fk": { + "name": "payload_jobs_log_parent_id_fk", + "tableFrom": "payload_jobs_log", + "tableTo": "payload_jobs", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_jobs": { + "name": "payload_jobs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "input": { + "name": "input", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "completed_at": { + "name": "completed_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "total_tried": { + "name": "total_tried", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "has_error": { + "name": "has_error", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "error": { + "name": "error", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "task_slug": { + "name": "task_slug", + "type": "enum_payload_jobs_task_slug", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "queue": { + "name": "queue", + "type": "varchar", + "primaryKey": false, + "notNull": false, + "default": "'default'" + }, + "wait_until": { + "name": "wait_until", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "processing": { + "name": "processing", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_jobs_completed_at_idx": { + "name": "payload_jobs_completed_at_idx", + "columns": [ + { + "expression": "completed_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_total_tried_idx": { + "name": "payload_jobs_total_tried_idx", + "columns": [ + { + "expression": "total_tried", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_has_error_idx": { + "name": "payload_jobs_has_error_idx", + "columns": [ + { + "expression": "has_error", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_task_slug_idx": { + "name": "payload_jobs_task_slug_idx", + "columns": [ + { + "expression": "task_slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_queue_idx": { + "name": "payload_jobs_queue_idx", + "columns": [ + { + "expression": "queue", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_wait_until_idx": { + "name": "payload_jobs_wait_until_idx", + "columns": [ + { + "expression": "wait_until", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_processing_idx": { + "name": "payload_jobs_processing_idx", + "columns": [ + { + "expression": "processing", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_updated_at_idx": { + "name": "payload_jobs_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_jobs_created_at_idx": { + "name": "payload_jobs_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_locked_documents": { + "name": "payload_locked_documents", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "global_slug": { + "name": "global_slug", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_locked_documents_global_slug_idx": { + "name": "payload_locked_documents_global_slug_idx", + "columns": [ + { + "expression": "global_slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_updated_at_idx": { + "name": "payload_locked_documents_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_created_at_idx": { + "name": "payload_locked_documents_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_locked_documents_rels": { + "name": "payload_locked_documents_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "media_id": { + "name": "media_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "navbar_items_id": { + "name": "navbar_items_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "sections_id": { + "name": "sections_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "footer_id": { + "name": "footer_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "cookie_banner_id": { + "name": "cookie_banner_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "pages_id": { + "name": "pages_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "features_id": { + "name": "features_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "jobs_id": { + "name": "jobs_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "blog_id": { + "name": "blog_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "roadmap_items_id": { + "name": "roadmap_items_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "team_members_id": { + "name": "team_members_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "payload_locked_documents_rels_order_idx": { + "name": "payload_locked_documents_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_parent_idx": { + "name": "payload_locked_documents_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_path_idx": { + "name": "payload_locked_documents_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_users_id_idx": { + "name": "payload_locked_documents_rels_users_id_idx", + "columns": [ + { + "expression": "users_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_media_id_idx": { + "name": "payload_locked_documents_rels_media_id_idx", + "columns": [ + { + "expression": "media_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_navbar_items_id_idx": { + "name": "payload_locked_documents_rels_navbar_items_id_idx", + "columns": [ + { + "expression": "navbar_items_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_sections_id_idx": { + "name": "payload_locked_documents_rels_sections_id_idx", + "columns": [ + { + "expression": "sections_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_footer_id_idx": { + "name": "payload_locked_documents_rels_footer_id_idx", + "columns": [ + { + "expression": "footer_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_cookie_banner_id_idx": { + "name": "payload_locked_documents_rels_cookie_banner_id_idx", + "columns": [ + { + "expression": "cookie_banner_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_pages_id_idx": { + "name": "payload_locked_documents_rels_pages_id_idx", + "columns": [ + { + "expression": "pages_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_features_id_idx": { + "name": "payload_locked_documents_rels_features_id_idx", + "columns": [ + { + "expression": "features_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_jobs_id_idx": { + "name": "payload_locked_documents_rels_jobs_id_idx", + "columns": [ + { + "expression": "jobs_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_blog_id_idx": { + "name": "payload_locked_documents_rels_blog_id_idx", + "columns": [ + { + "expression": "blog_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_roadmap_items_id_idx": { + "name": "payload_locked_documents_rels_roadmap_items_id_idx", + "columns": [ + { + "expression": "roadmap_items_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_team_members_id_idx": { + "name": "payload_locked_documents_rels_team_members_id_idx", + "columns": [ + { + "expression": "team_members_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "payload_locked_documents_rels_parent_fk": { + "name": "payload_locked_documents_rels_parent_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "payload_locked_documents", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_users_fk": { + "name": "payload_locked_documents_rels_users_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_media_fk": { + "name": "payload_locked_documents_rels_media_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "media", + "columnsFrom": [ + "media_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_navbar_items_fk": { + "name": "payload_locked_documents_rels_navbar_items_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "navbar_items", + "columnsFrom": [ + "navbar_items_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_sections_fk": { + "name": "payload_locked_documents_rels_sections_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "sections", + "columnsFrom": [ + "sections_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_footer_fk": { + "name": "payload_locked_documents_rels_footer_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "footer", + "columnsFrom": [ + "footer_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_cookie_banner_fk": { + "name": "payload_locked_documents_rels_cookie_banner_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "cookie_banner", + "columnsFrom": [ + "cookie_banner_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_pages_fk": { + "name": "payload_locked_documents_rels_pages_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "pages", + "columnsFrom": [ + "pages_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_features_fk": { + "name": "payload_locked_documents_rels_features_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "features", + "columnsFrom": [ + "features_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_jobs_fk": { + "name": "payload_locked_documents_rels_jobs_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "jobs", + "columnsFrom": [ + "jobs_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_blog_fk": { + "name": "payload_locked_documents_rels_blog_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "blog", + "columnsFrom": [ + "blog_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_roadmap_items_fk": { + "name": "payload_locked_documents_rels_roadmap_items_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "roadmap_items", + "columnsFrom": [ + "roadmap_items_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_team_members_fk": { + "name": "payload_locked_documents_rels_team_members_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "team_members", + "columnsFrom": [ + "team_members_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_preferences": { + "name": "payload_preferences", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "key": { + "name": "key", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "value": { + "name": "value", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_preferences_key_idx": { + "name": "payload_preferences_key_idx", + "columns": [ + { + "expression": "key", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_updated_at_idx": { + "name": "payload_preferences_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_created_at_idx": { + "name": "payload_preferences_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_preferences_rels": { + "name": "payload_preferences_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "payload_preferences_rels_order_idx": { + "name": "payload_preferences_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_parent_idx": { + "name": "payload_preferences_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_path_idx": { + "name": "payload_preferences_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_users_id_idx": { + "name": "payload_preferences_rels_users_id_idx", + "columns": [ + { + "expression": "users_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "payload_preferences_rels_parent_fk": { + "name": "payload_preferences_rels_parent_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "payload_preferences", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_preferences_rels_users_fk": { + "name": "payload_preferences_rels_users_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_migrations": { + "name": "payload_migrations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "batch": { + "name": "batch", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_migrations_updated_at_idx": { + "name": "payload_migrations_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_migrations_created_at_idx": { + "name": "payload_migrations_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public._locales": { + "name": "_locales", + "schema": "public", + "values": [ + "en", + "de" + ] + }, + "public.enum_navbar_items_sub_menu_icon": { + "name": "enum_navbar_items_sub_menu_icon", + "schema": "public", + "values": [ + "cube", + "gitBranch", + "lock" + ] + }, + "public.enum_navbar_items_sub_menu_color": { + "name": "enum_navbar_items_sub_menu_color", + "schema": "public", + "values": [ + "brand", + "pink", + "yellow", + "aqua", + "blue" + ] + }, + "public.enum_sections_section_type": { + "name": "enum_sections_section_type", + "schema": "public", + "values": [ + "AppFeatureSection", + "FaqSection", + "RoadmapSection", + "RuntimeFeatureSection", + "UseCaseSection", + "DeploymentSection" + ] + }, + "public.enum_footer_social_links_platform": { + "name": "enum_footer_social_links_platform", + "schema": "public", + "values": [ + "instagram", + "discord", + "x", + "github" + ] + }, + "public.enum_pages_blocks_hero_buttons_variant": { + "name": "enum_pages_blocks_hero_buttons_variant", + "schema": "public", + "values": [ + "none", + "normal", + "outlined", + "filled" + ] + }, + "public.enum_pages_slug": { + "name": "enum_pages_slug", + "schema": "public", + "values": [ + "main", + "jobs", + "features", + "about-us", + "legal-notice", + "privacy", + "terms", + "contact" + ] + }, + "public.enum_features_slug": { + "name": "enum_features_slug", + "schema": "public", + "values": [ + "projects", + "role-system", + "member-management", + "organizations", + "suggestion-menu", + "nodes", + "runtime-types", + "action-list" + ] + }, + "public.enum_jobs_category": { + "name": "enum_jobs_category", + "schema": "public", + "values": [ + "engineering", + "marketing", + "design", + "product", + "sales", + "operations" + ] + }, + "public.enum_jobs_type": { + "name": "enum_jobs_type", + "schema": "public", + "values": [ + "full-time", + "part-time", + "contract", + "internship", + "working-student", + "freelance" + ] + }, + "public.enum_jobs_location": { + "name": "enum_jobs_location", + "schema": "public", + "values": [ + "remote", + "hybrid", + "leipzig", + "solingen" + ] + }, + "public.enum_exports_format": { + "name": "enum_exports_format", + "schema": "public", + "values": [ + "csv", + "json" + ] + }, + "public.enum_exports_sort_order": { + "name": "enum_exports_sort_order", + "schema": "public", + "values": [ + "asc", + "desc" + ] + }, + "public.enum_exports_locale": { + "name": "enum_exports_locale", + "schema": "public", + "values": [ + "all", + "en", + "de" + ] + }, + "public.enum_exports_drafts": { + "name": "enum_exports_drafts", + "schema": "public", + "values": [ + "yes", + "no" + ] + }, + "public.enum_imports_import_mode": { + "name": "enum_imports_import_mode", + "schema": "public", + "values": [ + "create", + "update", + "upsert" + ] + }, + "public.enum_imports_status": { + "name": "enum_imports_status", + "schema": "public", + "values": [ + "pending", + "completed", + "partial", + "failed" + ] + }, + "public.enum_payload_jobs_log_task_slug": { + "name": "enum_payload_jobs_log_task_slug", + "schema": "public", + "values": [ + "inline", + "createCollectionExport", + "createCollectionImport" + ] + }, + "public.enum_payload_jobs_log_state": { + "name": "enum_payload_jobs_log_state", + "schema": "public", + "values": [ + "failed", + "succeeded" + ] + }, + "public.enum_payload_jobs_task_slug": { + "name": "enum_payload_jobs_task_slug", + "schema": "public", + "values": [ + "inline", + "createCollectionExport", + "createCollectionImport" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "id": "0e5376a4-37e8-4b35-8e13-67380270128c", + "prevId": "00000000-0000-0000-0000-000000000000" +} \ No newline at end of file diff --git a/src/migrations/20260402_104807_003_seo_and_ogimage.ts b/src/migrations/20260402_104807_003_seo_and_ogimage.ts new file mode 100644 index 00000000..a3f5807f --- /dev/null +++ b/src/migrations/20260402_104807_003_seo_and_ogimage.ts @@ -0,0 +1,45 @@ +import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres' + +export async function up({ db, payload, req }: MigrateUpArgs): Promise { + await db.execute(sql` + ALTER TABLE "blog" DROP CONSTRAINT "blog_og_image_id_media_id_fk"; + + ALTER TABLE "blog" DROP CONSTRAINT "blog_twitter_image_id_media_id_fk"; + + DROP INDEX "blog_og_image_idx"; + DROP INDEX "blog_twitter_image_idx"; + ALTER TABLE "pages_locales" ADD COLUMN "meta_title" varchar; + ALTER TABLE "pages_locales" ADD COLUMN "meta_description" varchar; + ALTER TABLE "pages_locales" ADD COLUMN "meta_image_id" integer; + ALTER TABLE "blog_locales" ADD COLUMN "meta_title" varchar; + ALTER TABLE "blog_locales" ADD COLUMN "meta_image_id" integer; + ALTER TABLE "pages_locales" ADD CONSTRAINT "pages_locales_meta_image_id_media_id_fk" FOREIGN KEY ("meta_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; + ALTER TABLE "blog_locales" ADD CONSTRAINT "blog_locales_meta_image_id_media_id_fk" FOREIGN KEY ("meta_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; + CREATE INDEX "pages_meta_meta_image_idx" ON "pages_locales" USING btree ("meta_image_id","_locale"); + CREATE INDEX "blog_meta_meta_image_idx" ON "blog_locales" USING btree ("meta_image_id","_locale"); + ALTER TABLE "blog" DROP COLUMN "og_image_id"; + ALTER TABLE "blog" DROP COLUMN "twitter_image_id"; + ALTER TABLE "blog_locales" DROP COLUMN "meta_keywords";`) +} + +export async function down({ db, payload, req }: MigrateDownArgs): Promise { + await db.execute(sql` + ALTER TABLE "pages_locales" DROP CONSTRAINT "pages_locales_meta_image_id_media_id_fk"; + + ALTER TABLE "blog_locales" DROP CONSTRAINT "blog_locales_meta_image_id_media_id_fk"; + + DROP INDEX "pages_meta_meta_image_idx"; + DROP INDEX "blog_meta_meta_image_idx"; + ALTER TABLE "blog" ADD COLUMN "og_image_id" integer; + ALTER TABLE "blog" ADD COLUMN "twitter_image_id" integer; + ALTER TABLE "blog_locales" ADD COLUMN "meta_keywords" varchar; + ALTER TABLE "blog" ADD CONSTRAINT "blog_og_image_id_media_id_fk" FOREIGN KEY ("og_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; + ALTER TABLE "blog" ADD CONSTRAINT "blog_twitter_image_id_media_id_fk" FOREIGN KEY ("twitter_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; + CREATE INDEX "blog_og_image_idx" ON "blog" USING btree ("og_image_id"); + CREATE INDEX "blog_twitter_image_idx" ON "blog" USING btree ("twitter_image_id"); + ALTER TABLE "pages_locales" DROP COLUMN "meta_title"; + ALTER TABLE "pages_locales" DROP COLUMN "meta_description"; + ALTER TABLE "pages_locales" DROP COLUMN "meta_image_id"; + ALTER TABLE "blog_locales" DROP COLUMN "meta_title"; + ALTER TABLE "blog_locales" DROP COLUMN "meta_image_id";`) +} diff --git a/src/migrations/index.ts b/src/migrations/index.ts index 9684fd4b..b27d3575 100644 --- a/src/migrations/index.ts +++ b/src/migrations/index.ts @@ -2,6 +2,7 @@ import * as migration_20260317_192332_initial_schema from './20260317_192332_ini import * as migration_20260320_051848_001_badgelink_usecaseimage from './20260320_051848_001_badgelink_usecaseimage'; import * as migration_20260320_182515_002_usecases_link from './20260320_182515_002_usecases_link'; import * as migration_20260325_072831_002_cookiebanner_and_teammembers from './20260325_072831_002_cookiebanner_and_teammembers'; +import * as migration_20260402_104807_003_seo_and_ogimage from './20260402_104807_003_seo_and_ogimage'; export const migrations = [ { @@ -22,6 +23,11 @@ export const migrations = [ { up: migration_20260325_072831_002_cookiebanner_and_teammembers.up, down: migration_20260325_072831_002_cookiebanner_and_teammembers.down, - name: '20260325_072831_002_cookiebanner_and_teammembers' + name: '20260325_072831_002_cookiebanner_and_teammembers', + }, + { + up: migration_20260402_104807_003_seo_and_ogimage.up, + down: migration_20260402_104807_003_seo_and_ogimage.down, + name: '20260402_104807_003_seo_and_ogimage' }, ]; diff --git a/src/payload-types.ts b/src/payload-types.ts index 8a102a8a..eac4077c 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -477,6 +477,14 @@ export interface Page { } )[] | null; + meta?: { + title?: string | null; + description?: string | null; + /** + * Maximum upload file size: 12MB. Recommended file size for images is <500KB. + */ + image?: (number | null) | Media; + }; updatedAt: string; createdAt: string; } @@ -564,14 +572,13 @@ export interface Blog { }; shortDescription?: string | null; heroImage?: (number | null) | Media; - ogImage?: (number | null) | Media; - twitterImage?: (number | null) | Media; meta?: { + title?: string | null; description?: string | null; /** - * Comma-separated keywords for SEO metadata. + * Maximum upload file size: 12MB. Recommended file size for images is <500KB. */ - keywords?: string | null; + image?: (number | null) | Media; }; updatedAt: string; createdAt: string; @@ -1228,6 +1235,13 @@ export interface PagesSelect { blockName?: T; }; }; + meta?: + | T + | { + title?: T; + description?: T; + image?: T; + }; updatedAt?: T; createdAt?: T; } @@ -1275,13 +1289,12 @@ export interface BlogSelect { content?: T; shortDescription?: T; heroImage?: T; - ogImage?: T; - twitterImage?: T; meta?: | T | { + title?: T; description?: T; - keywords?: T; + image?: T; }; updatedAt?: T; createdAt?: T; diff --git a/src/payload.config.ts b/src/payload.config.ts index 5cf3c7e2..537a8b4e 100644 --- a/src/payload.config.ts +++ b/src/payload.config.ts @@ -1,6 +1,7 @@ import { postgresAdapter } from '@payloadcms/db-postgres' import { nodemailerAdapter } from '@payloadcms/email-nodemailer' import { importExportPlugin } from '@payloadcms/plugin-import-export' +import { seoPlugin } from '@payloadcms/plugin-seo' import { BlocksFeature, CodeBlock, FixedToolbarFeature, lexicalEditor } from '@payloadcms/richtext-lexical' import path from 'path' import { buildConfig } from 'payload' @@ -96,6 +97,33 @@ export default buildConfig({ { slug: 'roadmapItems' }, { slug: 'team-members' } ] + }), + seoPlugin({ + collections: [ + 'pages', + 'blog' + ], + uploadsCollection: 'media', + generateTitle: ({ doc }) => doc?.title, + generateDescription: ({ doc }) => doc?.shortDescription, + generateImage: ({ doc }) => doc?.heroImage, + generateURL: ({ collectionConfig, doc, locale }) => { + if (!doc?.slug || !locale) return '' + + const baseUrl = process.env.NEXT_PUBLIC_APP_URL?.trim() || 'https://code0.tech' + const normalizedBaseUrl = baseUrl.replace(/\/$/, '') + + if (collectionConfig?.slug === 'blog') { + return `${normalizedBaseUrl}/${locale}/blog/${doc.slug}` + } + + if (collectionConfig?.slug === 'pages') { + const pagePath = doc.slug === 'main' ? `/${locale}` : `/${locale}/${doc.slug}` + return `${normalizedBaseUrl}${pagePath}` + } + + return '' + }, }) ], })