Status: Active Development Last Updated: April 16, 2026
- Initialize pnpm workspace
- Create root
package.json - Create
pnpm-workspace.yaml - Create
.npmrcconfiguration
- Create root
- Configure Turborepo
- Create
turbo.json - Define build pipeline
- Configure cache settings
- Create
- Setup TypeScript
- Create root
tsconfig.json - Create
tsconfig.build.json - Configure path aliases
- Create root
- Development tooling
- Setup ESLint (
.eslintrc.js) - Setup Prettier (
.prettierrc) - Create
.gitignore - Create
.editorconfig
- Setup ESLint (
- Create
apps/directory - Create
packages/directory structure- Create
packages/core/ - Create
packages/cli/ - Create
packages/adapters/ - Create
packages/modules/ - Create
packages/themes/ - Create
packages/shared/
- Create
- Create
docs/directory - Create
examples/directory (optional)
Phase 1 packages are built and compiling. However a post-phase review found that several systems exist as code but are not yet connected to the running app.
- ✅ @storefuse/core - Framework core with config, adapter, module system, theme engine
- ✅ @storefuse/adapter-woo-rest - WooCommerce REST API adapter
- ✅ @storefuse/module-products - Product listings and pages
- ✅ @storefuse/module-cart - Cart context and types
- ✅ @storefuse/theme-core - Default theme with Tailwind v3
- ✅ @storefuse/theme-child-template - Child theme template for safe overrides
- ✅ Storefront demo app routes working
Build Status: ✅ All packages build successfully
Routes: ✅ Home, Shop, Cart, Product Detail, Category pages working
Theme System:
Known Gaps Found in Review:
layout.tsxhard-imports@storefuse/theme-coredirectly — child theme registry is never consultedstorefuse.config.tstheme.childsetting is declarative only — does nothing at runtime- Module
pagesregistry and actual Next.jsapp/routes are two parallel systems — module registry is never usedmodule-productsandtheme-coreboth contain duplicate UI components (ProductCard, ProductGrid, etc.) — ownership is unclear- CLI
initcommand scaffolds direct theme-core imports — new projects start with the wrong pattern- EventBus exists but is not connected to any module lifecycle or rendering pipeline
- Initialize package
- Create
package.json - Create
tsconfig.json - Setup build configuration
- Create
- Config System
- Define
StoreFuseConfigTypeScript types - Implement
defineStoreFuseConfig()helper - Create config loader with validation
- Add environment variable support
- Define
- Adapter System
- Define
StoreFuseAdapterinterface - Create adapter registry
- Implement adapter loader
- Add adapter context provider
- Define
- Module System
- Define
StoreFuseModuleinterface - Create module registry (ModuleRegistry class)
- Implement dependency resolver (with circular detection)
- Create module loader (ModuleLoader class)
- Add module hooks system (onInit, onRequest)
- Export getPage() and getComponent() helpers
- Define
- Theme Engine
- Define theme component registry interface
- Implement theme resolver (core + child)
- Create
resolveThemeComponent()function - Add theme component loader (ThemeManager class)
- Cache System
- Define cache configuration types
- Implement Next.js fetch cache wrapper
- Add revalidation helpers
- Create cache utilities
- Event System
- Create event bus
- Define core events
- Implement event listeners
- Shared Types
- Define
Producttype - Define
Categorytype - Define
CartandCartItemtypes - Define
SearchResulttype - Define
Posttype (blog)
- Define
- Testing
- Setup Vitest or Jest
- Write unit tests for config loader
- Write unit tests for module system
- Write unit tests for theme resolver
- Initialize package
- Create
package.json - Create
tsconfig.json - Add WooCommerce REST API dependency
- Create
- Implement adapter interface
- Implement
products.list() - Implement
products.getById() - Implement
products.getBySlug() - Implement
categories.list() - Implement
categories.getBySlug() - Implement
search.query()(optional)
- Implement
- Error handling
- Add API error handling
- Add rate limiting support
- Add retry logic
- Authentication
- Implement consumer key/secret auth
- Add request signing
- Storefront Integration
- Create
storefuse.config.tsin demo app - Add
.env.local.examplewith credentials - Create adapter instance singleton
- Update shop page to fetch real products
- Display WooCommerce products with images, prices, stock
- Create
- Testing
- Setup test environment
- Write integration tests (mock WooCommerce API)
- Add E2E tests with actual WooCommerce instance
- Initialize package
- Create
package.json - Create
tsconfig.json
- Create
- Module definition
- Create module manifest
- Define dependencies
- Register pages with module system
- Add onInit hook
- Components
- Create
ProductCardcomponent - Create
ProductListcomponent - Create
ProductGridcomponent - Create
ProductImagecomponent - Create
Pricecomponent
- Create
- Pages (contribution)
- Define home page loader
- Define shop page loader
- Define product detail page loader
- Define category page loader
- Data fetching
- Create product data fetchers
- Add caching configuration
- Implement error boundaries
- Build and Export
- Build successfully with tsup
- Export module manifest
- Export all components and pages
- Testing
- Write component tests
- Write integration tests
- Initialize package
- Create
package.json - Create
tsconfig.json - Add Tailwind v3 dependency
- Create
- Tailwind Configuration
- Create
globals.csswith Tailwind v3 - Setup traditional Tailwind directives
- Define design tokens
- Create global styles
- Create
- Core Components
- Create
Headercomponent - Create
Footercomponent - Create
Navigationcomponent - Create
Logocomponent - Create
ProductCardcomponent - Create
Buttoncomponent - Create
Inputcomponent - Create
Badgecomponent - Create
Pricecomponent
- Create
- Layout Components
- Create
Containercomponent - Create
Gridcomponent - Create
Sectioncomponent
- Create
- Theme Registry
- Export component registry
- Document override patterns
- Storefront Integration
- Install in storefront app
- Replace layout Header/Footer with theme components
- Import theme styles
- Build and test successfully
- Build successfully
- TypeScript compilation
- Component exports
- Documentation
- Create component documentation
- Add usage examples
- Document Tailwind customization
- Initialize package
- Create
package.json - Create
tsconfig.json - Setup build configuration (tsup)
- Create
- Child theme structure
- Create
src/index.tswith childThemeRegistry - Create
src/components/directory - Add example components (Header, ProductCard)
- Create
- Documentation
- Create comprehensive README
- Document override pattern
- Add usage examples
- Document benefits
- Storefront Integration
- Create local
theme-childdirectory in storefront - Add example components
- Update storefuse.config.ts to use child theme
- Create local
- Build successfully
- Fix TypeScript incremental compilation error
- Generate type definitions
- Export registry properly
- Initialize package
- Create
package.json - Create
tsconfig.json - Setup bin entry point
- Create
- CLI Framework
- Setup Commander.js
- Create CLI entry point
- Add help documentation
- Command:
init- Create project scaffolding logic
- Add template system
- Implement dependency installation
- Generate
storefuse.config.ts - Generate
.env.example - Print setup instructions
- Command:
add module- List available modules
- Install module package
- Update config file
- Install dependencies
- Command:
add theme child- Create child theme directory
- Copy template files
- Update config
- Command:
doctor- Check environment variables
- Test WooCommerce API connection
- Verify required packages
- Check Node.js version
- Check pnpm version
- Build successfully
- TypeScript compilation
- ESM output
- Type definitions
- Testing
- Write CLI command tests
- Add E2E tests for scaffolding
- Initialize Next.js 16 app (using Next.js 15.5.9)
- Create with App Router
- Add TypeScript
- Configure
next.config.ts - Setup Tailwind v3 (stable, production-ready)
- Setup StoreFuse
- Create
storefuse.config.ts - Install core packages
- Configure adapter
- Enable modules
- Create
- Create Routes
- Create
app/layout.tsx - Create
app/page.tsx(home) - Create
app/shop/page.tsx - Create
app/product/[slug]/page.tsx - Create
app/category/[slug]/page.tsx - Create
app/cart/page.tsx
- Create
- Environment Setup
- Create
.env.example - Document required variables
- Create
- Child Theme Setup
- Create
theme-childdirectory - Add example component overrides
- Configure in storefuse.config.ts
- Create
- Build Successfully
- Production build complete
- Static page generation (137 pages)
- No TypeScript errors
- Testing
- Add Playwright for E2E tests
- Write basic navigation tests
These were completed before the architecture gaps were identified. They are tracked here for reference. Architecture wiring (Phase 2 below) must still be completed.
Status: Fully functional cart implementation with UI
- Initialize package
- Basic module structure
- Cart state management
- Implement local storage cart
- Create cart context (CartContext.tsx)
- Add cart hooks (useCart)
- Cart operations (add, remove, update, clear)
- Components
- Create
CartItemcomponent in theme-core - Create
CartSummarycomponent in theme-core - Create
AddToCartButtoncomponent with feedback - Create
CartPagewith empty state - Integrate cart count in Header
- Create
- Cart operations
- Implement add to cart
- Implement update quantity
- Implement remove item
- Implement clear cart
- Calculate totals
- Testing
- Write cart logic tests
- Write component tests
- Initialize package
- Checkout URL generation
- Generate WooCommerce checkout URL
- Add cart items to URL
- Support prefill parameters
- Components
- Create
CheckoutButtoncomponent in theme-core
- Create
- Build successfully
- TypeScript compilation
- Type definitions
- Testing
- Test URL generation
- Test redirect flow
- Initialize package
- Search implementation
- Integrate with WooCommerce search API
- Create search data fetcher
- Components
- Create
SearchBarcomponent - Create
SearchResultscomponent - Create
SearchFilterscomponent
- Create
- Search page
- Create search results page
- Add pagination
- Testing
- Write search tests
- Test filtering
- Initialize package
- Meta tags
- Create meta tag generators
- Add Open Graph support
- Add Twitter Card support
- Sitemap
- Generate dynamic sitemap
- Add product URLs
- Add category URLs
- Structured data
- Add Product schema
- Add BreadcrumbList schema
- Testing
- Test meta tag generation
- Validate structured data
- Create theme customization guide (docs/themes.md)
- Write getting started guide
- Document module system
- Add deployment guide (Vercel)
- Create adapter documentation
Goal: Make the framework actually work as designed. The code exists. The wiring does not. All original promises (child theme overrides, module-driven routing, config-driven runtime) must become real by the end of this phase.
Rule: Modules own data/logic/contracts. Themes own UI.
- Delete
packages/modules/module-products/src/components/ProductCard.tsx - Delete
packages/modules/module-products/src/components/ProductGrid.tsx - Delete
packages/modules/module-products/src/components/ProductImage.tsx - Delete
packages/modules/module-products/src/components/ProductList.tsx - Delete
packages/modules/module-products/src/components/Price.tsx - Delete
packages/modules/module-products/src/components/directory - Update
packages/modules/module-products/src/index.ts— remove all component exports - Verify
packages/themes/theme-coreis the single source of truth for all UI components - Confirm build passes after deletion
Goal: Child theme registry is read at runtime and overrides core components transparently.
- Create
packages/core/src/theme-engine/ThemeProvider.tsx-
ThemeProvidercomponent — acceptscoreRegistryandchildRegistryprops, merges them (child wins), exposes via React context -
useThemeComponent(key)hook — returns the resolved component for a given key from context -
ThemeContext— typed React context holding the merged registry
-
- Export
ThemeProvideranduseThemeComponentfrompackages/core/src/index.ts - Export
ThemeProvideranduseThemeComponentfrompackages/core/src/theme-engine/index.ts - Add server-side helper
getThemeComponent(key, coreRegistry, childRegistry)for use in Server Components - Write unit tests for merge logic (child wins, core fallback, missing key throws)
Goal: layout.tsx no longer hard-imports from @storefuse/theme-core. All components resolve through the theme engine.
- Update
apps/storefront/app/layout.tsx- Import
coreThemeRegistryfrom@storefuse/theme-core - Import
childThemeRegistryfrom../theme-child - Wrap app with
<ThemeProvider core={coreThemeRegistry} child={childThemeRegistry}> - Remove direct
import { Header, Footer } from "@storefuse/theme-core" - Replace
<Header>and<Footer>with components resolved viauseThemeComponent
- Import
- Update
apps/storefront/app/product/[slug]/ClientProductDetail.tsx- Remove direct
import { ProductDetailPage } from "@storefuse/theme-core" - Resolve
ProductDetailPagevia theme engine
- Remove direct
- Update
apps/storefront/app/category/[slug]/ClientCategoryPage.tsx- Remove direct
import { CategoryPage } from "@storefuse/theme-core" - Resolve
CategoryPagevia theme engine
- Remove direct
- Test: activate a child theme component (e.g. custom Header) and confirm it renders instead of core Header without touching any core file
Goal: The config file is the single source of truth — reading theme.child loads the correct child registry automatically.
- Create
packages/core/src/runtime/index.ts—createStoreFuseApp(config)factory- Reads
config.theme.coreandconfig.theme.child - Dynamically imports and returns merged theme registry
- Returns loaded module list
- Reads
- Export
createStoreFuseAppfrompackages/core/src/index.ts - Update
apps/storefront/app/layout.tsxto callcreateStoreFuseAppinstead of manually importing registries - Confirm changing only
storefuse.config.tstheme.childis enough to switch child themes
Goal: Every project created with storefuse init starts with the correct wiring.
- Update
packages/cli/src/commands/init.tstemplate forlayout.tsx- Generated
layout.tsxmust useThemeProvider+useThemeComponent— not direct imports - Generated
layout.tsxmust callcreateStoreFuseApp(config)to load registries
- Generated
- Update CLI
add theme childcommand- Generated
theme-child/index.tshas correct registry export - Generated example component uses correct prop types from
@storefuse/core
- Generated
- Re-test
storefuse init my-storeend-to-end and confirm child theme override works out of the box
Goal: Module pages definitions become the source of truth. Next.js route files delegate to modules instead of duplicating logic.
- Decide routing strategy (Option A — Thin shell routes): Keep
app/shop/page.tsxetc. but make them thin delegations through the theme engine - Update
app/shop/page.tsx— server-side data fetch, delegates rendering toClientShopPage(usesuseThemeComponent("ProductGrid")) - Update
app/product/[slug]/page.tsx— already thin shell toClientProductDetail(usesuseThemeComponent) - Update
app/category/[slug]/page.tsx— already thin shell toClientCategoryPage(usesuseThemeComponent) - Update
app/cart/page.tsx— delegates toClientCartPage(usesuseThemeComponent("CartPage")) - Confirm adding a new module with a
pagesentry works without manually creating route files
Goal: Child themes and modules can hook into business logic events, not just swap UI.
- Define standard commerce events in
packages/core/src/events/index.ts-
cart:before-add/cart:after-add -
cart:before-remove/cart:after-remove -
checkout:before-redirect -
product:view -
search:query
-
- Fire
cart:before-addandcart:after-addinsidemodule-cartCartContext - Fire
cart:before-removeandcart:after-removeinsidemodule-cartCartContext - Fire
cart:clearedinsidemodule-cartCartContext - Fire
checkout:before-redirectinsidemodule-checkout-redirect - Expose global
storefuseEventssingleton from@storefuse/core - Add example in
theme-child/index.tsshowing how to hookcart:after-add - Document behavior override pattern in
docs/themes.md
- Activating a component in
theme-child/index.tscauses it to render instead of the core version — with zero changes to core files -
storefuse.config.tsis the only file that needs to change to switch child themes - A new module can register a page and it renders without manually creating an
app/route file - A child theme can subscribe to
cart:after-addand run custom code -
storefuse initscaffolds all of the above correctly for new projects
- Initialize package
- Setup WPGraphQL integration
- Add GraphQL client
- Create queries
- Implement adapter interface
- Implement all adapter methods
- Add caching strategy
- Testing
- Write integration tests
- Initialize package
- Blog adapter methods
- Extend adapter interface
- Implement in REST adapter
- Implement in GraphQL adapter
- Components
- Create
PostCardcomponent - Create
PostListcomponent - Create
PostContentcomponent
- Create
- Pages
- Create blog index page
- Create post detail page
- Create category/tag pages
- Testing
- Write component tests
- Write integration tests
- Initialize package
- Authentication
- Add JWT authentication
- Create auth context
- Add auth hooks
- Components
- Create
LoginFormcomponent - Create
RegisterFormcomponent - Create
AccountDashboardcomponent - Create
OrderHistorycomponent
- Create
- Pages
- Create login page
- Create register page
- Create account page
- Create orders page
- Testing
- Write auth tests
- Write component tests
Moved to Phase 1 - Already completed! ✅
See Phase 1 section above for completion status.
- Complete API documentation
- Add video tutorials
- Create migration guides
- Write contribution guidelines
- Add troubleshooting guide
- Add development mode logging
- Create debug utilities
- Add TypeScript strict mode
- Improve error messages
- Add CLI autocomplete
- Achieve 80%+ test coverage
- Add E2E test suite
- Performance testing
- Accessibility audit
- Security audit
- Create basic store example
- Create custom theme example
- Create multi-language example
- Create headless checkout example
- Setup GitHub Actions
- Automated testing
- Build verification
- Linting and formatting
- Setup Changesets
- Version management
- Changelog generation
- Setup automated publishing
- npm publish workflow
- GitHub releases
- Create documentation website
- Setup demo site
- Create announcement post
- Social media content
- Submit to directories
- Final testing
- Security review
- Performance optimization
- Documentation review
- Publish to npm
- Announce release
- Create GitHub release
- Setup Discord server
- Create GitHub Discussions
- Define contribution process
- Setup issue templates
- Create PR templates
- Payment provider modules (Stripe, PayPal)
- Analytics modules
- Email marketing integrations
- Multi-language support
- Multi-currency support
- Advanced filtering
- Product reviews module
- Wishlist module
- Compare products module
- WordPress plugin (optional)
- Keep all packages independently versioned
- Follow semantic versioning strictly
- Maintain backward compatibility in minor versions
- Document breaking changes clearly
- Test with real WooCommerce instances regularly
- Get community feedback early and often