diff --git a/app/case-studies/mayday/page.tsx b/app/case-studies/mayday/page.tsx new file mode 100644 index 0000000..00a76a9 --- /dev/null +++ b/app/case-studies/mayday/page.tsx @@ -0,0 +1,199 @@ +import type { Metadata } from "next"; +import Image from "next/image"; +import HeroSimple from "@/components/HeroSimple"; +import CTA from "@/components/CTA"; + +export const metadata: Metadata = { + title: "Case Study: Mayday | Good Robot Co.", + description: "How we built an intelligent lead generation system that automatically discovers and qualifies web development opportunities.", +}; + +export default function MaydayCaseStudy() { + return ( + <> + + +
+ {/* Overview */} +
+

The Challenge

+

+ Finding web development clients the traditional way: spending 10-15 hours per week manually + scrolling through Google Maps, checking websites one by one, and keeping spreadsheets of + broken sites. Pure grunt work that could be automated. +

+

+ Worse, the manual process was inconsistent. Good leads were missed, bad ones + were pursued, and there was no way to catch businesses whose websites went from working to + broken overnight. +

+
+ + {/* What We Built */} +
+

What We Built

+

+ Mayday is an automated lead generation system that runs in the background, + continuously scanning local businesses and flagging opportunities the moment they appear. + Instead of spending hours prospecting, the agency now gets a daily digest of qualified + leads ready for outreach. +

+
+

What It Does

+
+
+
~15 hours
+

Of manual work eliminated weekly

+
+
+
24/7
+

Continuous monitoring and lead discovery

+
+
+
10-15k
+

Businesses scanned monthly within budget

+
+
+
3 types
+

Intelligent lead classification and prioritization

+
+
+
+
+ + {/* Dashboard Preview */} +
+
+ Mayday dashboard showing qualified leads organized by type +
+

+ The Mayday dashboard showing real-time lead discovery and classification +

+
+ + {/* How It Works */} +
+

How It Works

+

+ The system automatically categorizes opportunities into three high-value lead types: +

+ +
+
+

Fix Leads

+

+ Businesses with broken websites—SSL errors, expired hosting, parked domains. + The pitch: "Your site is down. I can fix it today." +

+

+ High urgency = high close rate. These businesses are losing revenue every hour their site is broken. +

+
+ +
+

Build Leads

+

+ Established businesses with no website at all. + The pitch: "Your competitors are online. You should be too." +

+

+ Clear value proposition. These are leaving money on the table every day without a web presence. +

+
+ +
+

Social Only

+

+ Businesses using only Facebook/Instagram as their website. + The pitch: "A real site builds trust and drives more business." +

+

+ Easier sell than cold outreach. They already understand digital presence matters. +

+
+
+ +

+ Every morning, the system delivers a CSV export with business details, contact info, and + exactly what's wrong with their current setup. No guesswork, just actionable leads. +

+
+ + {/* The Engineering */} +
+

The Engineering

+

+ Three key design decisions make this system accurate, scalable, and cost-effective: +

+ +
+
+

Smart Retry Logic

+

+ Progressive timeout strategy distinguishes between slow sites and broken sites. The system + retries with increasing timeouts before marking anything as down—eliminates false positives + without missing genuinely broken sites. +

+
+
+

Adaptive Scheduling

+

+ Intelligent scan frequency based on site status. Working sites get checked weekly, broken sites + get adaptive monitoring, and static situations get monthly scans. Scans 10-15k businesses monthly + within the $200 API free tier. +

+
+
+

Platform-Specific Detection

+

+ Pattern recognition for 15+ error types across Squarespace, GoDaddy, Wix, and other platforms. + The system knows exactly what's broken and provides the specific context needed for outreach. +

+
+
+
+ + {/* The Bottom Line */} +
+

The Result

+

+ Mayday eliminates 10-15 hours per week of manual prospecting work. The system + runs continuously in the background, scanning businesses and flagging opportunities the moment + they appear. +

+

+ Daily digest of pre-qualified leads with business details, contact info, and the exact issue + to reference in your outreach. Broken sites, missing websites, businesses relying only on + social media—all categorized and ready for immediate follow-up. +

+
+

+ What This Demonstrates +

+

+ Building production automation requires solving real problems: false positive prevention, + cost-effective scaling, and accurate detection across multiple platforms. This project shows + our capability to design systems that work reliably in the wild, not just in demos. +

+
+
+
+ + {/* CTA - Full width section outside constrained container */} + + + ); +} diff --git a/app/case-studies/page.tsx b/app/case-studies/page.tsx new file mode 100644 index 0000000..e458235 --- /dev/null +++ b/app/case-studies/page.tsx @@ -0,0 +1,97 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import HeroSimple from "@/components/HeroSimple"; +import CTA from "@/components/CTA"; + +export const metadata: Metadata = { + title: "Case Studies | Good Robot Co.", + description: "Real projects, real results. See how we solve complex technical challenges and deliver business value.", +}; + +const caseStudies = [ + { + slug: "mayday", + title: "Mayday: Intelligent Lead Generation", + tagline: "From 15 hours/week of manual work to zero", + description: + "Built an automated system that runs 24/7, scanning local businesses and delivering daily digests of pre-qualified opportunities—broken sites, missing sites, and businesses ready for an upgrade. Eliminates the grunt work of lead generation entirely.", + highlights: [ + "~15 hours of manual work eliminated weekly", + "10-15k businesses scanned monthly within budget", + "Intelligent classification into 3 high-value lead types", + "24/7 continuous monitoring and discovery", + ], + tech: ["Next.js 14", "PostgreSQL", "Google Places API", "TypeScript"], + }, +]; + +export default function CaseStudiesPage() { + return ( + <> + + +
+
+ {caseStudies.map((study) => ( +
+ +

+ {study.title} +

+

{study.tagline}

+

+ {study.description} +

+ +
+

Key Results:

+
    + {study.highlights.map((highlight, idx) => ( +
  • + + {highlight} +
  • + ))} +
+
+ +
+

Technologies:

+
+ {study.tech.map((tech, idx) => ( + + {tech} + + ))} +
+
+ + + Read full case study + + → + + + +
+ ))} +
+
+ + {/* CTA - Full width section outside constrained container */} + + + ); +} diff --git a/components/Nav.tsx b/components/Nav.tsx index c4a7f51..77ba71e 100644 --- a/components/Nav.tsx +++ b/components/Nav.tsx @@ -28,6 +28,7 @@ export default function Nav() { const navLinks = [ { href: '/#how-it-works', label: 'How It Works' }, { href: '/#services', label: 'Services' }, + { href: '/case-studies', label: 'Case Studies' }, { href: '/pricing', label: 'Pricing' }, { href: '/ai-for-business', label: 'AI for Your Business' }, { href: '/blog', label: 'Blog' }, diff --git a/public/case-studies/mayday/dashboard.png b/public/case-studies/mayday/dashboard.png new file mode 100644 index 0000000..ac4366c Binary files /dev/null and b/public/case-studies/mayday/dashboard.png differ diff --git a/tests/config.js b/tests/config.js index 87854e0..09e1c96 100644 --- a/tests/config.js +++ b/tests/config.js @@ -5,6 +5,8 @@ module.exports = { '/', '/ai-for-business', '/blog', - '/pricing' + '/pricing', + '/case-studies', + '/case-studies/mayday' ] }