Widgets

All available widgets

Business Platform - Widget Catalog

This document describes the widget system itself and all available widgets in the Business Platform.

Widget System

Widgets are the building blocks of applications in this platform. Each widget:

  • Has a unique name identifier (e.g., "Text", "Dashboard", "DataView")
  • Belongs to a category (layout, content, data, form, navigation, input, utility)
  • Can be configured via JSON schema
  • Is registered in the widget registry

Usage

To use a widget in your application:

  1. Reference it by its name in your configuration
  2. Provide the required configuration properties as defined in its schema
  3. The widget will be dynamically loaded and rendered

Categories

  • layout: Structural components for page organization (Container, Dashboard, AppShell, Tabs)
  • content: Display components for text, images, and rich content (Text, Image, EditorJS, Button)
  • data: Data visualization and management (DataView, EntityEditor, NumberStats, Todo)
  • form: Form input components
  • navigation: Navigation and mapping components (AddressCard, Maps)
  • input: User input components (QRCodeScanner)
  • utility: Utility widgets (IPForwarder, Kiosk, PushNotificationSubscription)

Event Stream Widgets

Special category of widgets for real-time collaboration:

  • EventStreamChatMessages: Real-time messaging
  • EventStreamMap: Location sharing
  • EventStreamPinBoard: Collaborative pin board
  • EventStreamTimeline: Event timeline
  • EventStreamImageGallery: Image sharing
  • EventStreamSettings: User settings for event streams

These widgets use SignalDB for real-time synchronization and support anonymous participation with localStorage-based usernames.

Available Widgets

Widget: Text

Title: Text Category: content Description (EN): A simple text display widget for showing static or dynamic text content with configurable formatting and support for Text Replacer syntax. Description (DE): Ein einfaches Text-Anzeige-Widget zum Anzeigen von statischem oder dynamischem Textinhalt mit konfigurierbarer Formatierung und Unterstützung für Text-Replacer-Syntax. Configuration Schema:

{
  "type": "object",
  "properties": {
    "text": {
      "type": "object",
      "title": "Text",
      "properties": {},
      "default": {
        "en": "Hello World",
        "de": "Hallo Welt"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    }
  }
}

Widget: Countdown

Title: Countdown Category: content Description (EN): Counts down to a configured end time and stops at zero. Description (DE): Zählt sichtbar auf einen konfigurierten Endzeitpunkt herunter und bleibt bei null stehen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "endTime": {
      "type": "number",
      "title": "End Time",
      "description": "Target date/time the widget counts down to",
      "x-type-schema": {
        "inputWidget": "DateTimeInputWidget",
        "viewWidget": {
          "name": "DateTimeViewWidget"
        }
      }
    },
    "completedText": {
      "type": "object",
      "title": "Completed Text",
      "properties": {},
      "default": {
        "en": "Time's up!",
        "de": "Zeit abgelaufen!"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    }
  },
  "required": [
    "endTime"
  ]
}

Widget: Image

Title: Bild Category: content Description (EN): Display internal or external images with configurable sizing, alt text support for accessibility, and responsive options. Description (DE): Zeigt interne oder externe Bilder mit konfigurierbarer Größe, Alt-Text-Unterstützung für Barrierefreiheit und responsiven Optionen an. Configuration Schema:

{
  "type": "object",
  "properties": {
    "imageSrc": {
      "type": "string",
      "title": "Image URL",
      "default": "https://placehold.co/150x150?text=Image"
    },
    "imageAlt": {
      "type": "string",
      "title": "Bild Text",
      "description": "Der Text, der angezeigt wird, wenn das Bild nicht geladen werden kann."
    },
    "width": {
      "type": "string",
      "title": "Breite",
      "description": "Breite des Bildes (z.B. '100px', '50%')"
    },
    "height": {
      "type": "string",
      "title": "Höhe",
      "description": "Höhe des Bildes (z.B. '100px', 'auto')"
    }
  }
}

Widget: Container

Title: Container Category: layout Description (EN): A layout container for organizing other widgets horizontally or vertically with configurable alignment, spacing, and justify options. Description (DE): Ein Layout-Container zum horizontalen oder vertikalen Organisieren anderer Widgets mit konfigurierbarer Ausrichtung, Abstand und Justify-Optionen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "align": {
      "type": "string",
      "title": "Ausrichtung",
      "description": "Die Ausrichtung des Containers",
      "enum": [
        "horizontally",
        "vertically"
      ],
      "default": "vertically"
    },
    "direction": {
      "type": "string",
      "title": "Richtung",
      "description": "Die Richtung, in der die Widgets angeordnet werden",
      "enum": [
        "horizontal",
        "vertical"
      ],
      "default": "vertical"
    },
    "gap": {
      "type": "string",
      "title": "Abstand",
      "description": "Der Abstand zwischen den Widgets",
      "default": "1rem"
    },
    "justify": {
      "type": "string",
      "title": "Horizontale Ausrichtung",
      "enum": [
        "start",
        "center",
        "end",
        "space-between",
        "space-around"
      ],
      "default": "start"
    }
  }
}

Widget: TwoLayer

Title: Two Layer Category: layout Description (EN): A layout widget that stacks two layers: a background and a foreground placed on top of it. Sizes itself to the larger of the two layers. Description (DE): Ein Layout-Widget, das zwei Ebenen übereinander legt: einen Hintergrund und einen darüber positionierten Vordergrund. Die Größe richtet sich nach der größeren der beiden Ebenen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "foregroundPosition": {
      "type": "string",
      "title": "Foreground Position",
      "description": "Where the foreground layer is placed over the background layer",
      "enum": [
        "center",
        "top",
        "bottom",
        "left",
        "right",
        "top-left",
        "top-right",
        "bottom-left",
        "bottom-right"
      ],
      "default": "center"
    },
    "padding": {
      "type": "string",
      "title": "Foreground Padding",
      "description": "CSS padding applied around the foreground layer (e.g. 1rem)",
      "default": "0px"
    },
    "fullHeight": {
      "type": "boolean",
      "title": "Full Height",
      "description": "Make the widget fill the full viewport height (uses 100dvh — keeps the page scrollable)",
      "default": false
    }
  }
}

Widget: FixedContent

Title: Fixed Content Category: layout Description (EN): A layout widget whose content stays visible while scrolling (sticky) — e.g. a table of contents beside a long page. Description (DE): Ein Layout-Widget, dessen Inhalt beim Scrollen sichtbar bleibt (sticky) — z. B. ein Inhaltsverzeichnis neben einer langen Seite. Configuration Schema:

{
  "type": "object",
  "properties": {
    "stickTo": {
      "type": "string",
      "title": "Stick To",
      "description": "Which edge of the scroll container the content sticks to",
      "enum": [
        "top",
        "bottom"
      ],
      "default": "top"
    },
    "offset": {
      "type": "string",
      "title": "Offset",
      "description": "CSS distance kept from the sticky edge while scrolling (e.g. 1rem)",
      "default": "1rem"
    }
  }
}

Widget: Dashboard

Title: Dashboard Category: layout Description (EN): A configurable grid-based dashboard layout for organizing multiple widgets with draggable and resizable components. Description (DE): Ein konfigurierbares gitterbasiertes Dashboard-Layout zum Organisieren mehrerer Widgets mit ziehbaren und Größe-änderbaren Komponenten. Configuration Schema:

{
  "type": "object",
  "properties": {
    "config": {
      "type": "object",
      "title": "Dashboard-Konfiguration",
      "description": "Konfiguration für das Dashboard-Layout und Widgets",
      "properties": {
        "cols": {
          "type": "number",
          "title": "Spalten",
          "description": "Anzahl der Spalten im Dashboard-Grid",
          "default": 3,
          "minimum": 1,
          "maximum": 12
        },
        "rows": {
          "type": "number",
          "title": "Zeilen",
          "description": "Anzahl der Zeilen im Dashboard-Grid",
          "default": 1,
          "minimum": 1,
          "maximum": 12
        },
        "readonly": {
          "type": "boolean",
          "title": "Nur Lesen",
          "description": "Ob das Dashboard bearbeitbar ist",
          "default": true
        },
        "widgets": {
          "type": "array",
          "title": "Widgets",
          "description": "Array der Dashboard-Widgets",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "title": "Widget-ID"
              },
              "name": {
                "type": "string",
                "title": "Widget-Name"
              },
              "position": {
                "type": "object",
                "title": "Position",
                "properties": {
                  "row": {
                    "type": "number",
                    "title": "Zeile"
                  },
                  "col": {
                    "type": "number",
                    "title": "Spalte"
                  },
                  "rowSpan": {
                    "type": "number",
                    "title": "Zeilen-Spanne",
                    "description": "Anzahl der Zeilen, die das Widget überspannt",
                    "default": 1,
                    "minimum": 1
                  },
                  "colSpan": {
                    "type": "number",
                    "title": "Spalten-Spanne",
                    "description": "Anzahl der Spalten, die das Widget überspannt",
                    "default": 1,
                    "minimum": 1
                  }
                },
                "required": [
                  "row",
                  "col"
                ]
              },
              "data": {
                "type": "object",
                "title": "Widget-Daten",
                "description": "Spezifische Daten für das Widget"
              },
              "styles": {
                "type": "object",
                "title": "Styles",
                "description": "CSS-Styles für das Widget"
              },
              "useCardView": {
                "type": "boolean",
                "title": "Card-Ansicht",
                "description": "Ob das Widget in einer Karte dargestellt wird",
                "default": true
              }
            },
            "required": [
              "id",
              "name",
              "position"
            ]
          }
        }
      }
    },
    "readonly": {
      "type": "boolean",
      "title": "Nur Lesen",
      "description": "Ob das gesamte Dashboard nur lesbar ist",
      "default": true
    }
  }
}

Widget: EditorJs

Title: Block-Style Editor Category: content Description (EN): A block-style content editor perfect for creating rich, long-form content with headers, paragraphs, lists, tables, and raw HTML blocks. Description (DE): Ein blockbasierter Inhalts-Editor perfekt zum Erstellen von reichhaltigen, langen Inhalten mit Überschriften, Absätzen, Listen, Tabellen und rohen HTML-Blöcken. Configuration Schema:

{}

Widget: MaxWidthContainer

Title: Maximale Breite Container Category: layout Description (EN): Container with auto maximum width constraints Description (DE): Container mit automatischer maximalen Breitenbeschränkungen Configuration Schema:

{}

Widget: Hero

Title: Hero Category: layout Description (EN): Hero section component with title, subtitle, and image Description (DE): Hero-Abschnitts-Komponente mit Titel, Untertitel und Bild Configuration Schema:

{
  "type": "object",
  "properties": {
    "eyebrow": {
      "type": "string",
      "title": "Eyebrow",
      "description": "Kleiner Label-Text über dem Titel"
    },
    "title": {
      "type": "string",
      "title": "Text",
      "default": "Titel"
    },
    "subTitle": {
      "type": "string",
      "title": "Subtitel",
      "default": "Subtitel"
    },
    "align": {
      "type": "string",
      "title": "Ausrichtung",
      "description": "Ausrichtung des Hero-Inhalts",
      "enum": [
        "start",
        "center"
      ],
      "default": "center",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "start",
                "label": "Links"
              },
              {
                "value": "center",
                "label": "Zentriert"
              }
            ]
          }
        }
      }
    },
    "backgroundStyle": {
      "type": "string",
      "title": "Hintergrund",
      "description": "Hintergrundstil des Hero-Bereichs",
      "enum": [
        "primary-gradient",
        "primary-secondary-accent-gradient",
        "transparent"
      ],
      "default": "primary-gradient",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "primary-gradient",
                "label": "Primär-Verlauf"
              },
              {
                "value": "primary-secondary-accent-gradient",
                "label": "Primär-Sekundär-Akzent-Verlauf"
              },
              {
                "value": "transparent",
                "label": "Transparent"
              }
            ]
          }
        }
      }
    },
    "animation": {
      "type": "string",
      "title": "Animation",
      "description": "Bewegung im Hintergrund des Hero-Bereichs",
      "enum": [
        "none",
        "gradient",
        "bubbles",
        "sparkles",
        "aurora"
      ],
      "default": "none",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "none",
                "label": "Keine"
              },
              {
                "value": "gradient",
                "label": "Verlauf-Bewegung"
              },
              {
                "value": "bubbles",
                "label": "Blasen"
              },
              {
                "value": "sparkles",
                "label": "Funkeln"
              },
              {
                "value": "aurora",
                "label": "Aurora"
              }
            ]
          }
        }
      }
    }
  }
}

Widget: AppShell

Title: App Layout Category: layout Description (EN): A base layout widget for entire applications with header, tab bar, sidebar menu, and content area providing consistent navigation structure. Description (DE): Ein Basis-Layout-Widget für ganze Anwendungen mit Kopfzeile, Tab-Leiste, Seitenmenü und Inhaltsbereich für konsistente Navigationsstruktur. Configuration Schema:

{
  "type": "object",
  "title": "App Layout",
  "properties": {
    "showNavbar": {
      "type": "boolean",
      "title": "Navbar"
    },
    "navbar": {
      "type": "object",
      "title": "Navbar Optionen",
      "properties": {
        "showNavigationAsBurgerMenu": {
          "type": "boolean"
        },
        "showLanguageSelector": {
          "type": "boolean"
        },
        "showAccount": {
          "type": "boolean"
        },
        "showSearch": {
          "type": "boolean"
        },
        "showChat": {
          "type": "boolean"
        },
        "showThemeToggle": {
          "type": "boolean"
        },
        "useSafeArea": {
          "type": "boolean"
        },
        "height": {
          "type": "number"
        },
        "logo": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "imageUrl",
                "icon"
              ],
              "title": "Type",
              "description": "The type of visual representation."
            },
            "url": {
              "type": "string",
              "title": "Image URL",
              "description": "The URL of the image if type is 'imageUrl'."
            },
            "icon": {
              "type": "string",
              "title": "Icon",
              "description": "The icon name if type is 'icon'."
            },
            "width": {
              "type": "string",
              "title": "Width",
              "description": "The width of the visual element."
            },
            "height": {
              "type": "string",
              "title": "Height",
              "description": "The height of the visual element."
            },
            "altText": {
              "type": "string",
              "title": "Alt Text",
              "description": "The alt text for the visual element."
            },
            "iconTextSize": {
              "type": "string",
              "title": "Icon Text Size",
              "description": "The text size for the icon."
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false
        },
        "title": {
          "type": "string"
        },
        "navigation": {
          "type": "object",
          "title": "Navigation",
          "description": "Navigation entries to be displayed in the app shell.",
          "properties": {
            "entries": {
              "type": "array",
              "title": "Entries",
              "description": "List of navigation entries.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "title": "ID",
                    "description": "Unique identifier for the navigation entry."
                  },
                  "text": {
                    "type": "object",
                    "title": "Text",
                    "description": "Text to be displayed for the navigation entry.",
                    "properties": {},
                    "additionalProperties": {
                      "type": "string"
                    },
                    "propertyNames": {
                      "pattern": "^[a-z]{2}$",
                      "title": "Language code",
                      "description": "ISO 639-1 language code"
                    },
                    "x-type-schema": {
                      "inputWidget": "InlineTranslationInputWidget",
                      "viewWidget": {
                        "name": "InlineTranslationViewWidget"
                      },
                      "sampleData": {
                        "generatorName": "faker.custom.i18nWords",
                        "generatorContext": {
                          "minWords": 1,
                          "maxWords": 3
                        }
                      }
                    }
                  },
                  "link": {
                    "type": "string",
                    "title": "Link",
                    "description": "Link to be navigated to when the entry is clicked."
                  },
                  "icon": {
                    "type": "string",
                    "title": "Icon",
                    "description": "Icon to be displayed for the navigation entry."
                  },
                  "index": {
                    "type": "number",
                    "title": "Index",
                    "description": "Index to determine the order of the navigation entries."
                  },
                  "type": {
                    "type": "string",
                    "title": "Type",
                    "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                    "enum": [
                      "link",
                      "divider",
                      "languageSelector",
                      "header"
                    ],
                    "default": "link"
                  },
                  "entries": {
                    "type": "array",
                    "title": "Entries",
                    "description": "List of navigation entries.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "title": "ID",
                          "description": "Unique identifier for the navigation entry."
                        },
                        "text": {
                          "type": "object",
                          "title": "Text",
                          "description": "Text to be displayed for the navigation entry.",
                          "properties": {},
                          "additionalProperties": {
                            "type": "string"
                          },
                          "propertyNames": {
                            "pattern": "^[a-z]{2}$",
                            "title": "Language code",
                            "description": "ISO 639-1 language code"
                          },
                          "x-type-schema": {
                            "inputWidget": "InlineTranslationInputWidget",
                            "viewWidget": {
                              "name": "InlineTranslationViewWidget"
                            },
                            "sampleData": {
                              "generatorName": "faker.custom.i18nWords",
                              "generatorContext": {
                                "minWords": 1,
                                "maxWords": 3
                              }
                            }
                          }
                        },
                        "link": {
                          "type": "string",
                          "title": "Link",
                          "description": "Link to be navigated to when the entry is clicked."
                        },
                        "icon": {
                          "type": "string",
                          "title": "Icon",
                          "description": "Icon to be displayed for the navigation entry."
                        },
                        "index": {
                          "type": "number",
                          "title": "Index",
                          "description": "Index to determine the order of the navigation entries."
                        },
                        "type": {
                          "type": "string",
                          "title": "Type",
                          "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                          "enum": [
                            "link",
                            "divider",
                            "languageSelector",
                            "header"
                          ],
                          "default": "link"
                        },
                        "entries": {
                          "type": "array",
                          "title": "Entries",
                          "description": "List of navigation entries.",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "title": "ID",
                                "description": "Unique identifier for the navigation entry."
                              },
                              "text": {
                                "type": "object",
                                "title": "Text",
                                "description": "Text to be displayed for the navigation entry.",
                                "properties": {},
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "propertyNames": {
                                  "pattern": "^[a-z]{2}$",
                                  "title": "Language code",
                                  "description": "ISO 639-1 language code"
                                },
                                "x-type-schema": {
                                  "inputWidget": "InlineTranslationInputWidget",
                                  "viewWidget": {
                                    "name": "InlineTranslationViewWidget"
                                  },
                                  "sampleData": {
                                    "generatorName": "faker.custom.i18nWords",
                                    "generatorContext": {
                                      "minWords": 1,
                                      "maxWords": 3
                                    }
                                  }
                                }
                              },
                              "link": {
                                "type": "string",
                                "title": "Link",
                                "description": "Link to be navigated to when the entry is clicked."
                              },
                              "icon": {
                                "type": "string",
                                "title": "Icon",
                                "description": "Icon to be displayed for the navigation entry."
                              },
                              "index": {
                                "type": "number",
                                "title": "Index",
                                "description": "Index to determine the order of the navigation entries."
                              },
                              "type": {
                                "type": "string",
                                "title": "Type",
                                "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                                "enum": [
                                  "link",
                                  "divider",
                                  "languageSelector",
                                  "header"
                                ],
                                "default": "link"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "additionalProperties": false,
      "x-type-schema": {
        "rules": [
          {
            "action": "hide",
            "if": {
              "dataPath": "../showNavbar",
              "operator": "notEquals",
              "value": true
            }
          }
        ]
      }
    },
    "showSideNavbar": {
      "type": "boolean",
      "title": "Sidebar"
    },
    "sideNavbar": {
      "type": "object",
      "properties": {
        "sidebarLogo": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "imageUrl",
                "icon"
              ],
              "title": "Type",
              "description": "The type of visual representation."
            },
            "url": {
              "type": "string",
              "title": "Image URL",
              "description": "The URL of the image if type is 'imageUrl'."
            },
            "icon": {
              "type": "string",
              "title": "Icon",
              "description": "The icon name if type is 'icon'."
            },
            "width": {
              "type": "string",
              "title": "Width",
              "description": "The width of the visual element."
            },
            "height": {
              "type": "string",
              "title": "Height",
              "description": "The height of the visual element."
            },
            "altText": {
              "type": "string",
              "title": "Alt Text",
              "description": "The alt text for the visual element."
            },
            "iconTextSize": {
              "type": "string",
              "title": "Icon Text Size",
              "description": "The text size for the icon."
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false
        },
        "width": {
          "type": "number",
          "description": "The width of the side navbar"
        },
        "fullWidth": {
          "type": "boolean",
          "description": "If true, the side navbar will be full width"
        },
        "title": {
          "type": "string",
          "description": "The title to show in the side navbar"
        },
        "navigation": {
          "type": "object",
          "title": "Navigation",
          "description": "Navigation entries to be displayed in the app shell.",
          "properties": {
            "entries": {
              "type": "array",
              "title": "Entries",
              "description": "List of navigation entries.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "title": "ID",
                    "description": "Unique identifier for the navigation entry."
                  },
                  "text": {
                    "type": "object",
                    "title": "Text",
                    "description": "Text to be displayed for the navigation entry.",
                    "properties": {},
                    "additionalProperties": {
                      "type": "string"
                    },
                    "propertyNames": {
                      "pattern": "^[a-z]{2}$",
                      "title": "Language code",
                      "description": "ISO 639-1 language code"
                    },
                    "x-type-schema": {
                      "inputWidget": "InlineTranslationInputWidget",
                      "viewWidget": {
                        "name": "InlineTranslationViewWidget"
                      },
                      "sampleData": {
                        "generatorName": "faker.custom.i18nWords",
                        "generatorContext": {
                          "minWords": 1,
                          "maxWords": 3
                        }
                      }
                    }
                  },
                  "link": {
                    "type": "string",
                    "title": "Link",
                    "description": "Link to be navigated to when the entry is clicked."
                  },
                  "icon": {
                    "type": "string",
                    "title": "Icon",
                    "description": "Icon to be displayed for the navigation entry."
                  },
                  "index": {
                    "type": "number",
                    "title": "Index",
                    "description": "Index to determine the order of the navigation entries."
                  },
                  "type": {
                    "type": "string",
                    "title": "Type",
                    "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                    "enum": [
                      "link",
                      "divider",
                      "languageSelector",
                      "header"
                    ],
                    "default": "link"
                  },
                  "entries": {
                    "type": "array",
                    "title": "Entries",
                    "description": "List of navigation entries.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "title": "ID",
                          "description": "Unique identifier for the navigation entry."
                        },
                        "text": {
                          "type": "object",
                          "title": "Text",
                          "description": "Text to be displayed for the navigation entry.",
                          "properties": {},
                          "additionalProperties": {
                            "type": "string"
                          },
                          "propertyNames": {
                            "pattern": "^[a-z]{2}$",
                            "title": "Language code",
                            "description": "ISO 639-1 language code"
                          },
                          "x-type-schema": {
                            "inputWidget": "InlineTranslationInputWidget",
                            "viewWidget": {
                              "name": "InlineTranslationViewWidget"
                            },
                            "sampleData": {
                              "generatorName": "faker.custom.i18nWords",
                              "generatorContext": {
                                "minWords": 1,
                                "maxWords": 3
                              }
                            }
                          }
                        },
                        "link": {
                          "type": "string",
                          "title": "Link",
                          "description": "Link to be navigated to when the entry is clicked."
                        },
                        "icon": {
                          "type": "string",
                          "title": "Icon",
                          "description": "Icon to be displayed for the navigation entry."
                        },
                        "index": {
                          "type": "number",
                          "title": "Index",
                          "description": "Index to determine the order of the navigation entries."
                        },
                        "type": {
                          "type": "string",
                          "title": "Type",
                          "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                          "enum": [
                            "link",
                            "divider",
                            "languageSelector",
                            "header"
                          ],
                          "default": "link"
                        },
                        "entries": {
                          "type": "array",
                          "title": "Entries",
                          "description": "List of navigation entries.",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "title": "ID",
                                "description": "Unique identifier for the navigation entry."
                              },
                              "text": {
                                "type": "object",
                                "title": "Text",
                                "description": "Text to be displayed for the navigation entry.",
                                "properties": {},
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "propertyNames": {
                                  "pattern": "^[a-z]{2}$",
                                  "title": "Language code",
                                  "description": "ISO 639-1 language code"
                                },
                                "x-type-schema": {
                                  "inputWidget": "InlineTranslationInputWidget",
                                  "viewWidget": {
                                    "name": "InlineTranslationViewWidget"
                                  },
                                  "sampleData": {
                                    "generatorName": "faker.custom.i18nWords",
                                    "generatorContext": {
                                      "minWords": 1,
                                      "maxWords": 3
                                    }
                                  }
                                }
                              },
                              "link": {
                                "type": "string",
                                "title": "Link",
                                "description": "Link to be navigated to when the entry is clicked."
                              },
                              "icon": {
                                "type": "string",
                                "title": "Icon",
                                "description": "Icon to be displayed for the navigation entry."
                              },
                              "index": {
                                "type": "number",
                                "title": "Index",
                                "description": "Index to determine the order of the navigation entries."
                              },
                              "type": {
                                "type": "string",
                                "title": "Type",
                                "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                                "enum": [
                                  "link",
                                  "divider",
                                  "languageSelector",
                                  "header"
                                ],
                                "default": "link"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "x-type-schema": {
        "rules": [
          {
            "action": "hide",
            "if": {
              "dataPath": "../showSideNavbar",
              "operator": "notEquals",
              "value": true
            }
          }
        ]
      }
    },
    "showTabNavbar": {
      "type": "boolean",
      "title": "Tab Bar"
    },
    "tabNavbar": {
      "type": "object",
      "title": "Tab Navigation",
      "properties": {
        "showText": {
          "type": "boolean",
          "title": "Zeige Text unter den Icons"
        },
        "showSuperBtn": {
          "type": "boolean"
        },
        "height": {
          "type": "number",
          "title": "Höhe der Tab-Leiste"
        },
        "useSafeArea": {
          "type": "boolean"
        },
        "bgColor": {
          "type": "string",
          "title": "Hintergrundfarbe"
        },
        "textColor": {
          "type": "string",
          "title": "Textfarbe"
        },
        "navigation": {
          "type": "object",
          "title": "Navigation",
          "description": "Navigation entries to be displayed in the app shell.",
          "properties": {
            "entries": {
              "type": "array",
              "title": "Entries",
              "description": "List of navigation entries.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "title": "ID",
                    "description": "Unique identifier for the navigation entry."
                  },
                  "text": {
                    "type": "object",
                    "title": "Text",
                    "description": "Text to be displayed for the navigation entry.",
                    "properties": {},
                    "additionalProperties": {
                      "type": "string"
                    },
                    "propertyNames": {
                      "pattern": "^[a-z]{2}$",
                      "title": "Language code",
                      "description": "ISO 639-1 language code"
                    },
                    "x-type-schema": {
                      "inputWidget": "InlineTranslationInputWidget",
                      "viewWidget": {
                        "name": "InlineTranslationViewWidget"
                      },
                      "sampleData": {
                        "generatorName": "faker.custom.i18nWords",
                        "generatorContext": {
                          "minWords": 1,
                          "maxWords": 3
                        }
                      }
                    }
                  },
                  "link": {
                    "type": "string",
                    "title": "Link",
                    "description": "Link to be navigated to when the entry is clicked."
                  },
                  "icon": {
                    "type": "string",
                    "title": "Icon",
                    "description": "Icon to be displayed for the navigation entry."
                  },
                  "index": {
                    "type": "number",
                    "title": "Index",
                    "description": "Index to determine the order of the navigation entries."
                  },
                  "type": {
                    "type": "string",
                    "title": "Type",
                    "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                    "enum": [
                      "link",
                      "divider",
                      "languageSelector",
                      "header"
                    ],
                    "default": "link"
                  },
                  "entries": {
                    "type": "array",
                    "title": "Entries",
                    "description": "List of navigation entries.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "title": "ID",
                          "description": "Unique identifier for the navigation entry."
                        },
                        "text": {
                          "type": "object",
                          "title": "Text",
                          "description": "Text to be displayed for the navigation entry.",
                          "properties": {},
                          "additionalProperties": {
                            "type": "string"
                          },
                          "propertyNames": {
                            "pattern": "^[a-z]{2}$",
                            "title": "Language code",
                            "description": "ISO 639-1 language code"
                          },
                          "x-type-schema": {
                            "inputWidget": "InlineTranslationInputWidget",
                            "viewWidget": {
                              "name": "InlineTranslationViewWidget"
                            },
                            "sampleData": {
                              "generatorName": "faker.custom.i18nWords",
                              "generatorContext": {
                                "minWords": 1,
                                "maxWords": 3
                              }
                            }
                          }
                        },
                        "link": {
                          "type": "string",
                          "title": "Link",
                          "description": "Link to be navigated to when the entry is clicked."
                        },
                        "icon": {
                          "type": "string",
                          "title": "Icon",
                          "description": "Icon to be displayed for the navigation entry."
                        },
                        "index": {
                          "type": "number",
                          "title": "Index",
                          "description": "Index to determine the order of the navigation entries."
                        },
                        "type": {
                          "type": "string",
                          "title": "Type",
                          "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                          "enum": [
                            "link",
                            "divider",
                            "languageSelector",
                            "header"
                          ],
                          "default": "link"
                        },
                        "entries": {
                          "type": "array",
                          "title": "Entries",
                          "description": "List of navigation entries.",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "title": "ID",
                                "description": "Unique identifier for the navigation entry."
                              },
                              "text": {
                                "type": "object",
                                "title": "Text",
                                "description": "Text to be displayed for the navigation entry.",
                                "properties": {},
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "propertyNames": {
                                  "pattern": "^[a-z]{2}$",
                                  "title": "Language code",
                                  "description": "ISO 639-1 language code"
                                },
                                "x-type-schema": {
                                  "inputWidget": "InlineTranslationInputWidget",
                                  "viewWidget": {
                                    "name": "InlineTranslationViewWidget"
                                  },
                                  "sampleData": {
                                    "generatorName": "faker.custom.i18nWords",
                                    "generatorContext": {
                                      "minWords": 1,
                                      "maxWords": 3
                                    }
                                  }
                                }
                              },
                              "link": {
                                "type": "string",
                                "title": "Link",
                                "description": "Link to be navigated to when the entry is clicked."
                              },
                              "icon": {
                                "type": "string",
                                "title": "Icon",
                                "description": "Icon to be displayed for the navigation entry."
                              },
                              "index": {
                                "type": "number",
                                "title": "Index",
                                "description": "Index to determine the order of the navigation entries."
                              },
                              "type": {
                                "type": "string",
                                "title": "Type",
                                "description": "Type of the navigation entry. Can be 'link', 'divider', 'languageSelector', or 'header'.",
                                "enum": [
                                  "link",
                                  "divider",
                                  "languageSelector",
                                  "header"
                                ],
                                "default": "link"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "x-type-schema": {
        "rules": [
          {
            "action": "hide",
            "if": {
              "dataPath": "../showTabNavbar",
              "operator": "notEquals",
              "value": true
            }
          }
        ]
      }
    }
  }
}

Widget: SectionHeader

Title: Section Header Category: content Description (EN): Displays a centered section header with title and subtitle. Configurable title and subtitle with support for inline translations. Description (DE): Zeigt eine zentrierte Abschnitts-Kopfzeile mit Titel und Untertitel an. Konfigurierbarer Titel und Untertitel mit Unterstützung für Inline-Übersetzungen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "title": {
      "type": "object",
      "title": "Title",
      "description": "The main title of the section",
      "properties": {},
      "default": {
        "en": "Section Title",
        "de": "Abschnittstitel"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "subtitle": {
      "type": "object",
      "title": "Subtitle",
      "description": "The subtitle of the section",
      "properties": {},
      "default": {
        "en": "Section subtitle",
        "de": "Abschnittsuntertitel"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    }
  },
  "additionalProperties": false
}

Widget: ProductTeaser

Title: Product Teaser Category: content Description (EN): Product showcase card with image, title, description, feature list, and call-to-action button. Perfect for displaying product highlights or service offerings in a grid layout. Description (DE): Produkt-Präsentationskarte mit Bild, Titel, Beschreibung, Feature-Liste und Call-to-Action-Button. Perfekt zum Anzeigen von Produkt-Highlights oder Service-Angeboten in einem Grid-Layout. Configuration Schema:

{
  "type": "object",
  "properties": {
    "title": {
      "type": "object",
      "title": "Title",
      "description": "The product title",
      "properties": {},
      "default": {
        "en": "Product Title",
        "de": "Produkttitel"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "description": {
      "type": "object",
      "title": "Description",
      "description": "The product description",
      "properties": {},
      "default": {
        "en": "Product description",
        "de": "Produktbeschreibung"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "imageUrl": {
      "type": "string",
      "title": "Image URL",
      "description": "URL of the product image",
      "default": "https://placehold.co/600x400?text=Product",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "features": {
      "type": "array",
      "title": "Features",
      "description": "List of product features",
      "items": {
        "type": "object",
        "properties": {
          "text": {
            "type": "object",
            "title": "Feature Text",
            "properties": {},
            "default": {
              "en": "Feature",
              "de": "Funktion"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "ctaText": {
      "type": "object",
      "title": "CTA Text",
      "description": "Call-to-action button text",
      "properties": {},
      "default": {
        "en": "Learn More",
        "de": "Mehr erfahren"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "ctaUrl": {
      "type": "string",
      "title": "CTA URL",
      "description": "Call-to-action button URL (optional)",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: Capabilities

Title: Capabilities Category: content Description (EN): Display platform capabilities or features in a 3-column grid with 3 different visual styles: style1 (gradient cards with colored icon boxes), style2 (horizontal layout), style3 (centered layout). Each capability can have a title, description, icon, and optional click URL. Description (DE): Zeigt Plattform-Funktionen oder Features in einem 3-Spalten-Grid mit 3 verschiedenen visuellen Stilen: style1 (Gradient-Karten mit farbigen Icon-Boxen), style2 (horizontales Layout), style3 (zentriertes Layout). Jede Funktion kann einen Titel, eine Beschreibung, ein Icon und eine optionale Klick-URL haben. Configuration Schema:

{
  "type": "object",
  "properties": {
    "style": {
      "type": "string",
      "title": "Style",
      "description": "Visual style: style1 (gradient card with icon in colored box), style2 (horizontal layout with icon), style3 (centered layout)",
      "enum": [
        "style1",
        "style2",
        "style3"
      ],
      "default": "style1",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "capabilities": {
      "type": "array",
      "title": "Capabilities",
      "description": "List of capabilities to display",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "object",
            "title": "Title",
            "properties": {},
            "default": {
              "en": "Capability",
              "de": "Funktion"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "description": {
            "type": "object",
            "title": "Description",
            "properties": {},
            "default": {
              "en": "Capability description",
              "de": "Funktionsbeschreibung"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "icon": {
            "type": "string",
            "title": "Icon",
            "description": "FontAwesome icon class (e.g. 'fa-database')",
            "default": "fa-star",
            "x-type-schema": {
              "inputWidget": "FontAwesomeIconInputWidget",
              "inputWidgetConfiguration": {
                "fontAwesomeIcon": {
                  "allowProIcons": true
                }
              }
            }
          },
          "clickUrl": {
            "type": "string",
            "title": "Click URL",
            "description": "Optional URL to navigate to on click",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: SmallstackWebsiteHome

Title: Smallstack Website Homepage Category: content Description (EN): Homepage widget for Smallstack marketing website with hero, template showcases, platform capabilities, and CTAs Description (DE): Homepage-Widget für die Smallstack Marketing-Website mit Hero, Template-Showcases, Plattform-Funktionen und CTAs Configuration Schema:

{}

Widget: SmallstackWebsiteContact

Title: Smallstack Website Contact Category: content Description (EN): Contact widget for Smallstack marketing website with hero, template showcases, platform capabilities, and CTAs Description (DE): Contact-Widget für die Smallstack Marketing-Website mit Hero, Template-Showcases, Plattform-Funktionen und CTAs Configuration Schema:

{
  "type": "object",
  "properties": {
    "dataTypeId": {
      "type": "string",
      "title": "Contact datatype ID",
      "description": "ID of the datatype whose generated Input form is rendered as the contact form. Configure its creationAccess to anonymous + requireChallenge (altcha).",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  }
}

Widget: SmallstackWebsitePricing

Title: Smallstack Website Pricing Category: content Description (EN): Pricing widget for Smallstack marketing website with 3 plans, feature comparison, and FAQ Description (DE): Pricing-Widget für die Smallstack Marketing-Website mit 3 Plänen, Feature-Vergleich und FAQ Configuration Schema:

{
  "type": "object",
  "properties": {
    "header": {
      "type": "object",
      "title": "Page Header",
      "properties": {
        "title": {
          "type": "string",
          "title": "Page Title",
          "default": "Choose Your Plan",
          "x-type-schema": {
            "inputWidget": "StringInputWidget"
          }
        },
        "subtitle": {
          "type": "string",
          "title": "Page Subtitle",
          "default": "Transparent pricing based on your API usage. Scale as you grow.",
          "x-type-schema": {
            "inputWidget": "StringInputWidget"
          }
        }
      },
      "required": [
        "title",
        "subtitle"
      ]
    },
    "tiers": {
      "type": "array",
      "title": "Pricing Tiers",
      "description": "Must have exactly 3 tiers",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "title": "Tier Name",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "price": {
            "type": "string",
            "title": "Price Display",
            "description": "e.g., '$49/month' or 'Contact Us'",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "apiRequestLimit": {
            "type": "string",
            "title": "API Request Limit",
            "description": "e.g., '10,000 requests/month'",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "description": {
            "type": "string",
            "title": "Tier Description",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "features": {
            "type": "array",
            "title": "Features List",
            "items": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string",
                  "title": "Feature Text",
                  "x-type-schema": {
                    "inputWidget": "StringInputWidget"
                  }
                },
                "included": {
                  "type": "boolean",
                  "title": "Included in Tier",
                  "default": true
                },
                "icon": {
                  "type": "string",
                  "title": "Icon (Optional)",
                  "x-type-schema": {
                    "inputWidget": "StringInputWidget"
                  }
                }
              },
              "required": [
                "text",
                "included"
              ]
            },
            "minItems": 5
          },
          "recommended": {
            "type": "boolean",
            "title": "Recommended Badge",
            "description": "Show 'Most Popular' badge",
            "default": false
          },
          "ctaText": {
            "type": "string",
            "title": "CTA Button Text",
            "default": "Choose Plan",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "ctaUrl": {
            "type": "string",
            "title": "CTA URL",
            "description": "Registration URL with plan parameter",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "ctaStyle": {
            "type": "string",
            "title": "Button Style",
            "default": "btn-primary",
            "enum": [
              "btn-primary",
              "btn-outline"
            ],
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        },
        "required": [
          "name",
          "price",
          "apiRequestLimit",
          "description",
          "features",
          "ctaText",
          "ctaUrl"
        ]
      },
      "default": [
        {
          "name": "Starter",
          "price": "$49/month",
          "apiRequestLimit": "10,000 requests/month",
          "description": "Perfect for small projects and testing",
          "features": [
            {
              "text": "All templates included",
              "included": true
            },
            {
              "text": "Basic support",
              "included": true
            },
            {
              "text": "Community access",
              "included": true
            },
            {
              "text": "10,000 API requests/month",
              "included": true
            },
            {
              "text": "Priority support",
              "included": false
            }
          ],
          "recommended": false,
          "ctaText": "Start with Starter",
          "ctaUrl": "/register?plan=starter",
          "ctaStyle": "btn-outline"
        },
        {
          "name": "Professional",
          "price": "$149/month",
          "apiRequestLimit": "100,000 requests/month",
          "description": "For growing businesses and production apps",
          "features": [
            {
              "text": "All templates included",
              "included": true
            },
            {
              "text": "Priority support",
              "included": true
            },
            {
              "text": "Community access",
              "included": true
            },
            {
              "text": "100,000 API requests/month",
              "included": true
            },
            {
              "text": "Custom integrations",
              "included": true
            }
          ],
          "recommended": true,
          "ctaText": "Choose Professional",
          "ctaUrl": "/register?plan=professional",
          "ctaStyle": "btn-primary"
        },
        {
          "name": "Enterprise",
          "price": "Contact Us",
          "apiRequestLimit": "Unlimited requests",
          "description": "For large-scale deployments and custom needs",
          "features": [
            {
              "text": "All templates included",
              "included": true
            },
            {
              "text": "Dedicated support",
              "included": true
            },
            {
              "text": "SLA guarantee",
              "included": true
            },
            {
              "text": "Unlimited API requests",
              "included": true
            },
            {
              "text": "Custom development",
              "included": true
            }
          ],
          "recommended": false,
          "ctaText": "Contact Sales",
          "ctaUrl": "/register?plan=enterprise",
          "ctaStyle": "btn-outline"
        }
      ],
      "minItems": 3,
      "maxItems": 3
    },
    "faq": {
      "type": "array",
      "title": "Frequently Asked Questions",
      "items": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "title": "Question",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "answer": {
            "type": "string",
            "title": "Answer",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        },
        "required": [
          "question",
          "answer"
        ]
      },
      "default": [
        {
          "question": "What counts as an API request?",
          "answer": "Every call to the platform API counts as one request. This includes data queries, creates, updates, and deletes."
        },
        {
          "question": "Can I upgrade or downgrade my plan?",
          "answer": "Yes, you can change your plan at any time. Upgrades take effect immediately, downgrades at the end of your billing cycle."
        },
        {
          "question": "What happens if I exceed my API limit?",
          "answer": "We'll notify you when approaching your limit. You can either upgrade or pay for additional requests at $0.005 per request."
        }
      ],
      "minItems": 3
    },
    "comparisonNote": {
      "type": "string",
      "title": "Comparison Note",
      "description": "Additional note about pricing comparison",
      "default": "All plans include core platform features. Choose based on your API usage needs.",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "required": [
    "header",
    "tiers",
    "faq"
  ]
}

Widget: SmallstackWebsiteModuleShowcaseList

Title: Module Showcase List Category: content Description (EN): Overview page of all available solution packs with tag filtering and search Description (DE): Übersichtsseite aller verfügbaren Lösungspakete mit Tag-Filterung und Suche Configuration Schema:

{
  "type": "object",
  "properties": {
    "compact": {
      "type": "boolean",
      "title": "Compact Mode",
      "description": "Show a compact product preview without search and filters (max 6 products)",
      "default": false
    }
  }
}

Widget: SmallstackWebsiteModuleShowcaseDetail

Title: Module Showcase Detail Category: content Description (EN): Detail page for a single solution pack with features, screenshots and CTA Description (DE): Detailseite für ein einzelnes Lösungspaket mit Features, Screenshots und CTA Configuration Schema:

{
  "type": "object",
  "properties": {
    "productSlug": {
      "type": "string",
      "title": "URL parameter name",
      "description": "Name of the dynamic route parameter that carries the collection slug — e.g. `productId` for a `/products/[productId]` route. Defaults to `product`."
    }
  }
}

Widget: SmallstackWebsiteServices

Title: Smallstack Website Services Category: content Description (EN): Services widget for custom development, reseller model, and on-premise deployment Description (DE): Services-Widget für individuelle Entwicklung, Reseller-Modell und On-Premise-Deployment Configuration Schema:

{
  "type": "object",
  "properties": {
    "dataTypeId": {
      "type": "string",
      "title": "Contact datatype ID",
      "description": "ID of the datatype whose Input form the card CTAs open in the contact modal. Configure its creationAccess to anonymous + requireChallenge (altcha).",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  }
}

Widget: SmallstackWebsiteProductDetail

Title: Smallstack Website Product Detail Category: content Description (EN): Product detail widget for Smallstack marketing website with features, use cases, screenshots, and CTAs Description (DE): Produktdetail-Widget für die Smallstack Marketing-Website mit Funktionen, Anwendungsfällen, Screenshots und CTAs Configuration Schema:

{
  "type": "object",
  "properties": {
    "productName": {
      "type": "string",
      "enum": [
        "realEstate",
        "handyman"
      ]
    }
  }
}

Widget: SmallstackWebsiteFrame

Title: Smallstack Website Frame Category: content Description (EN): Frame component that simply provides a navigation at the top, a footer at the bottom, and a widget slot in the middle for content of the Smallstack marketing website Description (DE): Frame-Komponente welche lediglich eine Navigation oben, einen Footer unten und in der Mitte einen WidgetSlot für Inhalte der Smallstack Marketing-Website darstellt Configuration Schema:

{}

Widget: BunnyStreamVideo

Title: Bunny Stream Video Category: content Description (EN): Embeds a video from Bunny Stream (bunny.net) with configurable playback options Description (DE): Bettet ein Video von Bunny Stream (bunny.net) ein mit konfigurierbaren Wiedergabeoptionen Configuration Schema:

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "title": "URL",
      "description": "Bunny Stream player URL (e.g. https://player.mediadelivery.net/embed/...)"
    },
    "autoplay": {
      "type": "boolean",
      "title": "Autoplay",
      "default": true
    },
    "loop": {
      "type": "boolean",
      "title": "Loop",
      "default": true
    },
    "muted": {
      "type": "boolean",
      "title": "Muted",
      "default": true
    },
    "preload": {
      "type": "boolean",
      "title": "Preload",
      "default": true
    },
    "responsive": {
      "type": "boolean",
      "title": "Responsive",
      "default": true
    }
  }
}

Widget: WebsiteSection

Title: Website Section Category: content Description (EN): Generic section with configurable background variant, padding, and max width Description (DE): Generischer Abschnitt mit konfigurierbarem Hintergrund, Padding und maximaler Breite Configuration Schema:

{
  "type": "object",
  "properties": {
    "variant": {
      "type": "string",
      "title": "Variant",
      "description": "Background variant",
      "enum": [
        "base",
        "alt",
        "accent",
        "gradient",
        "gradient-subtle",
        "none"
      ],
      "default": "base",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "padding": {
      "type": "string",
      "title": "Padding",
      "enum": [
        "none",
        "sm",
        "md",
        "lg"
      ],
      "default": "md",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "maxWidth": {
      "type": "string",
      "title": "Max Width",
      "enum": [
        "sm",
        "md",
        "lg",
        "xl",
        "full"
      ],
      "default": "full",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: WebsiteNavigation

Title: Website Navigation Category: navigation Description (EN): Configurable navigation bar with logo, links, and CTA button Description (DE): Konfigurierbare Navigationsleiste mit Logo, Links und CTA-Button Configuration Schema:

{
  "type": "object",
  "properties": {
    "brandName": {
      "type": "string",
      "title": "Brand Name",
      "default": "My Website",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "brandLogoUrl": {
      "type": "string",
      "title": "Brand Logo URL",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "navigationLinks": {
      "type": "array",
      "title": "Navigation Links",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "object",
            "title": "Label",
            "properties": {},
            "default": {
              "en": "Link",
              "de": "Link"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "href": {
            "type": "string",
            "title": "URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "icon": {
            "type": "string",
            "title": "Icon",
            "description": "Optional FontAwesome icon class",
            "x-type-schema": {
              "inputWidget": "FontAwesomeIconInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "ctaText": {
      "type": "object",
      "title": "CTA Button Text",
      "properties": {},
      "default": {
        "en": "Get Started",
        "de": "Loslegen"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "ctaUrl": {
      "type": "string",
      "title": "CTA Button URL",
      "default": "/signin",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "ctaIcon": {
      "type": "string",
      "title": "CTA Icon",
      "default": "fa-arrow-right",
      "x-type-schema": {
        "inputWidget": "FontAwesomeIconInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: WebsiteFooter

Title: Website Footer Category: navigation Description (EN): Configurable footer with company info, navigation links, and social media Description (DE): Konfigurierbarer Footer mit Firmendaten, Links und Social Media Configuration Schema:

{
  "type": "object",
  "properties": {
    "companyName": {
      "type": "string",
      "title": "Company Name",
      "default": "My Company",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "address": {
      "type": "object",
      "title": "Address",
      "properties": {
        "street": {
          "type": "string",
          "x-type-schema": {
            "inputWidget": "StringInputWidget"
          }
        },
        "zip": {
          "type": "string",
          "x-type-schema": {
            "inputWidget": "StringInputWidget"
          }
        },
        "city": {
          "type": "string",
          "x-type-schema": {
            "inputWidget": "StringInputWidget"
          }
        }
      }
    },
    "phone": {
      "type": "string",
      "title": "Phone",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "email": {
      "type": "string",
      "title": "Email",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "navigationLinks": {
      "type": "array",
      "title": "Navigation Links",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "object",
            "title": "Label",
            "properties": {},
            "default": {
              "en": "Link",
              "de": "Link"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "href": {
            "type": "string",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "socialLinks": {
      "type": "array",
      "title": "Social Media Links",
      "items": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "title": "Platform Name",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "icon": {
            "type": "string",
            "title": "Icon",
            "description": "FontAwesome brand icon name (e.g. 'linkedin', 'github')",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "url": {
            "type": "string",
            "title": "URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: WebsiteFrame

Title: Website Frame Category: content Description (EN): Frame with navigation at top, footer at bottom, and content slot in the middle Description (DE): Frame mit Navigation oben, Footer unten und Inhalts-Slot in der Mitte Configuration Schema:

{}

Widget: PricingTable

Title: Pricing Table Category: content Description (EN): Configurable pricing table with tiers, features, and CTA buttons Description (DE): Konfigurierbare Preistabelle mit Tarifen, Features und CTA-Buttons Configuration Schema:

{
  "type": "object",
  "properties": {
    "tiers": {
      "type": "array",
      "title": "Pricing Tiers",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "object",
            "title": "Tier Name",
            "properties": {},
            "default": {
              "en": "Basic",
              "de": "Basis"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "price": {
            "type": "object",
            "title": "Price",
            "properties": {},
            "default": {
              "en": "$9/month",
              "de": "9€/Monat"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "description": {
            "type": "object",
            "title": "Description",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "features": {
            "type": "array",
            "title": "Features",
            "items": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "object",
                  "title": "Feature",
                  "properties": {},
                  "additionalProperties": {
                    "type": "string"
                  },
                  "propertyNames": {
                    "pattern": "^[a-z]{2}$",
                    "title": "Language code",
                    "description": "ISO 639-1 language code"
                  },
                  "x-type-schema": {
                    "inputWidget": "InlineTranslationInputWidget",
                    "viewWidget": {
                      "name": "InlineTranslationViewWidget"
                    },
                    "sampleData": {
                      "generatorName": "faker.custom.i18nWords",
                      "generatorContext": {
                        "minWords": 1,
                        "maxWords": 3
                      }
                    }
                  }
                },
                "included": {
                  "type": "boolean",
                  "default": true,
                  "x-type-schema": {
                    "inputWidget": "BooleanInputWidget"
                  }
                }
              }
            },
            "x-type-schema": {
              "inputWidget": "ArrayInputWidget"
            }
          },
          "recommended": {
            "type": "boolean",
            "title": "Recommended",
            "default": false,
            "x-type-schema": {
              "inputWidget": "BooleanInputWidget"
            }
          },
          "ctaText": {
            "type": "object",
            "title": "CTA Text",
            "properties": {},
            "default": {
              "en": "Choose Plan",
              "de": "Plan wählen"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "ctaUrl": {
            "type": "string",
            "title": "CTA URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: FaqAccordion

Title: FAQ Accordion Category: content Description (EN): Frequently asked questions as an accordion list Description (DE): Häufig gestellte Fragen als Akkordeon-Liste Configuration Schema:

{
  "type": "object",
  "properties": {
    "title": {
      "type": "object",
      "title": "Title",
      "properties": {},
      "default": {
        "en": "Frequently Asked Questions",
        "de": "Häufige Fragen"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "items": {
      "type": "array",
      "title": "FAQ Items",
      "items": {
        "type": "object",
        "properties": {
          "question": {
            "type": "object",
            "title": "Question",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "answer": {
            "type": "object",
            "title": "Answer",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: CtaSection

Title: CTA Section Category: content Description (EN): Call-to-action section with title, text, and buttons Description (DE): Call-to-Action Abschnitt mit Titel, Text und Buttons Configuration Schema:

{
  "type": "object",
  "properties": {
    "title": {
      "type": "object",
      "title": "Title",
      "properties": {},
      "default": {
        "en": "Ready to get started?",
        "de": "Bereit loszulegen?"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "subtitle": {
      "type": "object",
      "title": "Subtitle",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "buttonText": {
      "type": "object",
      "title": "Button Text",
      "properties": {},
      "default": {
        "en": "Get Started",
        "de": "Jetzt starten"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "buttonUrl": {
      "type": "string",
      "title": "Button URL",
      "default": "/signin",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "buttonIcon": {
      "type": "string",
      "title": "Button Icon",
      "default": "fa-arrow-right",
      "x-type-schema": {
        "inputWidget": "FontAwesomeIconInputWidget"
      }
    },
    "variant": {
      "type": "string",
      "title": "Variant",
      "enum": [
        "gradient",
        "subtle",
        "accent"
      ],
      "default": "subtle",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "secondaryButtonText": {
      "type": "object",
      "title": "Secondary Button Text (optional)",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "secondaryButtonUrl": {
      "type": "string",
      "title": "Secondary Button URL",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: CardGrid

Title: Card Grid Category: content Description (EN): Configurable card grid with icons, titles, and descriptions Description (DE): Konfigurierbares Karten-Raster mit Icons, Titeln und Beschreibungen Configuration Schema:

{
  "type": "object",
  "properties": {
    "columns": {
      "type": "number",
      "title": "Columns",
      "description": "Number of columns (1-4)",
      "default": 3,
      "minimum": 1,
      "maximum": 4,
      "x-type-schema": {
        "inputWidget": "NumberInputWidget"
      }
    },
    "style": {
      "type": "string",
      "title": "Card Style",
      "enum": [
        "elevated",
        "flat",
        "bordered",
        "gradient"
      ],
      "default": "elevated",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "items": {
      "type": "array",
      "title": "Cards",
      "items": {
        "type": "object",
        "properties": {
          "icon": {
            "type": "string",
            "title": "Icon",
            "default": "fa-star",
            "x-type-schema": {
              "inputWidget": "FontAwesomeIconInputWidget",
              "inputWidgetConfiguration": {
                "fontAwesomeIcon": {
                  "allowProIcons": true
                }
              }
            }
          },
          "title": {
            "type": "object",
            "title": "Title",
            "properties": {},
            "default": {
              "en": "Card Title",
              "de": "Kartentitel"
            },
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "description": {
            "type": "object",
            "title": "Description",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "features": {
            "type": "array",
            "title": "Feature List (optional)",
            "items": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "object",
                  "title": "Feature Text",
                  "properties": {},
                  "additionalProperties": {
                    "type": "string"
                  },
                  "propertyNames": {
                    "pattern": "^[a-z]{2}$",
                    "title": "Language code",
                    "description": "ISO 639-1 language code"
                  },
                  "x-type-schema": {
                    "inputWidget": "InlineTranslationInputWidget",
                    "viewWidget": {
                      "name": "InlineTranslationViewWidget"
                    },
                    "sampleData": {
                      "generatorName": "faker.custom.i18nWords",
                      "generatorContext": {
                        "minWords": 1,
                        "maxWords": 3
                      }
                    }
                  }
                }
              }
            },
            "x-type-schema": {
              "inputWidget": "ArrayInputWidget"
            }
          },
          "ctaText": {
            "type": "object",
            "title": "CTA Text (optional)",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "ctaUrl": {
            "type": "string",
            "title": "CTA URL (optional)",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: FeatureList

Title: Feature List Category: content Description (EN): List of features as badges with icons Description (DE): Liste von Features als Badges mit Icons Configuration Schema:

{
  "type": "object",
  "properties": {
    "title": {
      "type": "object",
      "title": "Title",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "subtitle": {
      "type": "object",
      "title": "Subtitle",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "items": {
      "type": "array",
      "title": "Features",
      "items": {
        "type": "object",
        "properties": {
          "text": {
            "type": "object",
            "title": "Feature Text",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "icon": {
            "type": "string",
            "title": "Icon",
            "default": "fa-check",
            "x-type-schema": {
              "inputWidget": "FontAwesomeIconInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: GameWorld

Title: Game World Category: interactive Description (EN): Navigable 2D game world with tilemap, player controls, NPCs and interactive elements. For onboarding games, floor plans and warehouse overviews. Description (DE): Navigierbare 2D-Spielwelt mit Tilemap, Spieler-Steuerung, NPCs und interaktiven Elementen. Für Onboarding-Spiele, Gebäudepläne und Lager-Übersichten. Configuration Schema:

{
  "type": "object",
  "properties": {
    "gameMapTypeId": {
      "type": "string",
      "title": "Game Map Type",
      "description": "The data type used for game maps",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "mapId": {
      "type": "string",
      "title": "Map",
      "description": "The game map document to display",
      "x-type-schema": {
        "inputWidget": "ForeignIdInputWidget",
        "inputWidgetConfiguration": {
          "foreignIdSelect": {
            "collectionNameField": "gameMapTypeId"
          }
        }
      }
    },
    "width": {
      "type": "number",
      "title": "Width",
      "description": "Canvas width in pixels",
      "default": 800,
      "x-type-schema": {
        "inputWidget": "NumberInputWidget"
      }
    },
    "height": {
      "type": "number",
      "title": "Height",
      "description": "Canvas height in pixels",
      "default": 600,
      "x-type-schema": {
        "inputWidget": "NumberInputWidget"
      }
    },
    "enableSound": {
      "type": "boolean",
      "title": "Enable Sound",
      "description": "Enable ambient audio and sound effects",
      "default": true,
      "x-type-schema": {
        "inputWidget": "BooleanInputWidget"
      }
    },
    "playerSprite": {
      "type": "string",
      "title": "Player Sprite URL",
      "description": "Override the default player sprite with a custom sprite sheet URL",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "movementType": {
      "type": "string",
      "title": "Movement Type",
      "description": "Player movement style",
      "enum": [
        "free",
        "grid"
      ],
      "default": "free",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "required": [
    "gameMapTypeId",
    "mapId"
  ],
  "additionalProperties": false
}

Widget: Todo

Title: Aufgaben Liste Category: data Description (EN): A simple task list widget for managing and tracking tasks with real-time synchronization via SignalDB and data type integration for persistent storage. Description (DE): Ein einfaches Aufgabenlisten-Widget zum Verwalten und Verfolgen von Aufgaben mit Echtzeit-Synchronisierung über SignalDB und Datentypintegration für persistente Speicherung. Configuration Schema:

{
  "type": "object",
  "properties": {
    "typeId": {
      "title": "Todo Typ",
      "type": "string",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    }
  }
}

Widget: AddressCard

Title: Adresse (Karte) Category: navigation Description (EN): Display a single address on an interactive map with navigation button, supporting OpenStreetMap and Google Maps with configurable map height. Description (DE): Zeigt eine einzelne Adresse auf einer interaktiven Karte mit Navigationsbutton an, unterstützt OpenStreetMap und Google Maps mit konfigurierbarer Kartenhöhe. Configuration Schema:

{
  "type": "object",
  "title": "Address Card",
  "properties": {
    "title": {
      "type": "string",
      "title": "Titel",
      "description": "Der Titel der Adresskarte"
    },
    "mapSource": {
      "type": "string",
      "title": "Kartenquelle",
      "enum": [
        "osm",
        "google"
      ],
      "default": "osm"
    },
    "apiKey": {
      "type": "string",
      "title": "API Key",
      "description": "Google Maps API Key (required when map source is Google)",
      "x-type-schema": {
        "rules": [
          {
            "action": "hide",
            "if": {
              "dataPath": "../mapSource",
              "operator": "notEquals",
              "value": "google"
            }
          }
        ]
      }
    },
    "address": {
      "type": "object",
      "title": "Adresse",
      "properties": {
        "street": {
          "title": "Straße",
          "type": "string",
          "x-type-schema": {
            "sampleData": {
              "generatorName": "faker.location.street"
            }
          }
        },
        "streetNumber": {
          "title": "Hausnummer",
          "type": "string",
          "x-type-schema": {
            "sampleData": {
              "generatorName": "faker.location.buildingNumber"
            }
          }
        },
        "addition": {
          "title": "Zusatz",
          "type": "string",
          "x-type-schema": {
            "sampleData": {
              "generatorName": "faker.location.secondaryAddress"
            }
          }
        },
        "zip": {
          "title": "PLZ",
          "type": "string",
          "x-type-schema": {
            "sampleData": {
              "generatorName": "faker.location.zipCode"
            }
          }
        },
        "city": {
          "title": "Stadt",
          "type": "string",
          "x-type-schema": {
            "sampleData": {
              "generatorName": "faker.location.city"
            }
          }
        },
        "country": {
          "title": "Land",
          "type": "string",
          "x-type-schema": {
            "sampleData": {
              "generatorName": "faker.helpers.arrayElement",
              "generatorContext": [
                [
                  "Deutschland"
                ]
              ]
            }
          }
        },
        "state": {
          "title": "Bundesland",
          "type": "string",
          "x-type-schema": {
            "sampleData": {
              "generatorName": "faker.location.state"
            }
          }
        },
        "county": {
          "title": "Stadtteil",
          "type": "string",
          "x-type-schema": {
            "sampleData": {
              "generatorName": "faker.location.county"
            }
          }
        },
        "coordinates": {
          "title": "Koordinaten",
          "type": "object",
          "properties": {
            "latitude": {
              "type": "number",
              "title": "Breitengrad",
              "x-type-schema": {
                "sampleData": {
                  "generatorName": "faker.location.latitude"
                }
              }
            },
            "longitude": {
              "type": "number",
              "title": "Längengrad",
              "x-type-schema": {
                "sampleData": {
                  "generatorName": "faker.location.longitude"
                }
              }
            }
          },
          "required": [
            "latitude",
            "longitude"
          ]
        }
      },
      "x-type-schema": {
        "inputWidget": "AddressInputWidget",
        "inputWidgetConfiguration": {
          "columnSpan": "full"
        },
        "viewWidget": {
          "name": "AddressViewWidget"
        }
      },
      "required": [
        "street",
        "streetNumber",
        "zip",
        "city"
      ]
    },
    "height": {
      "type": "number",
      "title": "Kartenhöhe (px)",
      "default": 400,
      "minimum": 200,
      "maximum": 1200
    },
    "buttonLabel": {
      "type": "string",
      "title": "Button-Text",
      "default": "Navigation starten"
    }
  },
  "required": [
    "address"
  ]
}

Widget: DataViewWidget

Title: Tabelle / Liste Category: data Description (EN): Responsive data display showing tables on large screens and lists on small screens with sorting, filtering, saved queries, and mode switching (auto/table/grid). Description (DE): Responsive Datenanzeige mit Tabellen auf großen Bildschirmen und Listen auf kleinen Bildschirmen mit Sortierung, Filterung, gespeicherten Abfragen und Moduswechsel (auto/table/grid). Configuration Schema:

{
  "type": "object",
  "title": "DataView Widget",
  "properties": {
    "collectionName": {
      "title": "Datentyp",
      "type": "string",
      "description": "Wähle den Datentyp, der angezeigt werden soll",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "mode": {
      "title": "Modus",
      "description": "Wähle den Modus, der beim Laden des Widgets angezeigt werden soll",
      "type": "string",
      "enum": [
        "auto",
        "table",
        "grid",
        "kanban"
      ],
      "default": "auto",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "auto",
                "label": "Automatisch"
              },
              {
                "value": "table",
                "label": "Tabelle"
              },
              {
                "value": "grid",
                "label": "Gitter"
              },
              {
                "value": "kanban",
                "label": "Kanban"
              }
            ]
          }
        }
      }
    },
    "modeChangeAllowed": {
      "title": "Benutzer kann Modus ändern",
      "type": "boolean",
      "default": false,
      "description": "Wenn aktiviert, kann der Benutzer zwischen Tabellen- und Gitteransicht wechseln"
    },
    "groupingMode": {
      "title": "Gruppierung",
      "type": "string",
      "enum": [
        "agenda"
      ],
      "description": "Wähle die Art der Datengruppierung",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "agenda",
                "label": "Agenda"
              }
            ]
          }
        }
      }
    },
    "groupBy": {
      "title": "Datumsfeld für Gruppierung",
      "type": "string",
      "description": "Das Datumsfeld, das für die Agenda-Gruppierung verwendet werden soll (z.B. 'dueDate')",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "kanbanGroupBy": {
      "title": "Kanban-Gruppierungsfeld",
      "type": "string",
      "description": "Das Feld, nach dem die Kanban-Spalten gebildet werden (z.B. 'status' oder 'stage'). Erforderlich für den Kanban-Modus.",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "columns": {
      "title": "Angezeigte Spalten",
      "type": "array",
      "description": "Liste von Schema-Pfaden (z.B. 'address.city'), die als Spalten angezeigt werden sollen. Wenn leer, werden alle Standardspalten angezeigt.",
      "items": {
        "type": "string",
        "description": "Schema-Pfad der Spalte"
      }
    },
    "sorting": {
      "title": "Sortierung",
      "type": "array",
      "description": "Vordefinierte Sortierung für die Datenansicht",
      "items": {
        "type": "object",
        "properties": {
          "column": {
            "title": "Spalte",
            "type": "string",
            "description": "Name der Spalte nach der sortiert werden soll",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "direction": {
            "title": "Richtung",
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "asc",
            "description": "Sortierrichtung",
            "x-type-schema": {
              "inputWidget": "StringInputWidget",
              "inputWidgetConfiguration": {
                "select": {
                  "values": [
                    {
                      "value": "asc",
                      "label": "Aufsteigend"
                    },
                    {
                      "value": "desc",
                      "label": "Absteigend"
                    }
                  ]
                }
              }
            }
          }
        },
        "required": [
          "column",
          "direction"
        ],
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "collectionName"
  ]
}

Widget: EntityEditor

Title: Entity Editor Category: data Description (EN): A dynamic editor for editing entity records based on collection schemas with automatic field type detection and validation support. Description (DE): Ein dynamischer Editor zum Bearbeiten von Entitätsdatensätzen basierend auf Sammlungsschemas mit automatischer Feldtyperkennung und Validierungsunterstützung. Configuration Schema:

{
  "type": "object",
  "properties": {
    "collectionName": {
      "type": "string",
      "title": "Collection Name",
      "description": "Der Name der Sammlung, für die der Entity Editor verwendet werden soll",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "visibleFields": {
      "type": "array",
      "title": "Sichtbare Felder",
      "description": "Liste der Felder, die im Editor angezeigt werden sollen. Wenn leer, werden alle Felder angezeigt.",
      "items": {
        "type": "string"
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "showRelations": {
      "type": "boolean",
      "title": "Beziehungen anzeigen",
      "description": "Bestimmt, ob Beziehungen im Editor angezeigt werden sollen",
      "default": true
    }
  },
  "required": [
    "collectionName"
  ],
  "additionalProperties": false
}

Widget: NumberStatsDataTypeCount

Title: Zahlen Statistiken - Datentyp Category: data Description (EN): Display animated count statistics for a specific data type with configurable time periods and graph options (total, changes, creations). Description (DE): Zeigt animierte Zählstatistiken für einen bestimmten Datentyp mit konfigurierbaren Zeiträumen und Diagrammoptionen (gesamt, Änderungen, Erstellungen) an. Configuration Schema:

{
  "type": "object",
  "properties": {
    "dataTypeId": {
      "type": "string",
      "title": "Datentyp",
      "description": "Der Datentyp, dessen Anzahl angezeigt werden soll.",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "timespan": {
      "type": "string",
      "title": "Zeitraum",
      "description": "Der Zeitraum für die Statistiken. 'Automatisch' passt sich automatisch an das Alter des Projekts an.",
      "default": "auto",
      "enum": [
        "auto",
        "day",
        "month",
        "year"
      ],
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "auto",
                "label": "Automatisch"
              },
              {
                "value": "day",
                "label": "Tag"
              },
              {
                "value": "month",
                "label": "Monat"
              },
              {
                "value": "year",
                "label": "Jahr"
              }
            ]
          }
        }
      }
    },
    "navigateToUrl": {
      "type": "string",
      "title": "Navigation URL",
      "description": "URL zu der navigiert werden soll, wenn auf die Statistik geklickt wird.",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "selectedGraphs": {
      "type": "array",
      "title": "Angezeigte Statistiken",
      "description": "Auswahl der anzuzeigenden Statistik-Diagramme. Standard: nur 'Gesamt'.",
      "default": [
        "total"
      ],
      "items": {
        "type": "string",
        "enum": [
          "total",
          "changes",
          "creation"
        ],
        "x-type-schema": {
          "inputWidget": "StringInputWidget",
          "inputWidgetConfiguration": {
            "select": {
              "values": [
                {
                  "value": "total",
                  "label": "Gesamt"
                },
                {
                  "value": "changes",
                  "label": "Änderungen"
                },
                {
                  "value": "creation",
                  "label": "Erstellungen"
                }
              ]
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    }
  }
}

Widget: Tabs

Title: Tabs Category: layout Description (EN): A tabbed interface for organizing content into multiple switchable sections with URL synchronization and keyboard navigation support. Description (DE): Eine Tab-Schnittstelle zum Organisieren von Inhalten in mehrere umschaltbare Abschnitte mit URL-Synchronisierung und Tastaturnavigationsunterstützung. Configuration Schema:

{
  "type": "object",
  "properties": {
    "tabs": {
      "type": "array",
      "title": "Tabs",
      "items": {
        "type": "object",
        "title": "Tab",
        "properties": {
          "title": {
            "type": "object",
            "title": "Tab Titel",
            "description": "Übersetzbarer Titel für den Tab",
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget"
            },
            "default": {
              "de": "Tab"
            }
          },
          "tabName": {
            "type": "string",
            "title": "Tab Name (Slot Name)",
            "description": "Eindeutiger Name für den Tab, wird als Slot-Name verwendet",
            "pattern": "^[a-zA-Z0-9_-]+$"
          }
        },
        "required": [
          "title",
          "tabName"
        ]
      },
      "default": [
        {
          "title": {
            "de": "Tab 1"
          },
          "tabName": "tab-1"
        },
        {
          "title": {
            "de": "Tab 2"
          },
          "tabName": "tab-2"
        }
      ]
    },
    "urlSyncParameterName": {
      "type": "string",
      "title": "URL Parameter Name",
      "description": "Name des URL Parameters für die Tab-Synchronisation",
      "default": "tab"
    }
  }
}

Widget: EventStreamPinBoard

Title: Pinnwand (Event Stream) Category: data Description (EN): A collaborative digital pin board for brainstorming and ideation where users can create, edit, delete, and react to text-based pins in real-time. Description (DE): Eine kollaborative digitale Pinnwand für Brainstorming und Ideenfindung, bei der Benutzer textbasierte Pins in Echtzeit erstellen, bearbeiten, löschen und darauf reagieren können. Configuration Schema:

{
  "type": "object",
  "properties": {
    "eventStreamId": {
      "type": "string",
      "title": "Event Stream ID",
      "description": "Die ID des Event Streams für die Pinnwand",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "collectionName": {
      "type": "string",
      "title": "Event Stream Entry Collection Name",
      "description": "Der Name der Sammlung für EventStreamEntry Einträge",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "required": [
    "eventStreamId",
    "collectionName"
  ],
  "additionalProperties": false
}

Widget: EventStreamChatMessages

Title: Chat (Event Stream) Category: data Description (EN): A real-time messaging interface for collaborative communication within event streams where users can send, edit, delete, and react to messages. Description (DE): Eine Echtzeit-Messaging-Schnittstelle für kollaborative Kommunikation innerhalb von Event Streams, bei der Benutzer Nachrichten senden, bearbeiten, löschen und darauf reagieren können. Configuration Schema:

{
  "type": "object",
  "properties": {
    "eventStreamId": {
      "type": "string",
      "title": "Event Stream ID",
      "description": "Die ID des Event Streams für die Chat-Nachrichten",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "collectionName": {
      "type": "string",
      "title": "Event Stream Entry Collection Name",
      "description": "Der Name der Sammlung für EventStreamEntry Einträge",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "required": [
    "eventStreamId",
    "collectionName"
  ]
}

Widget: EventStreamMap

Title: Karte (Event Stream) Category: data Description (EN): Real-time location sharing through Event Streams where users can share their current GPS location displayed on an interactive OpenStreetMap. Description (DE): Echtzeit-Standortfreigabe über Event Streams, bei der Benutzer ihre aktuelle GPS-Position teilen können, die auf einer interaktiven OpenStreetMap angezeigt wird. Configuration Schema:

{
  "type": "object",
  "properties": {
    "eventStreamId": {
      "type": "string",
      "title": "Event Stream ID",
      "description": "The ID of the event stream to display locations for"
    },
    "collectionName": {
      "type": "string",
      "title": "Event Stream Entry Collection Name",
      "description": "The custom data type collection name that implements EventStreamEntry for this project"
    }
  },
  "required": [
    "eventStreamId",
    "collectionName"
  ],
  "additionalProperties": false
}

Widget: EventStreamSettings

Title: EventStream Settings Category: data Description (EN): User interface for managing EventStream-related settings including username preferences and location sharing permissions. Description (DE): Benutzeroberfläche zum Verwalten von EventStream-bezogenen Einstellungen einschließlich Benutzernameneinstellungen und Standortfreigabe-Berechtigungen. Configuration Schema:

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Widget: EventStreamTimeline

Title: Timeline (Event Stream) Category: data Description (EN): Universal chronological timeline view of all events within an event stream displaying various event types (messages, pins, locations, custom events) in a unified timeline. Description (DE): Universelle chronologische Timeline-Ansicht aller Ereignisse innerhalb eines Event Streams, die verschiedene Ereignistypen (Nachrichten, Pins, Standorte, benutzerdefinierte Ereignisse) in einer einheitlichen Timeline anzeigt. Configuration Schema:

{
  "type": "object",
  "properties": {
    "eventStreamId": {
      "type": "string",
      "title": "Event Stream ID",
      "description": "The ID of the event stream whose entries should be shown chronologically"
    },
    "collectionName": {
      "type": "string",
      "title": "Event Stream Entry Collection Name",
      "description": "The custom data type collection name that implements EventStreamEntry for this project"
    },
    "typeDefinitions": {
      "type": "array",
      "title": "Type Definitions",
      "description": "Optional definitions per EventStreamEntry.type: link/icon/text for timeline entries",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "title": "Type"
          },
          "link": {
            "type": "string",
            "title": "Link Template",
            "description": "URL template with tokens {id}, {type}, {eventStreamId}"
          },
          "icon": {
            "type": "string",
            "title": "Icon (FontAwesome class)"
          },
          "text": {
            "type": "string",
            "title": "Action Text"
          }
        },
        "required": [
          "type"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "eventStreamId",
    "collectionName"
  ],
  "additionalProperties": false
}

Widget: EventStreamImageGallery

Title: Image Gallery (Event Stream) Category: data Description (EN): Real-time image sharing through Event Streams where users can upload photos from gallery or camera, displayed in a responsive gallery with instant updates. Description (DE): Echtzeit-Bildfreigabe über Event Streams, bei der Benutzer Fotos aus der Galerie oder Kamera hochladen können, die in einer responsiven Galerie mit sofortigen Updates angezeigt werden. Configuration Schema:

{
  "type": "object",
  "properties": {
    "eventStreamId": {
      "type": "string",
      "title": "Event Stream ID",
      "description": "Die ID des Event Streams für die Bildergalerie"
    },
    "collectionName": {
      "type": "string",
      "title": "Event Stream Entry Collection Name",
      "description": "Der Name der Sammlung für EventStreamEntry Einträge dieses Projekts"
    },
    "storageId": {
      "type": "string",
      "title": "Storage ID",
      "description": "Die ID des Speichers, auf dem die Bilder gespeichert werden sollen"
    },
    "subFolder": {
      "type": "string",
      "title": "Sub Folder",
      "description": "Der Unterordner im Speicher, in dem die Bilder gespeichert werden sollen",
      "default": "event-stream-images"
    }
  },
  "required": [
    "eventStreamId",
    "collectionName",
    "storageId"
  ],
  "additionalProperties": false
}

Widget: PushNotificationSubscription

Title: Push Notifications Category: data Description (EN): Allows users to subscribe to push notifications for specific topics within the application using Web Push API for browser notifications. Description (DE): Ermöglicht Benutzern, Push-Benachrichtigungen für bestimmte Themen innerhalb der Anwendung mit der Web Push API für Browser-Benachrichtigungen zu abonnieren. Configuration Schema:

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "title": "Topic",
      "description": "The topic to subscribe to for push notifications (format: collectionName/entityId)"
    },
    "subscribeButtonText": {
      "type": "string",
      "title": "Subscribe Button Text",
      "description": "Text to display on the subscribe button",
      "default": "Subscribe to Notifications"
    },
    "unsubscribeButtonText": {
      "type": "string",
      "title": "Unsubscribe Button Text",
      "description": "Text to display on the unsubscribe button",
      "default": "Unsubscribe from Notifications"
    }
  },
  "required": [
    "topic"
  ],
  "additionalProperties": false
}

Widget: IpForwarderWidget

Title: IP Address Forwarder Category: utility Description (EN): Automatically detects and tracks changes to your public IP address, storing the current IP in project configuration with configurable refresh interval. Description (DE): Erkennt und verfolgt automatisch Änderungen Ihrer öffentlichen IP-Adresse und speichert die aktuelle IP in der Projektkonfiguration mit konfigurierbarem Aktualisierungsintervall. Configuration Schema:

{
  "type": "object",
  "properties": {
    "configurationKey": {
      "type": "string",
      "title": "Configuration Key",
      "description": "The configuration key where the IP address will be stored",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[a-z]([a-z0-9]*\\.?[a-z0-9]*)*[a-z0-9]$",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "refreshInMinutes": {
      "type": "number",
      "title": "Refresh Interval (Minutes)",
      "description": "How often to check for IP address changes",
      "minimum": 1,
      "maximum": 1440,
      "default": 60,
      "x-type-schema": {
        "inputWidget": "NumberInputWidget"
      }
    }
  },
  "required": [
    "configurationKey",
    "refreshInMinutes"
  ],
  "additionalProperties": false
}

Widget: QRCodeScanner

Title: QR Code Scanner Category: input Description (EN): Real-time QR code and barcode scanning using the device camera with configurable actions triggered on successful scans and dynamic URL placeholder replacement. Description (DE): Echtzeit-QR-Code- und Barcode-Scannen mit der Gerätekamera mit konfigurierbaren Aktionen, die bei erfolgreichen Scans ausgelöst werden, und dynamischem URL-Platzhalteraustausch. Configuration Schema:

{
  "type": "object",
  "properties": {
    "actionType": {
      "type": "string",
      "enum": [
        "navigation"
      ],
      "title": "Action Type",
      "description": "Type of action to perform when QR code is scanned",
      "default": "navigation"
    },
    "navigationUrl": {
      "type": "string",
      "title": "Navigation URL",
      "description": "URL to navigate to when QR code is scanned. Use #{show barcode} as placeholder for the scanned value",
      "default": "/visitors/#{show barcode}/logon"
    },
    "scannerTitle": {
      "type": "string",
      "title": "Scanner Title",
      "description": "Title displayed above the scanner",
      "default": "Scan QR Code"
    },
    "scannerWidth": {
      "type": "number",
      "title": "Scanner Width",
      "description": "Width of the scanner area in pixels",
      "default": 300,
      "minimum": 200,
      "maximum": 800
    },
    "scannerHeight": {
      "type": "number",
      "title": "Scanner Height",
      "description": "Height of the scanner area in pixels",
      "default": 300,
      "minimum": 200,
      "maximum": 800
    }
  },
  "required": [
    "actionType",
    "navigationUrl"
  ]
}

Widget: ProfileCard

Title: Profile Card Category: content Description (EN): Display information about a person with photo, name, title, and description in a responsive card format. Description (DE): Zeigt Informationen über eine Person mit Foto, Name, Titel und Beschreibung in einem responsiven Kartenformat an. Configuration Schema:

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "title": "Name",
      "description": "The name of the person",
      "default": "John Doe"
    },
    "title": {
      "type": "string",
      "title": "Title/Position",
      "description": "The person's job title or position",
      "default": "Software Developer"
    },
    "description": {
      "type": "string",
      "title": "Description",
      "description": "A brief description about the person",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "string": {
            "textarea": true,
            "rows": 4
          }
        }
      }
    },
    "imageUrl": {
      "type": "string",
      "title": "Image URL",
      "description": "URL to the person's photo",
      "default": "https://placehold.co/200x200?text=Photo"
    },
    "imageAlt": {
      "type": "string",
      "title": "Image Alt Text",
      "description": "Alt text for the image",
      "default": "Profile photo"
    }
  }
}

Widget: Button

Title: Button Category: content Description (EN): A clickable button with configurable text, link, visual styles (primary, secondary, accent, outline), and size options. Description (DE): Ein anklickbarer Button mit konfigurierbarem Text, Link, visuellen Stilen (primär, sekundär, Akzent, Umriss) und Größenoptionen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "title": "Button Text",
      "description": "The text displayed on the button",
      "default": "Click me"
    },
    "href": {
      "type": "string",
      "title": "Link URL",
      "description": "URL to navigate to when clicked (optional)",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "variant": {
      "type": "string",
      "title": "Button Variant",
      "description": "The visual style of the button",
      "enum": [
        "primary",
        "secondary",
        "accent",
        "outline"
      ],
      "default": "primary",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "primary",
                "label": "Primary"
              },
              {
                "value": "secondary",
                "label": "Secondary"
              },
              {
                "value": "accent",
                "label": "Accent"
              },
              {
                "value": "outline",
                "label": "Outline"
              }
            ]
          }
        }
      }
    },
    "size": {
      "type": "string",
      "title": "Button Size",
      "description": "The size of the button",
      "enum": [
        "xs",
        "sm",
        "md",
        "lg"
      ],
      "default": "md",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "xs",
                "label": "Extra Small"
              },
              {
                "value": "sm",
                "label": "Small"
              },
              {
                "value": "md",
                "label": "Medium"
              },
              {
                "value": "lg",
                "label": "Large"
              }
            ]
          }
        }
      }
    },
    "target": {
      "type": "string",
      "title": "Link Target",
      "description": "How to open the link",
      "enum": [
        "_self",
        "_blank"
      ],
      "default": "_self",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "_self",
                "label": "Same window"
              },
              {
                "value": "_blank",
                "label": "New window"
              }
            ]
          }
        }
      }
    }
  }
}

Widget: DataExporter

Title: Data Export Category: content Description (EN): A widget for exporting data from a configured data type. Allows selecting the export format (CSV or JSON) and filtering the data to be exported through an interactive filter interface. Description (DE): Ein Widget zum Exportieren von Daten eines konfigurierten Datentyps. Ermöglicht die Auswahl des Exportformats (CSV oder JSON) und das Filtern der zu exportierenden Daten über eine interaktive Filteroberfläche. Configuration Schema:

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "title": "Button Text",
      "description": "The text displayed on the button",
      "default": "Click me"
    },
    "href": {
      "type": "string",
      "title": "Link URL",
      "description": "URL to navigate to when clicked (optional)",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "variant": {
      "type": "string",
      "title": "Button Variant",
      "description": "The visual style of the button",
      "enum": [
        "primary",
        "secondary",
        "accent",
        "outline"
      ],
      "default": "primary",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "primary",
                "label": "Primary"
              },
              {
                "value": "secondary",
                "label": "Secondary"
              },
              {
                "value": "accent",
                "label": "Accent"
              },
              {
                "value": "outline",
                "label": "Outline"
              }
            ]
          }
        }
      }
    },
    "size": {
      "type": "string",
      "title": "Button Size",
      "description": "The size of the button",
      "enum": [
        "xs",
        "sm",
        "md",
        "lg"
      ],
      "default": "md",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "xs",
                "label": "Extra Small"
              },
              {
                "value": "sm",
                "label": "Small"
              },
              {
                "value": "md",
                "label": "Medium"
              },
              {
                "value": "lg",
                "label": "Large"
              }
            ]
          }
        }
      }
    },
    "target": {
      "type": "string",
      "title": "Link Target",
      "description": "How to open the link",
      "enum": [
        "_self",
        "_blank"
      ],
      "default": "_self",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "_self",
                "label": "Same window"
              },
              {
                "value": "_blank",
                "label": "New window"
              }
            ]
          }
        }
      }
    },
    "typeId": {
      "type": "string",
      "title": "Data Type",
      "description": "The data type to export",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "exportFormat": {
      "type": "string",
      "title": "Default Export Format",
      "description": "The default format for data export",
      "enum": [
        "json",
        "csv"
      ],
      "default": "json",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "inputWidgetConfiguration": {
          "select": {
            "values": [
              {
                "value": "json",
                "label": "JSON"
              },
              {
                "value": "csv",
                "label": "CSV"
              }
            ]
          }
        }
      }
    },
    "predefinedFilter": {
      "type": "object",
      "title": "Predefined Filter",
      "description": "Optional predefined filter to pre-populate the filter dialog",
      "x-type-schema": {
        "inputWidget": "FilterInputWidget",
        "inputWidgetConfiguration": {
          "filter": {
            "typeIdProperty": "../typeId"
          }
        }
      }
    }
  },
  "required": [
    "typeId"
  ]
}

Widget: Redirect

Title: Redirect Category: utility Description (EN): Immediately redirects users to another page. Supports absolute URLs (https://...), absolute paths (/...), and relative paths (./... or ../...). Shows a localized redirect message and sets SEO meta tags for search engines. Description (DE): Leitet Benutzer sofort zu einer anderen Seite weiter. Unterstützt absolute URLs (https://...), absolute Pfade (/...) und relative Pfade (./... oder ../...). Zeigt eine lokalisierte Weiterleitungsmeldung und setzt SEO-Metatags für Suchmaschinen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "title": "Redirect URL",
      "description": "The URL to redirect to. Can be an absolute URL (https://...), an absolute path (/...), or a relative path (./... or ../...)",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}

Widget: Kiosk

Title: Kiosk System Category: layout Description (EN): A kiosk system for digital signage with device pairing, application display, full-screen mode, and remote management capabilities. Description (DE): Ein Kiosk-System für Digital Signage mit Gerätekopplung, Anwendungsanzeige, Vollbildmodus und Fernverwaltungsfunktionen. Configuration Schema:

{}

Widget: OnePager

Title: One-Pager Category: layout Description (EN): A complete single-page website layout with configurable sections, sticky navigation, hero header, footer, and fully customizable colors designed for landing pages. Description (DE): Ein vollständiges Einzelseiten-Website-Layout mit konfigurierbaren Abschnitten, fixierter Navigation, Hero-Header, Fußzeile und vollständig anpassbaren Farben für Landing Pages. Configuration Schema:

{
  "type": "object",
  "properties": {
    "brandName": {
      "type": "string",
      "title": "Markenname",
      "description": "Name der Marke/Website"
    },
    "logo": {
      "type": "string",
      "title": "Logo URL",
      "description": "URL zum Logo-Bild"
    },
    "navigationItems": {
      "type": "array",
      "title": "Navigationselemente",
      "description": "Navigationselemente, die zu Seitenbereichen verlinken",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "title": "Beschriftung",
            "description": "Anzeigetext für das Navigationselement"
          },
          "sectionId": {
            "type": "string",
            "title": "Bereichs-ID",
            "description": "ID des Bereichs, zu dem gescrollt werden soll"
          }
        },
        "required": [
          "label",
          "sectionId"
        ]
      }
    },
    "backgroundColor": {
      "type": "string",
      "title": "Hintergrundfarbe",
      "description": "Haupthintergrundfarbe (CSS-Farbwert)",
      "default": "#ffffff"
    },
    "textColor": {
      "type": "string",
      "title": "Textfarbe",
      "description": "Haupttextfarbe (CSS-Farbwert)",
      "default": "#000000"
    },
    "navBackgroundColor": {
      "type": "string",
      "title": "Navigations-Hintergrundfarbe",
      "description": "Hintergrundfarbe der Navigationsleiste",
      "default": "#1e293b"
    },
    "navTextColor": {
      "type": "string",
      "title": "Navigations-Textfarbe",
      "description": "Textfarbe der Navigationsleiste",
      "default": "#ffffff"
    },
    "heroTitle": {
      "type": "string",
      "title": "Hero-Titel",
      "description": "Haupttitel des Hero-Bereichs",
      "default": "Welcome to my website"
    },
    "heroSubtitle": {
      "type": "string",
      "title": "Hero-Untertitel",
      "description": "Untertitel des Hero-Bereichs",
      "default": "We do amazing things"
    },
    "heroBackgroundColor": {
      "type": "string",
      "title": "Hero-Hintergrundfarbe",
      "description": "Hintergrundfarbe des Hero-Bereichs",
      "default": "#3b82f6"
    },
    "heroTextColor": {
      "type": "string",
      "title": "Hero-Textfarbe",
      "description": "Textfarbe des Hero-Bereichs",
      "default": "#ffffff"
    },
    "heroImage": {
      "type": "string",
      "title": "Hero-Bild URL",
      "description": "Optionale URL für das Hero-Bild",
      "default": ""
    },
    "sections": {
      "type": "array",
      "title": "Inhaltsbereiche",
      "description": "Array von Inhaltsbereichen für den One-Pager",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "title": "Bereichs-ID",
            "description": "Eindeutiger Bezeichner für den Bereich (verwendet in der Navigation)"
          },
          "title": {
            "type": "string",
            "title": "Titel",
            "description": "Bereichstitel"
          },
          "content": {
            "type": "string",
            "title": "Inhalt",
            "description": "Textinhalt des Bereichs"
          },
          "backgroundColor": {
            "type": "string",
            "title": "Hintergrundfarbe",
            "description": "Hintergrundfarbe des Bereichs (optional)"
          }
        },
        "required": [
          "id",
          "title",
          "content"
        ]
      },
      "default": [
        {
          "id": "about",
          "title": "About Us",
          "content": "We are a team dedicated to creating exceptional solutions.",
          "backgroundColor": "#f8fafc"
        },
        {
          "id": "contact",
          "title": "Contact",
          "content": "Get in touch with us today!",
          "backgroundColor": "#ffffff"
        }
      ]
    },
    "footerText": {
      "type": "string",
      "title": "Footer-Text",
      "description": "Footer Copyright-/Info-Text"
    },
    "footerLinks": {
      "type": "array",
      "title": "Footer-Links",
      "description": "Links, die im Footer angezeigt werden",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "title": "Beschriftung"
          },
          "href": {
            "type": "string",
            "title": "URL"
          }
        },
        "required": [
          "label",
          "href"
        ]
      },
      "default": [
        {
          "label": "Privacy",
          "href": "/privacy"
        },
        {
          "label": "Imprint",
          "href": "/imprint"
        }
      ]
    }
  }
}

Widget: AllDataTypesCounts

Title: Data Types Overview Category: data Description (EN): Automatically displays animated counters for all data types in the project with configurable time periods and visualization options. Description (DE): Zeigt automatisch animierte Zähler für alle Datentypen im Projekt mit konfigurierbaren Zeiträumen und Visualisierungsoptionen an. Configuration Schema:

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Widget: OnboardingTodo

Title: Onboarding Tasks Category: data Description (EN): Displays a checklist of onboarding tasks for new projects to help users get started with project setup and configuration. Description (DE): Zeigt eine Checkliste von Onboarding-Aufgaben für neue Projekte an, um Benutzern bei der Projekt-Einrichtung und -Konfiguration zu helfen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "title": {
      "type": "object",
      "title": "Title",
      "description": "The main title of the onboarding widget",
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget"
      },
      "default": {
        "en": "Getting Started",
        "de": "Erste Schritte"
      }
    },
    "subtitle": {
      "type": "object",
      "title": "Subtitle",
      "description": "The subtitle shown below the title",
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget"
      },
      "default": {
        "en": "Here are some tasks to get started with your project.",
        "de": "Hier sind einige Aufgaben, um mit deinem Projekt zu starten."
      }
    },
    "items": {
      "type": "array",
      "title": "Onboarding Items",
      "description": "List of onboarding tasks to display",
      "items": {
        "type": "object",
        "title": "Onboarding Item",
        "properties": {
          "title": {
            "type": "object",
            "title": "Item Title",
            "description": "Title of the onboarding item",
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget"
            }
          },
          "description": {
            "type": "object",
            "title": "Item Description",
            "description": "Description of the onboarding item",
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget"
            }
          },
          "icon": {
            "type": "string",
            "title": "Icon",
            "description": "FontAwesome icon class (e.g., fa-solid fa-puzzle-piece)"
          },
          "link": {
            "type": "string",
            "title": "Link",
            "description": "Navigation link. Use #{show projectId} to reference the current project ID."
          }
        },
        "required": [
          "title",
          "description",
          "icon"
        ]
      },
      "default": []
    }
  }
}

Widget: BlogPostOverview

Title: Blog Post Overview Category: content Description (EN): Displays all blog posts from a data type. Description (DE): Zeigt alle Blog-Posts aus einem Datentyp an. Configuration Schema:

{
  "type": "object",
  "properties": {
    "dataTypeId": {
      "type": "string",
      "title": "Blog Post Datentyp",
      "description": "Der Datentyp, der die Blog-Posts enthält.",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "basePath": {
      "type": "string",
      "title": "Basis-Pfad",
      "description": "Der Basis-Pfad für Blog-Post-Links (z.B. /blog/, /artikel/, etc.)",
      "default": "/blog/"
    }
  },
  "required": [
    "dataTypeId"
  ],
  "additionalProperties": false
}

Widget: BlogPost

Title: Blog Post Category: content Description (EN): Displays a blog post from a data type based on the slug route parameter. Includes author info, tags, EditorJS content rendering, and SEO meta tags. Description (DE): Zeigt einen Blog-Post aus einem Datentyp basierend auf dem Slug-Route-Parameter an. Enthält Autoreninformationen, Tags, EditorJS-Content-Rendering und SEO-Meta-Tags. Configuration Schema:

{
  "type": "object",
  "properties": {
    "dataTypeId": {
      "type": "string",
      "title": "Blog Post Datentyp",
      "description": "Der Datentyp, der die Blog-Posts enthält.",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "routeParameter": {
      "type": "string",
      "title": "Route Parameter Name",
      "description": "Der Name des Route-Parameters, der den Slug enthält (z.B. 'slug' für /blog/:slug)",
      "default": "slug",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "required": [
    "dataTypeId"
  ],
  "additionalProperties": false
}

Widget: AIAgentChat

Title: AI Agent Chat Category: utility Description (EN): A customizable AI chat widget that connects to configured AI agents with support for context, data access, and streaming responses. Description (DE): Ein anpassbares KI-Chat-Widget, das sich mit konfigurierten KI-Agenten verbindet und Kontext, Datenzugriff und Streaming-Antworten unterstützt. Configuration Schema:

{
  "type": "object",
  "properties": {
    "agentId": {
      "type": "string",
      "title": "AI Agent",
      "description": "Select the AI agent to use for this chat widget",
      "x-type-schema": {
        "inputWidget": "ForeignIdInputWidget",
        "inputWidgetConfiguration": {
          "foreignIdSelect": {
            "collectionName": "ai-agents",
            "hideCreateBtn": true
          }
        }
      }
    },
    "welcomeMessage": {
      "type": "string",
      "title": "Welcome Message",
      "description": "Optional welcome message to display when the chat opens",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "required": [
    "agentId"
  ]
}

Widget: PersonalAIChat

Title: Personal AI Assistant Category: utility Description (EN): A personal AI assistant that can access data across your projects. Description (DE): Ein persönlicher KI-Assistent, der auf Daten aus deinen Projekten zugreifen kann. Configuration Schema:

{
  "type": "object",
  "properties": {
    "welcomeMessage": {
      "type": "string",
      "title": "Welcome Message",
      "description": "Optional welcome message to display when the chat opens",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  }
}

Widget: ChangesFeed

Title: My Changes Feed Category: data Description (EN): Displays a personalized feed of recent changes made to entities across all projects, allowing users to track updates and modifications in real-time. Description (DE): Zeigt einen personalisierten Feed aktueller Änderungen an Entitäten in allen Projekten an, sodass Benutzer Updates und Änderungen in Echtzeit verfolgen können. Configuration Schema:

{}

Widget: SmartDashboard

Title: Smart Dashboard Category: data Description (EN): An adaptive dashboard that automatically detects and displays statistics for all data types in your project. Automatically adapts to the features and data models you create. Description (DE): Ein adaptives Dashboard, das automatisch Statistiken für alle Datentypen in Ihrem Projekt erkennt und anzeigt. Passt sich automatisch an die von Ihnen erstellten Funktionen und Datenmodelle an. Configuration Schema:

{}

Widget: TimeTrackingAvailableJobs

Title: Available Jobs Category: data Description (EN): Shows available jobs with the option to start and stop timers. Description (DE): Zeigt verfügbare Aufträge mit der Option, Timer zu starten und zu stoppen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "clientsTypeId": {
      "title": "Kunden Typ",
      "type": "string",
      "description": "Der Datentyp für Kunden",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "jobsTypeId": {
      "title": "Jobs Typ",
      "type": "string",
      "description": "Der Datentyp für Jobs",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "worklogsTypeId": {
      "title": "Arbeitsprotokolle Datentyp",
      "type": "string",
      "description": "Der Datentyp für Arbeitsprotokolle",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: TimeTrackingAllJobs

Title: All Jobs Category: data Description (EN): Shows all jobs with the option to start and stop timers. Description (DE): Zeigt alle Aufträge mit der Option, Timer zu starten und zu stoppen. Configuration Schema:

{
  "type": "object",
  "properties": {
    "clientsTypeId": {
      "title": "Kunden Typ",
      "type": "string",
      "description": "Der Datentyp für Kunden",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "jobsTypeId": {
      "title": "Jobs Typ",
      "type": "string",
      "description": "Der Datentyp für Jobs",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "worklogsTypeId": {
      "title": "Arbeitsprotokolle Datentyp",
      "type": "string",
      "description": "Der Datentyp für Arbeitsprotokolle",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: TimeTrackingWorklogs

Title: Work Logs Category: data Description (EN): Shows all work logs of the current user. Description (DE): Zeigt alle Arbeitsprotokolle des aktuellen Benutzers. Configuration Schema:

{
  "type": "object",
  "properties": {
    "clientsTypeId": {
      "title": "Kunden Typ",
      "type": "string",
      "description": "Der Datentyp für Kunden",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "jobsTypeId": {
      "title": "Jobs Typ",
      "type": "string",
      "description": "Der Datentyp für Jobs",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "worklogsTypeId": {
      "title": "Arbeitsprotokolle Datentyp",
      "type": "string",
      "description": "Der Datentyp für Arbeitsprotokolle",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: TimeTrackingActiveTimer

Title: Active Time Tracking Category: data Description (EN): Displays the employee's active timer and allows stopping timers. Description (DE): Zeigt den aktiven Timer des Mitarbeiters an und ermöglicht das Stoppen von Timern. Configuration Schema:

{
  "type": "object",
  "properties": {
    "clientsTypeId": {
      "title": "Kunden Typ",
      "type": "string",
      "description": "Der Datentyp für Kunden",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "jobsTypeId": {
      "title": "Jobs Typ",
      "type": "string",
      "description": "Der Datentyp für Jobs",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    },
    "worklogsTypeId": {
      "title": "Arbeitsprotokolle Datentyp",
      "type": "string",
      "description": "Der Datentyp für Arbeitsprotokolle",
      "x-type-schema": {
        "inputWidget": "TypeInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: UserProfile

Title: User Profile Category: content Description (EN): Displays information about the current user, including profile picture, name, email, and custom fields from the user data type. Description (DE): Zeigt Informationen über den aktuellen Benutzer an, einschließlich Profilbild, Name, E-Mail und benutzerdefinierter Felder aus dem Benutzerdatentyp. Configuration Schema:

{}

Widget: CurriculumVitae

Title: Curriculum Vitae Category: content Description (EN): Displays a full curriculum vitae in a modern two-column layout with configurable accent color and PDF download. Description (DE): Zeigt einen vollständigen Lebenslauf im modernen zweispaltigen Layout mit konfigurierbarer Akzentfarbe und PDF-Download. Configuration Schema:

{
  "type": "object",
  "properties": {
    "accentColor": {
      "type": "string",
      "title": "Accent Color",
      "description": "Hex color for accent elements (e.g. #d4a017)",
      "default": "#d4a017",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "lastUpdatedAt": {
      "type": "number",
      "title": "Last Updated At",
      "description": "Timestamp (ms since epoch) shown as Last updated date on the CV",
      "x-type-schema": {
        "inputWidget": "NumberInputWidget"
      }
    },
    "fullName": {
      "type": "string",
      "title": "Full Name",
      "default": "Jane Doe",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "encrypted": {
          "active": true,
          "keyName": "cv-password",
          "keyDescription": "Passwort für geschützte CV-Daten"
        }
      }
    },
    "jobTitle": {
      "type": "object",
      "title": "Job Title",
      "properties": {},
      "default": {
        "en": "Senior Software Engineer",
        "de": "Senior Softwareentwickler"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "tagline": {
      "type": "object",
      "title": "Tagline",
      "description": "A short personal pitch or motto",
      "properties": {},
      "default": {
        "en": "Building great software with passion",
        "de": "Großartige Software mit Leidenschaft entwickeln"
      },
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "photoUrl": {
      "type": "string",
      "title": "Photo URL",
      "description": "URL to the profile photo (square recommended)",
      "x-type-schema": {
        "inputWidget": "StringInputWidget",
        "encrypted": {
          "active": true,
          "keyName": "cv-password",
          "keyDescription": "Passwort für geschützte CV-Daten"
        }
      }
    },
    "contact": {
      "type": "object",
      "title": "Contact Information",
      "properties": {
        "email": {
          "type": "string",
          "title": "Email",
          "x-type-schema": {
            "inputWidget": "StringInputWidget",
            "encrypted": {
              "active": true,
              "keyName": "cv-password",
              "keyDescription": "Passwort für geschützte CV-Daten"
            }
          }
        },
        "phone": {
          "type": "string",
          "title": "Phone",
          "x-type-schema": {
            "inputWidget": "StringInputWidget",
            "encrypted": {
              "active": true,
              "keyName": "cv-password",
              "keyDescription": "Passwort für geschützte CV-Daten"
            }
          }
        },
        "website": {
          "type": "string",
          "title": "Website",
          "x-type-schema": {
            "inputWidget": "StringInputWidget"
          }
        },
        "github": {
          "type": "string",
          "title": "GitHub Username",
          "x-type-schema": {
            "inputWidget": "StringInputWidget",
            "encrypted": {
              "active": true,
              "keyName": "cv-password",
              "keyDescription": "Passwort für geschützte CV-Daten"
            }
          }
        },
        "linkedin": {
          "type": "string",
          "title": "LinkedIn URL or Username",
          "x-type-schema": {
            "inputWidget": "StringInputWidget",
            "encrypted": {
              "active": true,
              "keyName": "cv-password",
              "keyDescription": "Passwort für geschützte CV-Daten"
            }
          }
        },
        "location": {
          "type": "string",
          "title": "Location",
          "x-type-schema": {
            "inputWidget": "StringInputWidget",
            "encrypted": {
              "active": true,
              "keyName": "cv-password",
              "keyDescription": "Passwort für geschützte CV-Daten"
            }
          }
        }
      }
    },
    "about": {
      "type": "object",
      "title": "About / Summary",
      "description": "A short professional summary (supports markdown)",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        },
        "inputWidgetConfiguration": {
          "string": {
            "textarea": true,
            "rows": 6
          }
        }
      }
    },
    "experience": {
      "type": "array",
      "title": "Work Experience",
      "items": {
        "type": "object",
        "properties": {
          "role": {
            "type": "object",
            "title": "Role / Job Title",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "company": {
            "type": "string",
            "title": "Company",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "location": {
            "type": "string",
            "title": "Location",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "startMonth": {
            "type": "number",
            "title": "Start Month",
            "description": "Month (1-12)",
            "minimum": 1,
            "maximum": 12,
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "startYear": {
            "type": "number",
            "title": "Start Year",
            "description": "Year (e.g., 2020)",
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "endMonth": {
            "type": "number",
            "title": "End Month",
            "description": "Month (1-12). Leave empty for ongoing positions.",
            "minimum": 1,
            "maximum": 12,
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "endYear": {
            "type": "number",
            "title": "End Year",
            "description": "Year (e.g., 2023). Leave empty for ongoing positions.",
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "description": {
            "type": "object",
            "title": "Description (supports markdown)",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              },
              "inputWidgetConfiguration": {
                "string": {
                  "textarea": true,
                  "rows": 4
                }
              }
            }
          },
          "tags": {
            "type": "array",
            "title": "Tags",
            "description": "Tags for linking this experience to skills (matched case-insensitively against skill names)",
            "items": {
              "type": "string"
            },
            "x-type-schema": {
              "inputWidget": "TagsInputWidget"
            }
          },
          "pinned": {
            "type": "boolean",
            "title": "Pin to Highlights",
            "description": "Feature this entry in the Pinned Highlights section at the top of the CV",
            "default": false,
            "x-type-schema": {
              "inputWidget": "BooleanInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "skills": {
      "type": "array",
      "title": "Technical Skills",
      "items": {
        "type": "object",
        "properties": {
          "category": {
            "type": "object",
            "title": "Category (e.g. Frontend, Backend, DevOps)",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "items": {
            "type": "array",
            "title": "Skills in this category",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "title": "Skill Name",
                  "x-type-schema": {
                    "inputWidget": "StringInputWidget"
                  }
                },
                "level": {
                  "type": "number",
                  "title": "Proficiency Level (1-5, optional)",
                  "minimum": 1,
                  "maximum": 5,
                  "x-type-schema": {
                    "inputWidget": "NumberInputWidget"
                  }
                },
                "yearsOfExperience": {
                  "type": "number",
                  "title": "Years of Experience",
                  "description": "Total years of experience with this skill",
                  "minimum": 0,
                  "x-type-schema": {
                    "inputWidget": "NumberInputWidget"
                  }
                },
                "lastUsedYear": {
                  "type": "number",
                  "title": "Last Used Year",
                  "description": "Year the skill was last used (leave empty if still active)",
                  "x-type-schema": {
                    "inputWidget": "NumberInputWidget"
                  }
                }
              }
            },
            "x-type-schema": {
              "inputWidget": "ArrayInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "education": {
      "type": "array",
      "title": "Education",
      "items": {
        "type": "object",
        "properties": {
          "institution": {
            "type": "string",
            "title": "Institution",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "degree": {
            "type": "object",
            "title": "Degree",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "field": {
            "type": "object",
            "title": "Field of Study",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "startYear": {
            "type": "string",
            "title": "Start Year",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "endYear": {
            "type": "string",
            "title": "End Year",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "projects": {
      "type": "array",
      "title": "Side Projects",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "title": "Project Name",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "role": {
            "type": "string",
            "title": "Role",
            "description": "Your role in this project, e.g. \"Software Engineer\", \"Project Manager\"",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "description": {
            "type": "object",
            "title": "Description (supports markdown)",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              },
              "inputWidgetConfiguration": {
                "string": {
                  "textarea": true,
                  "rows": 4
                }
              }
            }
          },
          "tags": {
            "type": "array",
            "title": "Tags",
            "description": "Tags for linking this project to skills (matched case-insensitively against skill names)",
            "items": {
              "type": "string"
            },
            "x-type-schema": {
              "inputWidget": "TagsInputWidget"
            }
          },
          "repoUrl": {
            "type": "string",
            "title": "Repository URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "liveUrl": {
            "type": "string",
            "title": "Live Demo URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "startMonth": {
            "type": "number",
            "title": "Start Month",
            "description": "Month (1-12)",
            "minimum": 1,
            "maximum": 12,
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "startYear": {
            "type": "number",
            "title": "Start Year",
            "description": "Year (e.g., 2020)",
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "endMonth": {
            "type": "number",
            "title": "End Month",
            "description": "Month (1-12). Leave empty for ongoing projects.",
            "minimum": 1,
            "maximum": 12,
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "endYear": {
            "type": "number",
            "title": "End Year",
            "description": "Year (e.g., 2023). Leave empty for ongoing projects.",
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "pinned": {
            "type": "boolean",
            "title": "Pin to Highlights",
            "description": "Feature this project in the Pinned Highlights section at the top of the CV",
            "default": false,
            "x-type-schema": {
              "inputWidget": "BooleanInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "openSource": {
      "type": "array",
      "title": "Open Source Contributions",
      "items": {
        "type": "object",
        "properties": {
          "project": {
            "type": "string",
            "title": "Project Name",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "role": {
            "type": "object",
            "title": "Your Role",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "description": {
            "type": "object",
            "title": "Description",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              },
              "inputWidgetConfiguration": {
                "string": {
                  "textarea": true,
                  "rows": 3
                }
              }
            }
          },
          "url": {
            "type": "string",
            "title": "URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "contributions": {
      "type": "array",
      "title": "GitHub Contributions",
      "description": "Auto-synced GitHub contribution data from GitHub API",
      "default": [],
      "items": {
        "type": "object",
        "properties": {
          "repoName": {
            "type": "string",
            "title": "Repository Full Name",
            "description": "e.g. \"smallstack/business-platform\"",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "repoUrl": {
            "type": "string",
            "title": "Repository URL",
            "description": "Full GitHub URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "icon": {
            "type": "string",
            "title": "Language Icon",
            "description": "Language icon identifier or emoji",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "isPrivate": {
            "type": "boolean",
            "title": "Is Private Repository",
            "default": false,
            "x-type-schema": {
              "inputWidget": "BooleanInputWidget"
            }
          },
          "commitCount": {
            "type": "number",
            "title": "Commit Count",
            "description": "Number of commits in synced date range",
            "minimum": 0,
            "default": 0,
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "prCount": {
            "type": "number",
            "title": "Pull Request Count",
            "description": "Number of PRs in synced date range",
            "minimum": 0,
            "default": 0,
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "lastActivityDate": {
            "type": "string",
            "title": "Last Activity Date",
            "description": "ISO date string of most recent commit or PR",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        },
        "required": [
          "repoName",
          "repoUrl",
          "isPrivate",
          "commitCount",
          "prCount",
          "lastActivityDate"
        ]
      },
      "x-type-schema": {
        "inputWidget": "GitHubContributionsInputWidget"
      }
    },
    "blogAndTalks": {
      "type": "array",
      "title": "Blog Posts & Talks",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "object",
            "title": "Title",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "type": {
            "type": "string",
            "title": "Type",
            "enum": [
              "blog",
              "talk",
              "podcast",
              "video"
            ],
            "default": "blog",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "url": {
            "type": "string",
            "title": "URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "date": {
            "type": "string",
            "title": "Date",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "certifications": {
      "type": "array",
      "title": "Certifications",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "title": "Certification Name",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "issuer": {
            "type": "string",
            "title": "Issuer",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "date": {
            "type": "string",
            "title": "Date",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "url": {
            "type": "string",
            "title": "Verification URL",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "languages": {
      "type": "array",
      "title": "Spoken Languages",
      "items": {
        "type": "object",
        "properties": {
          "language": {
            "type": "string",
            "title": "Language",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "proficiency": {
            "type": "string",
            "title": "Proficiency",
            "enum": [
              "native",
              "fluent",
              "advanced",
              "intermediate",
              "basic"
            ],
            "default": "fluent",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "testimonials": {
      "type": "array",
      "title": "Testimonials / References",
      "items": {
        "type": "object",
        "properties": {
          "quote": {
            "type": "object",
            "title": "Quote",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              },
              "inputWidgetConfiguration": {
                "string": {
                  "textarea": true,
                  "rows": 3
                }
              }
            }
          },
          "author": {
            "type": "string",
            "title": "Author Name",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          },
          "role": {
            "type": "object",
            "title": "Author Role",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "company": {
            "type": "string",
            "title": "Company",
            "x-type-schema": {
              "inputWidget": "StringInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "sectionOrder": {
      "type": "array",
      "title": "Section Order & Visibility",
      "description": "Drag to reorder sections. Only listed sections are visible.",
      "items": {
        "type": "string",
        "enum": [
          "about",
          "experience",
          "skills",
          "education",
          "projects",
          "openSource",
          "contributions",
          "blogAndTalks",
          "certifications",
          "languages",
          "testimonials"
        ]
      },
      "uniqueItems": true,
      "default": [
        "about",
        "experience",
        "projects",
        "openSource",
        "contributions",
        "blogAndTalks",
        "certifications",
        "testimonials",
        "education",
        "languages",
        "skills"
      ],
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    }
  },
  "additionalProperties": false
}

Widget: CheckIn

Title: Check-in Category: content Description (EN): Visitor check-in widget with registration, QR code scanner, and privacy settings. Description (DE): Besucher-Check-in-Widget mit Registrierung, QR-Code-Scanner und Datenschutzeinstellungen. Configuration Schema:

{
  "type": "object",
  "title": "Check-in Widget",
  "properties": {
    "title": {
      "type": "object",
      "title": "Title",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "description": {
      "type": "object",
      "title": "Description",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "successSignInMessage": {
      "type": "object",
      "title": "Sign-In Success Message",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "successSignOutMessage": {
      "type": "object",
      "title": "Sign-Out Success Message",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "smallPrint": {
      "type": "object",
      "title": "Small Print",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "scannerEnabled": {
      "type": "boolean",
      "title": "QR Scanner",
      "description": "Show QR scanner button for returning visitors",
      "default": true,
      "x-type-schema": {
        "inputWidget": "BooleanInputWidget"
      }
    },
    "scannerButtonText": {
      "type": "object",
      "title": "Scanner Button Text",
      "properties": {},
      "additionalProperties": {
        "type": "string"
      },
      "propertyNames": {
        "pattern": "^[a-z]{2}$",
        "title": "Language code",
        "description": "ISO 639-1 language code"
      },
      "x-type-schema": {
        "inputWidget": "InlineTranslationInputWidget",
        "viewWidget": {
          "name": "InlineTranslationViewWidget"
        },
        "sampleData": {
          "generatorName": "faker.custom.i18nWords",
          "generatorContext": {
            "minWords": 1,
            "maxWords": 3
          }
        }
      }
    },
    "deletionPeriods": {
      "type": "array",
      "title": "Deletion Periods",
      "description": "Data retention periods visitors can choose from",
      "items": {
        "type": "object",
        "properties": {
          "duration": {
            "type": "number",
            "title": "Duration (ms)",
            "x-type-schema": {
              "inputWidget": "NumberInputWidget"
            }
          },
          "label": {
            "type": "object",
            "title": "Label",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "pattern": "^[a-z]{2}$",
              "title": "Language code",
              "description": "ISO 639-1 language code"
            },
            "x-type-schema": {
              "inputWidget": "InlineTranslationInputWidget",
              "viewWidget": {
                "name": "InlineTranslationViewWidget"
              },
              "sampleData": {
                "generatorName": "faker.custom.i18nWords",
                "generatorContext": {
                  "minWords": 1,
                  "maxWords": 3
                }
              }
            }
          },
          "isDefault": {
            "type": "boolean",
            "title": "Default",
            "x-type-schema": {
              "inputWidget": "BooleanInputWidget"
            }
          }
        }
      },
      "x-type-schema": {
        "inputWidget": "ArrayInputWidget"
      }
    },
    "visitorTypeId": {
      "type": "string",
      "title": "Visitor Type",
      "description": "Reference to the visitor data type",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "visitorEventTypeId": {
      "type": "string",
      "title": "Visitor Event Type",
      "description": "Reference to the visitor event data type",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    },
    "contactsTypeId": {
      "type": "string",
      "title": "Contacts Type",
      "description": "Reference to the contacts data type for contact person selection",
      "x-type-schema": {
        "inputWidget": "StringInputWidget"
      }
    }
  },
  "additionalProperties": false
}