Commit Graph

19 Commits

Author SHA1 Message Date
Jeff Emmett 3a02c84b94 fix: handle non-JSON error responses in design pipeline
Frontend was crashing with "Unexpected token 'I'" when the backend
returned plain text errors (e.g. "Internal Server Error" from proxy).
Now safely falls back to response.text() when JSON parsing fails.
Also prevents backend from swallowing HTTPException in catch-all.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:16:31 -08:00
Jeff Emmett 9837a4d232 Add 👕 emoji favicon to rSwag
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 12:39:54 -08:00
Jeff Emmett f4f1e140a9 fix: standardize SpaceSwitcher to use subdomain URLs
Space links now go to <space>.<app-domain> (e.g., myspace.rswag.online)
instead of rspace.online/<space>. Matches the standard rApp header
pattern used across all rStack apps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:17:55 -08:00
Jeff Emmett 9b85041226 feat: add SpaceSwitcher dropdown next to AppSwitcher in header
Matches the rApp header pattern: [AppSwitcher | SpaceSwitcher | Logo].
SpaceSwitcher fetches available spaces from /api/spaces and allows
switching between community storefronts (rSwag, Fungi Flows, etc.).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:55:56 -08:00
Jeff Emmett 068d9a9368 feat: standardize AppSwitcher and EcosystemFooter across all rApps
- Update AppSwitcher with all 26 r*Apps in 8 categories
- Add EcosystemFooter component with consistent ecosystem links
- Categories: Creating, Planning, Communicating, Deciding,
  Funding & Commerce, Social & Media, Work & Productivity,
  Identity & Infrastructure

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:48:11 -08:00
Jeff Emmett 25482f9085 feat: add EncryptID auth + consistent rApp header bar
- Add @encryptid/sdk (vendored) for WebAuthn passkey authentication
- Add zustand auth store matching rMaps/rWork pattern
- Create AuthButton component (sign in / register / sign out)
- Create HeaderBar client component: AppSwitcher + logo + nav + auth + cart
- Remove custom SpaceSwitcher (not part of standard rApp header)
- Fix hero: "Noticed" and "rMerch" now use same gradient color

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:33:04 -08:00
Jeff Emmett c31e440edf fix: move SpaceSwitcher next to AppSwitcher on the left, matching rApp header pattern
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:18:34 -08:00
Jeff Emmett 08bda9a76b style: color-highlight "Noticed" and "rMerch" in hero, "(you)" in white
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:12:45 -08:00
Jeff Emmett 52ba999dda feat: add rApp-style header with AppSwitcher and SpaceSwitcher dropdowns
Matches the shared header pattern used across rWork, rMaps, and other rApps.
AppSwitcher shows all 19 r* ecosystem apps grouped by category.
SpaceSwitcher allows switching between rSwag spaces (e.g. Fungi Flows).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:53:48 -08:00
Jeff Emmett d5f742341b fix: update hero copy — "Get Your Community Noticed with (you)rMerch"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:45:24 -08:00
Jeff Emmett a152e77fed feat: dark mode, community revenue messaging, design catalog update
- Switch to dark theme by default (globals.css + default space.yaml)
- Rewrite landing page copy to emphasize community revenue streams
  - "Revenue for Your Community" hero
  - "Merch That Funds Your Mission" section with revenue breakdown
  - Revenue routing to rFunds/DAOs/treasuries
- Step 1: "Upload or Create a Design"
- Step 3: "Ship Locally — Worldwide" (local fulfillment, less carbon)
- Features: Revenue Streams, Local Fulfillment replace old cards
- All designs now show on default space (space: all)
- DefectFi design gets hoodie product variant
- Fix light-mode hardcoded colors for dark compatibility (red-50, green-600)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:38:56 -08:00
Jeff Emmett dd873b91b5 fix: reorder nav buttons to Design, Upload, Shop (highlighted)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 18:14:51 -08:00
Jeff Emmett 500f232a54 feat: redesign landing page to match rApp ecosystem pattern
Replaces simple hero+products page with full rApp-style landing:
- Ecosystem badge ("Part of the rSpace Ecosystem")
- Hero section with gradient text and dual CTA
- "How It Works" 3-step cards (Upload → Pick Products → Ship)
- 6-feature grid (AI Studio, Spaces, Zero Inventory, Mockups, Payments, Ecosystem)
- Featured products section (first 6, with "view all" link)
- CTA card with gradient background
- Sticky nav with logo badge, cart icon, and compact links
- r* ecosystem footer with links to all rApps

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 18:05:23 -08:00
Jeff Emmett 067e14ed0c feat: photorealistic mockups and professional storefront
Backend:
- Replace tiny placeholder templates with photorealistic 1024x1024 product
  photos (blank t-shirt, sticker with peeling corner, framed print)
- Rewrite Pillow compositing: screen blend for dark garments (design looks
  printed on fabric), direct paste for stickers/prints
- Add PRINTFUL_STORE_ID config + X-PF-Store-Id header to Printful client
  (unblocks existing account-level tokens)

Frontend:
- Product listing: rounded cards with shadows, category badges, hover
  animations, lazy loading, empty state
- Product detail: skeleton loading, mockup type switcher with loading
  indicator, raw design preview, inline price in Add to Cart button,
  shipping/quality info section
- Homepage: featured products now show mockups instead of raw designs,
  professional card layout matching products page
- Client-side mockups: updated coordinates for new templates, screen
  blend support via Canvas globalCompositeOperation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:43:49 -08:00
Jeff Emmett acfe6cc350 feat: add Prodigi POD client + server-side product mockup previews
- Prodigi v4 API client for order fulfillment (create/get orders, quotes)
- Server-side mockup generation: Pillow composites designs onto product
  templates (shirt, sticker, print) at GET /api/designs/{slug}/mockup
- Product listing and detail pages now show designs ON products
- Mockup type switcher on product detail page (T-Shirt/Sticker/Art Print)
- Order service submits to Prodigi after successful payment
- POD webhook endpoint for fulfillment status updates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 13:29:47 -07:00
Jeff Emmett b437709510 feat: replace Stripe with Mollie payments + TBFF revenue split to bonding curve
- Swap stripe SDK for mollie-api-python (Dutch data residency, PCI-DSS L1)
- Mollie redirect checkout flow: create payment → hosted page → webhook
- Rename DB columns: stripe_session_id → payment_id, add payment_provider
- Add revenue split: configurable fraction of each sale deposits to
  flow-service TBFF funnel → Transak on-ramp → bonding curve ($MYCO)
- Add checkout success page with cart cleanup
- Add backlog tasks for remaining work
- Remove @stripe/stripe-js from frontend, Stripe env vars from Docker

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 13:16:39 -07:00
Jeff Emmett 54ccbbc350 feat: add Upload Swag page with product mockup previews
Users can upload their own logo/design, see instant mockup previews on
shirts, stickers, and art prints via client-side Canvas compositing,
then save and activate the design to the store for ordering.

- Backend: POST /api/design/upload with file validation (type, size,
  dimensions), Pillow processing, saves to designs/uploads/
- Frontend: /upload page with drag-and-drop, real-time mockup gallery,
  activate/discard flow matching existing Design Swag pattern
- Fix: activate/delete endpoints now scan all category dirs instead of
  hardcoding stickers/
- Nav: "Upload Swag" button added to header and homepage CTAs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 12:38:58 -07:00
Jeff Emmett 7be99d37d0 feat: add multi-tenant spaces with Fungi Flows storefront
Add subdomain-based spaces system for branded storefronts. Each space
has its own theme, product catalog, and isolated cart via scoped
localStorage keys.

- Backend: SpaceService loads YAML configs, new /api/spaces endpoints,
  design filtering by space, CORS regex for *.rswag.online
- Frontend: Next.js middleware detects subdomain and sets space_id cookie,
  dynamic CSS variable injection for theming, space-aware API calls
- Spaces: _default (rSwag hub, cyan/orange) and fungiflows (gold/green/purple)
- Docker: Traefik wildcard HostRegexp for subdomain routing
- Designs: Placeholder Fungi Flows sticker and logo tee

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 12:20:19 -07:00
Jeff Emmett 72f072f233 Initial commit: rSwag - merch store for the rSpace ecosystem
Forked from mycopunk-swag-store and rebranded for rSpace:
- Next.js 15 + FastAPI + PostgreSQL + Stripe
- Printful + Prodigi POD integration
- AI design generation via Gemini API
- rSpace color scheme (cyan/orange) and branding
- In-repo designs directory (stickers, shirts, misc)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 03:24:22 -07:00