I'm building a Next.js website for a local plumber. The basic site is currently deployed from GitHub to Vercel, and I already have a contact form working through Resend. I'd like to add online bookings and a blog, with an editing experience that feels somewhat like WordPress so the client can manage the site after it's handed over.
I've used Sanity locally before, but not as a hosted CMS. I'm also considering Railway's entry-level plan with PostgreSQL for the application and database. Stripe payments might be needed later, although that hasn't been decided yet. Self-hosting isn't an option.
For bookings, I could embed a service such as Calendly, but I'm unsure whether it makes more sense to keep bookings there and use a separate CMS for blog content, or build everything myself. The client would ideally like one straightforward place to manage bookings and posts, but I also want to avoid creating a complicated system that becomes difficult to maintain. What architecture and services would you recommend for a small business website like this?
5 Answers
I’d avoid building a full booking platform unless there’s a very specific requirement that existing tools can’t handle. Scheduling involves much more than displaying a calendar: preventing double bookings, cancellations, reminders, rescheduling, and eventually payments can become a substantial project. A hosted booking service usually has an API and embeddable components, so you can integrate it into the site while keeping the blog separate. Not having a built-in blog is probably not a strong enough reason to recreate the entire booking system.
A good low-risk approach would be to start with a booking request form rather than real-time appointment scheduling. The customer chooses a preferred day or time window, the plumber confirms it manually, and the system sends the relevant notifications. That avoids most double-booking and calendar-synchronization problems, while probably matching how a local plumbing business actually schedules jobs. Use a hosted CMS for the blog and editable pages, and only build more advanced booking features if the business proves it needs them.
That’s a useful distinction. A request-and-confirm flow would be much easier to launch and maintain than promising live availability immediately.
I’d keep the content-management side and booking side separate instead of trying to make one system behave like both WordPress and a scheduling platform. Sanity or another hosted CMS can handle posts and page content, while a booking provider can handle calendars and reminders. Railway is reasonable if you still need a small backend for custom forms or integrations, but don’t choose it just because it sounds scalable. Optimize for a handoff that the client can understand, update, and recover when something goes wrong.
Railway with PostgreSQL should be perfectly adequate for a small site, so scalability probably isn’t the main concern. The bigger issue is the booking workflow and ongoing ownership. If you build the booking database yourself, think carefully about availability, conflicting appointments, cancellations, notifications, permissions, backups, and what happens when something fails. Also, design payments as optional from the start so adding Stripe later doesn’t force you to redesign the whole system.
Next.js, a custom admin interface, a database, and payment handling may be more complexity than this business needs. If the client specifically wants a WordPress-like editing experience and will be responsible for maintenance, using WordPress with suitable plugins could be the more practical choice. The important question isn’t what is cheapest or most modern for you to build; it’s what the client can reliably manage after handoff. A custom application that only you understand could create problems later.

That makes sense. Since the client mainly wants everything to feel convenient, I’m leaning toward using a hosted booking system with a separate CMS for the blog rather than maintaining custom scheduling logic.