https://github.com/rishanreddy/offline_scouting_manager
A Flask-based application for managing offline scouting data and operations for robotics outreach teams
https://github.com/rishanreddy/offline_scouting_manager
frc ftc robotics software
Last synced: 4 months ago
JSON representation
A Flask-based application for managing offline scouting data and operations for robotics outreach teams
- Host: GitHub
- URL: https://github.com/rishanreddy/offline_scouting_manager
- Owner: rishanreddy
- License: mit
- Created: 2025-12-10T23:04:29.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-02-23T06:12:50.000Z (4 months ago)
- Last Synced: 2026-02-23T12:18:00.494Z (4 months ago)
- Topics: frc, ftc, robotics, software
- Language: Python
- Homepage:
- Size: 9.08 MB
- Stars: 0
- Watchers: 0
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Offline Scouting Manager
A practical, offline-first scouting app for FRC/FTC teams.
Built for real match days where Wi-Fi is unreliable and speed matters.
---
## What this software does
Offline Scouting Manager helps a scouting crew collect match observations on multiple devices, sync them with CSV, and review combined data in one place.
No cloud account required. No internet requirement during operation.
### Core features
- Custom SurveyJS scouting forms with validation
- Fast local data capture to CSV
- USB-friendly export/import across devices
- Team-level analysis and charts
- Setup wizard for event + form configuration
---
## Downloads
- Latest release: https://github.com/rishanreddy/Offline_Scouting_Manager/releases/latest
- All releases: https://github.com/rishanreddy/Offline_Scouting_Manager/releases
Notes on counters:
- `Total Downloads` = all GitHub release asset downloads over time
- `Latest Downloads` = downloads for only the most recent release
---
## Quick start
### Run from executable
1. Download your platform build from Releases.
2. Launch the app.
3. Open `http://127.0.0.1:8080` (the app also auto-opens browser on startup).
### Run from source
```bash
# macOS / Linux
./scripts/setup.sh
# Windows
scripts\setup.bat
```
Manual path:
```bash
uv sync
# Production mode
uv run main.py
# Development mode
uv run main.py --dev
# LAN mode
uv run main.py --lan
# Custom host/port
uv run main.py --host 0.0.0.0 --port 8080
```
---
## Match-day workflow
```text
Scout devices collect data -> each exports CSV -> one laptop imports all CSVs -> combined analysis
```
Typical flow:
1. Scouts submit forms during matches.
2. Each device stores local records in `data/scouting_data.csv`.
3. One device imports CSVs from all scouts.
4. Drive picklist and strategy discussions from combined data.
---
## Architecture snapshot
Built for **FTC/FRC scouting teams** operating in bandwidth-constrained environments. Collect match observations across multiple devices, synchronize via USB, and analyze aggregate performance—all without touching the cloud.
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Scout A │ │ Scout B │ │ Scout C │
│ Device │ │ Device │ │ Device │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
│ Export CSV │ Export CSV │ Export CSV
└────────────────────┼────────────────────┘
│
┌───────▼────────┐
│ Analysis Hub │
│ (Import All) │
└────────────────┘
│
Unified Dataset → Insights
```
### Stack
| Layer | Tech |
| --------------- | ------------------------------- |
| Backend | Python 3.12+, Flask, Waitress |
| Frontend | Jinja2, Bootstrap 5, vanilla JS |
| Forms | SurveyJS |
| Storage | CSV + YAML + JSON |
| Packaging | PyInstaller |
| Package manager | uv |
---
## Build
```bash
# macOS / Linux
./scripts/build_executable.sh
# Windows
scripts\build_executable.bat
```
Artifacts are generated in `dist/`.
---
## Configuration
Use `/setup` on first run (or `/settings` later) to configure:
- Event name + season
- Device identity
- Survey schema
- Analysis graph fields
Required schema fields used by the app:
- `team`
- `auto_score`
- `teleop_score`
---
## Development
Manual validation loop:
1. `uv run main.py --dev`
2. Exercise affected pages
3. Check `logs/app.log`
4. Validate CSV import/export
5. Re-check analysis pages
---
Built by a team that has had scouting break at events and decided not to let that happen again.