Know if your model breaks before it goes live.
Built on Frameworm + MiroFish. Friendly SaaS — Stripe payments, Payoneer payouts, full PDF reports.
| File | Purpose |
|---|---|
index.html |
Landing page with live MiroFish swarm demo |
signin.html |
Sign in page |
signup.html |
Sign up + plan selection |
dashboard.html |
Main app dashboard |
simulate.html |
Run a simulation + see results |
reports.html |
All simulation reports |
account.html |
Profile, billing, alerts |
pricing.html |
Pricing page |
success.html |
Post-payment confirmation |
css/style.css |
Full design system |
js/main.js |
Auth, API calls, swarm engine |
| File | Purpose |
|---|---|
main.py |
FastAPI app entry point |
database.py |
SQLite setup — users, models, simulations, payments |
config.py |
All environment variables |
routes/auth.py |
Register, login, JWT tokens |
routes/models.py |
CRUD for user models + file upload |
routes/simulations.py |
Run simulations, check status, download reports |
routes/payments.py |
Stripe checkout sessions + billing portal |
routes/webhooks.py |
Stripe webhook handler |
services/simulator.py |
Core Frameworm + MiroFish pipeline |
services/pdf_generator.py |
Professional PDF report generation |
services/alerts.py |
Slack + email notifications |
cd backend
cp .env.example .env
# Edit .env and fill in your keys (see below)pip install -r requirements.txtuvicorn main:app --reload --port 8000Open http://localhost:8000 — you'll see the landing page.
Edit backend/.env:
SECRET_KEY=your-random-string # Generate: python -c "import secrets; print(secrets.token_hex(32))"
STRIPE_SECRET_KEY=sk_test_... # From https://dashboard.stripe.com/apikeys
STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_... # From Stripe CLI or dashboard
FRONTEND_URL=http://localhost:8000
- Go to https://dashboard.stripe.com/products
- Create two products:
- PreDeploy Pro — $19/mo recurring → copy price ID to
STRIPE_PRICE_PRO_MONTHLY - PreDeploy Team — $79/mo recurring → copy price ID to
STRIPE_PRICE_TEAM_MONTHLY
- PreDeploy Pro — $19/mo recurring → copy price ID to
- For webhooks: run
stripe listen --forward-to localhost:8000/api/webhooks/stripeduring development - Copy the webhook secret to
STRIPE_WEBHOOK_SECRET
SMTP_USER=your@gmail.com
SMTP_PASS=your-app-password # Gmail app password from https://myaccount.google.com/apppasswords
SLACK_WEBHOOK_URL=https://hooks... # From Slack incoming webhooks app
- In Stripe Dashboard → Settings → Payouts → Add bank account
- Use your Payoneer USD virtual account routing/account numbers
- Set payout schedule to monthly to minimize fees
- Net take-home after fees: ~93% of revenue (Stripe 2.9% + Payoneer ~4%)
At $1,332 MRR (month 12 realistic): ≈ Rs 3.4 lakh/month net after fees.
cd frontend
npx vercel --prod
# Set FRONTEND_URL in backend .env to your Vercel URL# In Railway dashboard: New project → Deploy from GitHub
# Add environment variables from .env
# Railway auto-detects Python and runs uvicornOr use Render (free tier available):
# render.yaml already configured — connect your GitHub repoIn backend/services/simulator.py, replace the mock section with:
from frameworm.agent import FramewormAgent
from frameworm.shift import ShiftMonitor
from frameworm.cost import CostTracker
agent = FramewormAgent(model_path)
results = agent.analyze(swarm_size=swarm_size)
failure_rate = results.failure_rate
drift_score = results.drift_score| Plan | Price | Agents | Reports | Models |
|---|---|---|---|---|
| Free | $0 | 1,000 | 1/month | 1 |
| Pro | $19/mo | 10,000 | Unlimited | 5 |
| Team | $79/mo | 100,000 | Unlimited | 10 |
| One-time | $49 | 10,000 | 1 report | — |