Shared package candidates
Separate established packages from patterns that still need evidence.
Established packages
These should be treated as canonical shared packages now:
@howells/lint- pinned Oxlint/Oxfmt, Ultracite, and React Doctor presets
@howells/typescript-config- explicit thin tsconfig presets
@howells/motion- shared durations, easings, springs and presets
@patternmode/stacksheet- the preferred abstraction for stacked sheet flows
@howells/envelope- strict structured IO wrapper for CLI-model workflows
@howells/ai- the model for each job, read by AI-capable apps and agent packages
@howells/motif-sdk- shared fal.ai image-generation, editing, utility media, model registry, and cost-estimation surface
@howells/motif-cli- agent-friendly image-generation CLI with dry runs, structured output, local history, and series workflows
@howells/envy- typed env parsing, lint helpers, and deployment env preflight checks
@howells/stow-server- the reusable server integration surface when a repo needs to talk to the house media storage platform directly
@howells/stow-next- the reusable Next.js-facing media storage integration
@howells/srcfull- shared source-fetching layer for browser/page-source ingestion workflows
Continue standardising: model choice
@howells/ai is the model lookup every AI-capable repo reads from.
Recommendation:
- keep the pick for each job and its measured settings in
@howells/ai, and nothing else; provider wiring stays with Mastra's model router or the OpenRouter AI SDK provider - keep product-specific prompts, tools, and workflows in repo-local
packages/mastra - do not publish repo-specific agent packages just because several repos use Mastra
Mastra and MCP should standardize as architecture choices before becoming more shared package surface.
Continue standardising: image generation
Motif should be the default surface for fal.ai image generation, image editing, upscaling, background removal, image-to-video, model metadata, dry runs, cost estimates, and structured agent-facing command-line work.
Recommendation:
- use
@howells/motif-sdkfor product or package code - use
@howells/motif-clifor scriptable local and agent workflows - use the CLI's JSON/NDJSON output, semantic exit codes, and live
--describeschema when an agent needs the tool surface - keep durable media storage separate through the house media storage platform
- do not write raw fal.ai clients in app routes unless Motif cannot cover the endpoint yet
Medium candidate: drawer and side-panel layer
You have repeated vaul wrappers across several active UI repos.
That is a signal.
Recommendation:
- do not publish a generic drawer package yet
- first collapse the repeated wrappers into the scaffold UI baseline or a repo-local shared UI package
- publish only if that API becomes stable and broadly useful outside your repos
For now:
- keep simple drawers in shared UI packages
- use
@patternmode/stacksheetwhen the flow becomes stack-oriented
Keep local for now
These are useful patterns, but they should stay repo-local for now:
- repo-local env packages
- project-local domain packages
- repo-specific auth wrappers
- repo-specific TRPC wrappers
They encode app boundaries, not cross-project standards.
The env exception is implementation, not ownership: keep a repo-local packages/env boundary, but build it on @howells/envy instead of publishing another env package per app.
Product and package choices
Keep these choices separate:
- the house media storage platform is the product recommendation
@howells/stow-serveris the package recommendation
For new projects, the default decision should be:
- if the repo needs image, vector, or media storage, start by asking whether it should use the house media storage platform
- if the repo needs typed server-side integration, reach for
@howells/stow-server - keep provider clients inside the storage/upload package rather than calling them from apps
Standardisation order
Reduce duplicated package work in this order:
- prefer
@howells/lintand@howells/typescript-configeverywhere - use
@howells/envyfor repo-local env boundaries instead of creating more package-specific env tooling - read model IDs from
@howells/aiinstead of scattering model strings - use
howells/motiffor image generation and media utility workflows instead of scattering raw fal.ai clients - standardize
@patternmode/stacksheetas the default stacked-panel abstraction - use
@howells/motionfor motion tokens - add recurring UI patterns to Patternmode rather than copying them between repos