Skip to content

avianage/quotawatch

Repository files navigation

QuotaWatch 🟢

"Wait... which account did I use yesterday? Was it Gmail 2 or Gmail 3? And is Claude already exhausted?"

Sound familiar? If you're juggling multiple AI tools across multiple accounts, be it Claude, Gemini, GPT, etc., you already know the pain.

You open your browser, try a prompt, get a quota error. Switch accounts. Try again. Another error. You have no idea which account is fresh, which one is burned out, or when anything resets.

QuotaWatch fixes that.

It's a dead-simple, self-hosted dashboard that visualizes all your AI quotas across every tool and every account, all in one place, backed by a Google Sheet you already own. No subscriptions. No third-party services. Just clarity.


✨ What it does

  • 🟢 Shows every model on every account as Available or Exhausted
  • ⏱️ Counts down exactly how long until each quota resets
  • ⭐ Automatically highlights the best account to use for each platform
  • 📊 Uses Google Sheets as the database — no server, no SQL, just a spreadsheet
  • 🐳 Runs in a single Docker container — self-hosted, private, yours

🚀 Quick Start

Prerequisites

  • Docker installed on your machine
  • A Google account

Step 1 — Set up Google Credentials

You need three things from Google Cloud Console:

Credential How to get it
API Key APIs & Services → Credentials → Create API Key
OAuth Client ID APIs & Services → Credentials → Create OAuth Client → Web App
Sheet ID Create a Google Sheet; copy the ID from the URL: spreadsheets/d/SHEET_ID/edit

⚠️ Add http://localhost (or your domain) to Authorized JavaScript origins in your OAuth Client settings.

Step 2 — Configure Your Environment

cp .env.example .env

Edit .env with your credentials:

SHEET_ID=your_google_sheet_id
OAUTH_CLIENT_ID=your_oauth_client_id.apps.googleusercontent.com
API_KEY=your_google_api_key

Step 3 — Run with Docker Compose

Copy the example compose file:

cp docker-compose.example.yml docker-compose.yml

Or create a docker-compose.yml manually:

services:
  quota-tracker:
    image: avianage/quotawatch:latest  # or :v1.0, :v1.1, etc.
    container_name: quota-tracker
    restart: unless-stopped
    environment:
      - SHEET_ID=your_google_sheet_id
      - OAUTH_CLIENT_ID=your_oauth_client_id.apps.googleusercontent.com
      - API_KEY=your_google_api_key
    ports:
      - "8080:80"  # Change 8080 to any port you prefer

Then start the container:

docker-compose up -d

Open http://localhost:8080 in your browser and click Connect Google.


🐳 Alternative: Docker Run

No compose file? No problem:

docker run -d \
  --name quota-tracker \
  --restart unless-stopped \
  -p 8080:80 \
  -e SHEET_ID=your_sheet_id \
  -e OAUTH_CLIENT_ID=your_client_id \
  -e API_KEY=your_api_key \
  avianage/quotawatch:latest

🏷️ Available Tags

Tag Description
latest Most recent stable build
v1.0 Initial release

🔐 Security

Your credentials are never baked into the image. They are injected at container startup via environment variables. The image you pull from Docker Hub contains no API keys — every user runs it with their own credentials.


📁 Project Structure

QuotaWatch/
├── html/
│   ├── index.html              # The dashboard app
│   ├── config.js               # Auto-generated at runtime (do NOT commit)
│   └── config.example.js       # Template for local development
├── Dockerfile                  # Container definition
├── entrypoint.sh               # Injects env vars into config.js on startup
├── docker-compose.example.yml  # Ready-to-use compose template
├── .env.example                # Credential template
└── .gitignore / .dockerignore

🛠️ Developer Guide

See DOCKER.md for instructions on rebuilding and pushing updates to your registry.


Licensed under the MIT License

About

It's a dead-simple, self-hosted dashboard that visualizes all your AI quotas across every tool and every account, all in one place, backed by a Google Sheet you already own. No subscriptions. No third-party services. Just clarity.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages