A Chrome / Edge browser extension that helps SNAP caseworkers ("SSRs") catch missing evidence on Curam cases — places where a missing piece of evidence might accidentally leave someone off a SNAP case. Originally built to reduce the "Household Composition" error category.
⚠ Research tool — not production-ready. This codebase was built as a research probe for fast iteration with a small, trusted group of caseworkers. It makes deliberate trade-offs that prioritize speed, cost, and freedom from backend dependencies over the guarantees a production deployment would require: synchronous DOM scraping of Curam pages, telemetry stored only in browser-local storage, distribution via OneDrive + Developer Mode "load unpacked," no build system or tests, and a noncommercial license. Each of these is documented — with the production path we would take instead — in docs/adr/. Read the ADRs before adopting this in any environment beyond a pilot.
The extension runs in Google Chrome and Microsoft Edge alongside your Curam instance. It surfaces helpful alerts on three specific evidence pages so caseworkers can catch missing or inconsistent household evidence before submitting a case:
- Income Support – Addresses
- Income Support – Living Arrangements
- Income Support – Meal Group Members
-
The extension integrates directly with your Curam instance.
-
Validation runs only on the three designated evidence pages and does not activate on any other website.
-
It cross-references key household composition details from the Household Members evidence with the page being viewed. Results appear in a popup that shows the household-member count and the validation findings.
-
On a Curam page where validation does not apply, the popup shows a "not supported" message:
-
When everything checks out, the popup confirms with a success message (the wording adapts to the page being validated):
- Missing addresses — a household member has no address on this page.
- More than one address — a household member has more than one active private address; all of their addresses are highlighted.
- Missing Living Arrangements — a household member has no living arrangement on this page.
- Different Living Arrangements — a household member has a living arrangement different from the majority of the household; the outliers are highlighted.
- Household Member Not Included — a household member is missing from this meal group.
Every Curam deployment differs, so this extension ships with deployment-specific values that you must review before use. All such values live in a single file: scripts/config.js.
Before loading the extension you must:
- Set
domSelectorPrefixin scripts/config.js. It defaults to the placeholderYOUR_DEPLOYMENT_PREFIXand the extension will not detect tabs until you replace it. Find your prefix by opening DevTools on a case page and inspecting theidattribute of.tabLabelelements — the prefix is the substring that distinguishes Curam tab IDs in your instance. - Verify
evidenceTypesmatch the type IDs your Curam instance uses for household-member, address, living-arrangement, and meal-group evidence. Inspect the network requests on each evidence page to confirm. - Verify
pageTitlesmatch the exact page-title strings your Curam instance shows for the three evidence pages. - Verify
evidenceEndpointmatches the URL path Curam uses to serve evidence lists (the language segment, e.g.en_US, may differ). - Update
content_scripts.matchesin manifest.json to point at your Curam URL pattern(s). The shipped values are examples — adopters must replace them.
The default values committed in config.js and manifest.json are the worked example from the original District of Columbia deployment.
-
Clone or download a zip of this repository.
-
If you downloaded a zip, go to your Downloads Folder, double-click the zip, and select Extract all at the top of the page.
-
In the new pop-up window, click Extract.
-
Open a new tab and navigate to chrome://extensions.
-
Enable Developer Mode by clicking the Developer Mode option on the top right of the page.
-
Complete the steps in Configuration above, then click Load Unpacked on the left side of the page (below the Chrome logo).
-
Double-click the extracted folder and select the main extension folder.
Note: If you are not seeing the extracted folder then you may not have fully extracted the downloaded zip file. Go back to step 2 and make sure all steps are completed.
-
Pin the extension to your toolbar by clicking the puzzle icon on the top right of the browser, then clicking the Pin icon on Curam Evidence Validator.
-
Clone or download a zip of this repository.
-
If you downloaded a zip, go to your Downloads Folder, double-click the zip, and select Extract all at the top of the page.
-
In the new pop-up window, click Extract.
-
Open a new tab and navigate to edge://extensions.
-
Enable Developer Mode by toggling Developer Mode on the bottom left of the page. If you do not see the option then you may need to open the left side menu to expose it.
-
Complete the steps in Configuration above, then click Load Unpacked.
-
Double-click the extracted folder and select the main extension folder.
Note: If you are not seeing the extracted folder then you may not have fully extracted the downloaded zip file. Go back to step 2 and make sure all steps are completed.
-
Pin the extension to your toolbar by opening browser options using the puzzle icon on the top right of the browser and clicking the pin icon next to Curam Evidence Validator.
- Local Storage Usage: The extension uses
chrome.storage.localto track usage data only during pilot phases for analysis. The collected data is used to determine the extension's effectiveness and identify areas for improvement.- Stored Data: The following non-sensitive data is recorded locally in the caseworker's browser:
- Caseworker Name
- Timestamp
- CaseId (a non-PII identifier)
- Page title where validation ran
- Stored Data: The following non-sensitive data is recorded locally in the caseworker's browser:
- Access to the Usage Data: Only the caseworker can access the stored data through the extension options.
- Data Removal: To remove stored data, the caseworker can clear local storage or uninstall the extension.
- Download Usage option — this data cannot be accessed by other websites or extensions.
- Site Restrictions: The extension runs only on the Curam URL patterns configured in manifest.json and does not interact with any other sites.
- No External Communications: The extension does not make any external API calls; all data stays within the local environment.
- No external packages: The extension contains no external packages and uses only vanilla JavaScript and HTML.
This extension was originally built for the District of Columbia. We thank the DC Department of Human Services (DHS), the DC Department of Health Care Finance (DHCF), and the DCAS (District of Columbia Access System) team for their partnership and support during development, testing, and deployment.
This extension was made possible by cross-disciplinary collaboration. Each discipline contributed a critical slice of the project — research grounded the problem, design shaped the interaction, programs anchored the policy context, and solutions engineering built and shipped the tool. None of the slices alone would have produced a usable product; the work depended on each discipline's distinct lens.
Research
- Deirdre Hirschtritt
- Ayobami Laniyonu
Service Design
- Minnar Xie
Programs
- Maria Peñaloza
Solutions Engineering
- Rohan Mathur — Solutions Architect
- Jorge Hernandez — Solutions Architect
This project is licensed under the PolyForm Noncommercial License 1.0.0. Noncommercial use — including use by government agencies, nonprofits, and educational institutions — is permitted; see the license text for details.
Open an issue on GitHub for questions or bug reports.


