Jason Poindexter
Case study / FABRK / Solo product, UX, and engineering

Copied infrastructure kept drifting. I turned the repeated work into inspectable contracts.

FABRK came out of the same SaaS work showing up in project after project. I pulled the interface patterns, service adapters, configuration, and runtime into packages that a developer or coding agent can adopt one at a time. This case starts with the reuse problem, then shows the package map, flows, wireframes, component contracts, dashboard states, architecture, and published code.

Role
Solo product, UX, docs, and engineering
Observed user
Jason across repeated application builds
Published proof
13 npm packages with package-level AGENTS.md
Status
Shipped code, no external adoption claim
What it is

A shared system for the application work that kept returning.

Auth, billing, dashboards, tables, themes, storage, email, security, and AI tooling kept returning. My first answer was a large boilerplate. That became another thing to copy and maintain. FABRK moves the reusable work into focused packages with typed exports, provider boundaries, documentation, and package-specific instructions for coding agents.

The problem

The first copy was fast. Every copy after that became a maintenance decision.

A fix in one application did not reach the others. Agent sessions produced different interface patterns for the same job. The boilerplate grew until taking one useful part meant taking the whole stack. I needed smaller boundaries that made states, ownership, and runtime cost visible.

  • 01Copied applications drifted after the first project, so fixes stayed local.
  • 02Coding agents generated different shells, tables, colors, and state handling for the same product jobs.
  • 03The package map grew, was consolidated, and grew again as the framework boundary changed.
  • 04Public component, theme, and test counts did not always describe the same source surface.
  • 05The system shipped code before it had external task, adoption, or retained-use evidence.
Framing and evidence

Start with the problem, not the finished interface.

FABRK began with work I was tired of rebuilding. I mapped those repeated jobs into packages, agent-readable contracts, application flows, wireframes, and an optional runtime.

Observed evidence comes from the active repository at commit 4ad10c2, its package manifests, CLI code, examples, published npm versions, docs, changelog, and the portfolio's live package imports. The project has no external interview study or adoption dataset. The sitemap, flows, SWOT, component contracts, and wireframes are reconstructions from that record.

Project frame

Problem, users, team, and method

observed
How might repeated SaaS infrastructure become a stable system that developers and coding agents can import, inspect, and verify without cloning one large boilerplate into every project?
  1. 01Audit
  2. 02Bound
  3. 03Map
  4. 04Extract
  5. 05Verify
  6. 06Publish
Problemobserved

Auth, billing, dashboards, tables, themes, and AI tooling kept returning across projects. Copies drifted, fixes stayed local, and coding agents produced different interface patterns for the same job.

Goalobserved

Replace copied application code with focused packages, documented component contracts, provider adapters, and a runtime that can be adopted one layer at a time.

Teamobserved

Solo product, UX, system design, documentation, and engineering by Jason Poindexter. Claude Code was used as an implementation tool. No human product team or research team is claimed.

Usersobserved

Observed user: Jason, reusing the same product infrastructure across projects. Intended users: developers and coding agents shipping more than one application. No external usability study or adoption evidence exists yet.

Methodobserved

Source audit, prior-boilerplate extraction, package consolidation, package-level AGENTS.md files, example applications, adversarial security passes, npm publishing, and dogfooding in the docs and this portfolio.

Constraintsobserved

The system is early. Node and worker build branches are present, but four-host execution was not verified. The recorded test count is dated 7 March 2026, component counts conflict, and the theme package does not expose all named palettes as one registry.

Research findings

What the evidence says is broken

6 issues
01P0executed

Copied boilerplates drifted after the first project.

Evidence
The project history records repeated auth, billing, dashboard, table, theme, and AI patterns whose fixes did not move between copied applications.
Design response
Extract the shared contracts into focused npm packages so one fix can move through a versioned dependency instead of another manual copy.
02P1partial

Coding agents produced different structures for the same interface job.

Evidence
The launch notes record recurring custom sidebars, tables, hardcoded colors, and styling approaches across agent sessions.
Design response
Give agents typed imports, semantic tokens, and one AGENTS.md per package. The contract exists; a comparative agent-output study does not.
03P1executed

The package map became harder to reason about as scope grew.

Evidence
The changelog records a reduction from seventeen packages to twelve, then a return to thirteen when the framework runtime was added.
Design response
Keep package boundaries tied to one responsibility and preserve the ability to install only the interface, service, or runtime layer a project needs.
04P1partial

Owning the runtime created a larger verification surface.

Evidence
The repository contains separate Node and worker build paths, while the roadmap records production SSR, error-boundary, metadata, and end-to-end gaps.
Design response
Describe Node and worker as the observed build targets. Treat Deno and Bun as portability goals until clean builds and smoke runs are recorded.
05P1partial

Public counts and package contracts drifted apart.

Evidence
The component inventory uses conflicting totals, the test count is a dated cache, and eighteen theme names are declared while the exported theme registry contains one terminal theme.
Design response
Date every count, define what is counted, and separate declared theme names from palettes actually distributed by the package.
06P2proposed

The system has shipped code but not external product evidence.

Evidence
Thirteen packages are published and live imports render, but the record contains no external task study, retained-use data, or adoption evidence.
Design response
Run clean-room setup, component-assembly, failure-recovery, and agent-output comparisons with developers outside the project.

Status reports the July 2026 audit record. Proposed work is not presented as shipped.

Constraint analysis

SWOT reconstructed from the project record

reconstructed

Strengths

Internal / helpful
  • Thirteen packages are published and each package includes agent-readable guidance.
  • The docs site and this portfolio import published packages instead of copying their source.
  • Provider adapters keep payments, storage, email, auth, and AI behind stable interfaces.

Weaknesses

Internal / harmful
  • The runtime and package surface create broad compatibility, security, and release work.
  • The system is early and has no external usability, adoption, or retained-use evidence.
  • Component, theme, and test counts need clearer definitions and current execution receipts.

Opportunities

External / helpful
  • A comparative task study could measure whether agent-readable contracts reduce generated-code drift.
  • Clean-room developer tests could reveal which package boundaries help and which create setup cost.
  • Node and worker receipts could become a repeatable portability test before adding more hosts.

Threats

External / harmful
  • React, Vite, provider, and platform APIs can change faster than a solo maintainer can respond.
  • Agents may still generate local code instead of accepting a dependency.
  • An owned runtime can distract from the smaller component and adapter jobs that already work.
This is an analytical reconstruction, not a claim that a formal SWOT workshop occurred.
Structure and interaction

Map the work before showing the finish.

The information architecture, user tasks, screen inventory, connected wireflow, individual frames, and implementation boundary are kept in one sequence.

Information architecture

FABRK sitemap

reconstructed
  • FABRK
    • LearnUnderstand the boundary
      • Docs home
      • Getting started
      • Architecture
      • Packages
      • Components
    • CreateGenerate a local project
      • Project name
      • Template choice
      • Generated project
      • .fabrk directory
      • Local application
    • ComposeAdd shared capability
      • Application shell
      • Component families
      • Design system
      • Service adapters
      • Agent guidance
    • VerifyCheck the contract
      • fabrk check
      • Type check
      • Package tests
      • Node build
      • Worker build
    • EvidenceInspect what runs
      • Docs site
      • Component sheet
      • Demo dashboard
      • npm packages
      • Portfolio dogfood
The hierarchy is redrawn as a semantic tree. Connectors show parent and child relationships and collapse into a vertical reading order on narrow screens.
User flows

3 complete paths, including recovery

reconstructed
01

Scaffold and run a project

Get from an empty directory to a valid local application.

  1. 01Developer or agent

    Run create-fabrk-app with optional name or template

  2. 02CLI

    Prompt for any missing project name and template

  3. 03CLI

    Reject an invalid name, unknown template, or existing directory

  4. 04CLI

    Copy the template and rewrite its package name

  5. 05CLI

    Optionally run pnpm install, initialize Git, and generate .fabrk

  6. 06Developer or agent

    Enter the project and run fabrk dev

Recovery branch

Invalid input exits before a project is written. An install or Git failure stops the command after copying has begun, so the user must inspect or remove the partial directory before retrying. The CLI does not currently roll the directory back.

02

Assemble a dashboard from shared parts

Build the dashboard from documented parts instead of drawing it again.

  1. 01Developer or agent

    Open the component catalog

  2. 02Docs or AGENTS.md

    Group exports by job and show supported imports

  3. 03Developer or agent

    Choose a shell, data display, chart, form, or feedback family

  4. 04Application

    Import components from @fabrk/components

  5. 05Design system

    Apply semantic tokens and the selected color-theme name

  6. 06Developer or agent

    Review loading, empty, partial, error, and ideal states

Recovery branch

If an import or prop contract fails, return to the package type signature and component reference. Theme palettes require application CSS, so a named theme without matching variables must fall back visibly instead of appearing complete.

03

Add a capability and verify the build

Add one capability behind an adapter, then check the application still builds.

  1. 01Developer or agent

    Choose a focused package

  2. 02Package docs

    Show adapter, store, environment, and configuration contracts

  3. 03Developer or agent

    Select the provider and permission scope

  4. 04Application

    Register the provider behind the package interface

  5. 05Quality system

    Run type checks, package tests, and a Node or worker build

  6. 06Developer or agent

    Record the executed target and result

Recovery branch

fabrk check reports environment and file presence plus agent or tool discovery, but it does not semantically validate every config value. Provider, type, test, and build failures still require their own command output and repair path.

Application map

Screens, purposes, and routes

12 screens

Learn

Docs homeobserved

Define the system boundary and route a new user to the shortest useful starting point.

Primary actionStart a project
Current versionSearch readyNavigation collapsed
Getting startedPackagesComponentsDemo
Getting startedobserved

Move from the install command to the first local application.

Primary actionRun the scaffold command
PrerequisitesInstallFirst runFailure guidance
ConfigurationProject structureCLI
Package referenceobserved

Explain one package boundary, exports, dependencies, and usage.

Primary actionInstall one package
OverviewAPIExampleRelated package
API detailsExampleRelated package
Architecturereconstructed

Explain which layer owns runtime, interface, services, adapters, and evidence.

Primary actionChoose the smallest layer
Package viewRuntime viewDependency view
Package referenceFramework referenceExample

Assemble

Component catalogobserved

Browse the shared interface system by product job.

Primary actionOpen a component
SearchCategory filterNo resultsResults
Component detailTemplateDemo
Component detailobserved

Show import, live preview, variants, API, and accessibility guidance.

Primary actionCopy the import
DefaultInteractiveLoadingInvalidDisabled
CatalogRelated componentSource
Application shellreconstructed

Combine navigation, header, status, content, and action regions without creating another one-off shell.

Primary actionAdd the product content
WideNarrowMobileNo dataError
Component detailDashboard stateTemplate
Adapter setupobserved

Select one provider behind a stable payment, storage, email, auth, or AI interface.

Primary actionConfigure the adapter
In-memoryConfiguredMissing environmentProvider failure
Package referenceLocal applicationCheck result

Prove

Demo dashboardobserved

Show shell, metrics, charts, tables, feedback, and responsive states in one assembled surface.

Primary actionInspect a component path
LoadingEmptyPartialIdealError
Component detailTemplateDocs home
CLI createobserved

Prompt only for missing project name and template, then write the chosen project.

Primary actionCreate the project
PromptCopyingInstallingGit setupFailed
Generated projectLocal applicationPartial directory
CLI checkobserved

Report Node version, expected files, and whether discovered agents and tools can load.

Primary actionResolve reported issues
All checks passedWarningsIssues found
Fix guidanceBuildAgent inventory
Build resultobserved

Separate the client, server, static, sitemap, and agent-document outputs of a build.

Primary actionRun the selected output
Node targetWorker targetBuild failureComplete
Failed stepdist/clientdist/serverRelease evidence
Route labels describe the next reachable state. They are not navigation labels unless the current product uses the same wording.
Connected wireflow

From the docs to a checked application.

reconstructed

The flow covers three jobs: create a project, assemble a dashboard, and recover from a failed check. The lower branch keeps that recovery gap visible.

Low-fidelity screens connected from setup and work through approvals, outputs, receipts, and recovery.startrunwritenextopenusecheckissuesfixpassworker01Docs homeChoose a path02Getting startedRead prerequisites03CLI createName and template04Project readyFiles written05Component catalogBrowse by job06Component detailInspect contract07Application shellAssemble states08Check resultReview issues09Failed checkPreserve evidence10Fix guidanceCorrect the contract11Node buildExecuted target12Worker buildExecuted target
01
Docs homeChoose a path
  • startGetting started
02
Getting startedRead prerequisites
  • runCLI create
03
CLI createName and template
  • writeProject ready
04
Project readyFiles written
  • nextComponent catalog
05
Component catalogBrowse by job
  • openComponent detail
06
Component detailInspect contract
  • useApplication shell
07
Application shellAssemble states
  • checkCheck result
08
Check resultReview issues
  • issuesFailed check
09
Failed checkPreserve evidence
  • fixFix guidance
10
Fix guidanceCorrect the contract
  • passNode build
11
Node buildExecuted target
  • workerWorker build
12
Worker buildExecuted target

End state

The desktop canvas keeps every connector attached to its frame. Narrow screens use the same routes as a vertical wireflow so the sequence stays readable without sideways scrolling.
Component contracts

The interface is organized by product job, anatomy, and state.

6 families

The examples are real exports. I reconstructed the anatomy and state requirements from the component code and the jobs each family covers.

01

Application shell

reconstructed

Keep navigation, page identity, status, actions, and product content in one stable frame.

Anatomy
NavigationHeaderMain regionAction slotUser/status
States
WideNarrowMobileActive routeSigned out
Examples
DashboardShellDashboardHeaderSidebar
02

Data and metrics

reconstructed

Support exact lookup, comparison, filtering, selection, and status review.

Anatomy
TitleValue or rowsContextFilter/sortRow action
States
LoadingEmptyPartialIdealError
Examples
DataTableKpiCardStatsGrid
03

Charts

reconstructed

Answer one comparison, trend, distribution, or status question without replacing exact data.

Anatomy
Question titleScaleMarksDirect labelsData table
States
LoadingNo dataDataOutlierError
Examples
BarChartLineChartGaugeSparkline
04

Forms and actions

reconstructed

Collect input, explain requirements, and keep validation attached to the field or action.

Anatomy
LabelControlHelperErrorPrimary action
States
RestFocusFilledLoadingInvalidDisabled
Examples
ButtonInputSelectForm
05

Feedback and recovery

reconstructed

Explain what happened, what was preserved, and the next safe action.

Anatomy
StatusMessageEvidenceRecovery actionDismiss
States
InfoWarningFailureSuccessBusy
Examples
AlertLoadingEmptyStateErrorBoundary
06

AI and administration

reconstructed

Expose conversation, audit, health, permissions, and system state without mixing them into generic cards.

Anatomy
ScopeStatusContentEvidenceAction
States
IdleRunningAwaiting inputFailedComplete
Examples
AiChatAuditLogSystemHealthWidget
The family map names anatomy and state requirements before the component catalog. It documents the contract a developer or coding agent must preserve.
Dashboard state matrix

One dashboard shell must survive five data conditions.

5 states

The shell stays put across loading, empty, partial, error, and ideal states. Only the evidence, action, and recovery path change.

01

Loading

Is the system fetching the dashboard data?

reconstructed
Nav
Page identity / pending
Metric
Metric
Metric
Chart
Table
System response

Preserve the shell and reserve the final layout so content does not jump when data arrives.

Primary actionWait or leave safely
02

Empty

What should happen before this project has data?

reconstructed
Nav
Page identity / no data
Empty state / setup / action
System response

Explain why the dashboard is empty and route to the first useful setup action.

Primary actionCreate the first project
03

Partial

Which parts work and which still need attention?

reconstructed
Nav
Page identity / partial
Metric
Metric
Missing
Available trend
Warning / fix
System response

Show available evidence first, mark missing sources, and keep the warning attached to the affected region.

Primary actionResolve the missing source
04

Error

What failed, what remains, and how can the user recover?

reconstructed
Nav
Page identity / failed
Failure / preserved state
Retry / logs
System response

Keep the last safe shell, name the failed source, preserve prior data when possible, and offer logs plus retry.

Primary actionRetry the failed source
05

Ideal

Is the project healthy, changing, and ready for the next decision?

reconstructed
Nav
Page identity / current
Status
Build
Issues
Build health
Check results
System response

Lead with current status, then show the trend, exact records, and recent activity needed to decide.

Primary actionOpen the item that needs attention
These are low-fidelity state contracts, not screenshots of a finished analytics product. Each view answers one question and keeps loading, absence, failure, and recovery explicit.
Wireframes

Structure and state before visual finish

8 frames
01

Docs home

One starting choice, framework proof, package index, and direct route to the demo.

reconstructed
Global docs navigation and search
Framework proposition and install command
Version, evidence status, and build targets
Start, framework, packages, and demo routes
Primary actionStart a project
States

Current / Search open / Navigation collapsed

02

Getting started

Installation, project structure, first route, and the checks required before moving on.

reconstructed
Documentation tree
Ordered setup guide and code
On-page sections and next step
Primary actionRun create-fabrk-app
States

Prerequisites / Install / First run / Failure guidance

03

Package reference

Boundary, installation, exports, configuration, examples, and related packages.

reconstructed
Package identity and install command
Purpose, dependencies, and example
Exports and related packages
API details and checks
Primary actionInstall the package
States

Overview / Exports / Example / Related package

04

Component catalog

Search and product-job grouping lead to a component, template, or assembled demo.

reconstructed
Search, category, and result count
Shell and navigation family
Data and metrics family
Forms and actions family
Charts family
Feedback family
AI and admin family
Primary actionOpen a component
States

Loading / Results / Filtered / No results

05

Component detail

Import, anatomy, live state, API, accessibility, and known limits stay together.

reconstructed
Component identity and import
Preview and state controls
Anatomy and token contract
API table
Accessibility and limitations
Primary actionCopy the import
States

Default / Focus / Loading / Invalid / Disabled

06

Demo dashboard

An assembled application proves the shell, data, charts, feedback, and responsive states together.

reconstructed
Dashboard navigation
Header and primary action
Metric
Metric
Metric
Chart
Status and alerts
Primary actionOpen the item that needs attention
States

Loading / Empty / Partial / Ideal / Error

07

CLI create

Project name and template are the only prompts. Install and Git can be skipped with flags.

reconstructed
Command and current phase
Project name
Template choice
Progress, output, error, and next command
Primary actionCreate the project
States

Prompt / Copying / Installing / Git setup / Failed / Complete

08

CLI check

The check reports environment and project-shape evidence. It does not replace semantic config validation or a build.

reconstructed
Version and project scope
Node, package, config, app, Vite, TypeScript
Agents, tools, warnings, and issue count
Next command or recovery action
Primary actionResolve the first issue
States

Passed / Warnings / Issues found

Reconstructed frames document current structure. Proposed frames name an unresolved or future state and should not be read as shipped UI.
System architecture

Focused packages replace the copied application.

observed

This comes from the active monorepo. A project can stop at components or adapters, or add the runtime when it needs routing, SSR, tools, and build targets.

01
Applications and proofThe places where the system is assembled and inspected
DocsFramework demoDashboard templatePortfolio dogfood
02
Framework runtimeOptional application composition and developer commands
Vite pluginRoutingSSRMiddlewareAgentsToolsNode buildWorker build
03
Interface contractsReusable shell, components, tokens, and state patterns
ComponentsDesign systemComponent docsAGENTS.md
04
Service contractsCapabilities behind provider and store boundaries
AuthPaymentsAISecurityEmailStoragePrisma stores
05
FoundationShared configuration, utilities, package graph, and external adapters
ConfigCoreIn-memory storesProvider adaptersnpm
Execution sequence
  1. Developer or agent chooses a package or scaffold
  2. The package contract and AGENTS.md define the supported surface
  3. The application imports components or service adapters
  4. The design system and config supply shared rules
  5. The optional runtime discovers routes, middleware, agents, and tools
  6. Type, test, Node, or worker commands produce the execution receipt
System decisions

The package boundary became the product boundary.

The maps above show the jobs and boundaries before the finished examples. The decisions below connect those structures to the source, the package history, and the evidence I actually have.

01

Extract focused packages instead of copying another application

One responsibility gets one versioned place to change. I split components, configuration, auth, payments, email, storage, security, AI, persistence, scaffolding, and the optional runtime into separate packages. A project can import a button or provider adapter without taking the application shell. The active repository has thirteen package directories, and all thirteen names are published on npm.

13 package manifests verified in the active repository13 corresponding package names verified on npm
Adopt the smallest useful layer
import {
  DashboardShell,
  KpiCard,
  DataTable,
} from '@fabrk/components'

import { createConfig } from '@fabrk/config'
import { createPaymentAdapter } from '@fabrk/payments'
02

Consolidate when the package graph stops explaining itself

A package is useful only when its responsibility stays legible. The package count fell from seventeen to twelve, then returned to thirteen when the runtime became its own responsibility. I kept that history because it shows where an earlier boundary created more navigation and release work than it saved.

Package history recorded as 17, then 12, then 13 packagesCurrent package ownership mapped in the architecture above
03

Write the contract for people and coding agents

Types say what compiles. The package guide says what belongs. Every current package contains an AGENTS.md file beside its typed exports. The guide says what the package is for, what belongs inside it, and which checks must pass. That contract exists in the repository. I have not yet shown that an external developer or agent works better with FABRK than without it.

AGENTS.md present in all 13 package directoriesNo comparative agent-output study exists yet
04

Treat the runtime as optional and expensive

The shared parts should not require ownership of the entire stack. The framework package adds file-system routing, server rendering, middleware, agents, tools, build output, and developer commands. The active source has Node and worker build branches. Project copy also names Deno and Bun, but I do not present them here as working targets without clean build and smoke-run receipts.

Node and worker build paths present in sourceDeno and Bun remain unverified portability goals in this case
05

Separate shipped code from current verification

A dated count is a record, not a live test result. The repository records 3,221 tests on 7 March 2026 and twelve rounds of adversarial security work. I did not rerun the full suite for this case study. The number stays dated. Package manifests, live imports, source inspection, and current builds are separate evidence.

3,221-test record dated 7 March 2026No claim that the full suite was rerun for this case
Implementation proof

The finished surfaces come after the system map.

The artifacts below show the published components, documented states, assembled screens, and two public product surfaces. They prove the code and interfaces exist. They do not prove adoption or usability.

Component evidence

The library reads as one working system.

The playground below comes from the FABRK product repository and renders the published package inside this case study. Its states, controls, and responsive behavior come from the same component system a project installs.

>FABRK component playground
Source: apps/fabrk-product
Performance metrics and key insights.

Documentation sections

Documentation.pdf API-Guide.md

[DROPDOWN MENU]

[LOADING...]

[PROGRESS]

Upload0%
ProjectsDashboard

[BADGES]

DefaultSecondaryOutlineError

[NO DATA]

No items found

[RADIO GROUP]

[SWITCHES]

[DATA TABLE]

Users1,234+12%
Revenue$45.2K+8%

[ACTIVE FILTERS]

Status: active Role: admin

[TIMESTAMPS]

Last updated: 2 min ago Created: Dec 11, 2025

[LIVE STATS]

Live
MRR$12,450 15.3%
Active users847 +23
Conversion4.2%

[SLIDER]

Value: $400

[CHECKBOXES]

[SELECT MENU]

[INPUT TYPES]

[BUTTON GROUP]

Selected exports verified in the component inventory

Application shell

DashboardShellNavigation, mobile state, content, and user region
DashboardHeaderPage identity, context, and action slot
SidebarPrimary product navigation
ContainerResponsive content boundary

Data and metrics

DataTableSorting, filtering, pagination, and selection
KpiCardMetric, context, and change
StatsGridResponsive group of comparable metrics
JsonViewerCollapsible structured data

Charts

BarChartCategorical comparison
LineChartChange over time
GaugeValue against a bounded range
SparklineCompact trend inside a row or card

Forms and actions

ButtonPrimary, secondary, loading, and disabled actions
InputText input with label and validation support
SelectBounded option selection
FormField registration and validation wrappers

Feedback and recovery

AlertStatus and corrective guidance
LoadingPending content state
EmptyStateNo-data explanation and next action
ErrorBoundaryContained failure and fallback

AI and administration

AiChatConversation shell and model interaction
TokenCounterUsage against a stated limit
AuditLogSearchable event history
SystemHealthWidgetService and system status
Dashboard system

An assembled screen must survive more than the ideal state.

The wireframes keep one shell across loading, empty, partial, error, and ideal conditions. The rendered examples below show assembled screens from the project asset record.

Analytics dashboard
Analytics dashboard
Billing dashboard
Billing dashboard
User management
User management
Administration
Administration
Authentication
Authentication
Chart library
Chart library
Current published package surface
PackageCurrent versionPrimary responsibility
@fabrk/components0.4.1Interface components and hooks
@fabrk/design-system0.4.1Tokens, terminal theme, and mode helpers
@fabrk/framework0.3.2Runtime, routing, SSR, agents, tools, and CLI
create-fabrk-app0.3.2Project scaffolding
@fabrk/config0.3.1Typed configuration
@fabrk/core0.3.1Shared product and runtime primitives
@fabrk/ai0.3.1Provider, cost, prompt, and streaming tools
@fabrk/auth0.3.1Authentication and MFA contracts
@fabrk/payments0.3.1Payment provider adapters
@fabrk/security0.3.1Security and audit primitives
@fabrk/email0.3.1Email adapters and templates
@fabrk/storage0.3.1Object and local storage adapters
@fabrk/store-prisma0.3.1Prisma persistence adapters
Public surfaces

Documentation and the original commercial product stay separate.

The framework documentation covers packages and runtime behavior. fabrk.dev is the separate commercial product the package system grew out of. I keep them separate because the starter, the open packages, and this portfolio case do not share one evidence record.

Commercial product home
Commercial product home
Feature structure
Feature structure
Component presentation
Component presentation
Tablet layout
Tablet layout
Mobile layout
Mobile layout
Livefabrk.dev
Limits and next evidence

Published packages are not the same as a validated product.

The next study is straightforward. Give an external developer and a coding agent the same setup, dashboard, provider, and failure-recovery tasks. Record time, wrong turns, code drift, and whether the package boundary helps or only moves the complexity. Until I run that work, I make no adoption, retention, or external usability claim.

FABRK

Replace copied infrastructure with inspectable boundaries.

FABRK is a set of smaller contracts. They show what a project imports, who owns each capability, how the interface behaves across states, and which evidence is still missing.

Thirteen packages are published. The repository records 3,221 tests on 7 March 2026, but the full suite was not rerun for this case. Node and worker are the observed build targets. No external adoption or usability evidence is claimed.