The Problem That Shouldn’t Exist (But Does)

Picture this: You’ve built a beautiful side project. Clean API, responsive frontend, PostgreSQL database humming along nicely on Supabase’s generous free tier. You deploy it, share it with friends, then move on to your next idea.

Seven days later, your project is dead. Not crashed. Not broken. Just… asleep.

This is the reality of Supabase’s free tier: 7 days of database inactivity = automatic project pause. It’s a reasonable policy for resource management, but it’s a headache for developers managing multiple projects, demo environments, or anything that doesn’t have consistent traffic.

Sure, you can manually reactivate projects from the dashboard. But if you’re like me and have 5+ side projects running simultaneously, that’s a game of whack-a-mole you didn’t sign up for.

Why Not Just Switch to Firebase?

Fair question. Let me break down the landscape:

Firebase Spark (Free)

  • ✅ No inactivity policy (this is huge)
  • ✅ Mature ecosystem, great docs
  • ❌ NoSQL only (goodbye complex queries)
  • ❌ Cloud Functions can get expensive fast
  • ❌ Vendor lock-in is real

AWS Free Tier

  • ✅ Maximum flexibility and power
  • ✅ Production-grade infrastructure
  • ❌ Steep learning curve (configuration alone takes hours)
  • ❌ 12-month limit on free tier
  • ❌ Easy to accidentally rack up charges

Supabase Free Tier

  • ✅ PostgreSQL with 500MB storage
  • ✅ Auto-generated REST APIs
  • ✅ Built-in real-time subscriptions
  • ✅ Open source (self-hosting possible)
  • ✅ Developer experience is phenomenal
  • ❌ That 7-day pause policy

For rapid prototyping with relational data, Supabase is unbeatable. The problem is simple:

// This is literally all you need
const { data } = await supabase
  .from('posts')
  .select('*')
  .eq('user_id', userId);

I wasn’t going to abandon this developer experience over an automation problem. So I built the automation.

Existing Solutions (And Why They Weren’t Enough)

The developer community had already tackled this. Projects like supabase-inactive-fix on GitHub use a straightforward approach: periodically insert data into the database to simulate activity.

Smart. But after using these solutions, I noticed gaps:

  • Predictable patterns: Always inserting the same number of rows looked robotic
  • Data bloat: No cleanup mechanism for dummy data
  • Deployment complexity: Building Docker images for every code change
  • Monitoring blindness: No visibility into what’s actually happening

These weren’t deal-breakers, but they were opportunities for improvement.

Building SupabaseZombi: Technical Architecture

The name came from the zombie metaphor – something that keeps moving, keeps active, refuses to die. Perfect for a keep-alive service.

Core Innovation #1: Dynamic Data Patterns

Instead of inserting a fixed number of rows, SupabaseZombi randomizes its behavior:

# Insert 1-10 rows randomly
insert_count = random.randint(1, 10)

# Auto-cleanup when threshold exceeded
if current_count > 50:
    delete_count = current_count - 30
    # Delete oldest records first

Why this matters:

  • Mimics natural database activity patterns
  • Useful for realistic system testing
  • Maintains database efficiency (critical with 500MB limit)
  • No manual cleanup required

The 50/30 threshold was chosen deliberately – enough data to look organic, but small enough to be negligible in your database space.

Core Innovation #2: Multi-Project Configuration

Early versions used environment variables:

SUPABASE_URL_1=...
SUPABASE_KEY_1=...
SUPABASE_URL_2=...
SUPABASE_KEY_2=...

This doesn’t scale. Managing 5+ projects becomes a configuration nightmare.

The JSON solution:

[
  {
    "name": "Production API",
    "supabase_url": "https://xxx.supabase.co",
    "supabase_key": "your-key",
    "table_name": "keep_alive"
  },
  {
    "name": "Staging Environment",
    "supabase_url": "https://yyy.supabase.co",
    "supabase_key_env": "SUPABASE_KEY_STAGING",
    "table_name": "keep_alive"
  }
]

Benefits:

  • Unlimited project support
  • Structured and readable
  • Supports both direct values and environment variable references
  • Version control friendly (with proper .gitignore)

Core Innovation #3: Zero-Build Docker Strategy

Traditional Docker workflow:

  1. Write Dockerfile
  2. Build image (5+ minutes)
  3. Run container
  4. Change code? Rebuild everything.

SupabaseZombi’s approach:

docker run -d \
  -v $(pwd)/main_standalone.py:/app/main.py:ro \
  -v $(pwd)/config.json:/app/config.json:ro \
  python:3.11-slim \
  sh -c "pip install supabase requests && python /app/main.py"

By mounting the source code as volumes, we eliminate the build step entirely:

  • ✅ Instant deployment
  • ✅ Fast iteration (just restart container)
  • ✅ No Dockerfile maintenance
  • ✅ Using official Python images (better security)

Core Innovation #4: Structured Logging

Operations visibility is critical when automating infrastructure:

2025-10-30 09:00:00 - INFO - == Run start (2 servers)
2025-10-30 09:00:00 - INFO - = Server #1: Production API
2025-10-30 09:00:01 - INFO - ✓ SUCCESS | #15 rows | Inserted: 7 | Deleted: 0
2025-10-30 09:00:01 - INFO - = Server #2: Staging Environment
2025-10-30 09:00:02 - INFO - ✓ SUCCESS | #53 rows | Inserted: 5 | Deleted: 23
2025-10-30 09:00:02 - INFO - == Next run: 2025-10-31 09:00:02

Every log entry includes:

  • Timestamp for audit trails
  • Success/failure status
  • Operational statistics
  • Next scheduled run

When something breaks at 3 AM, these logs make debugging trivial.

Core Innovation #5: Real-Time Notifications

Telegram Bot API integration provides instant feedback:

Success notifications:

✅ SupabaseZombi Run Complete
• Production API: +7 rows, -0 old
• Staging: +5 rows, -23 old
Next run: 2025-10-31 09:00

Failure alerts:

❌ SupabaseZombi Error
Server: Production API
Error: Connection timeout
Check logs for details

You don’t need to SSH into your server or check Docker logs. Issues come to you.

The Scheduling Decision

Why 24-hour intervals?

  • Safety margin: 7-day policy means we have 6+ days of buffer
  • Resource efficiency: More frequent pings waste resources
  • Policy compliance: Respects Supabase’s intent

Running every hour would work, but it misses the point. We’re simulating genuine project activity, not gaming a system.

Getting Started in 60 Seconds

# 1. Clone the repository
git clone https://github.com/shsm0520/supabasezombi.git
cd supabasezombi

# 2. Configure your projects
cp config.json.example config.json
# Edit config.json with your Supabase credentials

# 3. Launch with Docker Compose
docker-compose up -d

# 4. Verify it's working
docker-compose logs -f

That’s it. Your projects will stay active automatically.

Production Results

After running SupabaseZombi across multiple projects for several months:

Quantitative wins:

  • ✅ Zero manual reactivations required
  • ✅ 5+ projects managed from single container
  • ✅ Database storage remains under 1% usage
  • ✅ 100% uptime for monitored projects

Qualitative improvements:

  • ✅ Mental load reduced – one less thing to remember
  • ✅ Demo environments always ready for client presentations
  • ✅ Side projects accessible whenever inspiration strikes

What’s Next: Community-Driven Roadmap

Confirmed (In Development) ✅

1. Flexible Scheduling

{
  "schedule": {
    "interval_hours": 12,  // Run every 12 hours
    "run_at": "09:00"      // Or run at specific time
  }
}

Users have different needs. Some prefer more frequent checks, others want minimal resource usage. Customizable scheduling addresses both.

2. Multi-Channel Notifications

Currently Telegram-only, but Slack and Discord integrations are coming. Enterprise teams often use Slack, while developer communities prefer Discord.

Under Consideration 🤔

3. Web Dashboard

localhost:8080 →
  • Project list with status indicators
  • Execution history graphs
  • GUI-based configuration
  • Manual run triggers

A web UI would significantly improve UX, but also increases project complexity. Waiting for community feedback to gauge actual demand.

4. Health Check API

{
  "status": "healthy",
  "last_run": "2025-10-31 09:00:00",
  "next_run": "2025-11-01 09:00:00",
  "databases": {
    "total": 3,
    "healthy": 3,
    "failed": 0
  }
}

For integration with external monitoring systems (Datadog, New Relic, etc.). Security considerations (authentication, firewall rules) need thorough review first.

5. Intelligent Retry Logic

Exponential backoff for transient failures:

  • Network hiccups
  • Supabase maintenance windows
  • Rate limiting scenarios

6. Analytics & Metrics

  • Execution history and success rates
  • Per-database performance metrics
  • Average response times
  • Data growth trends

Long-term, integration with standard monitoring tools (Grafana, Prometheus) is on the radar.

Long-Term Vision ⏸️

7. Cross-Platform GUI Client

Electron-based desktop app for non-technical users. Currently, the Docker solution is simple enough that this may not be necessary.

8. Multiple Keep-Alive Strategies

  • Lightweight API calls (no data insertion)
  • Periodic Edge Function triggers
  • Storage-level activity

Each strategy has trade-offs. Offering user choice is appealing, but we must preserve the project’s core value: simplicity.

9. SaaS Platform

“SupabaseZombi.io” – a hosted service where users just sign up and enter their Supabase credentials. No Docker, no configuration files.

This is attractive, but introduces complexity:

  • Infrastructure costs
  • Privacy considerations (storing user credentials)
  • Sustainable business model
  • Legal compliance

On hold pending further research.

Open Source Philosophy

SupabaseZombi is MIT licensed – use it, modify it, distribute it freely. The project thrives on community feedback.

Want to contribute?

  • 🐛 Found a bug? Open an issue
  • 💡 Have an idea? Start a discussion
  • 🔧 Want to code? Pull requests welcome

The roadmap above isn’t set in stone. Community input shapes priority.

Closing Thoughts

Supabase’s 7-day inactivity policy is reasonable from a resource management perspective. But for developers managing multiple projects, it’s a tax on attention.

SupabaseZombi removes that tax. It’s not about circumventing policy – it’s about automating compliance. Your projects maintain genuine activity without manual intervention.

Technical achievements:

  • Automated repetitive manual work
  • Enabled multi-project orchestration
  • Optimized resource usage
  • Provided operational visibility
  • Delivered platform-independent deployment

But most importantly: It gave me back my mental space. No more Sunday evening logins to reactivate projects. No more “wait, was that demo environment paused?” moments before client calls.

If you’re facing similar challenges, give SupabaseZombi a try. If you have ideas for improvement, let’s discuss them.

👉 GitHub Repository: https://github.com/shsm0520/supabasezombi


Disclaimer

This project complies with Supabase’s terms of service by simulating normal database activity. Users are solely responsible for their Supabase projects. This tool is provided “as-is” without warranty.


Built with ❤️ for developers who have better things to do than babysit free tier projects.