Micro-SaaS for Local Services: From $0 to $3K MRR in 90 Days
In January 2025 I walked into a barbershop in Braga with a laptop and a one-page flyer. Rui, the owner, ran three chairs, answered the phone between haircuts, and lost bookings every time a call went unanswered. I showed him a booking page with his own services already loaded. He shrugged. I offered a free 14-day pilot and promised to load everything myself in thirty minutes. He said yes. Ninety days later fourteen shops paid me every month. Monthly revenue reached $3,086. Build cost stayed under $400 plus my evenings. The playbook below covers why I picked local services, which single feature opened wallets, which stack held costs near zero, how fifty knocks turned into ten pilots and three first payers, and how tiers from $99 to $299 carried the rest.
Why local services
Chains run IT budgets and loyalty apps. Single-location shops run on phone calls, Instagram DMs, and a paper book by the register. The owner cuts hair, fixes cars, or trains clients, and the phone rings mid-job. Every missed call burns a €25 haircut or a €60 massage slot.
I picked this segment for four reasons. First, owners feel pain weekly: empty chairs stare at them. Second, they pay monthly for tools that fill chairs: they already pay for ads that bring nothing. Third, they stay: once the booking link lives in their Google profile and Instagram bio, ripping it out costs them rankings and regulars. Fourth, large vendors ignore them: a €99 monthly account never clears enterprise sales review, so the street stays open.
I scoped hard. I listed 200 shops along the Braga to Porto corridor. I kept only teams of three to fifteen people with no online booking. That filter left eighty doors worth knocking on.
The wedge feature: booking plus reminders
Rui gave me the numbers on day one. His shop lost about seven bookings per week to no-shows. Average ticket ran €25. Weekly leak reached €175, monthly leak near €700. He needed no dashboard, no loyalty program, no marketing blasts. He needed fewer empty chairs.
I shipped one thing: a public booking page per shop plus SMS reminders 24 hours and 2 hours before each visit, each with a one-tap cancel and reschedule link. The owner managed everything from one calendar screen. Clients changed nothing in their habits: they tapped a link from Instagram or Google, picked a slot, and got two texts.
Three weeks later Rui counted two no-shows per week instead of seven. Recovered revenue ran roughly €500 per month against a €199 subscription. He signed the paid plan on the spot and told two neighboring owners the same week.
I left features out on purpose. No point of sale, no inventory, no marketing automation, no loyalty points. Scope discipline kept the build at six days and support near zero.
Stack: Next.js plus Neon plus Stripe
One codebase served all fourteen shops. Next.js App Router on Vercel rendered each booking page from a tenant slug like /b/rui-cuts. One Postgres database on Neon held three core tables: customers, bookings, reminders. Every row carried tenant_id, and every query filtered on it.
Stripe ran the money. Each plan mapped to a Stripe subscription with a 14-day trial. The Customer Portal handled card updates and plan switches, so I wrote zero billing UI. Twilio sent the SMS reminders at about $0.0075 per message. A shop with 150 bookings per month triggered around 300 texts, close to $2.25 in message cost against €99 or more in revenue.
Shop owners logged in with a magic link, no passwords to reset. Their admin screen showed a calendar, a client list, and a no-show list with phone numbers.
Monthly infra ran $20 for Vercel, $19 for Neon, and about $32 for Twilio. Total under $75 per month against $3,086 in revenue.
Acquisition: 50 doors, 10 pilots, 3 payers
Weeks one and two belonged to the street. I knocked on fifty doors with a 90-second script and the laptop showing their own preloaded services. I scraped service lists and prices from Instagram and Google before knocking, so the demo showed their own shop front to back.
The offer stayed fixed: a free 14-day pilot with me loading menu, prices, staff, and hours in thirty minutes, plus one 20-minute training visit. Ten owners said yes. Every Tuesday I sat with each owner and read the admin screen: bookings taken, reminders sent, no-shows counted.
By day 45 three pilots had converted to paid: Rui's barbershop at $199, a nail studio at $99, and a CrossFit gym at $299 across two rooms. Seven pilots died, and each death taught a filter. Two shops wanted a full cash register, which I refused to build. Two owners never opened the admin screen once, which told me to require one trained operator per shop. Three shops ran fewer than three staff with volume too low to feel the gain, which set my three-seat minimum.
The three payers recruited the next eleven. Each intro from a paying owner converted four times better than a cold knock. By day 90 the count stood at fourteen shops: four on Starter, three on Growth, seven on Pro. I asked for the card at pilot start through a Stripe trial that charged after day 14, and I showed up every Tuesday with printed numbers.
Pricing: $99 to $299 per month tiers
Three tiers mapped to shop size. Starter at $99 covered a booking page, SMS reminders, one location, and two staff seats. Growth at $199 added Google review requests after each visit, a waitlist for full days, five seats, and a weekly SMS summary for the owner. Pro at $299 added card holds against no-shows, multiple locations, and a monthly 30-minute call where I walked the owner through their numbers.
Day-90 math read clean: four Starter accounts brought $396, three Growth accounts brought $597, seven Pro accounts brought $2,093. Total $3,086 per month. Message and hosting costs stayed under $75.
Pro at $299 made Growth at $199 look like the sensible pick, and solo-room shops self-selected into Starter without haggling.
Copy this playbook in one specific street before writing a line of code. List 200 shops, filter to teams of three to fifteen with no online booking, preload ten demos from public Instagram data, and knock on fifty doors. Sell the pilot, load the data yourself, visit on Tuesdays with printed numbers, and ask for the card on day one. Three payers validate the wedge. Fourteen carry you past $3K.