Skip to content
Case study · 5of 05
All work

Fiesta Fitnes

Fitness studioPančevo, Serbia

Trial requests land in a sheet with real statuses, and the studio confirms every one by phone.

Status

Pre-launch · demo approved, waiting for client content

Services

  • Website · Booking & orders · Lead pipeline & CRM · Automations

Year

2026

Results

Not measured yet.

Fiesta Fitnes studio website, home page, studio photo blurred
01Before

The problem

The old site's main button asked visitors to book a trial training, but behind it sat only a contact form, with no pipeline. One contact page showed raw shortcodes instead of content. The trust counters rendered as zero without JavaScript.

02Build

What we built

    1. A static site with 21 page templates and 29 blog posts moved over from WordPress.
    2. A 4-step trial request: program, preferred day and part of day, contact, review.
    3. Gift voucher and contact forms on the same backend.
    4. A Google Sheet CRM with separate tabs for trial requests, messages and vouchers.
    5. Statuses NEW → CONTACTED → CONFIRMED, then COMPLETED or REJECTED. Rows recolour by status.
    6. A studio email with Call and Reply buttons, and a confirmation with a request code for the visitor.
    7. A Config tab for recipients, rate limits and a pause switch. No developer needed.
    8. A 301 map for every changed WordPress URL, so existing links keep working.
    03Flow

    How it works

    The flow end to end, as the system is built to run. Sheet and status names are the client's own.

    09 steps · 1 sheet

      1. Program
      2. Day and part of day
      3. Contact and consent
      4. Review and send
      5. Checks and rate limits
      6. Sheet row · NEW
      7. Studio and visitor emails
      8. Studio calls back
      9. CONFIRMED
      04Engineering

      Under the hood

      The details a developer checks first. Most of them exist so an inquiry is never lost or sent twice.

        1. Idempotent writes. The same request ID returns the same result, and the same phone, date and part of day count as a duplicate, even from a new tab.
        2. Rate limits per phone and across the whole form, each with its own message.
        3. A spam quarantine that can't lock out a real person whose password manager fills the hidden field.
        4. The response carries the real email outcome, and the sheet records it on every row.
        5. A timeout means unknown outcome and a status check, not a blind resend.
        6. Server validation rejects impossible dates like 31 February.
        7. A pause switch in the Config tab stops new requests without touching code.
        8. The build refuses to ship pointing at localhost, and tests refuse to touch the real sheet.

        Stack

        What it runs on.

        • Astro · TypeScript · Google Apps Script · Google Sheets · MailApp · Playwright · Netlify
        05QA

        Build QA

        From our own test runs before launch. These are build numbers, not business results.

          • astro check on 46 files: 0 errors, 0 warnings, 0 hints.
          • Interaction audit: 96 page and viewport runs, 132 buttons, 0 problems.
          • Responsive audit of every page at 7 widths: no findings.
          • Backend health check on 22 September 2026: live and connected to the sheet.
          06Scope

          What we didn't build, on purpose

          Scope is a decision. Every line here was decided, not forgotten.

            • Not a booking system. Visitors request a day and part of day, and the studio confirms the exact time by phone.
            • No slots, no capacity, no slot-taken errors. The first version had them. We removed them.
            • No Calendly or Cal.com. The right tool for high volume, the wrong one for a handful of trial requests.
            • No voucher sales. Vouchers are requested, never purchased, and never marked as issued.
            • No ratings in the structured data. Tests check that none sneak in.
            07Screens

            The build

            Captured from our local pre-launch build. Phone numbers, email addresses, prices and photos of people from the client's site are blurred wherever they appear.

            →Next step

            Let's map your system.