DEV Community

Cover image for From Pain Point to MVP: I Built StatementSync in One Week
Chudi Nnorukam
Chudi Nnorukam

Posted on • Edited on • Originally published at chudi.dev

From Pain Point to MVP: I Built StatementSync in One Week

Originally published at chudi.dev


"I spend 10 hours a week just typing numbers from PDFs into spreadsheets."

That's what a freelance bookkeeper told me. She processes 50+ bank statements per month. Each one takes 10-15 minutes of manual transcription. The tedium is real.

I built StatementSync to fix this. One week from idea to production.

The Pain Point

Bookkeepers work with bank statements constantly. The workflow:

  1. Client sends PDF bank statement
  2. Open PDF, open spreadsheet
  3. Manually type each transaction
  4. Check for errors
  5. Repeat 50+ times per month

The tools that exist either:

  • Require proprietary software (QuickBooks, Xero)
  • Charge per file ($0.25-1.00 per statement)
  • Have terrible accuracy (OCR garbage)

For someone processing 50+ statements monthly, per-file pricing adds up fast. $25-50/month minimum, scaling with volume.

Validation Before Code

MicroSaaSBot's validation phase scored StatementSync before I wrote a single line of code:

Criteria Score Notes
Problem Severity 8/10 Daily pain point, high time cost
Persona Clarity 9/10 "Freelance bookkeeper processing 50+ statements/month"
Market Size 7/10 Niche but clear demand
Willingness to Pay 8/10 Currently paying for inferior solutions
Overall 78/100 Proceed

Problems scoring below 60/100 get killed. No code written. This prevents building products nobody wants.

The validation phase confirmed:

  • Real people have this problem
  • They're already paying for solutions
  • Current solutions have clear weaknesses to exploit

The Week

Day 1-2: Deep Validation

MicroSaaSBot's Researcher agent dug deeper:

  • Competitive analysis (TextSoap, HappyFox, manual OCR tools)
  • Pricing research ($0.25-1.00 per file is standard)
  • Feature gap analysis (batch upload, bank-specific parsing)

Key insight: Flat-rate pricing would be a massive differentiator. Heavy users hate per-file fees.

Day 3: Architecture

MicroSaaSBot's Architect agent designed the system:

Frontend: Next.js 15 (App Router)
Auth: Clerk (handles signup, OAuth)
Database: Supabase PostgreSQL
Storage: Supabase Storage (PDFs, exports)
Payments: Stripe (subscriptions)
PDF Parsing: unpdf (serverless-compatible)
Hosting: Vercel
Enter fullscreen mode Exit fullscreen mode

Critical decision: Pattern-based extraction instead of LLM inference.

LLM extraction would cost $0.01-0.05 per statement in API calls. Pattern-based extraction costs nothing at runtime. For a flat-rate product, this is the difference between profit and loss.

Day 4-6: Implementation

MicroSaaSBot's Developer agent built:

Day 4: Auth flow, database schema, file upload

// Prisma schema
model User {
  id                  String   @id @default(cuid())
  clerkId             String   @unique
  email               String
  subscriptionTier    Tier     @default(FREE)
  conversionsThisMonth Int     @default(0)
  lastResetAt         DateTime @default(now())
}

model Conversion {
  id              String   @id @default(cuid())
  userId          String
  originalFileName String
  status          Status   @default(PENDING)
  extractedData   Json?
  excelPath       String?
  csvPath         String?
}
Enter fullscreen mode Exit fullscreen mode

Day 5: PDF parsing engine

async function extractTransactions(pdfBuffer: Buffer): Promise<Transaction[]> {
  const pdf = await getDocument({ data: pdfBuffer }).promise;
  const text = await extractText(pdf);

  // Pattern matching for supported banks
  const bank = detectBank(text);
  const parser = getParser(bank); // Chase, BofA, Wells, Citi, Capital One

  return parser.extract(text);
}
Enter fullscreen mode Exit fullscreen mode

Day 6: Export generation, Stripe integration, dashboard

Day 7: Deployment

MicroSaaSBot's Deployer agent:

  • Configured Vercel deployment
  • Set up Supabase production
  • Connected Stripe webhooks
  • Ran smoke tests

Live by end of day.

The Technical Challenge

Problem: pdf-parse doesn't work on Vercel serverless.

pdf-parse has native dependencies that fail on Vercel's serverless runtime. I discovered this at 2 AM when the production build crashed.

Solution: Switch to unpdf.

unpdf is built for serverless from the ground up. No native dependencies, works perfectly on Vercel. The switch took 2 hours but saved the deployment.

If you're processing PDFs on Vercel, Netlify, or any serverless platform, use unpdf. Not pdf-parse. Save yourself the debugging.

The Product

StatementSync today:

Free Tier:

  • 3 conversions/month
  • Single file upload
  • 7-day history

Pro Tier ($19/month):

  • Unlimited conversions
  • Batch upload (20 files)
  • 90-day history
  • Priority support

The $19/month flat rate is the differentiator. Process 50 statements? Same price. Process 200? Same price. Heavy users save money. Light users get simplicity.

Results

Metric Value
Time to build 7 days
Processing time 3-5 seconds per statement
Extraction accuracy 99%
Supported banks 5 (Chase, BofA, Wells, Citi, Capital One)
Runtime cost per extraction $0 (pattern-based)

What I'd Do Differently

  1. Start with one bank - Supporting 5 banks day one was overkill. Start with Chase (most common), add others based on demand.

  2. Skip the dashboard MVP - Users just want to upload and download. The fancy dashboard came before proving the core value.

  3. Launch before Day 7 - Could have deployed a working version by Day 5 and iterated publicly.

The Lesson

Building fast doesn't mean building sloppy. It means:

  • Validate before you code - Kill bad ideas early
  • Architecture matters - Pattern-based vs LLM extraction was the key decision
  • Launch before perfect - Iteration beats planning

MicroSaaSBot compressed weeks of work into days by handling the tedious parts automatically. I focused on the decisions that mattered.

StatementSync is proof that AI-assisted development can ship real products, not just demos.


Related: Serverless PDF Processing: unpdf vs pdf-parse | Portfolio: StatementSync

Top comments (0)