Every tool in a platform build should be there for a reason. Not because it was trending, not because it was already in the repo, but because it was the right answer to a specific question the project posed. Here is how the Solaire stack came together.
Next.js — the frame
The choice of Next.js was not controversial. Server components, edge rendering, and the App Router give us the performance characteristics a direct booking platform requires: fast first paint, clean URLs, and the ability to render booking state server-side without exposing availability logic to the client.
The key requirement was that the availability calendar and booking flow needed to be server-rendered with real-time data from Sanity, with no client-side fetch flickering. Next.js server components handle this cleanly. The guest sees a complete, accurate calendar on first load, not a skeleton that hydrates with a second request.
Sanity — the content layer
Sanity gives a non-technical owner a genuinely usable dashboard without requiring a custom admin build. The structured content model—availability documents, property configuration, seasonal pricing rules—is defined once and surfaced through Sanity Studio with field-level validation.
The owner updates availability by clicking dates on a calendar. Pricing adjustments happen in a form field. No code deploys. No FTP. No sending a spreadsheet to a developer.
Sanity’s GROQ query language also happens to be excellent for the kind of date-range availability queries a booking engine needs. The query for “all blocked date ranges that overlap with the guest’s requested check-in and check-out” is readable and fast.
Stripe — payments
Stripe was the clear choice for deposit handling. Payment Intents with capture_method: manual let us authorize the deposit at booking and capture it at check-in, which is the correct model for a property handling high-value deposits—the guest commits, the funds are secured, but the full capture happens when the stay begins.
Stripe Connect routes funds directly to the owner’s bank account. There is no Loftare intermediary holding money. The owner receives the deposit directly, minus Stripe’s processing fee, within two business days.
Resend — transactional email
The booking confirmation, pre-arrival guide, and post-stay follow-up are not Mailchimp campaigns. They are transactional emails that carry the brand—designed in React Email, rendered to HTML, delivered via Resend’s API.
The reason for Resend over SendGrid or Postmark is simple: React Email components let us build email templates with the same design system as the platform itself. Same typeface loaded via web-safe fallbacks, same colour tokens, same typographic rhythm. The email a guest receives 48 hours before arrival looks like it came from the same place as the website they booked on.
Vercel — deployment
Vercel is the correct deployment target for a Next.js platform with edge functions and image optimisation requirements. The preview URL workflow also matters during the build: the owner can review every change in a live preview environment before it goes to production, without any technical involvement on their part.
The full platform—website, booking engine, guest portal, owner dashboard—deploys from a single git push. Zero-downtime. No server management. No infrastructure decisions.
Working on a direct channel? Let’s talk.
Book a discovery call →