Joyce Art Studio
live2025Full-stack artist portfolio and custom-order e-commerce shop for Joyce Rasfeld — gallery, cart, Stripe checkout, and a webhook- driven order state machine.
Customers can browse a filterable gallery, then place custom orders for miniature houses, animal magnets, or framed pieces. The cart lives in localStorage so no account is needed — Stripe Checkout handles payment and a webhook flips the order to PAID, then triggers a Resend confirmation email.

How It Works
The cart is intentionally stateless — React Context backed by localStorage, no auth, no accounts. On checkout, the server creates a Stripe session and returns a hosted checkout URL. Stripe's checkout.session.completed webhook advances the order state machine to PAID and triggers a Resend confirmation email. Customer photos for custom pieces upload directly to Cloudinary via signed uploads.