The problem
Essentials Amora needed to move beyond a website-builder setup without losing the things the business actually depends on: massage booking, product sales, customer information, and payment processing.
Case study · Wellness, booking & storefront
A client-owned wellness storefront and booking experience migrated off Wix.


Essentials Amora needed to move beyond a website-builder setup without losing the things the business actually depends on: massage booking, product sales, customer information, and payment processing.
cranberriestudios built a new Astro frontend and kept Square behind it as the transactional system. Booking and storefront interactions are native to the site, while Square handles the business records and payments underneath.
A cohesive website for body care and massage that keeps the customer experience branded and portable while using established commerce infrastructure for the parts that need transactions and scheduling.


Concrete scope visible in the current implementation.
5
Massage services
Five current service offerings flow through the website-owned booking experience.
3
Body-care products
Three current small-batch products are represented in the website storefront.
3
Booking steps
Service, client details, then date and time keep the appointment flow focused.
2
Payment paths
Clients can use secure online payment or choose payment at the visit where available.
01
Astro renders the public experience quickly while transactional API routes run only where needed.
02
A Vue booking flow presents services and real Square availability without sending the visitor to a separate website UI.
03
Product discovery, cart state, quotes, and checkout presentation live inside the Essentials Amora site.
04
Square remains authoritative for appointments, catalog data, customers, orders, and payments rather than acting as the frontend.
05
Cloudflare Workers serve API routes while KV and D1 support OAuth and operational state.
06
TypeScript and Zod contracts keep browser-to-Worker booking and store payloads explicit and validated.
The frontend is mostly static. Dynamic execution is reserved for booking, checkout, Square synchronization, and operational API routes.
We can build the customer-facing experience around the systems your business already needs instead of making those systems define the design.