JobyKit (JobyKit v0.1.0)

Copy Markdown View Source

An opinionated, agentic-first design-system kit for Phoenix + daisyUI apps.

JobyKit ships:

  • A small JobyKit.Manifest behaviour for hosts to declare their UI component inventory.
  • A JobyKit.PageComponent function component that renders a discoverable, machine-readable design page from any manifest module.
  • A JobyKit.ManifestController that 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
end

Then 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>
"""