Goal#
Produce a working config.json for QRScout (FRC Team 2713, Red Hawk Robotics) that a stand scout can fill in during a REEFSCAPE match, and that encodes everything into one scannable QR code. QRScout runs offline in a browser at https://frc2713.github.io/QRScout/.
The fields you need (from the official REEFSCAPE manual)#
REEFSCAPE robots score Coral (PVC pipe) on four levels and Algae (balls) into the Processor or Net, then climb a Cage. Coral is worth more in AUTO than TELEOP: AUTO L1=3, L2=4, L3=6, L4=7; TELEOP L1=2, L2=3, L3=4, L4=5. Algae in the Net=4, in the Processor=6. Leave (auto)=3, Park=2, shallow Cage=6, deep Cage=12. Because the auto/teleop coral values differ, your form must split coral counters by phase so each can be weighted correctly later.
A minimal config.json#
{
"$schema": "../schema.json",
"title": "2713 Reefscape Scout",
"page_title": "REEFSCAPE Match Scouting",
"delimiter": "\t",
"sections": [
{
"name": "Pre-Match",
"fields": [
{ "title": "Scout Name", "type": "text", "code": "scoutName",
"required": true, "formResetBehavior": "preserve" },
{ "title": "Match #", "type": "number", "code": "matchNumber",
"required": true, "formResetBehavior": "increment" },
{ "title": "Team #", "type": "TBA-team-and-robot", "code": "teamNumber",
"required": true, "formResetBehavior": "reset" }
]
},
{
"name": "Auto",
"fields": [
{ "title": "Left Start Line", "type": "boolean", "code": "autoLeave",
"defaultValue": false, "formResetBehavior": "reset" },
{ "title": "Auto Coral L4", "type": "counter", "code": "autoCoralL4",
"defaultValue": 0, "formResetBehavior": "reset" },
{ "title": "Auto Coral L1", "type": "counter", "code": "autoCoralL1",
"defaultValue": 0, "formResetBehavior": "reset" }
]
},
{
"name": "Teleop",
"fields": [
{ "title": "Teleop Coral L4", "type": "counter", "code": "telCoralL4",
"defaultValue": 0, "formResetBehavior": "reset" },
{ "title": "Algae Processor", "type": "counter", "code": "algaeProc",
"defaultValue": 0, "formResetBehavior": "reset" },
{ "title": "Endgame", "type": "select", "code": "endgame",
"choices": { "none": "None", "park": "Park",
"shallow": "Shallow Cage", "deep": "Deep Cage" },
"defaultValue": "none", "formResetBehavior": "reset" }
]
}
]
}
Key design choices that prevent real errors:
formResetBehavior: "preserve"on Scout Name keeps the scout's name between matches;"increment"on Match # auto-advances;"reset"clears scoring counters every match. These three values are the only ones QRScout accepts.- Use the
TBA-team-and-robotfield type so scouts pick the team from the pre-loaded match schedule (shown as "Team 2713 (Red 1)") instead of typing a 4-digit number, the single biggest source of mislabeled data. - The
delimiteris a tab (\t), so when you scan the QR, the values drop into adjacent spreadsheet cells in one paste.
Test the pipeline before the event#
- Load your config via Upload Config or Load from URL (host it on GitHub Pages:
https://<user>.github.io/<repo>/config.json). - Fill out a fake match, generate the QR, and scan it with a laptop webcam into the QRScout scanner page.
- Confirm the tab-separated row lands correctly in Google Sheets. Verify column order matches your field order exactly.
If anything is off, you fix it at home, not at 8 a.m. on match day.
the part worth keeping
Key takeaways
- QRScout configs are plain JSON: sections contain fields, each with a type, camelCase code, and one of three formResetBehavior values (reset, preserve, increment).
- Use TBA-team-and-robot so scouts select teams from the schedule instead of typing numbers, eliminating the top mislabeling error.
- Always scan a test QR into your live spreadsheet before an event to validate column order and delimiter behavior.
Scouting & StrategyWorked Examples & Mini-Projectslesson 1 of 5
Keep going
Take the quiz+10 XP with an accountwhere this came from
Sources and corrections
This lesson is AI-assisted: drafted from primary sources, then reviewed and edited by hand. Errors still get through. When one is reported we fix it and write down what changed, in public, in the corrections log.
sources and further reading
- github.comQRScout - GitHub (FRC 2713)
- frc2713.github.ioQRScout - live app
- firstfrc.blob.core.windows.net2025 REEFSCAPE Game Manual (HTML)
clipped to this lesson
Articles that go further on this
The lesson gets you through the topic. These go wider on it, and they read in one sitting.
- 13 min readFRC Code Structure Best Practices: Command-Based Project ArchitectureHow to structure an FRC command-based robot project the right way — subsystems, commands, RobotContainer, and Constants — verified against official WPILib docs./blogread it
- 7 min readEvery FRC Game by Year: REBUILT, REEFSCAPE, CRESCENDO, and How to Read a New OneWhat REBUILT, REEFSCAPE, CRESCENDO, and past FRC games actually scored, plus the patterns that help you read a new game manual on kickoff day./blogread it
- 6 min readFRC Scouting Sheet Template: Printable Paper Sheet + Google Form to Sheets SetupA ready-to-print FRC scouting sheet plus a Google Form to Sheets setup that auto-averages one row per scout into per-team stats, with a 2026 REBUILT note./blogread it
answer sheet
Lesson quiz
All 3 right completes the lesson. Miss one and only that question comes back, anything you already answered correctly stays banked.
0 of 3 answered
01In a QRScout config.json, how are the form's inputs organized at the top level?
02Which set of values is valid for a QRScout field's "formResetBehavior" property?
03How can a team deploy a custom REEFSCAPE config to scouts without rebuilding QRScout?
Answer every question to submit.
All 32 lessons in Scouting & Strategyopenclose
01 / prerequisites
02 / scouting-fundamentals
03 / building-a-scouting-system
04 / data-analysis-tba-statbotics
05 / strategy-picklists-and-match-play
06 / worked-examples-and-mini-projects
- Not read yet:Project 1: Configure a QRScout Form for REEFSCAPE
- Not read yet:Project 2: Compute OPR by Hand, Then in a Spreadsheet
- Not read yet:Project 3: Pull Live Data with the TBA and Statbotics APIs
- Not read yet:Project 4: Build an EPA-Component Robot Ranking Sheet
- Not read yet:Project 5: Assemble a One-Page Pre-Match Prep Sheet
07 / common-mistakes-and-troubleshooting
08 / advanced-techniques-and-case-studies