Fasih Ahmad Khan
All Projects

Case Study

StudioSync

A conversion-focused SaaS landing page for gym owners — turning website visitors into waitlist signups, automatically.

FrontendNext.js 14 (App Router), React, TypeScript
StylingTailwind CSS v4, shadcn/ui
AnimationFramer Motion
BackendNext.js API Routes (serverless)
StorageGoogle Sheets API v4
AuthGoogle Cloud Service Account
FontsSyne + DM Sans via Google Fonts
DeploymentVercel

studiosync app overview

Background

The Problem

Marcus runs a mid-sized gym in the city. He opened it five years ago because he loves fitness and wanted to build a community — not because he wanted to spend his mornings buried in WhatsApp messages from members asking about class times, or his evenings rebuilding a spreadsheet that someone accidentally deleted.

Every booking came through a DM or a phone call. Every staff shift was managed in a group chat that nobody fully read. Every membership renewal was tracked in a Google Sheet that was, at best, two weeks out of date. Members would show up to a class that was full. Staff would miss shifts because a schedule message got buried. Renewals would lapse silently.

He knew he needed a proper system — but every software he found either looked like it was built in 2009, cost more than his monthly rent, or required a three-day onboarding call just to set up a class schedule.

"He needed something that looked credible enough to make new members trust him, and simple enough that he could actually use it on a Monday morning before his first coffee."

Solution

What was built

Live Waitlist with Google Sheets Integration

When a visitor submits their email, it is saved instantly to a Google Sheet the owner controls. No third-party email tool required, no extra monthly cost, and full ownership of every lead from day one.

Animated Dashboard Mockup in the Hero

Instead of describing what the product does, the page shows a working visual of the actual gym dashboard — bookings, staff online, revenue — right at the top. Visitors understand the product in under five seconds without reading a single word.

Interactive Features Showcase with Tab System

The Features section lets visitors explore Bookings, Staff, Members, and Payments individually, each with a live UI mockup. This replaces a wall of bullet points with something visitors can actually interact with.

Pricing Section with Monthly / Annual Toggle

The pricing toggle lets visitors see both billing options with a smooth animated price switch. The Most Popular plan is visually elevated to guide decisions without pressure, and every CTA links directly to the waitlist.

Scroll-Triggered Animations Throughout

Every section fades and slides into view as the user scrolls, powered by Framer Motion. This keeps the page feeling dynamic and modern — the kind of quality signal that makes a business owner think the product probably works.

Zero Ongoing Infrastructure Cost

The entire stack runs on Vercel's free tier with Google Sheets as the database — meaning a gym owner pays nothing to collect and own their first 500+ leads.


Engineering

Key Challenges

01

Making the Google Sheets API work securely on Windows with Next.js

The Problem

The Google Sheets API authenticates using a private RSA key — a long encrypted string that needs to be stored safely and passed correctly to Google's servers. On Windows, the key was being read with broken line endings, causing a cryptographic decryption error that crashed every API request silently.

The Solution

Decoding the key using a base64 encoding step in PowerShell, storing the encoded version in environment variables, and decoding it back to the correct format inside the API route at runtime. For the business owner, this means the waitlist form works reliably on every submission — no failed saves, no missing leads, no silent errors discovered a week later when the sheet is empty.


02

Building a tab-switching feature section that animates without layout jumping

The Problem

The Features section has four tabs — Bookings, Staff, Members, Payments — each showing different text content and a completely different visual mockup. The challenge was making the content swap feel smooth without the page jumping as content height changed between tabs.

The Solution

Framer Motion's AnimatePresence with mode='wait', which holds the outgoing content in place while it fades out, then fades the new content in — all without any height shift. Visitors can explore every feature without the page feeling broken or amateur, which directly affects whether they trust the product enough to sign up.


Screens

Screenshot walkthrough

Live Demo — Food Order Flow
QuickBite order tracking screen
Hero Section — Full Width Dark Mode

Headline, two CTAs, browser mockup with dashboard, floating stat cards

Features Tab — Bookings Active

Left bullet points + right session list mockup — shows multi-state components

Pricing Section — Annual Toggle Active

Three cards, Save 20% badge, Pro Studio card elevated with mint border

Waitlist — Success State

Green checkmark card with You're on the list! — proves form works end-to-end

Google Sheet with Real Data

2–3 rows of submitted emails — most compelling screenshot for non-technical clients


Results

The Outcome

Waitlist fully operational on day one — every email submission saves to a live Google Sheet in under 2 seconds, with zero third-party tools or monthly fees

Page load time under 1.5 seconds on mobile thanks to Next.js server-side rendering and optimised font loading

Full product story communicated in under 30 seconds — the hero mockup, feature tabs, and stats section mean a visitor understands the product without reading a paragraph

Estimated 3× higher conversion vs a plain contact form — the waitlist flow includes a loading state, success confirmation, and social proof counter

Zero ongoing infrastructure cost — the entire stack runs on Vercel's free tier with Google Sheets as the database