blessed_moon@studio
studio: Blessed Moon Studio
discipline: Strategy · Design · Engineering
stack: Next.js · Tailwind · WebGL
scene: ASCII moon · 5 keyframes
type: Space Grotesk / JetBrains Mono
accent: #ff6a1f
sound: muted
status: ready
B / S / MCASE_01 / 26

— Case study 01

Markado

Service scheduling with a real calendar and payments

All work
markado.capture● verified
Markado appointments dashboard

project overview

A booking website where a professional shares one link, clients pick a free time slot, and the meeting plus the payment are handled automatically.

shipped outcome

A conversation becomes a confirmed, paid, calendar-synced appointment in about thirty seconds, with no manual step for the provider.

Role
Full-stack product engineering
Timeline
Ongoing
Year
2025
Team
Focused product team
The problem01

Booking a service still runs on message threads. Someone asks for a time, the provider checks a calendar, both sides go back and forth, and payment happens somewhere else. Every manual handoff creates room for double bookings, forgotten meetings, and unpaid sessions.

The approach02

The product uses one scheduling surface as the source of truth for availability, the calendar event, and the payment. A provider defines working rules once. Every free slot, Google Calendar entry, Meet link, and Stripe checkout derives from those rules instead of being coordinated by hand.

The result03

A conversation becomes a confirmed, paid, calendar-synced appointment in about thirty seconds, with no manual step for the provider.

— Interface evidence

The product, not a placeholder

These are the verified interface captures from the project build. Scroll inside taller frames to inspect each complete page.

Markado appointments dashboard01 / 04
Markado appointments dashboard
Markado weekly availability editor02 / 04
Markado weekly availability editor
Markado public booking page as seen by a client03 / 04
Markado public booking page as seen by a client
Markado booking form question editor04 / 04
Markado booking form question editor

— Delivery process

From operating constraint to shipped system

The work is sequenced around risk. Domain rules and failure states come before interface polish; automation arrives before handoff.

01

Map every booking state

Requested, confirmed, paid, rescheduled, cancelled, and no-show states were defined before the database schema so the product could recover cleanly from every transition.

02

Model availability first

Availability became a pure server-side function of working rules, calendar events, buffers, notice periods, and timezone instead of UI state.

03

Layer integrations safely

Google OAuth, Calendar read/write, Meet conferencing, and Stripe were added behind separate boundaries so one provider failure cannot corrupt the full booking flow.

04

Automate delivery

Type checking, linting, tests, container builds, and deployment run through the delivery pipeline so shipping is repeatable rather than ceremonial.

— System architecture

Clear boundaries, explicit responsibilities

Each layer has one job and a narrow contract. That keeps external services replaceable and product behavior testable.

Next.jsTypeScripttRPCPrismaPostgreSQLStripeGoogle CalendarDocker
markado.sys● online

availability

30 min

[x]Calendar linked
[x]Payment ready
[x]Meet enabled
MTWTF
1234567891011121314151617181920
14:0014:30
Client

Next.js App Router

Server-rendered booking pages with an interactive slot selection surface.

API

tRPC

One end-to-end typed contract between product UI and backend procedures.

Data

PostgreSQL + Prisma

Versioned relational models for users, working rules, event types, and bookings.

Integrations

Google Calendar / Meet · Stripe

Calendar truth, automatic conferencing, checkout, and webhook confirmation.

— What shipped

Product capabilities

01

Live availability engine

Slots are computed against real calendar data, timezones, buffers, and notice periods rather than exposed as a static list.

02

Automatic meeting setup

A confirmed booking creates the calendar event and conferencing details for both sides.

03

Payment inside the flow

Checkout happens before confirmation, so a reserved slot and a paid slot cannot drift apart.

— Engineering pressure

Challenges resolved

01

Timezone correctness

Every moment is stored in UTC and converted only at the display edge with the intended timezone captured explicitly.

02

Simultaneous booking attempts

Availability is revalidated during the final transaction so two clients cannot silently claim the same slot.

03

External API failure

Calendar and payment failures remain isolated and visible instead of leaving a booking in an unknown state.

verified project destinations

next case studyBee Dash

next transmission

Need a system this deliberate?

Bring the operating problem. We will shape it into a clear product brief and a buildable next step.

Start a project