← Back to projects
In development

CardLoop

Global and regional marketplace for trading card games: Laravel API, React/TypeScript frontend, custom fee, risk, and AI-scan domains — currently a Phase 1 foundation.

CardLoop

CardLoop is designed as a global and regional trading platform for trading card games: international reach for listings combined with local handover, trust points, and a TCG-specific trust model built on condition proofs, shipping quality, and audit trails. The project is in Phase 1 — architecture, domain model, and some of the core flows are in place; it is explicitly not yet a production-ready trading platform.

Gallery

Case Study

Situation

TCG trading suffers from inconsistent condition descriptions, weak evidence in disputes, and distrust around high-value single transactions — made worse once global reach and local handover have to coexist in the same system. CardLoop pursues this deliberately as a solo effort built from the ground up: domain model, compliance, and payment analysis first, implementation second, rather than UI first and business logic afterward.

Challenge

Marketplace payments (split payments to sellers) and SaaS billing (premium subscriptions, scan credits) are deliberately modeled as two separate domains with their own provider abstraction, not as one system — a documented evaluation of Adyen for Platforms, Stripe Connect, and Stripe Billing against split-payment capability, KYC/KYB, and usage billing precedes the provider choice, before any contract or compliance sign-off even exists. A real finding from ongoing development: scans, auctions, premium/billing, and protection were running into a NetworkError through a dead feature-flag mechanism in local dev, instead of a working mock state — fixed with one explicit mock flag per domain instead of a single global switch. On the identity side, there was a deliberate course change: instead of fully migrating the marketplace logic already modeled in Eloquent, policies, and Filament resources over to Supabase/Appwrite, Laravel remains the sole system of record for business data — Appwrite supplies only identity and browser session, and a server-side, Appwrite-verified JWT synchronizes the local users row.

Approach

Laravel 12 with PHP 8.4 as a monolith-first API backbone with clear domain boundaries (listings, orders, fees, billing, risk, scans, auctions), PostgreSQL, Redis for cache/locks/queues, Filament for the admin panel. Frontend as a React 18/TypeScript application with Vite, Tailwind CSS, and TanStack Query; a documented mock architecture encapsulates all data access behind src/lib/api/*, so the gradual switch from mock data to real endpoints leaves page structure and components unchanged. A commit in June 2026 moved the core flows — auth, marketplace search, watchlist, cart, checkout, orders, seller dashboard, uploads — from that mock state onto real Laravel API calls; scans, auctions, premium/billing, and protection are deliberately still mock-only.

Decisions

Provider abstraction before provider choice

Marketplace payments and subscription billing are separate interfaces with a documented provider analysis (Adyen, Stripe Connect, Stripe Billing) — no commitment before compliance sign-off and a contract are in place.

One mock flag per domain instead of a global switch

Fixed after a real bug where a dead fallback mechanism sent four areas into a NetworkError instead of a working mock state, resolved with dedicated flags per feature.

Appwrite for identity only, Laravel stays system of record

No full migration of the already-modeled marketplace logic into Appwrite collections — a server-verified JWT synchronizes a local user row instead.

AI scan results must pass schema validation

Structured outputs from the vision-provider abstraction are checked server-side against a JSON schema and never treated as a legally binding authenticity or condition guarantee.

Protection product deliberately not marketed as insurance

Mandatory proof requirements, payout holds, and a moderated claims process instead of an insurance promise, as long as there is no partner and no legal review behind it.

My contribution

All commits are by Felix Schattenberg, built solo: domain model, compliance and payment-provider analysis, Laravel backend including the Filament admin, React/TypeScript frontend with a documented mock-to-API architecture, Appwrite identity integration.

Results

Scope
44 models, 25 controllers, 33 migrations, 25 Filament resources
Core flows live against the API
Auth, marketplace search, watchlist, cart/checkout, orders, seller dashboard, uploads — scans, auctions, premium/billing, and protection deliberately still mock-only
Status
Phase 1 foundation, not a production-ready trading platform, dev instance intermittently unreachable

Search & navigation

Navigate Open Esc Close