{"id":29535350,"url":"https://github.com/e1washere/website-uptime-saas","last_synced_at":"2025-07-17T01:37:13.045Z","repository":{"id":304397929,"uuid":"1016951876","full_name":"e1washere/website-uptime-saas","owner":"e1washere","description":"Simple website uptime monitoring SaaS. Get instant email alerts when your sites go down. Built with Flask, Stripe, and SQLite. ","archived":false,"fork":false,"pushed_at":"2025-07-12T19:48:31.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-12T21:29:07.341Z","etag":null,"topics":["flask","saas","uptime-monitoring","website-monitoring"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/e1washere.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-09T19:33:03.000Z","updated_at":"2025-07-12T19:48:35.000Z","dependencies_parsed_at":"2025-07-12T21:39:15.915Z","dependency_job_id":null,"html_url":"https://github.com/e1washere/website-uptime-saas","commit_stats":null,"previous_names":["e1washere/website-uptime-saas"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/e1washere/website-uptime-saas","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e1washere%2Fwebsite-uptime-saas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e1washere%2Fwebsite-uptime-saas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e1washere%2Fwebsite-uptime-saas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e1washere%2Fwebsite-uptime-saas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/e1washere","download_url":"https://codeload.github.com/e1washere/website-uptime-saas/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e1washere%2Fwebsite-uptime-saas/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265558808,"owners_count":23787981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","saas","uptime-monitoring","website-monitoring"],"created_at":"2025-07-17T01:37:10.933Z","updated_at":"2025-07-17T01:37:13.040Z","avatar_url":"https://github.com/e1washere.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Website Uptime Monitoring SaaS\n\n[![License](https://img.shields.io/github/license/e1washere/website-uptime-saas)](LICENSE)\n[![Laravel](https://img.shields.io/badge/Laravel-10.x-red.svg)](https://laravel.com/)\n[![PHP Version](https://img.shields.io/badge/PHP-%3E%3D8.1-blue)](https://www.php.net/)\n[![Last Commit](https://img.shields.io/github/last-commit/e1washere/website-uptime-saas)](https://github.com/e1washere/website-uptime-saas/commits/main)\n[![Issues](https://img.shields.io/github/issues/e1washere/website-uptime-saas)](https://github.com/e1washere/website-uptime-saas/issues)\n[![Stars](https://img.shields.io/github/stars/e1washere/website-uptime-saas)](https://github.com/e1washere/website-uptime-saas/stargazers)\n\nA Flask-based SaaS application for monitoring website uptime with email notifications and Stripe payment integration.\n\n## Features\n\n- 🔐 User registration and authentication\n- 📊 Monitor up to 3 websites per user\n- ⏱️ Automatic checks every 5 minutes\n- 📧 Email notifications when sites go down\n- 💳 Stripe integration for monthly subscriptions ($5/month)\n- 🎁 7-day free trial (no credit card required)\n- 🎨 Clean, responsive UI with Bootstrap\n\n## Prerequisites\n\n- Python 3.8 or higher\n- Gmail account for sending emails\n- Stripe account for payment processing\n\n## Installation\n\n1. Clone the repository:\n```bash\ngit clone \u003cyour-repo-url\u003e\ncd website-uptime-saas\n```\n\n2. Create a virtual environment:\n```bash\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n```\n\n3. Install dependencies:\n```bash\npip install -r requirements.txt\n```\n\n4. Set up environment variables:\n```bash\ncp env.example .env\n# Edit .env with your actual values\n```\n\n5. Run the application:\n```bash\npython app.py\n```\n\nThe app will be available at `http://localhost:5000`\n\n## Configuration\n\n### Gmail SMTP Setup\n\n1. Enable 2-factor authentication on your Gmail account\n2. Generate an app-specific password:\n   - Go to https://myaccount.google.com/apppasswords\n   - Select \"Mail\" and your device\n   - Copy the generated password\n3. Update `.env`:\n   ```\n   MAIL_USERNAME=your-email@gmail.com\n   MAIL_PASSWORD=your-16-character-app-password\n   ```\n\n### Stripe Setup\n\n1. Create a Stripe account at https://stripe.com\n2. Get your API keys from the [Stripe Dashboard](https://dashboard.stripe.com/apikeys)\n3. Create a product and price:\n   - Go to Products in your Stripe Dashboard\n   - Create a new product (e.g., \"Website Monitoring\")\n   - Add a recurring price of $5/month\n   - Copy the price ID (starts with `price_`)\n4. Update `.env`:\n   ```\n   STRIPE_PUBLISHABLE_KEY=pk_test_...\n   STRIPE_SECRET_KEY=sk_test_...\n   STRIPE_PRICE_ID=price_...\n   ```\n5. Set up webhook (for production):\n   - Add webhook endpoint: `https://yourdomain.com/stripe-webhook`\n   - Select events: `customer.subscription.deleted`, `customer.subscription.updated`\n   - Copy the signing secret to `STRIPE_WEBHOOK_SECRET`\n\n## Deployment\n\n### Option 1: Deploy to Railway.app (Recommended)\n\n1. Install Railway CLI:\n```bash\nnpm install -g @railway/cli\n```\n\n2. Login and initialize:\n```bash\nrailway login\nrailway init\n```\n\n3. Add environment variables:\n```bash\nrailway variables set SECRET_KEY=\"your-secret-key\"\nrailway variables set MAIL_USERNAME=\"your-email@gmail.com\"\nrailway variables set MAIL_PASSWORD=\"your-app-password\"\n# Add all other variables from .env\n```\n\n4. Deploy:\n```bash\nrailway up\n```\n\n### Option 2: Deploy to Render.com\n\n1. Create a new Web Service on Render\n2. Connect your GitHub repository\n3. Configure:\n   - Build Command: `pip install -r requirements.txt`\n   - Start Command: `gunicorn app:app`\n4. Add environment variables in the Render dashboard\n5. Deploy!\n\n### Option 3: Deploy to Heroku\n\n1. Create `Procfile`:\n```\nweb: gunicorn app:app\n```\n\n2. Initialize Heroku app:\n```bash\nheroku create your-app-name\nheroku config:set SECRET_KEY=\"your-secret-key\"\n# Set all other environment variables\n```\n\n3. Deploy:\n```bash\ngit push heroku main\n```\n\n## Database Management\n\nThe app uses SQLite for simplicity. The database file (`uptime_monitor.db`) is created automatically on first run.\n\nFor production, consider migrating to PostgreSQL:\n1. Update `SQLALCHEMY_DATABASE_URI` in app.py\n2. Install `psycopg2-binary` package\n3. Update your deployment platform's database configuration\n\n## Testing Stripe Integration\n\nUse Stripe's test card numbers:\n- Success: `4242 4242 4242 4242`\n- Decline: `4000 0000 0000 0002`\n\nTest webhooks locally using Stripe CLI:\n```bash\nstripe listen --forward-to localhost:5000/stripe-webhook\n```\n\n## Troubleshooting\n\n### Email not sending?\n- Ensure 2FA is enabled on Gmail\n- Check app password is correct\n- Verify \"Less secure app access\" is not blocking (use app passwords instead)\n\n### Stripe not working?\n- Verify you're using the correct API keys (test vs live)\n- Check the price ID matches your Stripe product\n- Ensure webhook secret is set correctly\n\n### Background tasks not running?\n- Check APScheduler is installed\n- Verify no errors in console logs\n- Ensure the scheduler is started (check app.py)\n\n## Security Considerations\n\n1. **Never commit `.env` file** - It's in `.gitignore` for a reason\n2. **Use strong SECRET_KEY** - Generate with: `python -c \"import secrets; print(secrets.token_hex(32))\"`\n3. **Enable HTTPS in production** - Required for Stripe\n4. **Validate user input** - Current implementation has basic validation\n5. **Rate limit API endpoints** - Consider adding Flask-Limiter for production\n\n## Future Enhancements\n\n- Multiple check locations\n- SMS notifications\n- Uptime statistics and graphs\n- Custom check intervals\n- API access\n- Team accounts\n- Status pages\n\n## License\n\nMIT License - See LICENSE file for details\n\n## Support\n\nFor issues or questions, please open a GitHub issue or contact support. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fe1washere%2Fwebsite-uptime-saas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fe1washere%2Fwebsite-uptime-saas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fe1washere%2Fwebsite-uptime-saas/lists"}