From Email to Instant Close: How I Built a Proposal System That Actually Gets Results

Nick Jensen
Nick Jensen

The Problem: Proposals That Live in Email Purgatory

If you've ever freelanced or worked as a contractor, you know the drill. You spend hours crafting the perfect proposal in Google Docs, export it as a PDF, send it via email, and then... wait. And wait. And wait some more.

Days turn into weeks. You send a follow-up. "Just checking in!" Nothing. The proposal gets lost in their inbox, buried under 47 unread emails about quarterly reviews and someone's birthday cake in the break room.

Meanwhile, you're stuck in limbo. Can't start the work. Can't move on to other clients. Just... waiting.

I got tired of this dance. So I built something better.

What I Built: A Living, Breathing Proposal System

My proposal system is a Next.js + Sanity CMS-powered platform that transforms static proposals into interactive web experiences. Here's what makes it different:

1. Beautiful, Interactive Web Pages (Not PDFs)

Nextjs Freelance Proposal System
Proposal System

Each proposal lives at a clean URL like yoursite.com/proposals/project-name. No downloads. No "can you resend that?" moments. Just click and view, from any device.

The proposals feature:

  • Multiple package options (MVP vs. Full Build) with instant switching
  • Side-by-side comparison views for easy decision-making
  • Expandable scope of work sections
  • Detailed time breakdowns and payment terms
  • Optional Loom video embeds that auto-play on page load
  • Full print support for anyone who needs a paper trail
Proposal system with Sanity CMS
Compare Pricing

2. One-Click Acceptance (The Game Changer)

This is where magic happens. Instead of "Let me think about it" followed by radio silence, clients can accept the proposal instantly. The moment they submit, acceptance is saved to Sanity CMS with full metadata, notifications are sent to Discord and email, contact records are created, proposal status auto-updates, and the client gets redirected to a beautiful confirmation page.

Nextjs Proposal for Freelancers
Accept Terms

3. Optional Payment Integration

For proposals that require a first payment, I integrated Stripe. After acceptance, clients go straight to a payment page where they can pay the first milestone. The system creates Stripe payment intents, tracks payment status in Sanity, updates proposal acceptance records when payment completes, and sends payment confirmation emails.

What Problems This Solves

The Friction Problem

Email proposals create friction. Download this. Install that. "Which version is the latest?" My system removes all of that. One link. Works everywhere. Always up to date.

The Follow-Up Problem

With traditional proposals, you're stuck in an awkward follow-up loop. "Did you get a chance to review...?" With instant acceptance, there's no ambiguity. They either accepted it or they didn't.

The Tracking Problem

Email proposals disappear into the void. With this system, every view, every acceptance, every interaction is tracked. You can see exactly what happened and when.

How It Works (The Technical Bits)

For the developers out there, here's the stack: Next.js 15 (App Router) for the frontend and API routes, Sanity v4 for content management and data storage, TypeScript for type safety, Stripe for payment processing, Resend + React Email for transactional emails, and Discord webhooks for instant notifications.

The Data Model

Three main schemas: proposal (the proposal content), proposalAcceptance (acceptance records with full audit trail), and proposalSettings (notification configuration).

Acceptance Flow
1POST /api/proposal/accept
2→ Validate proposal & option
3→ Create acceptance record in Sanity
4→ Update proposal status
5→ Create/update contact record
6→ Send Discord webhook
7→ Send email notification
8→ Redirect to confirmation/payment page

Making Your Life Easier as a Freelancer

This system has transformed how I work:

Speed: From idea to shareable proposal in 15 minutes. Not days. Minutes.

Confidence: Know instantly when someone accepts. No more "I wonder if they saw it?"

Professionalism: Clients see you as someone who has their shit together. Not someone emailing PDFs from 2019.

Conversion: Interactive proposals with video walkthroughs and instant acceptance convert better. Period.

The Bottom Line

If you're still sending proposals via email and waiting for replies, you're working too hard. Build something that works for you while you sleep. Create systems that make saying "yes" effortless. Your proposal shouldn't be a PDF. It should be an experience.


More Stories

Introducing the Nano Banana Image Generator Plugin for Sanity Studio

If you're using Sanity Studio for content management, you know how crucial great imagery is for your projects. This plugin brings the power of Google's Gemini 2.5 Flash Image model directly into your Sanity Studio interface.

Supercharge Your Sanity CMS Development with Claude Code Plugins

Discover Sanity Agents - 7 powerful Claude Code plugins that revolutionize Sanity CMS development with AI-powered schema building, GROQ optimization, and zero-downtime migrations.