Skip to content

2026 03 20 claude code team#13

Open
FabianWesner wants to merge 17 commits intomainfrom
2026-03-20-claude-code-team
Open

2026 03 20 claude code team#13
FabianWesner wants to merge 17 commits intomainfrom
2026-03-20-claude-code-team

Conversation

@FabianWesner
Copy link
Copy Markdown
Contributor

No description provided.

FabianWesner and others added 17 commits March 20, 2026 20:24
Implements the complete Phase 1 foundation layer:

- Config: SQLite WAL mode, customer auth guard/provider, rate limiters
- Migrations: organizations, stores, store_domains, store_users, store_settings, customers
- Models: Organization, Store, StoreDomain, StoreUser (pivot), StoreSettings, Customer
- Enums: StoreStatus, StoreUserRole, StoreDomainType
- Middleware: ResolveStore (hostname-based storefront, session-based admin)
- Tenant isolation: BelongsToStore trait + StoreScope global scope
- Auth: Admin login/logout (Livewire), Customer login/register (Livewire, store-scoped)
- CustomerUserProvider: Injects store_id into credential queries
- Authorization: 10 policies with ChecksStoreRole trait and permission matrix
- Test helpers: createStoreContext(), actingAsAdmin(), actingAsCustomer()
- 31 tests covering tenant resolution, store isolation, admin auth, customer auth

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add complete catalog system with:
- 9 migrations for products, options, variants, inventory, collections, and media tables
- 7 models (Product, ProductOption, ProductOptionValue, ProductVariant, InventoryItem, Collection, ProductMedia) with relationships
- 7 enums (ProductStatus, VariantStatus, CollectionStatus, CollectionType, MediaType, MediaStatus, InventoryPolicy)
- 7 factories with useful states
- ProductService (CRUD + status transitions with state machine validation)
- VariantMatrixService (cartesian product rebuild, orphan handling)
- InventoryService (reserve/release/commit/restock with transactions)
- HandleGenerator (unique slug generation per store)
- ProcessMediaUpload job
- Custom exceptions (InvalidProductTransitionException, InsufficientInventoryException)
- 50 passing tests across 6 test files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add complete theme system with storefront rendering infrastructure:
- Migrations for themes, theme_files, theme_settings, pages, navigation_menus, navigation_items
- Models with relationships, enums (ThemeStatus, PageStatus, NavigationItemType), and factories
- ThemeSettingsService singleton for loading/caching active theme settings
- NavigationService with buildTree and resolveUrl for dynamic navigation
- Storefront Blade layout with header, footer, cart drawer, search modal, dark mode
- Livewire components: Home, Collections (Index/Show), Products/Show, Cart/Show, CartDrawer, Search (Index/Modal), Pages/Show
- Reusable Blade components: breadcrumbs, price, badge, product-card, quantity-selector, pagination, address-form, order-summary
- Error pages (404, 503)
- Storefront routes
- Seeders for themes, pages, and navigation menus
- 30 passing tests covering models, services, and storefront rendering

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add SQLite FTS5-based search system:
- 3 migrations (search_settings, search_queries, products_fts virtual table)
- SearchSettings and SearchQuery models
- SearchService with search (FTS5 + store scoping + filters + sorting + pagination),
  autocomplete (prefix matching), syncProduct, and removeProduct
- ProductObserver to auto-sync products into FTS5 index on create/update/delete
- SQLite-compatible relevance ordering using CASE expressions
- Search query logging for analytics
- 18 passing tests (SearchTest + AutocompleteTest)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Mock payment provider with magic card numbers (4242=success, 0002=decline, 9995=insufficient)
- OrderService: createFromCheckout with atomic order creation, inventory commit/reserve, payment recording
- Bank transfer support with deferred capture and admin confirmation flow
- Sequential order numbering per store starting at #1001
- Auto-fulfillment for digital products (requires_shipping=false)
- RefundService: full/partial refunds with optional inventory restocking
- FulfillmentService with payment guard, multi-shipment support, status transitions
- CancelUnpaidBankTransferOrders scheduled job
- 7 migrations, 8 models, 7 enums, 7 factories, 5 domain events
- 41 tests with 104 assertions, all passing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- AnalyticsEvent model with client_event_id deduplication per store
- AnalyticsService with track(), trackBatch(), and getDailyMetrics()
- AggregateAnalytics job scheduled daily at 01:00, aggregates events into
  pre-computed daily metrics (orders, revenue, AOV, visits, funnel counts)
- AnalyticsDaily model with store_id+date unique constraint
- 16 tests covering event ingestion and aggregation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Account dashboard with recent orders and logout
- Order history (paginated) and order detail with line items,
  summary totals, fulfillment timeline, and address display
- Address book with full CRUD, default address management,
  and customer isolation (prevents cross-customer access)
- Customer auth middleware redirects guests to /account/login
- 19 tests covering account pages, order access control,
  address CRUD, validation, and default toggling

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…l management pages

Full admin panel with Livewire components for all store management:
- Dashboard with KPI tiles, date range filtering, orders chart, top products, conversion funnel
- Products CRUD with search, status filtering, bulk actions, and form validation
- Orders management with search, status/financial/fulfillment filters, detail view with fulfillment and refund actions
- Customers listing with search, detail view with recent orders and addresses
- Collections, discounts, pages, navigation, themes, analytics, and settings index pages
- Admin layout shell with sidebar navigation and top bar with store switcher
- 20 feature tests covering dashboard, product management, and order management
- Fix ProductStatus enum handling in views and components (use ->value for string operations)
- Fix route('home') references to url('/') for multi-tenant compatibility

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ith circuit breaker

- 6 migrations: apps, app_installations, oauth_clients, oauth_tokens, webhook_subscriptions, webhook_deliveries
- 6 models with factories and enums for all status fields
- WebhookService: dispatch to matching subscriptions, HMAC-SHA256 signing and verification
- DeliverWebhook job: HTTP POST with signature headers, exponential backoff (6 attempts), circuit breaker pauses subscription after 5 consecutive failures
- 11 tests covering signature generation/verification, delivery lifecycle, retries, circuit breaker, and subscription filtering

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… demo seeders

- Styled 404 and 503 error pages with dark mode support
- JSON structured logging channel in config/logging.php
- Comprehensive seeder suite (14 seeders in dependency order):
  Organization, Store, StoreDomain, User, StoreSettings, TaxSettings,
  Shipping, Collection, Product (20 fashion + 5 electronics with full
  option/variant/inventory graphs), Discount (5 codes), Customer (10
  with addresses), Theme, Page, Navigation
- DatabaseSeeder orchestrates all seeders in correct FK order
- migrate:fresh --seed runs successfully with full demo data

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix missing dark: prefix on status badges in account dashboard
- Add dark:text-gray-400 to all admin empty states and data cells
- Add dark mode text colors to admin order summary, payment, settings
- Add overflow-x-auto to storefront account tables for mobile
- Add wire:key to all loops in Livewire components (dashboard tiles,
  chart bars, top products, funnel steps, order lines, fulfillments,
  refunds, payments, variants, addresses, domains, nav items, stores)
- Add wire:loading states to all form submit buttons (customer login,
  register, admin login, address save, product save, order fulfill,
  refund, cancel, confirm payment, logout)
- Fix toast notification dark mode (border, text, close button)

All 314 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…n/customer fixes

Add OrderSeeder (18 orders across both stores with full entity graphs),
AnalyticsSeeder (31 days of daily metrics + 220 events), and
SearchSettingsSeeder. Fix CustomerSeeder idempotency and add Electronics
customers. Fix NavigationSeeder and PageSeeder current_store binding for
correct StoreScope resolution. Update DatabaseSeeder orchestration to
include all 18 seeders. Add progress.md tracking file.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix browser test failures across all 18 test suites (143 browser tests,
314 unit/feature tests all passing):

- Fix case-sensitive button text in Cart/Checkout tests ("Add to Cart")
- Fix admin sidebar navigation using a:has-text() CSS selectors to avoid
  matching section headers instead of links
- Add @fluxscripts to admin and storefront layouts for Flux UI JS
- Fix toast messages surviving redirects via session flash
- Fix enum-to-string bugs in Pages and Collections admin views
- Fix FulfillmentService and RefundService method names in Orders/Show
- Fix admin auth redirect route in DashboardTest
- Fix Discount form NOT NULL constraint on starts_at
- Run vendor/bin/pint --dirty for code style compliance
- Verify fresh migrate:seed succeeds

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The storefront layout already had a skip link. This adds the same
pattern to the admin layout so keyboard users can bypass the sidebar
navigation and jump directly to the main content area.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add ResolveStoreFromHostname middleware to global web stack so Livewire
  AJAX update requests can resolve the current store from hostname
- Add shop.test as a storefront domain in StoreDomainSeeder for local dev
- Update progress.md to reflect all 12 phases complete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@sonarqubecloud
Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
20 Security Hotspots
7.5% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant