Skip to content

Janus5G/plusbet

Repository files navigation

PlusBet

PlusBet mockup showing value picks, bankroll, stats and leaderboard

PlusBet is a Streamlit-based sports betting analysis app built for the Danish market. It combines odds aggregation, value detection, news context, bankroll tracking, saved picks, leaderboard mechanics, Google sign-in, and Stripe-based premium flows.

This repository is the main PlusBet app. The Stripe webhook/backend can live in a separate repository such as plusbet-webhook.

Current recommended deployment model

Private GitHub repository
  -> Public Streamlit Community Cloud app
  -> plusbet.dk handles brand, content and Stripe entry points
  -> Optional separate webhook/backend service for subscription status

That setup gives you:

  • private source code on GitHub
  • a public app URL for Streamlit Community Cloud
  • Stripe subscription handling from plusbet.dk
  • a cleaner split between frontend app and backend subscription logic

Product overview

PlusBet is designed to make betting signals easier to understand and easier to act on.

Core capabilities

  • value picks based on weighted bookmaker probabilities
  • odds, edge, and implied probability breakdowns
  • news and injury context around events
  • bankroll tracking and portfolio management
  • saved picks and settled pick statistics
  • Top 10 / leaderboard direction
  • Google login via Streamlit OIDC
  • Stripe-powered premium flows
  • webhook/backend support for secure subscription state
  • athlete-first search and broader sports matching
  • local embedded reference data for athlete and source hints

Repository structure

plusbet/
├─ .github/
│  └─ FUNDING.yml
├─ .streamlit/
│  └─ config.toml
├─ docs/
│  └─ sponsor.html
├─ app.py
├─ CHANGELOG.md
├─ DEPLOY_NOTES.txt
├─ LICENSE
├─ README.md
├─ SETUP_GUIDE.md
├─ plusbet_mockup_readme.svg
├─ plusbet_stripe_webhook.py
├─ railway.env.example
├─ requirements.txt
├─ streamlit_secrets.example.toml
└─ webhook_env_example.txt

Architecture

User
 ├─ plusbet.dk
 │   ├─ marketing / landing pages
 │   ├─ Stripe checkout entry points
 │   └─ links into the Streamlit app
 │
 ├─ Streamlit app
 │   ├─ UI and betting workflows
 │   ├─ Google login
 │   ├─ odds / news / OpenAI integrations
 │   ├─ bankroll and portfolio features
 │   └─ premium status checks
 │
 └─ Webhook/backend service
     ├─ receives Stripe webhook events
     ├─ verifies signatures
     ├─ stores subscription state
     └─ exposes subscription status endpoint

Tech stack

  • Python
  • Streamlit
  • Pandas
  • Requests
  • Altair
  • OpenAI API
  • Odds API
  • News API
  • Stripe
  • SQLite in the current build
  • FastAPI for the webhook service

Quick start

1. Install dependencies

pip install -r requirements.txt

2. Create local secrets

mkdir -p .streamlit
cp streamlit_secrets.example.toml .streamlit/secrets.toml

Fill in the required secrets before running the app.

3. Run locally

streamlit run app.py

Streamlit deployment

This repository is suited for:

  • private GitHub repo
  • public Streamlit app

The app can still read from a private repo during deployment, while the deployed Streamlit URL stays public.

Recommended production split

  • plusbet -> main app repo
  • plusbet-webhook -> webhook/backend repo

Secrets and sensitive data

Do not commit real secrets or production databases.

Keep these out of Git:

  • .streamlit/secrets.toml
  • Stripe secret keys
  • OAuth client secrets
  • webhook secrets
  • local databases
  • any premium-user or internal export files

Use:

  • Streamlit Secrets for app configuration
  • Railway or your backend host for webhook environment variables
  • a managed database later if the product grows beyond SQLite

Important product notes

Public app vs private code

This setup keeps the code private while allowing the app itself to be public. That means users can open the Streamlit app, but they cannot browse the GitHub source repository.

Stripe and premium access

Stripe can continue to be handled from plusbet.dk. The Streamlit app can read premium status from a webhook/backend endpoint or from allow-listed emails during development.

Leaderboard / Top 10

Top 10 is based on internal PlusBet saved picks and settled outcomes. It is a product feature, not proof that a bet was placed externally.

Data storage

SQLite is good for local testing and early deployment, but a more durable hosted database is recommended for larger scale, shared user data, or production-grade subscription logic.

Included support files

  • SETUP_GUIDE.md -> deployment and configuration guide
  • DEPLOY_NOTES.txt -> shorter operational notes
  • streamlit_secrets.example.toml -> example Streamlit secrets
  • railway.env.example -> example backend env vars
  • webhook_env_example.txt -> simplified webhook env example

License

This repository is provided under a proprietary, all-rights-reserved license unless you explicitly replace it with an open-source license.

See LICENSE for the exact terms.

Releases

No releases published

Packages

 
 
 

Contributors

Languages