
The Shared Hosting Gap: Why Most Self-Hosting Tools Miss 80% of Developers
Here's a reality check: while the tech community obsesses over Kubernetes clusters and Docker compose files, millions of developers are still shipping to $3/month shared hosting with nothing but PHP, MySQL, and an FTP client. And almost every "self-hostable" analytics and monitoring tool completely ignores them.
Omkar Dongaonkar proved this point by building a combined Plausible and Sentry alternative in a single day that runs on shared hosting. But the real insight isn't the speed—it's what this experiment reveals about the massive disconnect between developer tooling and actual deployment realities.
The Infrastructure Privilege Problem
Let's look at what "self-hosting" actually means for popular tools:
Plausible Community Edition requires:
- Docker or VPS with root access
- PostgreSQL, Elixir runtime
- Often Traefik for proxying, plus Authelia for auth
- Minimum 2GB RAM
Sentry self-hosting demands:
- 16GB RAM minimum
- ClickHouse for storage
- Complex Docker composition
- Ongoing maintenance expertise
<> "I worked on projects that run on shared hosting. PHP + MySQL, no root access. It's a real environment that a lot of developers actually ship to - and almost no tools support it."/>
This creates what I call "infrastructure privilege"—the assumption that every developer has VPS budget, Docker expertise, and ops time. In reality, indie developers, small agencies, and hobbyists often work within much tighter constraints.
What Shared Hosting Actually Looks Like
Shared hosting isn't just a cost decision—it's often the most practical choice:
- Zero maintenance: No server updates, security patches, or downtime management
- Instant deployment: Upload files via FTP or cPanel file manager
- Predictable costs: $3-5/month vs. $20+ for VPS plus monitoring/backup services
- Built-in basics: SSL certificates, backups, and basic security handled automatically
Yet most modern developer tools treat shared hosting like it's 2005 tech that serious developers have outgrown. The data suggests otherwise—WordPress alone powers 40% of the web, mostly on shared hosting.
The One-Day Solution
Dongaonkar's approach strips away all the complexity:
1// Simple event tracking endpoint
2<?php
3// api/event.php
4$data = json_decode(file_get_contents('php://input'), true);
5$stmt = $pdo->prepare("INSERT INTO events (domain, page, timestamp) VALUES (?, ?, ?)");
6$stmt->execute([$data['domain'], $data['page'], date('Y-m-d H:i:s')]);
7?>1// Client-side tracking (privacy-first, no cookies)
2fetch('/api/event', {
3 method: 'POST',
4 headers: {'Content-Type': 'application/json'},
5 body: JSON.stringify({
6 domain: window.location.hostname,
7 page: window.location.pathname
8 })
9});For error tracking, it mimics Sentry's SDK interface:
1// Error capture compatible with existing Sentry patterns
2window.addEventListener('error', (e) => {
3 fetch('/api/error', {
4 method: 'POST',
5 body: JSON.stringify({
6 message: e.message,
7 filename: e.filename,
8 lineno: e.lineno,
9 stack: e.error?.stack
10 })
11 });
12});The entire setup runs on any shared host with PHP 7+ and MySQL. No Docker files, no environment variables, no reverse proxies.
Why This Approach Actually Works
Shared hosting constraints force better architectural decisions:
Resource efficiency: When you can't throw RAM at the problem, you write leaner code. The PHP solution uses ~50MB RAM vs. Sentry's 16GB requirement.
Simplicity wins: Without container orchestration options, you build single-file solutions that are easier to debug and modify.
Database-driven architecture: MySQL becomes your queue, cache, and storage layer. One less moving part than Redis + PostgreSQL + ClickHouse stacks.
Real user constraints: If your monitoring tool crashes your $5/month host, you'll quickly learn to build something sustainable.
The Broader Pattern
This isn't just about analytics tools. Look at the "self-hostable" alternatives across categories:
- Note-taking: Obsidian Publish alternatives require Node.js + build processes vs. simple PHP wiki engines
- Form handling: Typeform alternatives need Docker when PHP can handle forms natively
- File sharing: WeTransfer alternatives demand object storage when filesystem + .htaccess works fine
Each assumes infrastructure complexity that many developers simply don't have or want.
Practical Deployment Strategy
If you want to try this approach:
1. Start with shared hosting basics: Create a MySQL database through cPanel, note the credentials
2. Deploy via file upload: No git hooks or CI/CD needed—just zip and upload
3. Use subdomain isolation: analytics.yourdomain.com pointing to a separate folder
4. Leverage .htaccess: Basic auth, IP whitelisting, and URL rewriting without nginx configs
1-- Simple schema that scales to millions of events
2CREATE TABLE events (
3 id INT AUTO_INCREMENT PRIMARY KEY,
4 domain VARCHAR(255) INDEX,
5 page VARCHAR(500),
6 timestamp DATETIME INDEX,
7 user_agent TEXT
8);Why This Matters
The shared hosting gap reveals how developer tooling has become increasingly disconnected from deployment realities. We optimize for Kubernetes complexity while ignoring the constraints where most code actually runs.
This matters because:
Innovation happens at the edges: The next great web app might come from someone on a $3/month hosting plan, not a venture-funded team with unlimited AWS credits.
Constraints breed creativity: Dongaonkar built in one day what typically takes weeks of Docker configuration because he couldn't rely on infrastructure complexity.
Maintenance burden: A PHP file that works today will likely work in five years. A Docker compose file with 12 services? Not so much.
The real insight isn't that we should abandon modern infrastructure—it's that we should build tools that work across the entire spectrum of deployment environments. The best self-hostable software shouldn't require a DevOps degree to deploy.
Next time you're evaluating or building developer tools, ask: "Could this run on shared hosting?" The answer reveals whether you're building for developers or just for other infrastructure engineers.
