Slim the public contact form to email, interest, and message. Name, phone, and address live on the customer profile instead.
Customers can register, sign in, save shipping details, and view order history. Logged-in checkout creates a Stripe Customer and saves cards on Stripe (setup_future_usage); we only store stripe_customer_id.
Shipment tracking: EasyPost tracker lookup + webhook, plus paste-in numbers from Pirate Ship/Shippo. Customers see carrier status on their orders; dispatch_due refreshes open shipments.
Product reviews (1–5) only after a paid/fulfilled purchase of that product.
Contact form submits with only email + message; extra name/phone/address fields are ignored
Register, sign in, save profile (name/phone/shipping)
Guest checkout still works; after signup, prior orders with that email show in history
Logged-in checkout prefills shipping and does not collect card data locally
Portal: buy label or paste a Pirate Ship tracking number, confirm status/events; customer order page shows tracking
Product page: non-buyers cannot review; buyers can leave one 1–5 star review
Non-staff users hitting /portal/ redirect to /account/
## Summary
- Slim the public contact form to email, interest, and message. Name, phone, and address live on the customer profile instead.
- Customers can register, sign in, save shipping details, and view order history. Logged-in checkout creates a Stripe Customer and saves cards on Stripe (`setup_future_usage`); we only store `stripe_customer_id`.
- Shipment tracking: EasyPost tracker lookup + webhook, plus paste-in numbers from Pirate Ship/Shippo. Customers see carrier status on their orders; `dispatch_due` refreshes open shipments.
- Product reviews (1–5) only after a paid/fulfilled purchase of that product.
Fixes #7
## Test plan
- [ ] Contact form submits with only email + message; extra name/phone/address fields are ignored
- [ ] Register, sign in, save profile (name/phone/shipping)
- [ ] Guest checkout still works; after signup, prior orders with that email show in history
- [ ] Logged-in checkout prefills shipping and does not collect card data locally
- [ ] Portal: buy label or paste a Pirate Ship tracking number, confirm status/events; customer order page shows tracking
- [ ] Product page: non-buyers cannot review; buyers can leave one 1–5 star review
- [ ] Non-staff users hitting `/portal/` redirect to `/account/`
Shoppers can register, save shipping details, and view order history while cards stay on Stripe. EasyPost tracker updates (including numbers from Pirate Ship) and 1–5 star reviews are limited to buyers. The contact form now only asks for email and a message.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
setup_future_usage); we only storestripe_customer_id.dispatch_duerefreshes open shipments.Fixes #7
Test plan
/portal/redirect to/account/