v0.1.0
Initial release. JobyKit ships:
Manifest + design pages
JobyKit.Manifest— behaviour +__using__macro for declaring a host component manifest.category/2andcomponent/3macros register entries;@before_compilegeneratesentries/0,by_category/0,categories/0,category_label/1,category_description/1,fetch/2callbacks. The runtimeenrich/1helper introspects each component's attrs/slots viaPhoenix.Component.__components__/0so prop signatures never drift from source.JobyKit.Contract— universal contract content (5-step build order, 5-rule wrapper checklist, 3-layer module taxonomy) as plain data.JobyKit.DaisyCatalogue— canonical list of every daisyUI primitive (62 entries across 7 daisy categories), with stable atom IDs, default statuses, amerged/1overlay that applies host overrides, and ademo/1function component dispatched per primitive.JobyKit.SignatureComponent— per-component signature card renderer.JobyKit.PageComponent— two function components for the design surfaces:page_component/1— the kit's curated/designpage (filters to:coreonly). Optional:custom_pathattr renders an agent-redirect callout pointing new components to the host's custom-designs page.custom_page_component/1— host's/custom-designspage (renders only non-:coreentries) with a breadcrumb back to the kit page.
JobyKit.ManifestController— JSON endpoint serving the combined manifest (kit core + composites + domain) at/design.json. Reads the manifest module fromconn.private[:joby_kit_manifest].
Core components
JobyKit.CoreComponents— kit-shipped wrappers that hosts import:button/1,card/1,header/1,icon/1,input/1,flash/1,flash_group/1,list/1,table/1. Each carriesdata-component="JobyKit.CoreComponents.<name>", declares attrs withvalues:enums, acceptsattr :rest, :global, and treatsclassas additive on top of the daisy primitive class set. Plusshow/2/hide/2JS helpers and a Gettext-freetranslate_error/1.JobyKit.NavComponent—simple_nav/1, a daisyUI navbar primitive with active-link highlighting. Used in the kit-flavoredLayouts.appgenerated bymix joby_kit.new.
Patchers (idempotent host-file editors)
JobyKit.AgentsMd— patches the host'sAGENTS.mdto (a) append the JobyKit guidelines section and (b) walk a list of rule-rewrites that replace stale Phoenix-default rules now superseded by the kit. Four rewrites ship: anti-daisy line,<.input>source rule,<.input>class-override rule,<.icon>source rule.JobyKit.AppCss— adds@source "../../deps/joby_kit/lib";to the host'sassets/css/app.cssso Tailwind v4 scans the kit for class names.JobyKit.NavPatcher— locates the first<nav>or<header>+</ul>in the host'sapp.html.heex(orlayouts.exas a fallback) and inserts kit nav links wrapped in<%!-- jobykit:nav-* --%>markers. Idempotent.
Linting
JobyKit.Lint— engine that verifies the wrapper contract by introspecting a manifest module and scanning the host's source. Four rules::manifest_drift(entry points at non-existent function),:missing_data_component(registered wrapper missing the attribute),:missing_rest_global(registered wrapper missingattr :rest, :global),:unregistered_wrapper(function emitsdata-componentbut isn't in the manifest).
Mix tasks
mix joby_kit.install— installs into an existing Phoenix project: generatesdesign_manifest.ex,design_previews.ex, the two design LiveViews, patchesAGENTS.md, patchesassets/css/app.css, and patches the host's nav with/design//custom-designslinks.mix joby_kit.bootstrap— composesinstallwith greenfield steps for an already-generatedphx.newproject: replaces the default HomeLive, rewiresrouter.ex, and removes the unused PageController/PageHTML.mix joby_kit.new <app_name>— wrapsmix phx.newto generate a new Phoenix app with JobyKit baked in: replaces<app>_web.ex, layouts, and router with kit-flavored variants; deletes the redundant Phoenix scaffolding; runsmix joby_kit.install; runsmix assets.setupandmix assets.buildsomix phx.serverworks on the first try.mix joby_kit.gen.wrapper <name>— scaffolds a new wrapper component end-to-end: function skeleton with the contract baked in, manifest entry registered, preview function added.mix joby_kit.lint— CLI for the lint engine. Auto-detects the host's manifest, supports--format jsonfor agent consumption, and--strictto fail on warnings.