An opinionated, agentic-first design-system kit for Phoenix + daisyUI apps.
JobyKit ships:
- A small
JobyKit.Manifestbehaviour for hosts to declare their UI component inventory. - A
JobyKit.PageComponentfunction component that renders a discoverable, machine-readable design page from any manifest module. - A
JobyKit.ManifestControllerthat serves the same data as JSON for coding agents. - A daisyUI catalogue indexing every primitive in the substrate so the next person reaching for a tab strip / modal / dropdown / skeleton can confirm it already exists before reinventing it.
- The contract content (decision tree, wrapper rules, taxonomy) — universal to every consumer, not host-specific.
Hosts own their wrapper components (in core_components.ex), their manifest
declaration, their preview functions, and their skin CSS. JobyKit provides
the rendering surface and the contract.
Minimal install
defmodule MyAppWeb.DesignManifest do
use JobyKit.Manifest
category :core,
label: "Core wrappers",
description: "One wrapper per daisyUI primitive. Live in core_components."
component MyAppWeb.CoreComponents, :button,
category: :core,
daisy_basis: "btn",
summary: "Standard text button.",
preview: &MyAppWeb.DesignPreviews.button/1
endThen in router.ex:
live "/design", MyAppWeb.DesignSystemLive, :index
get "/design.json", JobyKit.ManifestController, :show,
private: %{joby_kit_manifest: MyAppWeb.DesignManifest}And in your LiveView:
def render(assigns), do: ~H"""
<Layouts.app flash={@flash}>
<JobyKit.PageComponent manifest={MyAppWeb.DesignManifest} />
</Layouts.app>
"""