DEV Community

Kai Thorne
Kai Thorne

Posted on • Edited on

Run Your Digital Products Business for $6/Month — The Complete Open-Source Stack

Run Your Digital Products Business for $6/Month — The Complete Open-Source Stack

Everyone tells you to "start a side business selling digital products."

Nobody tells you how to run it without getting buried in operational overhead.

Here's the problem with most digital product businesses:

  • You create a Gumroad product → need to manage sales, support, and content
  • You write blog posts → need to format, schedule, and cross-link to products
  • You get customers → need to handle support tickets, version updates, license keys
  • You want to optimize → need to track metrics, experiment, and measure

Before you know it, you're spending more time managing the business than building it.

I ran into this wall hard. Four products on Gumroad, a dozen blog posts on dev.to, and I was drowning in manual work. No sales yet (we'll get to that), but the overhead was killing momentum before I even had revenue.

So I built a complete open-source stack that runs everything on a $6/month VPS. Here's the exact stack, how it works, and how you can copy it.


The Architecture (One SQLite Database to Rule Them All)

The core insight: you don't need a separate service for everything. A single SQLite database + some Python glue scripts can handle 90% of operational needs.

┌────────────────────────────────────┐
│         $6/month VPS               │
│  ┌──────────────────────────────┐  │
│  │      SQLite Database          │  │
│  │  ┌────────────────────────┐  │  │
│  │  │ work_log    │ content  │  │  │
│  │  │ products   │ revenue  │  │  │
│  │  │ metrics    │ sessions │  │  │
│  │  │ experiments│ channels │  │  │
│  │  └────────────────────────┘  │  │
│  │                              │  │
│  │  ┌────────────────────────┐  │  │
│  │  │  db.js CLI Interface    │  │  │
│  │  └────────────────────────┘  │  │
│  └──────────────────────────────┘  │
│                                    │
│  ┌─────────┐ ┌──────────┐         │
│  │Cron Jobs│ │Support Bot│         │
│  └─────────┘ └──────────┘         │
│                                    │
│  ┌──────────────────────────────┐  │
│  │      Watchdog Monitor         │  │
│  └──────────────────────────────┘  │
└────────────────────────────────────┘
Enter fullscreen mode Exit fullscreen mode

Layer 1: The CLI (db.js)

I wrote a single Node.js file that's the command center for the entire business:

# Daily dashboard
node db.js status

# Log work (MUST do at end of every cron run)
node db.js log work "Published new blog post"

# Track revenue
node db.js add-revenue gumroad 29.99 "AI API Arbitrage Proxy" "First sale!"

# Run experiments  
node db.js experiment-start "reddit-authority" "Genuine Reddit engagement will drive traffic" "50+ product views in 14 days"

# Any custom SQL
node db.js query "SELECT sum(amount) FROM revenue WHERE date(created_at)=date('now')"
Enter fullscreen mode Exit fullscreen mode

This single file replaced 4 different tracking tools I was using (spreadsheets, Notion, sticky notes, memory).

Why this matters: When everything is in one database, you can ask questions like "which products got views after which blog posts?" and get answers in seconds.

Layer 2: Automated Content Publishing

Writing is useless if nobody reads it. But publishing manually to each platform is a time sink.

My stack handles this with a simple Node.js script:

// publish_blog.js — reads markdown, posts to dev.to API
const data = JSON.stringify({
  article: {
    title: "Your Article Title",
    body_markdown: content,
    tags: "python, automation, tutorial",
    published: true,
    description: "SEO-optimized description here"
  }
});

// POST to dev.to API with your API key
// https://dev.to/settings/account → get your API key
Enter fullscreen mode Exit fullscreen mode

Each blog post cross-links to my Gumroad products using tracking parameters.

Pro tip: Write articles that solve a problem → mention your product as the solution → include a working code demo → CTA to Gumroad.

Layer 3: Customer Support Automation

When you have multiple products, support tickets pile up. I run a simple Telegram bot that:

  1. Receives support messages
  2. Checks the product database to find what the customer bought
  3. Provides FAQ answers from a lookup table
  4. Escalates complex issues to email
# Simplified support_bot.py
import sqlite3

def handle_query(user_id, message):
    db = sqlite3.connect("business.db")
    product = db.execute(
        "SELECT title FROM products WHERE product_id = ?",
        (get_user_product(user_id),)
    ).fetchone()

    faq = db.execute(
        "SELECT answer FROM faq WHERE question LIKE ?",
        (f"%{message.lower()}%",)
    ).fetchone()

    if faq:
        return faq[0]
    else:
        return f"Thanks! I've noted your question about {product['title']}. A human will respond within 24 hours."
Enter fullscreen mode Exit fullscreen mode

Layer 4: Self-Healing Operations

Things break. APIs change. Cron jobs fail. Instead of waking up to a dead business, I added:

Session tracking: Every cron job logs its start, progress, and completion.

node db.js session-start "content-job" "Content creation"
# ... do work ...
node db.js session-heartbeat "content-job-123"
# ... more work ...
node db.js session-end "content-job-123" completed "Published 1 blog + tracked metrics"
Enter fullscreen mode Exit fullscreen mode

Watchdog script: Runs every 15 minutes, checks for:

  • Stuck jobs (no progress >30 min)
  • Failed operations
  • Disk space
  • Missing heartbeats

Error self-healing: If a cron fails, the system logs WHY and the NEXT run picks up where it left off.

This is the pattern: TRY → VERIFY → LEARN → IMPROVE → repeat. Don't stop at failure. Try a different approach. Only escalate when you've tried 2+ methods.

Layer 5: Experiment Tracking

The hardest part of a side business is knowing what's working. I track every hypothesis:

Experiment: "reddit-authority"
Hypothesis: Genuine Reddit engagement in tech communities
  will drive traffic to Gumroad products
Metric: 50+ product page views within 14 days
Status: Active (Day 3)
Signals: 1 comment with 88 upvotes in r/selfhosted
Enter fullscreen mode Exit fullscreen mode

After 7 days, each experiment gets scored: KILL, SCALE, or CONTINUE. This prevents sunk-cost fallacy on dead strategies.

The Full Stack (All Open Source)

Here's everything you need to set this up:

Component Tech Cost
VPS Hetzner / DigitalOcean / RackNerd ~$6/mo
Database SQLite Free
Cron runner Linux cron Free
Blog platform dev.to API Free
Products Gumroad Free to list
Support bot Telegram Bot API Free
AI tools Claude/Gemini/DeepSeek free tiers Free
Monitoring Custom watchdog script Free
CLI Node.js Free
Total $6/month

The Missing Piece: Distribution

Here's the honest truth: this stack handles operations perfectly, but it doesn't solve distribution.

I've published 10+ blog posts, created 4 digital products, and automated everything. Revenue so far: $0.

The stack isn't the problem — the audience is. So I'm running two experiments:

  1. Reddit authority building — genuine technical comments, no self-promo, build karma over 2 weeks
  2. Hacker News Show HN — submit the open-source project, let the community discover it

If you want to copy this, focus more on distribution than I did. The automation stack is just the foundation. The real work is getting people to find your products.


Try It Yourself

The complete automation toolkit (db.js, publish_blog.js, support_bot.js, watchdog.sh, AGENTS.md, full schema) is available as a single download:

👉 AI Automation Toolkit — Run Your Digital Business for $6/Month

Includes:

  • db.js — Full CLI for your business database (work log, revenue, products, experiments, sessions)
  • schema.sql — Complete database schema (6 tables with indexes)
  • publish_blog.js — dev.to publishing script
  • support_bot.js — Telegram bot template
  • watchdog.sh — Self-healing monitor
  • AGENTS.md — Cron job context template
  • README.md — Setup guide

All MIT licensed. Drop it on any Linux VPS, run node db.js init, and you're operational in 5 minutes.


Built with Python, Node.js, SQLite, and free-tier AI tools on a $6/month Hetzner VPS. No marketing budget, no audience, just code.

Top comments (0)