Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
45171f9
Prompt
FabianWesner Mar 20, 2026
4d741f5
Prompt
FabianWesner Mar 20, 2026
4bb4133
Phase 1: Foundation - Multi-tenant architecture, auth, and authorization
FabianWesner Mar 20, 2026
3af3af9
Phase 2: Catalog - Products, Variants, Inventory, Collections, Media
FabianWesner Mar 20, 2026
6bb21bb
Phase 3: Themes, Pages, Navigation, Storefront Layout
FabianWesner Mar 20, 2026
7f7ffd3
Phase 8: Search - FTS5 full-text search with autocomplete
FabianWesner Mar 20, 2026
3d40910
Phase 5: Payments, Orders, Fulfillment
FabianWesner Mar 20, 2026
5a17a2c
Phase 9: Analytics - event ingestion, daily aggregation, and reporting
FabianWesner Mar 20, 2026
11e9d0d
Phase 6: Customer Accounts - dashboard, orders, addresses
FabianWesner Mar 20, 2026
1b31215
Phase 7: Admin Panel - dashboard, products, orders, customers, and al…
FabianWesner Mar 20, 2026
a7d3701
Phase 10: Apps and Webhooks - app registry, OAuth, webhook delivery w…
FabianWesner Mar 20, 2026
a5659fe
Phase 11: Polish - error pages, structured logging, and comprehensive…
FabianWesner Mar 20, 2026
95607b2
Phase 11 polish: dark mode, responsive tables, wire:key, wire:loading
FabianWesner Mar 20, 2026
e03a02f
Phase 11: Seeders - orders, analytics, search settings, and navigatio…
FabianWesner Mar 20, 2026
5336af8
Phase 12: Full test suite, browser tests, and bug fixes
FabianWesner Mar 20, 2026
ffe7fea
Add skip-to-content link to admin layout for accessibility
FabianWesner Mar 20, 2026
ed3556a
Fix Livewire store resolution and add shop.test domain
FabianWesner Mar 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 8 additions & 8 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{
"permissions": {
"allow": [
"Bash(git add:*)",
"Bash(git commit:*)"
]
},
"enableAllProjectMcpServers": true,
"enabledMcpjsonServers": [
"laravel-boost",
"herd"
],
"sandbox": {
"enabled": true,
"autoAllowBashIfSandboxed": true
},
"permissions": {
"allow": [
"Bash(git add:*)",
"Bash(git commit:*)"
]
"enabled": false,
"autoAllowBashIfSandboxed": false
}
}
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Your mission is to implement an entire shop system based on the specifications im specs/*.
You must do in one go without stopping.
You must use team mode!
You must test everything via Pest (unit, and functional tests).
You must also additional simulate user behaviour using the Playwright MPC and confirm that all acceptance criterias are met.
If you find bugs, you must fix them.
The result is a perfect shop system. All requirements are perfectly implemented. All acceptance criterias are met, tested and confirmed by you.

Continuously keep track of the progress in specs/progress.md
Commit your progress after every relevant iteration with a meaningful message.

When implementation is fully done, then make a full review meeting and showcase all features (customer- and admin-side) to me. In case bugs appear, you must fix them all and restart the review meeting.

Use team-mode (see https://code.claude.com/docs/en/agent-teams), not sub-agents.
34 changes: 34 additions & 0 deletions app/Auth/CustomerUserProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace App\Auth;

use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable;

class CustomerUserProvider extends EloquentUserProvider
{
public function retrieveByCredentials(array $credentials): ?Authenticatable
{
$credentials = $this->injectStoreId($credentials);

return parent::retrieveByCredentials($credentials);
}

public function validateCredentials(Authenticatable $user, array $credentials): bool
{
return parent::validateCredentials($user, $credentials);
}

/**
* @param array<string, mixed> $credentials
* @return array<string, mixed>
*/
protected function injectStoreId(array $credentials): array
{
if (! isset($credentials['store_id']) && app()->bound('current_store')) {
$credentials['store_id'] = app('current_store')->id;
}

return $credentials;
}
}
15 changes: 15 additions & 0 deletions app/Contracts/PaymentProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace App\Contracts;

use App\Models\Checkout;
use App\Models\Payment;
use App\ValueObjects\PaymentResult;
use App\ValueObjects\RefundResult;

interface PaymentProvider
{
public function charge(Checkout $checkout, string $paymentMethod, array $details = []): PaymentResult;

public function refund(Payment $payment, int $amount): RefundResult;
}
10 changes: 10 additions & 0 deletions app/Enums/AppInstallationStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum AppInstallationStatus: string
{
case Active = 'active';
case Suspended = 'suspended';
case Uninstalled = 'uninstalled';
}
9 changes: 9 additions & 0 deletions app/Enums/AppStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace App\Enums;

enum AppStatus: string
{
case Active = 'active';
case Disabled = 'disabled';
}
10 changes: 10 additions & 0 deletions app/Enums/CartStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum CartStatus: string
{
case Active = 'active';
case Converted = 'converted';
case Abandoned = 'abandoned';
}
13 changes: 13 additions & 0 deletions app/Enums/CheckoutStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App\Enums;

enum CheckoutStatus: string
{
case Started = 'started';
case Addressed = 'addressed';
case ShippingSelected = 'shipping_selected';
case PaymentPending = 'payment_selected';
case Completed = 'completed';
case Expired = 'expired';
}
10 changes: 10 additions & 0 deletions app/Enums/CollectionStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum CollectionStatus: string
{
case Draft = 'draft';
case Active = 'active';
case Archived = 'archived';
}
9 changes: 9 additions & 0 deletions app/Enums/CollectionType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace App\Enums;

enum CollectionType: string
{
case Manual = 'manual';
case Automated = 'automated';
}
11 changes: 11 additions & 0 deletions app/Enums/DiscountStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace App\Enums;

enum DiscountStatus: string
{
case Draft = 'draft';
case Active = 'active';
case Expired = 'expired';
case Disabled = 'disabled';
}
9 changes: 9 additions & 0 deletions app/Enums/DiscountType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace App\Enums;

enum DiscountType: string
{
case Code = 'code';
case Automatic = 'automatic';
}
10 changes: 10 additions & 0 deletions app/Enums/DiscountValueType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum DiscountValueType: string
{
case Percent = 'percent';
case Fixed = 'fixed';
case FreeShipping = 'free_shipping';
}
13 changes: 13 additions & 0 deletions app/Enums/FinancialStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App\Enums;

enum FinancialStatus: string
{
case Pending = 'pending';
case Authorized = 'authorized';
case Paid = 'paid';
case PartiallyRefunded = 'partially_refunded';
case Refunded = 'refunded';
case Voided = 'voided';
}
10 changes: 10 additions & 0 deletions app/Enums/FulfillmentShipmentStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum FulfillmentShipmentStatus: string
{
case Pending = 'pending';
case Shipped = 'shipped';
case Delivered = 'delivered';
}
10 changes: 10 additions & 0 deletions app/Enums/FulfillmentStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum FulfillmentStatus: string
{
case Unfulfilled = 'unfulfilled';
case Partial = 'partial';
case Fulfilled = 'fulfilled';
}
9 changes: 9 additions & 0 deletions app/Enums/InventoryPolicy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace App\Enums;

enum InventoryPolicy: string
{
case Deny = 'deny';
case Continue = 'continue';
}
10 changes: 10 additions & 0 deletions app/Enums/MediaStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum MediaStatus: string
{
case Processing = 'processing';
case Ready = 'ready';
case Failed = 'failed';
}
9 changes: 9 additions & 0 deletions app/Enums/MediaType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace App\Enums;

enum MediaType: string
{
case Image = 'image';
case Video = 'video';
}
11 changes: 11 additions & 0 deletions app/Enums/NavigationItemType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace App\Enums;

enum NavigationItemType: string
{
case Link = 'link';
case Page = 'page';
case Collection = 'collection';
case Product = 'product';
}
12 changes: 12 additions & 0 deletions app/Enums/OrderStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace App\Enums;

enum OrderStatus: string
{
case Pending = 'pending';
case Paid = 'paid';
case Fulfilled = 'fulfilled';
case Cancelled = 'cancelled';
case Refunded = 'refunded';
}
10 changes: 10 additions & 0 deletions app/Enums/PageStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum PageStatus: string
{
case Draft = 'draft';
case Published = 'published';
case Archived = 'archived';
}
10 changes: 10 additions & 0 deletions app/Enums/PaymentMethod.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum PaymentMethod: string
{
case CreditCard = 'credit_card';
case Paypal = 'paypal';
case BankTransfer = 'bank_transfer';
}
11 changes: 11 additions & 0 deletions app/Enums/PaymentStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace App\Enums;

enum PaymentStatus: string
{
case Pending = 'pending';
case Captured = 'captured';
case Failed = 'failed';
case Refunded = 'refunded';
}
10 changes: 10 additions & 0 deletions app/Enums/ProductStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum ProductStatus: string
{
case Draft = 'draft';
case Active = 'active';
case Archived = 'archived';
}
10 changes: 10 additions & 0 deletions app/Enums/RefundStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum RefundStatus: string
{
case Pending = 'pending';
case Processed = 'processed';
case Failed = 'failed';
}
11 changes: 11 additions & 0 deletions app/Enums/ShippingRateType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace App\Enums;

enum ShippingRateType: string
{
case Flat = 'flat';
case Weight = 'weight';
case Price = 'price';
case Carrier = 'carrier';
}
10 changes: 10 additions & 0 deletions app/Enums/StoreDomainType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App\Enums;

enum StoreDomainType: string
{
case Storefront = 'storefront';
case Admin = 'admin';
case Api = 'api';
}
9 changes: 9 additions & 0 deletions app/Enums/StoreStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace App\Enums;

enum StoreStatus: string
{
case Active = 'active';
case Suspended = 'suspended';
}
11 changes: 11 additions & 0 deletions app/Enums/StoreUserRole.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace App\Enums;

enum StoreUserRole: string
{
case Owner = 'owner';
case Admin = 'admin';
case Staff = 'staff';
case Support = 'support';
}
9 changes: 9 additions & 0 deletions app/Enums/TaxMode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace App\Enums;

enum TaxMode: string
{
case Manual = 'manual';
case Provider = 'provider';
}
Loading
Loading