Jemari Sapp

MS Information Systems Candidate

AI For Business Innovation

Back
Inquifly - AI-Powered Inquiry Management

Inquifly

RoleProduct Engineer
Core Stack
Next.js 15TypeScriptSupabaseGemini AIGoogle Calendar APIStripePostmark

The invisible employee for photographers.
AI-powered inquiry automation that drafts responses in your voice, checks your calendar, and never sleeps. Built it for my own studio first, then productized into a multi-tenant SaaS.

97%
Faster Response
Zero
Double-Bookings
~10hrs
Saved/Month

The Problem

78% of clients book with the first photographer to respond. Yet most photographers lose bookings because:

  • Slow responses. It takes 20+ minutes to read an email, check the calendar, and draft a reply.
  • Double-booking risk. Manual calendar checking leads to costly errors.
  • Lost revenue. Each slow response risks $500-5,000+ in booking value.
  • Admin overload. Time spent on emails is time not spent shooting.

The Solution

An AI system that reads inquiry emails, checks calendar availability, and drafts personalized responses in the photographer's voice. Ready for one-click send.

The key insight: The AI doesn't just respond. It understands the inquiry, checks real availability, and sounds like the photographer.

Core workflow:

  1. Client emails photographer
  2. System receives inquiry (internal tool: Gmail API, SaaS: Postmark forwarding)
  3. AI extracts intent (name, date, session type)
  4. System checks Google Calendar availability
  5. AI drafts response with pricing + alternatives if booked
  6. Photographer reviews draft (internal tool: in Gmail, SaaS: in Inquifly dashboard) and sends

Evolution: Internal Tool → SaaS

Phase 1: Validate (Internal Tool)

Built a lightweight serverless system for my own studio (TRISP Studio). No database for state management. Used Gmail Labels as a finite state machine to track which threads had been processed.

Try the interactive demo:

Inquiry: Graduation Shoot - Studio & Campus

J
Jada Anderson
to me
Today at 9:42 AM

Hi,

I wanted to do a couple of shots in a studio and on campus. Ideal locations on campus are my college building, legacy gazebo, and the KSU sign.

For the studio shots I would like maybe a yellow or white backdrop. I am graduating with a psychology degree so maybe something that can correlate with that.

Are you available on November 12th around 2pm?

Thanks,
Jada

  • Architecture: Vercel serverless + Gmail Pub/Sub webhooks
  • Clever bit: Mark threads as "claimed" before slow AI operations to prevent race conditions
  • Result: 99% faster, 62% cheaper than no-code alternatives

Phase 2: Productize (SaaS)

With validation complete, rebuilt for multiple users:

  • Supabase for auth + multi-tenant data isolation
  • Postmark for email forwarding (privacy-friendly, no Gmail API access)
  • Stripe for usage-based subscriptions (Free → Founder → Creator → Pro → Studio)
  • Knowledge base so each photographer configures their own packages, policies, and tone

Technical Highlights

Two-Stage AI Pipeline

Separating understanding from generation enables calendar lookup between stages.

Raw Email

"Hi! I'm looking for a graduation photographer for May 15th at Georgia State. Do you have any availability? Thanks, Sarah"

Stage 1: Extraction

Gemini parses email into structured data

Output: { name: "Sarah", session_type: "graduation", date: "2025-05-15", location: "Georgia State" }

Context Gathered

  • • Extracted inquiry data
  • • Graduation packages ($299-$599)
  • • Photographer's tone settings
  • • Business policies (50% deposit)

Calendar Check

Google Calendar API checks availability

Output: { available: false, alternatives: ["May 14 2pm", "May 16 11am", "May 17 9am"] }

Stage 2: Draft Generation

  • • Inquiry + packages + policies + tone
  • • Calendar status (unavailable + alternatives)
  • • Sample responses for style

Draft Ready

Personalized response with alternatives

Output: "Hi Sarah! Thanks for reaching out. I'm booked on May 15th, but I have availability on May 14th at 2pm or May 16th at 11am. My graduation packages start at $299..."

Stage 1 (Extraction): Email → structured JSON ({ name, date, session_type, location })
Stage 2 (Generation): JSON + packages + policies + availability → personalized draft

Deterministic Guardrails

AI handles language and tone. Code handles facts. The AI cannot invent prices. It only references the photographer's configured packages.

Idempotency Pattern

Multiple webhooks can fire for the same email. Solution: claim the thread immediately (internal tool: Gmail labels, SaaS: header deduplication) before expensive AI operations.


Tech Stack

LayerTechnologyPurpose
FrontendNext.js 15 (App Router)Server components + API routes in one framework.
React 19 + TypeScriptType-safe UI with latest React features.
Tailwind CSS v4Utility-first styling with dark mode support.
RechartsUsage analytics and time-saved visualizations.
Backend & DatabaseSupabase (PostgreSQL)User data, drafts, settings, processing logs.
Supabase AuthEmail authentication with session management.
ZodRuntime validation for API inputs.
AI & ProcessingGoogle Gemini APITwo-stage AI: inquiry extraction + draft generation.
Postmark WebhooksInbound email processing pipeline.
IntegrationsGoogle Calendar APIReal-time availability checking with freebusy.
Google OAuth 2.0Calendar and Gmail access tokens.
StripeSubscription billing with usage-based limits.

Impact

The analytics dashboard tracks activity, time saved, processing speed, and usage patterns like busiest days and peak hours.

MetricBeforeAfterImpact
Inquiry response time20+ minutes30 seconds97% faster
Calendar checkingManual lookupReal-time APIZero double-bookings
Brand voice consistencyVaries by mood/timeKnowledge base driven100% on-brand
Time saved per month0 hours~10 hours (30 inquiries)Reclaimed creative time
Inquiry-to-draft automationFully manualOne-click review95% automated
Alternative date suggestionsNone (lost booking)3-day window scanRecovered revenue

Challenges & Learnings

Gmail Forwarding UX

Problem

Non-technical photographers struggle with complex filter setup.

Solution

Step-by-step wizard with test inquiry verification.

Key Learning

"Invest heavily in onboarding UX for complex third-party integrations."

AI Hallucination Prevention

Problem

LLMs might invent prices/policies if given too much creative freedom.

Solution

Strict separation of concerns. AI handles language; code handles facts.

Key Learning

"Never let AI generate business-critical numbers without deterministic guardrails."

OAuth Token Management

Problem

Google tokens expire efficiently; users shouldn't re-authenticate constantly.

Solution

Store refresh tokens securely and implement auto-refresh on expiry.

Key Learning

"Plan for long-lived integration maintenance from the start."

Race Conditions

Problem

Parallel webhooks can process the same email twice.

Solution

Claim threads immediately in DB *before* starting slow operations.

Key Learning

"Idempotency must check state first, not last."


What I'd Do Differently

  • Email tracking. Measure actual conversion, not just drafts sent.
  • Mobile notifications. Photographers check email on phones.
  • RAG for FAQs. Scale knowledge base beyond structured packages.
  • A/B test tones. Learn which styles convert better.

Skills Demonstrated

Full-Stack Development

Next.js 15 + Supabase + Google APIs + Stripe

AI/LLM Integration

Two-stage Gemini pipeline with structured outputs

Product Thinking

Internal tool validation → SaaS productization, usage-based pricing

API Design

Webhook handlers, OAuth flows, rate limiting

Third-Party Integrations

Google Calendar, Gmail, Postmark, Stripe


Live: inquifly.com