Module R: Revenue Engines
STREETS Developer Income Playbook Weeks 5-8 | 8 Lessons | Deliverable: Your First Revenue Engine + Plan for Engine #2
"Build systems that generate income, not just code that ships features."
You've got the infrastructure (Module S). You've got something competitors can't easily copy (Module T). Now it's time to turn all of that into money.
This is the longest module in the playbook because it's the one that matters most. Eight revenue engines. Eight different ways to turn your skills, hardware, and time into income. Each one is a complete playbook with real code, real pricing, real platforms, and real math.
You are not going to build all eight. You're going to pick two.
The 1+1 Strategy:
- Engine 1: The fastest path to your first dollar. You're going to build this one during Weeks 5-6.
- Engine 2: The most scalable engine for your specific situation. You're going to plan this one during Weeks 7-8 and start building it in Module E.
Why two? Because one income stream is fragile. A platform changes its terms, a client disappears, a market shifts — and you're back to zero. Two engines that serve different customer types through different channels give you resilience. And the skills you build in Engine 1 almost always accelerate Engine 2.
By the end of this module, you will have:
- Revenue coming in from Engine 1 (or the infrastructure to generate it within days)
- A detailed build plan for Engine 2
- A clear understanding of which engines match your skills, time, and risk tolerance
- Real, deployed code — not just plans
No theory. No "someday." Let's build.
Lesson 1: Digital Products
"The closest thing to printing money that's actually legal."
Time to first dollar: 1-2 weeks Ongoing time commitment: 2-4 hours/week (support, updates, marketing) Margin: 95%+ (after creation, your costs are near zero)
Why Digital Products First
Digital products are the highest-margin, lowest-risk revenue engine for developers. You build something once, sell it forever. No clients to manage. No hourly billing. No scope creep. No meetings.
The math is simple:
- You spend 20-40 hours building a template or starter kit
- You price it at $49
- You sell 10 copies in the first month: $490
- You sell 5 copies every month after that: $245/month passive
- Total cost after creation: $0
That $245/month might not sound exciting, but it requires zero ongoing time. Stack three products and you're at $735/month while you sleep. Stack ten and you've replaced a junior developer salary.
What Sells
Not everything you could build will sell. Here's what developers actually pay for, with real price points from products that exist today:
Starter Kits and Boilerplates
| Product | Price | Why It Sells |
|---|---|---|
| Production-ready Tauri 2.0 + React starter with auth, DB, auto-update | $49-79 | Saves 40+ hours of boilerplate. Tauri docs are good but don't cover production patterns. |
| Next.js SaaS starter with Stripe billing, email, auth, admin dashboard | $79-149 | ShipFast ($199) and Supastarter ($299) prove this market exists. Room for focused, cheaper alternatives. |
| MCP server template pack (5 templates for common patterns) | $29-49 | MCP is new. Most devs haven't built one. Templates eliminate the blank-page problem. |
| AI agent configuration pack for Claude Code / Cursor | $29-39 | Subagent definitions, CLAUDE.md templates, workflow configs. New market, near-zero competition. |
| Rust CLI tool template with auto-publish, cross-compilation, homebrew | $29-49 | Rust CLI ecosystem is growing fast. Publishing correctly is surprisingly hard. |
Component Libraries and UI Kits
| Product | Price | Why It Sells |
|---|---|---|
| Dark-mode dashboard component kit (React + Tailwind) | $39-69 | Every SaaS needs a dashboard. Good dark-mode design is rare. |
| Email template pack (React Email / MJML) | $29-49 | Transactional email design is tedious. Developers hate it. |
| Landing page template pack optimized for developer tools | $29-49 | Developers can code but can't design. Pre-designed pages convert. |
Documentation and Configuration
| Product | Price | Why It Sells |
|---|---|---|
| Production Docker Compose files for common stacks | $19-29 | Docker is universal but production configs are tribal knowledge. |
| Nginx/Caddy reverse proxy configurations for 20 common setups | $19-29 | Copy-paste infrastructure. Saves hours of Stack Overflow. |
| GitHub Actions workflow pack (CI/CD for 10 common stacks) | $19-29 | CI/CD config is write-once, Google-for-hours. Templates fix that. |
Real Talk: The products that sell best solve a specific, immediate pain. "Save 40 hours of setup" beats "learn a new framework" every time. Developers buy solutions to problems they have RIGHT NOW, not problems they might have someday.
Where to Sell
Gumroad — The simplest option. Set up a product page in 30 minutes, start selling immediately. Takes 10% of each sale. No monthly fee.
- Best for: Your first product. Testing demand. Simple products under $100.
- Downside: Limited customization. No built-in affiliate program on free plan.
Lemon Squeezy — A Merchant of Record, meaning they handle global sales tax, VAT, and GST for you. Takes 5% + $0.50 per transaction.
- Best for: International sales. Products over $50. Subscription products.
- Upside: You don't need to register for VAT. They handle everything.
- Downside: Slightly more setup than Gumroad.
Your Own Site — Maximum control and margin. Use Stripe Checkout for payments, host on Vercel/Netlify for free.
- Best for: When you have traffic. Products over $100. Building a brand.
- Upside: 0% platform fee (only Stripe's 2.9% + $0.30).
- Downside: You handle tax compliance (or use Stripe Tax).
Common Mistake: Spending two weeks building a custom storefront before you have a single product to sell. Use Gumroad or Lemon Squeezy for your first product. Move to your own site after you've validated demand and have revenue to justify the effort.
From Idea to Listed in 48 Hours
Here's the exact sequence. Set a timer. You have 48 hours.
Hour 0-2: Pick Your Product
Look at your Sovereign Stack Document from Module S. What are your primary skills? What framework do you use daily? What setup have you done recently that took way too long?
The best first product is something you've already built for yourself. That Tauri app scaffolding you spent three days on? That's a product. The CI/CD pipeline you configured for your team? That's a product. The Docker setup that took you a weekend to get right? Product.
Hour 2-16: Build the Product
The product itself should be clean, well-documented, and solve a specific problem. Here's the minimum:
my-product/
README.md # Installation, usage, what's included
LICENSE # Your license (see below)
CHANGELOG.md # Version history
src/ # The actual product
docs/ # Additional documentation if needed
examples/ # Working examples
.env.example # If applicable
Documentation is half the product. A well-documented template outsells a better template with no docs, every single time. Use a local LLM to help draft documentation (set up Ollama from Module S if you haven't yet):
# Generate initial docs from your codebase
ollama run llama3.1:8b "Given this project structure and these key files,
write a comprehensive README.md that covers: installation, quick start,
project structure explanation, configuration options, and common
customizations. Be specific and include real commands.
Project structure:
$(find . -type f -not -path './.git/*' | head -50)
Key file (package.json):
$(cat package.json)
Key file (src/main.tsx):
$(cat src/main.tsx | head -80)"
Then edit the output. The LLM gives you 70% of the docs. Your expertise provides the remaining 30% — the nuances, the gotchas, the "here's why I chose this approach" context that makes documentation actually useful.
Hour 16-20: Create the Listing
Set up your Lemon Squeezy store. The checkout integration is straightforward — create your product, set up a webhook for delivery, and you're live. For the complete payment platform setup walkthrough with code examples, see Module E, Lesson 1.
Hour 20-24: Write the Sales Page
Your sales page needs exactly five sections:
- Headline: What the product does and who it's for. "Production-Ready Tauri 2.0 Starter Kit — Skip 40 Hours of Boilerplate."
- Pain point: What problem it solves. "Setting up auth, database, auto-updates, and CI/CD for a new Tauri app takes days. This starter gives you all of it in one
git clone." - What's included: Bullet list of everything in the package. Be specific. "14 pre-built components, Stripe billing integration, SQLite with migrations, GitHub Actions for cross-platform builds."
- Social proof: If you have it. GitHub stars, testimonials, or "Built by [you] — [X] years building production [framework] apps."
- Call to action: One button. One price. "$49 — Get Instant Access."
Use your local LLM to draft the copy, then rewrite it in your voice.
Hour 24-48: Soft Launch
Post in these places (pick the ones relevant to your product):
- Twitter/X: Thread explaining what you built and why. Include a screenshot or GIF.
- Reddit: Post in the relevant subreddit (r/reactjs, r/rust, r/webdev, etc.). Don't be salesy. Show the product, explain the problem it solves, link to it.
- Hacker News: "Show HN: [Product Name] — [one-line description]." Keep it factual.
- Dev.to / Hashnode: Write a tutorial that uses your product. Subtle, valuable promotion.
- Relevant Discord servers: Share in the appropriate channel. Most framework Discord servers have a #showcase or #projects channel.
Licensing Your Digital Products
You need a license. Here are your options:
Personal License ($49): One person, unlimited personal and commercial projects. Cannot be redistributed or resold.
Team License ($149): Up to 10 developers on the same team. Same restrictions on redistribution.
Extended License ($299): Can be used in products sold to end users (e.g., using your template to build a SaaS that gets sold to clients).
Include a LICENSE file in your product:
[Product Name] License Agreement
Copyright (c) [Year] [Your Name/Company]
Personal License — Single Developer
This license grants the purchaser the right to:
- Use this product in unlimited personal and commercial projects
- Modify the source code for their own use
This license prohibits:
- Redistribution of the source code (modified or unmodified)
- Sharing access with others who have not purchased a license
- Reselling the product or creating derivative products for sale
For team or extended licenses, visit [your-url].
Revenue Math
Let's do the real math on a $49 product:
Platform fee (Lemon Squeezy, 5% + $0.50): -$2.95
Payment processing (included): $0.00
Your revenue per sale: $46.05
To hit $500/month: 11 sales/month (less than 1 per day)
To hit $1,000/month: 22 sales/month (less than 1 per day)
To hit $2,000/month: 44 sales/month (about 1.5 per day)
These are realistic numbers for a well-positioned product in an active niche.
Real-world benchmarks:
- ShipFast (Marc Lou): A Next.js boilerplate priced at ~$199-249. Generated $528K in its first 4 months. Marc Lou runs 10 digital products generating ~$83K/month combined. (source: starterstory.com/marc-lou-shipfast)
- Tailwind UI (Adam Wathan): A UI component library that made $500K in its first 3 days and crossed $4M in its first 2 years. However, revenue dropped ~80% year-over-year by late 2025 as AI-generated UI cut into demand — a reminder that even successful products need evolution. (source: adamwathan.me, aibase.com)
You don't need those numbers. You need 11 sales.
Your Turn
-
Identify your product (30 min): Look at your Sovereign Stack Document. What have you built for yourself that took 20+ hours? That's your first product. Write down: the product name, the problem it solves, the target buyer, and the price.
-
Create the minimum viable product (8-16 hours): Package your existing work. Write the README. Add examples. Make it clean.
-
Set up a Lemon Squeezy store (30 min): Create your account, add the product, configure pricing. Use their built-in file delivery.
-
Write the sales page (2 hours): Five sections. Use your local LLM for the first draft. Rewrite in your voice.
-
Soft launch (1 hour): Post in 3 places relevant to your product's audience.
Lesson 2: Content Monetization
"You already know things that thousands of people would pay to learn."
Time to first dollar: 2-4 weeks Ongoing time commitment: 5-10 hours/week Margin: 70-95% (depends on platform)
The Content Economics
Content monetization works differently from every other engine. It's slow to start and then it compounds. Your first month might generate $0. Your sixth month might generate $500. Your twelfth month might generate $3,000. And it keeps growing — because content has a half-life measured in years, not days.
The fundamental equation:
Content Revenue = Traffic x Conversion Rate x Revenue Per Conversion
Example (tech blog):
50,000 monthly visitors x 2% affiliate click rate x $5 avg commission
= $5,000/month
Example (newsletter):
5,000 subscribers x 10% convert to premium x $5/month
= $2,500/month
Example (YouTube):
10,000 subscribers, ~50K views/month
= $500-1,000/month ad revenue
+ $500-1,500/month sponsorships (once you hit 10K subs)
= $1,000-2,500/month
Channel 1: Technical Blog with Affiliate Revenue
How it works: Write genuinely useful technical articles. Include affiliate links to tools and services you actually use and recommend. When readers click and buy, you earn a commission.
Affiliate programs that pay well for developer content:
| Program | Commission | Cookie Duration | Why It Works |
|---|---|---|---|
| Vercel | $50-500 per referral | 90 days | Developers reading deployment articles are ready to deploy |
| DigitalOcean | $200 per new customer (who spends $25+) | 30 days | Tutorials drive signups directly |
| AWS / GCP | Varies, typically $50-150 | 30 days | Infrastructure articles attract infrastructure buyers |
| Stripe | Recurring 25% for 1 year | 90 days | Any SaaS tutorial involves payments |
| Tailwind UI | 10% of purchase ($30-80) | 30 days | Frontend tutorials = Tailwind UI buyers |
| Lemon Squeezy | 25% recurring for 1 year | 30 days | If you write about selling digital products |
| JetBrains | 15% of purchase | 30 days | IDE recommendations in developer tutorials |
| Hetzner | 20% of first payment | 30 days | Budget hosting recommendations |
Real revenue example — a developer blog at 50K monthly visitors:
Monthly traffic: 50,000 unique visitors (achievable at 12-18 months)
Revenue breakdown:
Hosting affiliate (DigitalOcean, Hetzner): $400-800/month
Tool affiliates (JetBrains, Tailwind UI): $200-400/month
Service affiliates (Vercel, Stripe): $300-600/month
Display ads (Carbon Ads for developers): $200-400/month
Sponsored posts (1-2/month at $500-1,000): $500-1,000/month
Total: $1,600-3,200/month
SEO basics for developers (what actually moves the needle):
Forget everything you've heard about SEO from marketing people. For developer content, here's what matters:
-
Answer specific questions. "How to set up Tauri 2.0 with SQLite" beats "Introduction to Tauri" every time. The specific query has less competition and higher intent.
-
Target long-tail keywords. Use a tool like Ahrefs (free trial), Ubersuggest (freemium), or just Google autocomplete. Type your topic and see what Google suggests.
-
Include working code. Google prioritizes content with code blocks for developer queries. A complete, working example outranks a theoretical explanation.
-
Update annually. A "How to deploy X in 2026" article that's actually current outranks a 2023 article with 10x the backlinks. Add the year to your title and keep it current.
-
Internal linking. Link your articles to each other. "Related: How to add auth to your Tauri app" at the bottom of your Tauri setup article. Google follows these links.
Using LLMs to accelerate content creation:
The 4-step process: (1) Generate outline with local LLM, (2) Draft each section locally (it's free), (3) Add YOUR expertise — the gotchas, opinions, and "here's what I actually use in production" that the LLM cannot provide, (4) Polish with API model for customer-facing quality.
The LLM handles 70% of the work. Your expertise is the 30% that makes people read it, trust it, and click your affiliate links.
Common Mistake: Publishing LLM-generated content without substantial editing. Readers can tell. Google can tell. And it doesn't build the trust that makes affiliate links convert. If you wouldn't put your name on it without the LLM, don't put your name on it with the LLM.
Real-world newsletter benchmarks to calibrate your expectations:
- TLDR Newsletter (Dan Ni): 1.2M+ subscribers, generating $5-6.4M/year. Charges up to $18K per sponsor placement. Built on curation, not original reporting. (source: growthinreverse.com/tldr)
- Pragmatic Engineer (Gergely Orosz): 400K+ subscribers, $1.5M+/year from a $15/month subscription alone. Zero sponsors — pure subscriber revenue. (source: growthinreverse.com/gergely)
- Cyber Corsairs AI (Beehiiv case study): Grew to 50K subscribers and $16K/month in under 1 year, demonstrating that new entrants can still break through in focused niches. (source: blog.beehiiv.com)
These are not typical results — they're the top performers. But they prove the model works at scale and the revenue ceiling is real.
Channel 2: Newsletter with Premium Tier
Platform comparison:
| Platform | Free Tier | Paid Features | Cut on Paid Subs | Best For |
|---|---|---|---|---|
| Substack | Unlimited subs | Paid subscriptions built-in | 10% | Maximum reach, easy setup |
| Beehiiv | 2,500 subs | Custom domains, automations, referral program | 0% (you keep everything) | Growth-focused, professional |
| Buttondown | 100 subs | Custom domains, API, markdown-native | 0% | Developers, minimalists |
| Ghost | Self-hosted (free) | Full CMS + membership | 0% | Full control, SEO, longterm brand |
| ConvertKit | 10,000 subs | Automations, sequences | 0% | If you also sell courses/products |
Recommended for developers: Beehiiv (growth features, no cut of revenue) or Ghost (full control, best SEO).
The LLM-powered newsletter pipeline:
#!/usr/bin/env python3
"""newsletter_pipeline.py — Semi-automated newsletter production."""
import requests, json
from datetime import datetime
OLLAMA_URL = "http://127.0.0.1:11434/api/generate"
NICHE = "Rust ecosystem and systems programming" # ← Change this
def fetch_hn_stories(limit=30) -> list[dict]:
"""Fetch top HN stories. Replace/extend with RSS feeds, Reddit API, etc."""
story_ids = requests.get("https://hacker-news.firebaseio.com/v0/topstories.json").json()[:limit]
return [requests.get(f"https://hacker-news.firebaseio.com/v0/item/{sid}.json").json()
for sid in story_ids]
def classify_and_summarize(items: list[dict]) -> list[dict]:
"""Use local LLM to score relevance and generate summaries."""
results = []
for item in items:
prompt = f"""Rate relevance to {NICHE} (1-10). If >= 7, summarize in 2 sentences.
Title: "{item.get('title','')}" URL: {item.get('url','')}
Output JSON: {{"relevance": N, "summary": "...", "category": "Tool|Tutorial|News|Research|Opinion"}}"""
resp = requests.post(OLLAMA_URL, json={"model": "llama3.1:8b", "prompt": prompt,
"stream": False, "format": "json", "options": {"temperature": 0.3}})
try:
data = json.loads(resp.json()["response"])
if data.get("relevance", 0) >= 7:
item.update(data)
results.append(item)
except (json.JSONDecodeError, KeyError):
continue
return sorted(results, key=lambda x: x.get("relevance", 0), reverse=True)
def generate_draft(items: list[dict]) -> str:
"""Generate newsletter skeleton — you edit and add your expertise."""
items_text = "\n".join(f"- [{i.get('title','')}]({i.get('url','')}) — {i.get('summary','')}"
for i in items[:8])
prompt = f"""Write a {NICHE} newsletter. Items:\n{items_text}\n
Include: intro (2-3 sentences), each item with analysis (WHY it matters, WHAT to do),
Quick Takes section, closing. Be opinionated. Markdown format."""
resp = requests.post(OLLAMA_URL, json={"model": "llama3.1:8b", "prompt": prompt,
"stream": False, "options": {"temperature": 0.5, "num_ctx": 4096}})
return resp.json()["response"]
if __name__ == "__main__":
stories = fetch_hn_stories()
relevant = classify_and_summarize(stories)
draft = generate_draft(relevant)
filename = f"newsletter-draft-{datetime.now().strftime('%Y-%m-%d')}.md"
open(filename, "w").write(draft)
print(f"Draft: {filename} — NOW add your expertise, fix errors, publish.")
Time investment: 3-4 hours per week once the pipeline is set up. The LLM handles curation and drafting. You handle editing, insight, and the personal voice that subscribers pay for.
Channel 3: YouTube
YouTube is the slowest to monetize but has the highest ceiling. Developer content on YouTube is chronically underserved — the demand far exceeds supply.
Revenue timeline (realistic):
Months 1-3: $0 (building library, not yet monetized)
Months 4-6: $50-200/month (ad revenue kicks in at 1,000 subs + 4,000 watch hours)
Months 7-12: $500-1,500/month (ad revenue + first sponsorships)
Year 2: $2,000-5,000/month (established channel with recurring sponsors)
What works on developer YouTube in 2026:
- "Build X with Y" tutorials (15-30 min) — "Build a CLI Tool in Rust," "Build a Local AI API"
- Tool comparisons — "Tauri vs Electron in 2026 — Which Should You Use?"
- "I tried X for 30 days" — "I Replaced All My Cloud Services with Self-Hosted Alternatives"
- Architecture deep-dives — "How I Designed a System That Handles 1M Events/Day"
- "What I Learned" retrospectives — "6 Months of Selling Digital Products — Real Numbers"
Equipment you need:
Minimum (start here):
Screen recording: OBS Studio ($0)
Microphone: Any USB mic ($30-60) — or your headset mic
Editing: DaVinci Resolve ($0) or CapCut ($0)
Total: $0-60
Comfortable (upgrade when revenue justifies):
Microphone: Blue Yeti or Audio-Technica AT2020 ($100-130)
Camera: Logitech C920 ($70) — for facecam if you want it
Total: $170-200
Real Talk: Audio quality matters 10x more than video quality for developer content. Most viewers are listening, not watching. A $30 USB mic + OBS is enough to start. If your first 10 videos are good content with okay audio, you'll get subs. If they're bad content with a $2,000 camera setup, you won't.
Your Turn
-
Choose your content channel (15 min): Blog, newsletter, or YouTube. Pick ONE. Don't try to do all three at once. The skills are different and the time commitment compounds fast.
-
Define your niche (30 min): Not "programming." Not "web development." Something specific. "Rust for backend developers." "Building local-first desktop apps." "AI automation for small businesses." The more specific, the faster you'll grow.
-
Create your first piece of content (4-8 hours): One blog post, one newsletter issue, or one YouTube video. Ship it. Don't wait for perfection.
-
Set up monetization infrastructure (1 hour): Sign up for 2-3 relevant affiliate programs. Set up your newsletter platform. Or just publish and add monetization later — content first, revenue second.
-
Commit to a schedule (5 min): Weekly is the minimum for any content channel. Write it down: "I publish every [day] at [time]." Your audience grows with consistency, not quality.
Lesson 3: Micro-SaaS
"A small tool that solves one problem for a specific group of people who will happily pay $9-29/month for it."
Time to first dollar: 4-8 weeks Ongoing time commitment: 5-15 hours/week Margin: 80-90% (hosting + API costs)
What Makes a Micro-SaaS Different
A micro-SaaS is not a startup. It's not looking for venture capital. It's not trying to become the next Slack. A micro-SaaS is a small, focused tool that:
- Solves exactly one problem
- Charges $9-29/month
- Can be built and maintained by one person
- Costs $20-100/month to run
- Generates $500-5,000/month in revenue
The beauty is in the constraints. One problem. One person. One price point.
Real-world micro-SaaS benchmarks:
- Pieter Levels (Nomad List, PhotoAI, etc.): ~$3M/year with zero employees. PhotoAI alone hit $132K/month. Proves the solo-founder micro-SaaS model at scale. (source: fast-saas.com)
- Bannerbear (Jon Yongfook): An image generation API bootstrapped to $50K+ MRR by one person. (source: indiepattern.com)
- Reality check: 70% of micro-SaaS products generate under $1K/month. The survivors above are outliers. Validate before you build, and keep your costs near zero until you have paying customers. (source: softwareseni.com)
Finding Your Micro-SaaS Idea
The best micro-SaaS ideas come from problems you've personally experienced. But if you need a framework for finding them, here's one:
The "Spreadsheet Replacement" Method:
Look for any workflow where someone is using a spreadsheet, a manual process, or a cobbled-together set of free tools to do something that should be one simple app. That's your micro-SaaS.
Examples:
- Freelancers tracking client projects in Google Sheets → Project tracker for freelancers ($12/mo)
- Developers manually checking if their side projects are still up → Status page for indie hackers ($9/mo)
- Content creators manually cross-posting to multiple platforms → Cross-posting automation ($15/mo)
- Small teams sharing API keys in Slack messages → Team secret manager ($19/mo)
The "Terrible Free Tool" Method:
Find a free tool that people use grudgingly because it's free, but hate because it's bad. Build a better version for $9-29/month.
The "Forum Mining" Method:
Search Reddit, HN, and niche Discord servers for:
- "Is there a tool that..."
- "I wish there was..."
- "I've been looking for..."
- "Does anyone know a good..."
If 50+ people are asking and the answers are "not really" or "I use a spreadsheet," that's a micro-SaaS.
Real Micro-SaaS Ideas with Revenue Potential
| Idea | Target User | Price | Revenue at 100 Customers |
|---|---|---|---|
| GitHub PR analytics dashboard | Engineering managers | $19/mo | $1,900/mo |
| Uptime monitor with beautiful status pages | Indie hackers, small SaaS | $9/mo | $900/mo |
| Changelog generator from git commits | Dev teams | $12/mo | $1,200/mo |
| URL shortener with developer-friendly analytics | Marketers at tech companies | $9/mo | $900/mo |
| API key manager for small teams | Startups | $19/mo | $1,900/mo |
| Cron job monitoring and alerting | DevOps engineers | $15/mo | $1,500/mo |
| Webhook testing and debugging tool | Backend developers | $12/mo | $1,200/mo |
| MCP server directory and marketplace | AI developers | Ad-supported + featured listings $49/mo | Varies |
Building a Micro-SaaS: Full Walkthrough
Let's build a real one. We'll build a simple uptime monitoring service — because it's straightforward, useful, and demonstrates the full stack.
Tech stack (optimized for solo developer):
Backend: Hono (lightweight, fast, TypeScript)
Database: Turso (SQLite-based, generous free tier)
Auth: Lucia (simple, self-hosted auth)
Payments: Stripe (subscriptions)
Hosting: Vercel (free tier for functions)
Landing: Static HTML on same Vercel project
Monitoring: Your own product (eat your own dog food)
Monthly costs at launch:
Vercel: $0 (free tier — 100K function invocations/month)
Turso: $0 (free tier — 9GB storage, 500M rows read/month)
Stripe: 2.9% + $0.30 per transaction (only when you get paid)
Domain: $1/month ($12/year)
Total: $1/month until you need to scale
Core API setup:
// src/index.ts — Hono API for uptime monitor
import { Hono } from "hono";
import { cors } from "hono/cors";
import { jwt } from "hono/jwt";
import Stripe from "stripe";
const app = new Hono();
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
const PLAN_LIMITS = { free: 3, starter: 10, pro: 50 };
app.use("/api/*", cors());
app.use("/api/*", jwt({ secret: process.env.JWT_SECRET! }));
// Create a monitor (with plan-based limits)
app.post("/api/monitors", async (c) => {
const userId = c.get("jwtPayload").sub;
const { url, interval } = await c.req.json();
const plan = await db.getUserPlan(userId);
const count = await db.getMonitorCount(userId);
if (count >= (PLAN_LIMITS[plan] || 3)) {
return c.json({ error: "Monitor limit reached", upgrade_url: "/pricing" }, 403);
}
const monitor = await db.createMonitor({
userId, url,
interval: Math.max(interval, plan === "free" ? 300 : 60),
status: "unknown",
});
return c.json(monitor, 201);
});
// Get all monitors for user
app.get("/api/monitors", async (c) => {
const userId = c.get("jwtPayload").sub;
return c.json(await db.getMonitors(userId));
});
// Stripe webhook for subscription management
app.post("/webhooks/stripe", async (c) => {
const sig = c.req.header("stripe-signature")!;
const event = stripe.webhooks.constructEvent(
await c.req.text(), sig, process.env.STRIPE_WEBHOOK_SECRET!
);
if (event.type.startsWith("customer.subscription.")) {
const sub = event.data.object as Stripe.Subscription;
const plan = event.type.includes("deleted")
? "free"
: sub.items.data[0]?.price?.lookup_key || "free";
await db.updateUserPlan(sub.metadata.userId!, plan);
}
return c.json({ received: true });
});
// The monitoring worker — runs on a cron schedule (Vercel cron, Railway cron, etc.)
export async function checkMonitors() {
const monitors = await db.getActiveMonitors();
const results = await Promise.allSettled(
monitors.map(async (monitor) => {
const start = Date.now();
try {
const response = await fetch(monitor.url, {
method: "HEAD",
signal: AbortSignal.timeout(10000),
});
return { monitorId: monitor.id, status: response.status,
responseTime: Date.now() - start };
} catch {
return { monitorId: monitor.id, status: 0, responseTime: Date.now() - start };
}
})
);
// Store results and alert on status changes (up → down or down → up)
for (const result of results) {
if (result.status === "fulfilled") {
await db.insertCheckResult(result.value);
const monitor = monitors.find((m) => m.id === result.value.monitorId);
if (monitor) {
const isDown = result.value.status === 0 || result.value.status >= 400;
if (isDown && monitor.status !== "down") await sendAlert(monitor, "down");
if (!isDown && monitor.status === "down") await sendAlert(monitor, "recovered");
await db.updateMonitorStatus(monitor.id, isDown ? "down" : "up");
}
}
}
}
export default app;
Stripe subscription setup (run once):
// stripe-setup.ts — Create your product and pricing tiers
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
async function createPricing() {
const product = await stripe.products.create({
name: "UptimeBot", description: "Simple uptime monitoring for developers",
});
const starter = await stripe.prices.create({
product: product.id, unit_amount: 900, currency: "usd",
recurring: { interval: "month" }, lookup_key: "starter",
});
const pro = await stripe.prices.create({
product: product.id, unit_amount: 1900, currency: "usd",
recurring: { interval: "month" }, lookup_key: "pro",
});
console.log(`Starter: ${starter.id} ($9/mo) | Pro: ${pro.id} ($19/mo)`);
// Use in your checkout:
// const session = await stripe.checkout.sessions.create({
// mode: 'subscription',
// line_items: [{ price: starter.id, quantity: 1 }],
// success_url: 'https://yourapp.com/dashboard?upgraded=true',
// cancel_url: 'https://yourapp.com/pricing',
// });
}
createPricing().catch(console.error);
Unit Economics
Before you build any micro-SaaS, run the numbers:
Customer Acquisition Cost (CAC):
If you're doing organic marketing (blog, Twitter, HN): ~$0
If you're running ads: $10-50 per trial signup, $30-150 per paid customer
Target: CAC < 3 months of subscription revenue
Example: CAC of $30, price of $12/mo → payback in 2.5 months ✓
Customer Lifetime Value (LTV):
LTV = Monthly Price x Average Customer Lifespan (months)
For micro-SaaS, average churn is 5-8% monthly
Average lifespan = 1 / churn rate
At 5% churn: 1/0.05 = 20 months → LTV at $12/mo = $240
At 8% churn: 1/0.08 = 12.5 months → LTV at $12/mo = $150
Target: LTV/CAC ratio > 3
Monthly Burn:
Hosting (Vercel/Railway): $0-20
Database (Turso/PlanetScale): $0-20
Email sending (Resend): $0
Monitoring (your own product): $0
Domain: $1
Total: $1-41/month
Break-even: 1-5 customers (at $9/mo)
Common Mistake: Building a micro-SaaS that requires 500 customers to break even. If your infrastructure costs $200/month and you charge $9/month, you need 23 customers just to cover costs. Start with free tiers for everything. Your first customer's payment should be pure profit, not covering infrastructure.
Your Turn
-
Find your idea (2 hours): Use the "Spreadsheet Replacement" or "Forum Mining" method. Identify 3 potential micro-SaaS ideas. For each, write: the problem, the target user, the price, and how many customers you'd need at $1,000/month revenue.
-
Validate before building (1-2 days): For your top idea, find 5-10 potential customers and ask them: "I'm building [X]. Would you pay $[Y]/month for it?" Don't describe the solution — describe the problem and see if they light up.
-
Build the MVP (2-4 weeks): Core functionality only. Auth, the one thing your tool does, and Stripe billing. Nothing else. No admin dashboard. No team features. No API. One user, one function, one price.
-
Deploy and launch (1 day): Deploy to Vercel or Railway. Buy the domain. Set up a landing page. Post in 3-5 relevant communities.
-
Track your unit economics (ongoing): From day one, track CAC, churn, and MRR. If the numbers don't work at 10 customers, they won't work at 100.
Lesson 4: Automation-as-a-Service
"Businesses will pay you thousands of dollars to connect their tools together."
Time to first dollar: 1-2 weeks Ongoing time commitment: Varies (project-based) Margin: 80-95% (your time is the main cost)
Why Automation Pays So Well
Most businesses have manual workflows that cost them 10-40 hours per week of employee time. A receptionist manually entering form submissions into a CRM. A bookkeeper copy-pasting invoice data from emails into QuickBooks. A marketing manager manually cross-posting content to five platforms.
These businesses know automation exists. They've heard of Zapier. But they can't set it up themselves — and Zapier's pre-built integrations rarely handle their specific workflow perfectly.
That's where you come in. You charge $500-$5,000 to build a custom automation that saves them 10-40 hours per week. At even $20/hour for that employee's time, you're saving them $800-$3,200 per month. Your one-time $2,500 fee pays for itself in one month.
This is one of the easiest sells in the entire playbook.
The Privacy Selling Point
Here's where your local LLM stack from Module S becomes a weapon. (If you haven't set up a local LLM yet, go back to Module S, Lesson 3. This is the foundation for premium-priced automation work.)
Most automation agencies use cloud-based AI. The client's data goes through Zapier, then to OpenAI, then back. For a lot of businesses — especially law firms, healthcare practices, financial advisors, and any EU-based company — this is a non-starter.
Your pitch: "I build automations that process your data privately. Your customer records, invoices, and communications never leave your infrastructure. No third-party AI processors. Full compliance with GDPR and local data protection regulations."
That pitch closes deals that the cloud-automation agencies can't touch. And you can charge a premium for it.
Real Project Examples with Pricing
Project 1: Lead Qualifier for a Real Estate Agency — $3,000
Problem: Agency receives 200+ inquiries/week through website, email, and social.
Agents waste time responding to unqualified leads (browsers, out-of-area,
not pre-approved).
Solution:
1. Webhook captures all inquiry sources into a single queue
2. Local LLM classifies each lead: Hot / Warm / Cold / Spam
3. Hot leads: immediately notify the assigned agent via SMS
4. Warm leads: auto-respond with relevant listings and schedule follow-up
5. Cold leads: add to nurture email sequence
6. Spam: archive silently
Tools: n8n (self-hosted), Ollama, Twilio (for SMS), their existing CRM API
Time to build: 15-20 hours
Your cost: ~$0 (self-hosted tools + their infrastructure)
Their savings: ~20 hours/week of agent time = $2,000+/month
Project 2: Invoice Processor for a Law Firm — $2,500
Problem: Firm receives 50-100 vendor invoices/month as PDF attachments.
Legal assistant manually enters each into their billing system.
Takes 10+ hours/month. Error-prone.
Solution:
1. Email rule forwards invoices to a processing inbox
2. PDF extraction pulls text (pdf-extract or OCR)
3. Local LLM extracts: vendor, amount, date, category, billing code
4. Structured data is posted to their billing system API
5. Exceptions (low confidence extractions) go to a review queue
6. Weekly summary email to the managing partner
Tools: Custom Python script, Ollama, their email API, their billing system API
Time to build: 12-15 hours
Your cost: ~$0
Their savings: ~10 hours/month of legal assistant time + fewer errors
Project 3: Content Repurposing Pipeline for a Marketing Agency — $1,500
Problem: Agency creates one long-form blog post per week for each client.
Then manually creates social media snippets, email summaries, and
LinkedIn posts from each article. Takes 5 hours per article.
Solution:
1. New blog post triggers the pipeline (RSS or webhook)
2. Local LLM generates:
- 5 Twitter/X posts (different angles, different hooks)
- 1 LinkedIn post (longer, professional tone)
- 1 email newsletter summary
- 3 Instagram caption options
3. All generated content goes to a review dashboard
4. Human reviews, edits, and schedules via Buffer/Hootsuite
Tools: n8n, Ollama, Buffer API
Time to build: 8-10 hours
Your cost: ~$0
Their savings: ~4 hours per article x 4 articles/week = 16 hours/week
Building an Automation: n8n Example
n8n is an open-source workflow automation tool you can self-host (docker run -d --name n8n -p 5678:5678 n8nio/n8n). It's the professional choice because client data stays on your/their infrastructure.
For simpler deployments, here's the same invoice processing as a pure Python script (Python is the standard for automation work, even if it's not your primary stack):
#!/usr/bin/env python3
"""
invoice_processor.py — Automated invoice data extraction.
Processes PDF invoices using local LLM, outputs structured data.
"""
import json, subprocess, requests
from dataclasses import dataclass, asdict
from datetime import datetime
from pathlib import Path
OLLAMA_URL = "http://127.0.0.1:11434/api/generate"
MODEL = "llama3.1:8b"
WATCH_DIR, PROCESSED_DIR, REVIEW_DIR = (
Path("./invoices/incoming"), Path("./invoices/processed"), Path("./invoices/review")
)
@dataclass
class InvoiceData:
filename: str; vendor: str; invoice_number: str; date: str
amount: float; currency: str; category: str; confidence: float
needs_review: bool; line_items: list
def extract_text_from_pdf(pdf_path: Path) -> str:
try:
return subprocess.run(
["pdftotext", "-layout", str(pdf_path), "-"],
capture_output=True, text=True, timeout=30
).stdout
except FileNotFoundError:
import PyPDF2
return "\n".join(p.extract_text() for p in PyPDF2.PdfReader(str(pdf_path)).pages)
def extract_invoice_data(text: str, filename: str) -> InvoiceData:
prompt = f"""Extract invoice data from this text. Output ONLY valid JSON.
Invoice text:
---
{text[:3000]}
---
Extract: {{"vendor": "...", "invoice_number": "...", "date": "YYYY-MM-DD",
"amount": 0.00, "currency": "USD",
"category": "Legal Services|Office Supplies|Software|Professional Services|Other",
"line_items": [{{"description": "...", "amount": 0.00}}],
"confidence": 0.0 to 1.0}}"""
response = requests.post(OLLAMA_URL, json={
"model": MODEL, "prompt": prompt, "stream": False,
"format": "json", "options": {"temperature": 0.1}
})
try:
d = json.loads(response.json()["response"])
conf = float(d.get("confidence", 0))
return InvoiceData(filename=filename, vendor=d.get("vendor", "UNKNOWN"),
invoice_number=d.get("invoice_number", ""), date=d.get("date", ""),
amount=float(d.get("amount", 0)), currency=d.get("currency", "USD"),
category=d.get("category", "Other"), confidence=conf,
needs_review=conf < 0.7, line_items=d.get("line_items", []))
except (json.JSONDecodeError, KeyError, ValueError):
return InvoiceData(filename=filename, vendor="EXTRACTION_FAILED",
invoice_number="", date="", amount=0.0, currency="USD",
category="Other", confidence=0.0, needs_review=True, line_items=[])
def process_invoices():
for d in [WATCH_DIR, PROCESSED_DIR, REVIEW_DIR]: d.mkdir(parents=True, exist_ok=True)
pdfs = list(WATCH_DIR.glob("*.pdf"))
if not pdfs: return print("No invoices to process.")
for pdf_path in pdfs:
text = extract_text_from_pdf(pdf_path)
if not text.strip():
pdf_path.rename(REVIEW_DIR / pdf_path.name); continue
invoice = extract_invoice_data(text, pdf_path.name)
dest = REVIEW_DIR if invoice.needs_review else PROCESSED_DIR
pdf_path.rename(dest / pdf_path.name)
with open("./invoices/extracted.jsonl", "a") as f:
f.write(json.dumps(asdict(invoice)) + "\n")
print(f" {'Review' if invoice.needs_review else 'OK'}: "
f"{invoice.vendor} ${invoice.amount:.2f} ({invoice.confidence:.0%})")
if __name__ == "__main__":
process_invoices()
Finding Automation Clients
LinkedIn (best ROI for finding automation clients):
- Change your headline to: "I automate tedious business processes | Privacy-first AI automation"
- Post 2-3 times/week about automation results: "Saved [client type] 15 hours/week by automating [process]. No data leaves their infrastructure."
- Join LinkedIn groups for your target industries (real estate agents, law firm managers, marketing agency owners)
- Send 5-10 personalized connection requests per day to small business owners in your area
Local business networks:
- Chamber of Commerce events (attend one, mention you "automate business processes")
- BNI (Business Network International) groups
- Co-working space communities
Upwork (for your first 2-3 projects):
Search for: "automation," "data processing," "workflow automation," "Zapier expert," "API integration." Apply to 5 projects per day with specific, relevant proposals. Your first 2-3 projects will be at lower rates ($500-1,000) to build reviews. After that, charge market rate.
The Automation Contract Template
Always use a contract. Your contract needs these 7 sections minimum:
- Scope of Work — Specific description + deliverables list + documentation
- Timeline — Estimated completion days, start date = upon receipt of deposit
- Pricing — Total fee, 50% upfront (non-refundable), 50% upon delivery
- Data Handling — "All data processed locally. No third-party services. Developer deletes all client data within 30 days of completion."
- Revisions — 2 rounds included, additional at $150/hour
- Maintenance — Optional retainer for bug fixes and monitoring
- IP — Client owns the automation. Developer retains right to reuse general patterns.
Use a free template from Avodocs.com or Bonsai as your starting point, then add the data handling clause (section 4) — that's the one most templates miss and it's your competitive advantage.
Real Talk: The 50% upfront deposit is non-negotiable. It protects you from scope creep and clients who ghost after delivery. If a client won't pay 50% upfront, they're a client who won't pay 100% later.
Your Turn
-
Identify 3 potential automation projects (1 hour): Think about businesses you interact with (your dentist, your landlord's management company, the coffee shop you go to, your barber). What manual process do they do that you could automate?
-
Price one of them (30 min): Calculate: how many hours will it take you to build, what's the value to the client (hours saved x hourly cost of those hours), and what's a fair price? Your price should be 1-3 months of the savings you create.
-
Build a demo (4-8 hours): Take the invoice processor above and customize it for your target industry. Record a 2-minute screen recording showing it in action. This demo is your sales tool.
-
Reach out to 5 potential clients (2 hours): LinkedIn, email, or walk into a local business. Show them the demo. Ask about their manual processes.
-
Set up your contract template (30 min): Customize the template above with your information. Have it ready so you can send it the same day a client says yes.
Lesson 5: API Products
"Turn your local LLM into a revenue-generating endpoint."
Time to first dollar: 2-4 weeks Ongoing time commitment: 5-10 hours/week (maintenance + marketing) Margin: 70-90% (depends on compute costs)
The API Product Model
An API product wraps some capability — usually your local LLM with custom processing — behind a clean HTTP endpoint that other developers pay to use. You handle the infrastructure, the model, and the domain expertise. They get a simple API call.
This is the most scalable engine in this playbook for developers who are comfortable with backend work. Once it's built, every new customer adds revenue with minimal additional cost.
What Makes a Good API Product
Not every API is worth paying for. Developers will pay for an API when:
- It saves more time than it costs. Your resume parser API at $29/month saves their team 20 hours/month of manual work. Easy sell.
- It does something they can't easily do themselves. Fine-tuned model, proprietary dataset, or complex processing pipeline.
- It's more reliable than building it in-house. Maintained, documented, monitored. They don't want to babysit an LLM deployment.
Real API product ideas with pricing:
| API Product | Target Customer | Pricing | Why They'd Pay |
|---|---|---|---|
| Code review API (checks against custom standards) | Dev teams | $49/mo per team | Consistent reviews without senior dev bottleneck |
| Resume parser (structured data from PDF resumes) | HR tech companies, ATS builders | $29/mo per 500 parses | Parsing resumes reliably is surprisingly hard |
| Document classifier (legal, financial, medical) | Document management systems | $99/mo per 1000 docs | Domain-specific classification requires expertise |
| Content moderation API (local, private) | Platforms that can't use cloud AI | $79/mo per 10K checks | Privacy-compliant moderation is rare |
| SEO content scorer (analyzes draft vs. competitors) | Content agencies, SEO tools | $39/mo per 100 analyses | Real-time scoring during writing |
Building an API Product: Complete Example
Let's build a document classification API — the kind a legal tech startup would pay $99/month for.
The stack:
Runtime: Hono (TypeScript) on Vercel Edge Functions
LLM: Ollama (local, for development) + Anthropic API (production fallback)
Auth: API key-based (simple, developer-friendly)
Rate Limiting: Upstash Redis (free tier: 10K requests/day)
Billing: Stripe usage-based billing
Documentation: OpenAPI spec + hosted docs
Full API implementation:
// src/api.ts — Document Classification API
import { Hono } from "hono";
import { cors } from "hono/cors";
import { Ratelimit } from "@upstash/ratelimit";
import { Redis } from "@upstash/redis";
const app = new Hono();
const ratelimit = new Ratelimit({
redis: new Redis({ url: process.env.UPSTASH_REDIS_URL!, token: process.env.UPSTASH_REDIS_TOKEN! }),
limiter: Ratelimit.slidingWindow(100, "1 h"),
});
// Auth middleware: API key → user lookup → rate limit → track usage
async function authMiddleware(c: any, next: any) {
const apiKey = c.req.header("X-API-Key") || c.req.header("Authorization")?.replace("Bearer ", "");
if (!apiKey) return c.json({ error: "Missing API key." }, 401);
const user = await db.getUserByApiKey(apiKey);
if (!user) return c.json({ error: "Invalid API key." }, 401);
const { success, remaining, reset } = await ratelimit.limit(user.id);
c.header("X-RateLimit-Remaining", remaining.toString());
if (!success) return c.json({ error: "Rate limit exceeded.", reset_at: new Date(reset).toISOString() }, 429);
await db.incrementUsage(user.id);
c.set("user", user);
return next();
}
app.use("/v1/*", cors());
app.use("/v1/*", authMiddleware);
// Main classification endpoint
app.post("/v1/classify", async (c) => {
const start = Date.now();
const { text, domain = "auto" } = await c.req.json();
if (!text) return c.json({ error: "Missing 'text' field." }, 400);
if (text.length > 50000) return c.json({ error: "Text exceeds 50K char limit." }, 400);
const prompt = `Classify this document. Domain: ${domain === "auto" ? "detect automatically" : domain}.
Document: ${text.slice(0, 5000)}
Respond with JSON: {"domain", "category", "confidence": 0-1, "subcategories": [],
"key_entities": [{"type", "value", "confidence"}], "summary": "one sentence"}`;
try {
// Try local Ollama first, fallback to Anthropic API
let result;
try {
const resp = await fetch("http://127.0.0.1:11434/api/generate", {
method: "POST",
body: JSON.stringify({ model: "llama3.1:8b", prompt, stream: false, format: "json",
options: { temperature: 0.1 } }),
signal: AbortSignal.timeout(30000),
});
result = JSON.parse((await resp.json()).response);
} catch {
const resp = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: { "Content-Type": "application/json", "x-api-key": process.env.ANTHROPIC_API_KEY!,
"anthropic-version": "2023-06-01" },
body: JSON.stringify({ model: "claude-3-5-haiku-20241022", max_tokens: 1024,
messages: [{ role: "user", content: prompt }] }),
});
result = JSON.parse((await resp.json()).content[0].text);
}
result.document_id = crypto.randomUUID();
result.processing_time_ms = Date.now() - start;
await db.logApiCall(c.get("user").id, "classify", result.processing_time_ms);
return c.json(result);
} catch (error: any) {
return c.json({ error: "Classification failed", message: error.message }, 500);
}
});
app.get("/v1/usage", async (c) => {
const user = c.get("user");
const usage = await db.getMonthlyUsage(user.id);
const plan = await db.getUserPlan(user.id);
return c.json({ requests_used: usage.count, requests_limit: plan.requestLimit, plan: plan.name });
});
export default app;
Pricing page content for your API:
Free Tier: 100 requests/month, 5K char limit $0
Starter: 2,000 requests/month, 50K char limit $29/month
Professional: 10,000 requests/month, 50K char limit $99/month
Enterprise: Custom limits, SLA, dedicated support Contact us
Usage-Based Billing with Stripe
// billing.ts — Report usage to Stripe for metered billing
async function reportUsageToStripe(userId: string) {
const user = await db.getUser(userId);
if (!user.stripeSubscriptionItemId) return;
const usage = await db.getUnreportedUsage(userId);
if (usage.count > 0) {
await stripe.subscriptionItems.createUsageRecord(
user.stripeSubscriptionItemId,
{
quantity: usage.count,
timestamp: Math.floor(Date.now() / 1000),
action: "increment",
}
);
await db.markUsageReported(userId, usage.ids);
}
}
// Run this hourly via cron
// Vercel: vercel.json cron config
// Railway: railway cron
// Self-hosted: system cron
Scaling When You Get Traction
When your API starts getting real usage, here's the scaling path. Without a dedicated GPU, you'll want to move to cloud inference (Replicate, Together.ai) earlier in the scaling curve:
Stage 1: 0-100 customers
- Local Ollama + Vercel edge functions
- Total cost: $0-20/month
- Revenue: $0-5,000/month
Stage 2: 100-500 customers
- Move LLM inference to a dedicated VPS (Hetzner GPU, $50-150/month)
- Add Redis caching for repeat queries
- Total cost: $50-200/month
- Revenue: $5,000-25,000/month
Stage 3: 500+ customers
- Multiple inference nodes behind a load balancer
- Consider managed inference (Replicate, Together.ai) for overflow
- Total cost: $200-1,000/month
- Revenue: $25,000+/month
Common Mistake: Over-engineering for scale before you have 10 customers. Your first version should run on free tiers. Scaling problems are GOOD problems. Solve them when they arrive, not before.
Your Turn
-
Identify your API niche (1 hour): What domain do you know well? Legal? Finance? Healthcare? E-commerce? The best API products come from deep domain knowledge paired with AI capability.
-
Build a proof of concept (8-16 hours): One endpoint, one function, no auth (just test locally). Get the classification/extraction/analysis working correctly for 10 sample documents.
-
Add auth and billing (4-8 hours): API key management, Stripe integration, usage tracking. The code above gives you 80% of this.
-
Write API documentation (2-4 hours): Use Stoplight or just hand-write an OpenAPI spec. Good documentation is the #1 factor in API product adoption.
-
Launch on a developer marketplace (1 hour): Post on Product Hunt, Hacker News, relevant subreddits. Dev-to-dev marketing is the most effective for API products.
Lesson 6: Consulting and Fractional CTO
"The fastest engine to start and the best way to fund everything else."
Time to first dollar: 1 week (seriously) Ongoing time commitment: 5-20 hours/week (you control the dial) Margin: 95%+ (your time is the only cost)
Why Consulting Is Engine #1 for Most Developers
If you need income this month, not this quarter, consulting is the answer. No product to build. No audience to grow. No marketing funnel to set up. Just you, your expertise, and someone who needs it.
The math:
$200/hour x 5 hours/week = $4,000/month
$300/hour x 5 hours/week = $6,000/month
$400/hour x 5 hours/week = $8,000/month
That's alongside your full-time job.
"But I can't charge $200/hour." Yes you can. More on this in a moment.
What You're Actually Selling
You're not selling "programming." You're selling one of these:
- Expertise that saves time. "I'll set up your Kubernetes cluster correctly in 10 hours instead of your team spending 80 hours figuring it out."
- Knowledge that reduces risk. "I'll audit your architecture before you launch, so you don't discover scaling issues with 10,000 users on day one."
- Judgment that makes decisions. "I'll evaluate your three vendor options and recommend the one that fits your constraints."
- Leadership that unblocks teams. "I'll lead your engineering team through the migration to [new technology] without slowing down feature development."
The framing matters. "I write Python" is worth $50/hour. "I'll reduce your data pipeline processing time by 60% in two weeks" is worth $300/hour.
Real rate data for context:
- Rust consulting: Average $78/hr, with experienced consultants commanding up to $143/hr for standard work. Architecture and migration consulting pushes well above that. (source: ziprecruiter.com)
- AI/ML consulting: $120-250/hr for implementation work. Strategic AI consulting (architecture, deployment planning) commands $250-500/hr at enterprise scale. (source: debutinfotech.com)
Hot Consulting Niches in 2026
| Niche | Rate Range | Demand | Why It's Hot |
|---|---|---|---|
| Local AI deployment | $200-400/hr | Very high | EU AI Act + privacy concerns. Few consultants have this skill. |
| Privacy-first architecture | $200-350/hr | High | Regulation driving demand. "We need to stop sending data to OpenAI." |
| Rust migration | $250-400/hr | High | Companies want Rust's safety guarantees but lack Rust developers. |
| AI coding tool setup | $150-300/hr | High | Engineering teams want to adopt Claude Code/Cursor but need guidance on agents, workflows, security. |
| Database performance | $200-350/hr | Medium-High | Eternal need. AI tools help you diagnose 3x faster. |
| Security audit (AI-assisted) | $250-400/hr | Medium-High | AI tools make you more thorough. Companies need this before funding rounds. |
How to Get Your First Consulting Client This Week
Day 1: Update your LinkedIn headline. BAD: "Senior Software Engineer at BigCorp." GOOD: "I help engineering teams deploy AI models on their own infrastructure | Rust + Local AI."
Day 2: Write 3 LinkedIn posts. (1) Share a technical insight with real numbers. (2) Share a concrete result you achieved. (3) Offer help directly: "Taking on 2 consulting engagements this month for teams looking to [your niche]. DM for a free 30-minute assessment."
Day 3-5: Send 10 personalized outreach messages to CTOs and Engineering Managers. Template: "I noticed [Company] is [specific observation]. I help teams [value prop]. Recently helped [similar company] achieve [result]. Would a 20-minute call be useful?"
Day 5-7: Apply to consulting platforms: Toptal (premium, $100-200+/hr, 2-4 week screening), Arc.dev (remote-focused, faster onboarding), Lemon.io (European focus), Clarity.fm (per-minute consultations).
Rate Negotiation
How to set your rate:
Step 1: Find the market rate for your niche
- Check Toptal's published ranges
- Ask in developer Slack/Discord communities
- Look at similar consultants' public rates
Step 2: Start at the top of the range
- If market is $150-300/hr, quote $250-300
- If they negotiate down, you land at market rate
- If they don't negotiate, you're earning above market
Step 3: Never lower your rate — add scope instead
BAD: "I can do $200 instead of $300."
GOOD: "For $200/hr, I can do X and Y. For $300/hr,
I'll also do Z and provide ongoing support."
The value anchor technique:
Before quoting your rate, quantify the value of what you'll deliver:
"Based on what you've described, this migration will save your team
about 200 engineering hours over the next quarter. At your team's
loaded cost of $150/hr, that's $30,000 in savings. My fee for
leading this project is $8,000."
($8,000 against $30,000 in savings = 3.75x ROI for the client)
Structuring Consulting for Maximum Leverage
The trap of consulting is trading time for money. Break out of it:
- Document everything — Every engagement produces migration guides, architecture docs, setup procedures. Strip client-specific details and you have a product (Lesson 1) or blog post (Lesson 2).
- Template repeated work — Same problem for 3 clients? That's a micro-SaaS (Lesson 3) or digital product (Lesson 1).
- Give talks, get clients — One 30-minute meetup talk generates 2-3 client conversations. Teach something useful; people come to you.
- Write, then charge — A blog post about a specific technical challenge attracts the exact people who have it and need help.
Using 4DA as Your Secret Weapon
Here's a competitive advantage most consultants don't have: you know what's happening in your niche before your clients do.
4DA surfaces signals — new vulnerabilities, trending technologies, breaking changes, regulatory updates. When you mention to a client, "By the way, there's a new vulnerability in [library they use] that was disclosed yesterday, and here's my recommendation for addressing it," you look like you have supernatural awareness.
That awareness justifies premium rates. Clients pay more for consultants who are proactively informed, not reactively Googling.
Real Talk: Consulting is the best way to fund your other engines. Use consulting revenue from months 1-3 to bankroll your micro-SaaS (Lesson 3) or your content operation (Lesson 2). The goal isn't to consult forever — it's to consult now so you have runway to build things that generate income without your time.
Your Turn
-
Update your LinkedIn (30 min): New headline, new "About" section, and a featured post about your expertise. This is your storefront.
-
Write and publish one LinkedIn post (1 hour): Share a technical insight, a result, or an offer. Not a pitch — value first.
-
Send 5 direct outreach messages (1 hour): Personalized, specific, value-oriented. Use the template above.
-
Apply to one consulting platform (30 min): Toptal, Arc, or Lemon.io. Start the process — it takes time.
-
Set your rate (15 min): Research market rates for your niche. Write down your rate. Don't round down.
Lesson 7: Open Source + Premium
"Build in public, capture trust, monetize the top of the pyramid."
Time to first dollar: 4-12 weeks Ongoing time commitment: 10-20 hours/week Margin: 80-95% (depends on infrastructure costs for hosted versions)
The Open Source Business Model
Open source is not a charity. It's a distribution strategy.
Here's the logic:
- You build a tool and open-source it
- Developers find it, use it, and rely on it
- Some of those developers work at companies
- Those companies need features that individuals don't: SSO, team management, audit logs, priority support, SLAs, hosted version
- Those companies pay you for the premium version
The free version is your marketing. The premium version is your revenue.
License Selection
Your license determines your moat. Choose carefully.
| License | What It Means | Revenue Strategy | Example |
|---|---|---|---|
| MIT | Anyone can do anything. Fork it, sell it, compete with you. | Premium features / hosted version must be compelling enough that DIY isn't worth it. | Express.js, React |
| AGPLv3 | Anyone using it over a network must open-source their modifications. Companies hate this — they'll pay for a commercial license instead. | Dual license: AGPL for open source, commercial license for companies that don't want AGPL. | MongoDB (originally), Grafana |
| FSL (Functional Source License) | Source-visible but not open source for 2–3 years. After that period, converts to Apache 2.0. Prevents direct competitors during your critical growth phase. | Direct competition blocked while you build market position. Premium features for additional revenue. | 4DA, Sentry |
| BUSL (Business Source License) | Similar to FSL. Restricts production use by competitors for a specified period. | Same as FSL. | HashiCorp (Terraform, Vault) |
Recommended for solo developers: FSL or AGPL.
-
If you're building something companies will self-host: AGPL (they'll buy a commercial license to avoid AGPL obligations)
-
If you're building something you want to control completely for 2 years: FSL (prevents forks from competing with you while you establish market position)
Common Mistake: Choosing MIT because "open source should be free." MIT is generous, and that's admirable. But if a VC-funded company forks your MIT project, adds a payment layer, and out-markets you, you've just donated your work to their investors. Protect your work for long enough to build a business, then open it up.
Marketing an Open Source Project
GitHub stars are vanity metrics, but they're also social proof that drives adoption. Here's how to get them:
1. The README is your landing page
Your README should have:
- One-sentence description that explains what the tool does and who it's for
- Screenshot or GIF showing the tool in action (this alone doubles click-through)
- Quick start —
npm install xorcargo install xand the first command - Feature list with clear labels for free vs. premium
- Badge wall — build status, version, license, downloads
- "Why this tool?" — 3-5 sentences on what makes it different
2. Show HN post (your launch day)
Hacker News "Show HN" posts are the single most effective launch channel for developer tools. Write a clear, factual title: "Show HN: [Tool Name] — [what it does in <10 words]." In the comments, explain your motivation, technical decisions, and what you're looking for feedback on.
3. Reddit launch strategy
Post in the relevant subreddit (r/rust for Rust tools, r/selfhosted for self-hosted tools, r/webdev for web tools). Write a genuine post about the problem you solved and how. Link to GitHub. Don't be salesy.
4. "Awesome" list submissions
Every framework and language has an "awesome-X" list on GitHub. Getting listed there drives sustained traffic. Find the relevant list, check if you meet the criteria, and submit a PR.
Revenue Model: Open Core
The most common open-source revenue model for solo developers:
FREE (open source):
- Core functionality
- CLI interface
- Local storage
- Community support (GitHub issues)
- Self-hosted only
PRO ($12-29/month per user):
- Everything in free
- GUI / dashboard
- Cloud sync or hosted version
- Priority support (24-hour response time)
- Advanced features (analytics, reporting, integrations)
- Email support
TEAM ($49-99/month per team):
- Everything in Pro
- SSO / SAML authentication
- Role-based access control
- Audit logs
- Shared workspaces
- Team management
ENTERPRISE (custom pricing):
- Everything in Team
- On-premise deployment assistance
- SLA (99.9% uptime guarantee)
- Dedicated support channel
- Custom integrations
- Invoice billing (net-30)
Real Revenue Examples
Real-world open-source businesses for calibration:
- Plausible Analytics: Privacy-first web analytics, AGPL-licensed, fully bootstrapped. Reached $3.1M ARR with 12K subscribers. No venture capital. Proves the AGPL dual-license model works for solo/small-team products. (source: plausible.io/blog)
- Ghost: Open-source publishing platform. $10.4M revenue in 2024, 24K customers. Started as an open-core project and grew through a community-first strategy. (source: getlatka.com)
Here's how growth typically looks for a smaller open-source project with a premium tier:
| Stage | Stars | Pro Users | Team/Enterprise | MRR | Your Time |
|---|---|---|---|---|---|
| 6 months | 500 | 12 ($12/mo) | 0 | $144 | 5 hrs/week |
| 12 months | 2,000 | 48 ($12/mo) | 3 teams ($49/mo) | $723 | 8 hrs/week |
| 18 months | 5,000 | 150 ($19/mo) | 20 teams + 2 enterprise | $5,430 | 15 hrs/week |
The pattern: slow start, compounding growth. The 18-month tool at $5,430/month MRR = $65K/year. Most of the work is in months 1-6. After that, the community drives growth. Plausible's trajectory shows what happens when compounding continues beyond 18 months.
Setting Up Licensing and Feature Gating
// license.ts — Simple feature gating for open core
type Plan = "free" | "pro" | "team" | "enterprise";
const PLAN_CONFIG: Record<Plan, { maxProjects: number; features: Set<string> }> = {
free: { maxProjects: 3, features: new Set(["core", "cli", "local_storage", "export"]) },
pro: { maxProjects: 20, features: new Set(["core", "cli", "local_storage", "export",
"dashboard", "cloud_sync", "analytics", "api_access", "integrations"]) },
team: { maxProjects: 100, features: new Set(["core", "cli", "local_storage", "export",
"dashboard", "cloud_sync", "analytics", "api_access", "integrations",
"sso", "rbac", "audit_logs", "team_management"]) },
enterprise: { maxProjects: Infinity, features: new Set(["core", "cli", "local_storage", "export",
"dashboard", "cloud_sync", "analytics", "api_access", "integrations",
"sso", "rbac", "audit_logs", "team_management",
"on_premise", "sla", "dedicated_support", "invoice_billing"]) },
};
class LicenseManager {
constructor(private plan: Plan = "free") {}
hasFeature(feature: string): boolean {
return PLAN_CONFIG[this.plan].features.has(feature);
}
requireFeature(feature: string): void {
if (!this.hasFeature(feature)) {
// Find the minimum plan that includes this feature
const requiredPlan = (Object.entries(PLAN_CONFIG) as [Plan, any][])
.find(([_, config]) => config.features.has(feature))?.[0] || "enterprise";
throw new Error(
`"${feature}" requires ${requiredPlan} plan. ` +
`You're on ${this.plan}. Upgrade at https://yourapp.com/pricing`
);
}
}
}
// Usage: const license = new LicenseManager(user.plan);
// license.requireFeature("cloud_sync"); // throws if not on correct plan
Your Turn
-
Identify your open source project (1 hour): What tool would you use yourself? What problem have you solved with a script that deserves to be a proper tool? The best open source projects start as personal utilities.
-
Choose your license (15 min): FSL or AGPL for revenue protection. MIT only if you're building for community good with no monetization plan.
-
Build the core and ship it (1-4 weeks): Open-source the core. Write the README. Push to GitHub. Don't wait for it to be perfect.
-
Define your pricing tiers (1 hour): Free / Pro / Team. What features are in each tier? Write it down before you build the premium features.
-
Launch (1 day): Show HN post, 2-3 relevant subreddits, and the "Awesome" list PR.
Lesson 8: Data Products and Intelligence
"Information is only valuable when it's processed, filtered, and delivered in context."
Time to first dollar: 4-8 weeks Ongoing time commitment: 5-15 hours/week Margin: 85-95%
What Data Products Are
A data product takes raw information — public data, research papers, market trends, ecosystem changes — and transforms it into something actionable for a specific audience. Your local LLM handles the processing. Your expertise handles the curation. The combination is worth paying for.
This is different from content monetization (Lesson 2). Content is "here's a blog post about React trends." A data product is "here's a structured weekly report with scored signals, trend analysis, and specific actionable recommendations for React ecosystem decision-makers."
Types of Data Products
1. Curated Intelligence Reports
| Product | Audience | Format | Price |
|---|---|---|---|
| "Weekly AI Paper Digest with implementation notes" | ML engineers, AI researchers | Weekly email + searchable archive | $15/month |
| "Rust Ecosystem Intelligence Report" | Rust developers, CTOs evaluating Rust | Monthly PDF + weekly alerts | $29/month |
| "Developer Job Market Trends" | Hiring managers, job seekers | Monthly report | $49 one-time |
| "Privacy Engineering Bulletin" | Privacy engineers, compliance teams | Biweekly email | $19/month |
| "Indie SaaS Benchmarks" | Bootstrapped SaaS founders | Monthly dataset + analysis | $29/month |
2. Processed Datasets
| Product | Audience | Format | Price |
|---|---|---|---|
| Curated database of open-source project metrics | VCs, OSS investors | API or CSV export | $99/month |
| Tech salary data by city, role, and company | Career coaches, HR | Quarterly dataset | $49 per dataset |
| API uptime benchmarks across 100 popular services | DevOps, SRE teams | Dashboard + API | $29/month |
3. Trend Alerts
| Product | Audience | Format | Price |
|---|---|---|---|
| Breaking dependency vulnerabilities with fix guides | Dev teams | Real-time email/Slack alerts | $19/month per team |
| New framework releases with migration guides | Engineering managers | As-it-happens alerts | $9/month |
| Regulatory changes affecting AI/privacy | Legal teams, CTOs | Weekly summary | $39/month |
Building the Data Pipeline
Here's a complete pipeline for producing a weekly intelligence report. This is real, runnable code. You'll need Ollama running locally (see Module S) to process items at zero cost.
#!/usr/bin/env python3
"""
intelligence_pipeline.py — Weekly intelligence report generator.
Fetches → Scores → Formats → Delivers. Customize NICHE and RSS_FEEDS for your domain.
"""
import requests, json, time, feedparser
from datetime import datetime, timedelta
from pathlib import Path
OLLAMA_URL = "http://127.0.0.1:11434/api/generate"
MODEL = "llama3.1:8b"
# ── Stage 1: Fetch from RSS + HN ─────────────────────────────────
def fetch_items(feeds: list[dict], hn_min_score: int = 50) -> list[dict]:
items = []
cutoff = datetime.now() - timedelta(days=7)
# RSS feeds
for feed_cfg in feeds:
try:
for entry in feedparser.parse(feed_cfg["url"]).entries[:20]:
items.append({"title": entry.get("title", ""), "url": entry.get("link", ""),
"source": feed_cfg["name"], "content": entry.get("summary", "")[:2000]})
except Exception as e:
print(f" Warning: {feed_cfg['name']}: {e}")
# Hacker News (Algolia API, time-filtered)
week_ago = int(cutoff.timestamp())
resp = requests.get(f"https://hn.algolia.com/api/v1/search?tags=story"
f"&numericFilters=points>{hn_min_score},created_at_i>{week_ago}&hitsPerPage=30")
for hit in resp.json().get("hits", []):
items.append({"title": hit.get("title", ""), "source": "Hacker News",
"url": hit.get("url", f"https://news.ycombinator.com/item?id={hit['objectID']}"),
"content": hit.get("title", "")})
# Deduplicate
seen = set()
return [i for i in items if i["title"][:50].lower() not in seen and not seen.add(i["title"][:50].lower())]
# ── Stage 2: Score with Local LLM ────────────────────────────────
def score_items(items: list[dict], niche: str, criteria: str) -> list[dict]:
scored = []
for item in items:
prompt = f"""Score this item for a {niche} newsletter. Criteria: {criteria}
Title: {item['title']} | Source: {item['source']} | Content: {item['content'][:1500]}
Output JSON: {{"relevance_score": 0-10, "category": "Breaking|Tool|Research|Tutorial|Industry|Security",
"summary": "2-3 sentences", "actionable_insight": "what to DO", "key_takeaway": "one sentence"}}"""
try:
resp = requests.post(OLLAMA_URL, json={"model": MODEL, "prompt": prompt,
"stream": False, "format": "json", "options": {"temperature": 0.2}}, timeout=60)
data = json.loads(resp.json()["response"])
if data.get("relevance_score", 0) >= 5.0:
item.update(data)
scored.append(item)
except Exception:
continue
time.sleep(0.5)
return sorted(scored, key=lambda x: x.get("relevance_score", 0), reverse=True)
# ── Stage 3: Generate Markdown Report ─────────────────────────────
def generate_report(items: list[dict], niche: str, issue: int) -> str:
date_str = datetime.now().strftime('%B %d, %Y')
report = f"# {niche} Intelligence — Issue #{issue}\n**Week of {date_str}**\n\n---\n\n"
if items:
top = items[0]
report += f"## Top Signal: {top['title']}\n\n{top.get('summary','')}\n\n"
report += f"**Why it matters:** {top.get('key_takeaway','')}\n\n"
report += f"**Action:** {top.get('actionable_insight','')}\n\n[Read more]({top['url']})\n\n---\n\n"
for item in items[1:12]:
report += f"### [{item['title']}]({item['url']})\n"
report += f"*{item['source']} | {item.get('category','')} | Score: {item.get('relevance_score',0)}/10*\n\n"
report += f"{item.get('summary','')}\n\n> **Action:** {item.get('actionable_insight','')}\n\n"
report += f"\n---\n*{len(items)} items analyzed. Generated locally on {date_str}.*\n"
return report
# ── Run ───────────────────────────────────────────────────────────
if __name__ == "__main__":
NICHE = "Rust Ecosystem" # ← Change this
CRITERIA = "High: new releases, critical crate updates, security vulns, RFC merges. " \
"Medium: blog posts, new crates, job data. Low: peripheral mentions, rehashed tutorials."
FEEDS = [
{"name": "This Week in Rust", "url": "https://this-week-in-rust.org/rss.xml"},
{"name": "Rust Blog", "url": "https://blog.rust-lang.org/feed.xml"},
{"name": "r/rust", "url": "https://www.reddit.com/r/rust/.rss"},
]
items = fetch_items(FEEDS)
print(f"Fetched {len(items)} items")
scored = score_items(items, NICHE, CRITERIA)
print(f"Scored {len(scored)} above threshold")
report = generate_report(scored, NICHE, issue=1)
output = Path(f"./reports/report-{datetime.now().strftime('%Y-%m-%d')}.md")
output.parent.mkdir(exist_ok=True)
output.write_text(report)
print(f"Report saved: {output}")
Delivering the Data Product
Delivery: Use Resend (free for 3,000 emails/month) or Buttondown. Convert your markdown report to HTML with marked, send via Resend's batch API. Total delivery code: ~15 lines.
Pricing strategy for data products:
Free tier: Monthly summary (teaser) — builds audience
Individual: $15-29/month — full weekly report + archive access
Team: $49-99/month — multiple seats + API access to raw data
Enterprise: $199-499/month — custom signals, dedicated analyst time
Revenue Projection
Month 1: 10 subscribers at $15/mo = $150/mo (friends, early adopters)
Month 3: 50 subscribers at $15/mo = $750/mo (organic growth, HN/Reddit posts)
Month 6: 150 subscribers at $15/mo = $2,250/mo (SEO + referrals kicking in)
Month 12: 400 subscribers at $15/mo = $6,000/mo (established brand + team plans)
Cost to run: ~$10/mo (email sending + domain)
Your time: 5-8 hours/week (most automated, you add expertise)
Real-world content creator benchmarks for context:
- Fireship (Jeff Delaney): 4M YouTube subscribers, ~$550K+/year from ads alone. Developer-focused, short-format content. (source: networthspot.com)
- Wes Bos: $10M+ in total course sales, 55K paid students. Proves technical education can scale far beyond newsletter income. (source: foundershut.com)
- Josh Comeau: $550K in the first week of CSS course pre-orders. Demonstrates that focused, high-quality technical education commands premium prices. (source: failory.com)
These are elite outcomes, but the pipeline approach above is how many of them started: consistent, niche-focused content with clear value.
The key: the pipeline does the heavy lifting. Even on CPU-only inference, processing 30-50 articles per week is practical for batch pipelines. Your expertise is the moat. No one else has your specific combination of domain knowledge + curation judgment + processing infrastructure.
Your Turn
-
Pick your niche (30 min): What domain do you know well enough to have opinions? That's your data product niche.
-
Identify 5-10 data sources (1 hour): RSS feeds, APIs, subreddits, HN searches, newsletters you currently read. These are your raw inputs.
-
Run the pipeline once (2 hours): Customize the code above for your niche. Run it. Look at the output. Is it useful? Would you pay for it?
-
Produce your first report (2-4 hours): Edit the pipeline output. Add your analysis, your opinions, your "so what." This is the 20% that makes it worth paying for.
-
Send it to 10 people (30 min): Not as a product — as a sample. "I'm considering launching a weekly [niche] intelligence report. Here's the first issue. Would this be useful to you? Would you pay $15/month for it?"
Engine Selection: Choosing Your Two
"You now know eight engines. You need two. Here's how to choose."
The Decision Matrix
Score each engine 1-5 on these four dimensions, based on YOUR specific situation:
| Dimension | What It Means | How to Score |
|---|---|---|
| Skill match | How well does this engine match what you already know? | 5 = perfect match, 1 = completely new territory |
| Time fit | Can you execute this engine with your available hours? | 5 = fits perfectly, 1 = would require quitting your job |
| Speed | How fast will you see your first dollar? | 5 = this week, 1 = 3+ months |
| Scale | How much can this engine grow without proportionally more time? | 5 = infinite (product), 1 = linear (trading time for money) |
Fill in this matrix:
Engine Skill Time Speed Scale TOTAL
─────────────────────────────────────────────────────────
1. Digital Products /5 /5 /5 /5 /20
2. Content Monetization /5 /5 /5 /5 /20
3. Micro-SaaS /5 /5 /5 /5 /20
4. Automation-as-a-Service /5 /5 /5 /5 /20
5. API Products /5 /5 /5 /5 /20
6. Consulting /5 /5 /5 /5 /20
7. Open Source + Premium /5 /5 /5 /5 /20
8. Data Products /5 /5 /5 /5 /20
The 1+1 Strategy
With your experience level: At 8+ years, focus on engines that compound over time: Open Source + Premium, Data Products, or Consulting at premium rates ($250-500/hr). You have the credibility and network to command premium prices. Your advantage is trust and reputation — leverage it. Consider building a content brand (blog, newsletter, YouTube) as an amplifier for whatever engines you choose.
Engine 1: Your FAST engine — Pick the engine with the highest Speed score (tiebreaker: highest Total). This is what you build in Weeks 5-6. The goal is revenue within 14 days.
Engine 2: Your SCALE engine — Pick the engine with the highest Scale score (tiebreaker: highest Total). This is what you plan in Weeks 7-8 and build through Module E. The goal is compounding growth over 6-12 months.
Common pairings that work well together:
| Fast Engine | Scale Engine | Why They Pair Well |
|---|---|---|
| Consulting | Micro-SaaS | Consulting revenue funds SaaS development. Client problems become SaaS features. |
| Digital Products | Content Monetization | Products give you credibility for content. Content drives product sales. |
| Automation-as-a-Service | API Products | Client automation projects reveal common patterns → package as API product. |
| Consulting | Open Source + Premium | Consulting builds expertise and reputation. Open source captures it as a product. |
| Digital Products | Data Products | Templates establish your niche expertise. Intelligence reports deepen it. |
Revenue Projection Worksheet
Fill this in for your two chosen engines:
ENGINE 1 (Fast): _______________________________
Time to first dollar: _____ weeks
Revenue month 1: $________
Revenue month 3: $________
Revenue month 6: $________
Monthly time required: _____ hours
Monthly costs: $________
First milestone: $________ by __________
ENGINE 2 (Scale): _______________________________
Time to first dollar: _____ weeks
Revenue month 1: $________
Revenue month 3: $________
Revenue month 6: $________
Revenue month 12: $________
Monthly time required: _____ hours
Monthly costs: $________
First milestone: $________ by __________
COMBINED PROJECTION:
Month 3 total: $________/month
Month 6 total: $________/month
Month 12 total: $________/month
Total monthly time: _____ hours
Total monthly costs: $________
Real Talk: These projections will be wrong. That's fine. The point isn't accuracy — it's forcing you to think through the math before you start building. A revenue engine that requires 30 hours/week of your time but generates $200/month is a bad deal. You need to see that on paper before you invest the time.
Platform Risk & Diversification
Every revenue engine sits on top of platforms you don't control. Gumroad can change its fee structure. YouTube can demonetize your channel. Vercel can sunset its affiliate program. Stripe can freeze your account during a review. This is not hypothetical — it happens regularly.
The 40% Rule: Never allow more than 40% of your income to depend on a single platform. If Gumroad generates 60% of your revenue and they raise fees from 5% to 15% overnight (as they did in early 2023 before reverting), your margins collapse. If YouTube is 70% of your income and an algorithm change halves your views, you're in trouble.
Real examples of platform risk:
| Year | Platform | What Happened | Impact on Developers |
|---|---|---|---|
| 2022 | Heroku | Free tier eliminated | Thousands of hobby projects and small businesses forced to migrate or pay |
| 2023 | Gumroad | Announced 10% flat fee (later reversed) | Creators scrambled to evaluate alternatives; those with Lemon Squeezy or Stripe fallbacks were unaffected |
| 2023 | Twitter/X API | Free tier killed, paid tiers repriced | Bot developers, content automation tools, and data products disrupted overnight |
| 2024 | Unity | Retroactive per-install fee announced (later modified) | Game developers with years of Unity investment faced sudden cost increases |
| 2025 | API pricing changes | Third-party app developers lost their businesses entirely |
The pattern: Platforms optimize for their own growth, not yours. Early in a platform's lifecycle, they subsidize creators to attract supply. Once they have enough supply, they extract value. This is not malice — it's business. Your job is to never be surprised by it.
Platform Dependency Audit:
Run this audit quarterly. For each revenue stream, answer:
PLATFORM DEPENDENCY AUDIT
Stream: _______________
Platform(s) it depends on: _______________
1. What percentage of this stream's revenue flows through this platform?
[ ] <25% (low risk) [ ] 25-40% (moderate) [ ] >40% (high — diversify)
2. Can you move to an alternative platform within 30 days?
[ ] Yes, alternatives exist and migration is straightforward
[ ] Partially — some lock-in (audience, reputation, integrations)
[ ] No — deeply locked in (proprietary format, no data export)
3. Does this platform have a history of adverse changes?
[ ] No history of harmful changes [ ] Minor changes [ ] Major adverse changes
4. Do you own the customer relationship?
[ ] Yes — I have email addresses and can contact customers directly
[ ] Partially — some customers are discoverable, some aren't
[ ] No — platform controls all customer access
Action items:
- If >40% dependency: identify and test an alternative this month
- If no data export: export everything you can NOW, set a monthly reminder
- If you don't own the customer relationship: start collecting emails immediately
Diversification strategies by engine:
| Engine | Primary Platform Risk | Mitigation |
|---|---|---|
| Digital Products | Gumroad/Lemon Squeezy fee changes | Maintain your own Stripe checkout as fallback. Own your customer email list. |
| Content Monetization | YouTube demonetization, algorithm shifts | Build an email list. Cross-post to multiple platforms. Own your blog on your domain. |
| Micro-SaaS | Payment processor holds, hosting costs | Multi-provider payment setup. Keep infrastructure costs under 10% of revenue. |
| API Products | Cloud hosting price changes | Design for portability. Use containers. Document your migration runbook. |
| Consulting | LinkedIn algorithm, job board changes | Build direct referral network. Maintain personal website with portfolio. |
| Open Source | GitHub policy changes, npm registry rules | Mirror releases. Own your project website and documentation domain. |
The golden rule of platform diversification: If you can't email your customers directly, you don't have customers — you have a platform's customers. Build your email list from day one, regardless of which engine you're running.
The Anti-Patterns
Don't do these:
-
Don't pick 3+ engines. Two is the maximum. Three splits your attention too thin and nothing gets done well.
-
Don't pick two slow engines. If both engines take 8+ weeks to generate revenue, you'll lose motivation before seeing results. At least one engine should generate revenue within 2 weeks.
-
Don't pick two engines in the same category. A micro-SaaS and an API product are both "build a product" — you're not diversifying. Pair a product engine with a service engine or a content engine.
-
Don't skip the math. "I'll figure out pricing later" is how you end up with a product that costs more to run than it earns.
-
Don't optimize for the most impressive engine. Consulting isn't glamorous. Digital products aren't "innovative." But they make money. Pick what works for your situation, not what looks good on Twitter.
-
Don't ignore platform concentration. Run the Platform Dependency Audit above. If any single platform controls more than 40% of your revenue, diversifying should be your next priority — before adding a new engine.
4DA Integration
How 4DA connects to Module R:
4DA's signal detection finds the market gaps your revenue engines fill. Trending framework with no starter kit? Build one (Engine 1). New LLM technique with no tutorial? Write one (Engine 2). Dependency vulnerability with no migration guide? Create one and charge for it (Engine 1, 2, or 8).
4DA's
get_actionable_signalstool classifies content by urgency (tactical vs. strategic) with priority levels. Each signal type maps naturally to revenue engines:
Signal Classification Priority Best Revenue Engine Example Tactical / High Priority Urgent Consulting, Digital Products New vulnerability disclosed — write a migration guide or offer remediation consulting Tactical / Medium Priority This week Content Monetization, Digital Products Trending library release — write the first tutorial or build a starter kit Strategic / High Priority This quarter Micro-SaaS, API Products Emerging pattern across multiple signals — build tooling before the market matures Strategic / Medium Priority This year Open Source + Premium, Data Products Narrative shift in a technology area — position yourself as the expert through open-source work or intelligence reports Pair
get_actionable_signalswith other 4DA tools to go deeper:
daily_briefing— AI-generated executive summary surfaces the highest-priority signals each morningknowledge_gaps— finds gaps in your project's dependencies, revealing opportunities for products that fill those gapstrend_analysis— statistical patterns and predictions show which technologies are acceleratingsemantic_shifts— detects when a technology crosses from "experimental" to "production" adoption, signaling market timingThe combination is the feedback loop: 4DA detects the opportunity. STREETS gives you the playbook to execute on it. Your revenue engine turns the signal into income.
Module R: Complete
What You've Built in Four Weeks
Go back and look at where you were at the start of this module. You had infrastructure (Module S) and defensibility (Module T). Now you have:
- A working Engine 1 generating revenue (or the infrastructure to generate it within days)
- A detailed plan for Engine 2 with timeline, revenue projections, and first steps
- Real, deployed code — not just ideas, but working payment flows, API endpoints, content pipelines, or product listings
- A decision matrix you can reference whenever a new opportunity appears
- Revenue math that tells you exactly how many sales, clients, or subscribers you need to hit your targets
Key Deliverable Check
Before moving to Module E (Execution Playbook), verify:
- [ ] Engine 1 is live. Something is deployed, listed, or available for purchase/hire.
- [ ] Engine 1 has generated at least $1 in revenue (or you have a clear path to $1 within 7 days)
- [ ] Engine 2 is planned. You have a written plan with milestones and timeline.
- [ ] Your decision matrix is filled out. You know WHY you chose these two engines.
- [ ] Your revenue projection worksheet is complete. You know your targets for months 1, 3, 6, and 12.
If any of these are incomplete, spend the time. Module E builds on all of this. Going forward without a working Engine 1 is like trying to optimize a product that doesn't exist.
What Comes Next: Module E — Execution Playbook
Module R gave you the engines. Module E teaches you how to operate them:
- Launch sequences — exactly what to do in the first 24 hours, first week, and first month of each engine
- Pricing psychology — why $49 outsells $39, and when to offer discounts (almost never)
- Finding your first 10 customers — specific, actionable tactics for each engine type
- The metrics that matter — what to track and what to ignore at each stage
- When to pivot — the signals that tell you an engine isn't working and what to do about it
You have the engines built. Now you learn to drive them.
Your rig. Your rules. Your revenue.