Skip to content
Sri
All work

610 Scouting App 2026

The Android app our six scouts use to record every robot in a match. It works offline and syncs across the team's tablets.

One of the main developers on a shared team codebase · 2026

Proprietary repo
The Auto scouting screen in dark mode: fuel scored and fed counters, an L1 hang selector, and the field image

Overview

The match scouting app FRC Team 610 used for the 2026 season. Scouts run it on Android tablets during qualification matches; each one follows a single robot and records its autonomous routine, teleop scoring, and endgame.

Every tablet writes to its own local database and syncs with the others through Couchbase Sync Gateway. The same app then turns that data into the views the strategy side uses during an event: per-team stats, sortable averages with a Day 1 / Day 2 split, box plots, match planning tools, scout coverage, and a picklist board for alliance selection.

Problem

Every qualification match has six robots on the field, and by alliance selection the team needs trustworthy data on all of them. That data has to be entered quickly by scouts watching a live match, it has to keep flowing without depending on whatever connection a venue offers, and it has to be usable during the event rather than after it.

What I did

  • Strategy tools: the third-robot selector, multi-team comparison and match review, and the match planning view.
  • Robot betting, a match-prediction game for scouts stored as its own document type in Couchbase.
  • Expert (pit) scouting with robot photos stored in the database and rendered on the stats pages.
  • Correcting submitted data: picking a match that already has a record loads it for editing and re-submission, plus a way to clear a bad record.
  • Workflow changes from scout feedback: highlighting a scout's assigned matches and teams, a reworked match selector, a flipped-field option for autos, and an emergency scout button.
  • The web build's layout (a vertical navigation rail, typography, and spacing), its Vercel deployment, and a rewrite of the project documentation for future developers.

Built with

  • TypeScript
  • React Native
  • Expo
  • Couchbase Lite
  • Sync Gateway
  • NativeWind
  • The Blue Alliance API

Architecture

Expo and React Native with file-based routing through Expo Router. Screens are grouped into tabs; the match flow is its own set of routes that share a single scouting-data object instead of passing props through five screens.

A service layer sits between the UI and the database: couchbase.ts handles initialization, replication, and document reads and writes; aggregateData.ts recomputes a team's rollups whenever a match for that team is submitted; matchPlanningUtils.ts holds the climb estimates and role generation used by match planning.

Couchbase Lite is a native module, so the Android app runs as an Expo development build rather than in Expo Go. For the web build, a couchbase.web.ts file, which Metro picks over couchbase.ts on web, talks to Sync Gateway's REST API with stale-while-revalidate caching.

The navigation adapts to the platform: a bottom tab bar on Android tablets, a resizable sidebar on wide web screens.

The app runs on 8-inch Amazon Fire HD tablets, so the interface was tuned for a small screen. Twelve scouts, paired one junior with one senior, work short shifts of six to eight matches, each watching a single robot.

  1. 01

    Scout tablets

    Six Android tablets, one robot each

  2. 02

    Couchbase Lite

    Local write, works offline

  3. 03

    The Toaster

    Network switch and LTE router, wired or wireless

  4. 04

    Sync Gateway

    Push and pull replication to every tablet

  5. 05

    Analysis tabs

    Stats, averages, box plots, picklist

The Blue Alliance API: Teams, schedules, rankings

How a match gets from a scout's tablet to the strategy team

The challenges

A network the team brings with it

Scouts can always submit because every write lands in the local database first. To keep tablets syncing, the team built the Toaster: a desktop network switch and a cellular LTE router in one box, powered from a wall outlet or a 12V FRC battery through an inverter. Tablets sync wirelessly or plug in over Ethernet, and the replicator pushes and pulls in the background on a 30-second heartbeat.

Fixing data after it's submitted

Scouts make mistakes mid-match. Rather than letting a second submission create a duplicate record, selecting an already-scouted match loads the existing document so it can be corrected and saved again.

Photos across devices

Robot photos from pit scouting are stored with the scouting documents so they replicate like any other data. Getting them to show up reliably on other devices, not just the one that took them, took several rounds of fixes, including a database authentication bug.

One codebase, two platforms

The same code ships as a native Android app and a web build. Platform-specific files keep the database layer separate while the screens stay shared.

Screenshots

The scout home screen in dark mode with the 610 logo, scout name, and match and team pickers
Starting a scouting session.
The Auto scouting screen in light mode with counters filled in
The same screen in light mode.
The Teleop screen in dark mode: tap counters for fuel scored, passes, plowed and fed, plus bump and trench crossings
Teleop: big tap counters scouts use during a match.
The Leaderboards table with Day 2 mode on, showing each team's averages and a trend column of risers and fallers in green and red
Averages with Day 2 on: green and red trend values show who is rising or falling (sample data).
Team Stats and Analytics for one team: auto, teleop and endgame points per game, fuel statistics and climb accuracy
One team's stats (sample data).
A match performance log listing each scouted match with auto, teleop and endgame results and defense flags
Every scouted match for a team (sample data).
Strategy Tools comparing two teams side by side, with the better value in each row highlighted in green
Comparing two teams head to head (sample data).