A Streamlit dashboard for monitoring JKT48 Global Exclusive event availability, sales progress, revenue capture, and shareable member/session reports.
This project is built as an operational tracker: it polls public event data, falls back to local snapshots when upstream access is unavailable, and provides an admin-only capture workflow for sharing selected dashboard or statistics views.
- Live JKT48 Global Exclusive event and session monitoring.
- Category, event, member search, date, and availability filters.
- Event-level totals: total tickets, sold, remaining, sold rate, captured revenue, and potential revenue.
- Member, generation, and team ranking statistics.
- Responsive statistics dialog with compact mobile member cards.
- Admin-only image capture for dashboard cards and statistics rankings.
- Waiting Room mitigation support through temporary Cloudflare cookie input.
- Local runtime cache and bundled fallback snapshots for upstream interruptions.
- Python
- Streamlit
curl-cffiwith browser impersonation fallbackrequests- Vanilla HTML/CSS/JavaScript inside Streamlit components
- Python
unittest
.
|-- app.py # Streamlit entry point
|-- core/
| |-- api.py # JKT48 API access, cache, fallback, Waiting Room handling
| |-- refresh.py # Refresh interval and sales-window helpers
| `-- stats.py # Ticket, revenue, grouping, and ranking calculations
|-- data/
| |-- member_metadata.csv # Member generation/team metadata
| `-- fallback/ # Bundled event detail snapshots
|-- ui/
| |-- components.py # Dashboard cards, share controls, statistics dialog
| |-- styles.py # Streamlit CSS shell
| `-- tokens.css # Design tokens
|-- assets/ # SVG assets
|-- tests/ # Unit tests
`-- requirements.txt
- Create and activate a virtual environment.
python -m venv .venv
.venv\Scripts\activate- Install dependencies.
pip install -r requirements.txt- Add local Streamlit secrets.
Create .streamlit/secrets.toml:
ADMIN_KEYS = ["replace-with-your-local-admin-key"]- Run the app.
streamlit run app.pyOpen the admin view with:
http://localhost:8501/?akses=replace-with-your-local-admin-key
JKT48_COOKIE
Use this only when Cloudflare Waiting Room mitigation is required. The app also provides an admin-only dialog to set a temporary runtime cookie without storing it in the repository.
Run all tests:
python -m unittest discover -s tests -vRun a quick syntax check:
python -m compileall app.py core ui tests- Configure
ADMIN_KEYSin the deployment secret manager, not in the repository. - Keep
.streamlit/secrets.tomllocal only. - Ensure
data/member_metadata.csvis updated when member generation or team data changes. - The app can continue showing cached or fallback data when the live upstream API is blocked or unavailable.
- Admin share/capture features depend on browser clipboard support.
This is an unofficial community dashboard and is not affiliated with JKT48 or its official operators. Data availability depends on upstream public endpoints and local fallback snapshots.