Applause. Consulting

Case study

Sweet TEA.

You can't file a support ticket with the state, so we built the fixes ourselves: the parts of TEA's apps that eat your staff's time, patched entirely in the browser. Nothing on TEA's side changes.

Product
Sweet TEA — browser extension
Scope
Extension, district data, store packaging and review
Stack
Manifest V3 · vanilla JS · Chrome + Firefox from one codebase
Audience
Texas school and service-center staff living in TEA web apps

What it's like to work in TEA's software

If you handle business for a Texas school district or education service center, a big chunk of your day happens inside web apps like TEAL, eGrants, EMAT, and Grant Opportunities. And those apps add time and effort to work that should be simple. eGrants demands a six-digit county-district number but offers no way to look it up. EMAT's district picker has an old bug: you pick a district, the page reloads, and it shows you the district you were just looking at. TEAL logs you out after nineteen minutes of inactivity, and when it does, it closes every TEA app you had open along with it.

The people who live with these frustrations can't fix them. The software belongs to the state, the state decides when it changes, and the browser is the one place left where a user can do something about it.

eGrants with 'we' typed into the CDN box and a dropdown of ten matching districts, each with its CDN number
This is the eGrants county-district number field after Sweet TEA turns it into a search box. Here, two letters are enough to pull up ten matching districts.

What we built

Sweet TEA is a Manifest V3 extension that only wakes up on two domains: tea.state.tx.us and tea.texas.gov. On every other site, it does exactly nothing. The Chrome and Firefox builds come from the same codebase. On TEA's pages, Sweet TEA adds five things: district search by name in eGrants, a working district switcher in EMAT that actually loads the district you picked, a Copy Link to Grant button on Grant Opportunities pages, a Super PDF button on Summary of Finances runs, and an optional hold on your TEAL session with a countdown you can watch.

All five live on top of pages TEA owns. The extension only submits what you could have submitted by hand, never reads your credentials, and Applause doesn't run a server for it—so your data isn't sitting on our side, either.

The EMAT district bug, and why the obvious fix wasn't enough

EMAT runs on PeopleSoft. When you pick a district from the list, EMAT calls its own submitAction routine.

That routine prefers an AJAX partial postback, and in this case the partial postback forgets to send along the field that holds the district you just picked. The server comes back showing the old district, like nothing happened. Copying the click exactly just reproduces the bug.

So instead, Sweet TEA sends the same action as a plain, full-page form submission—the exact request EMAT meant to send, just delivered the way EMAT's own code no longer delivers it. We tested the fix on the live site, switching districts in both directions from a fresh page load. The switcher also asks EMAT's own lookup for its district list at runtime, rather than reading from the district file bundled with the extension, because EMAT only accepts districts the signed-in account is allowed to see. A service-center login can only view its own region, for example. Pulling the list from EMAT means it always matches the user, and never offers a district that would fail on submit.

The EMAT District Start Page with Sweet TEA's district switcher open, listing districts by CDN and name, and a 'Currently Displayed' label beside the box
The switcher and the "Currently Displayed" label are Sweet TEA; the rest of this screenshot is EMAT. This is a demonstration account, so the district names are made up.

Keeping the session alive, carefully

TEAL's idle logout runs in your browser, not on their server. It uses a jQuery idle timer bound to the document, counts down nineteen minutes, and then sends you to the logout page. Pinging the server doesn't reset it, because the timer isn't there.

Sweet TEA resets that timer by creating synthetic activity on the page, and it also keeps the server-side session active. But holding a session open is less secure than TEA's default, so Sweet TEA is designed to make it unlikely that you'll leave the feature on by accident. It's off by default, and to turn it on, you have to acknowledge the tradeoff once, in writing. A Chrome Web Store reviewer will reasonably ask how an extension that bypasses a government portal's session timeout prevents abuse; Sweet TEA's answer is that the user chose it, it has a time limit, and it is visible.

Those three limits—user choice, a time limit, and visibility—were chosen on purpose. Even after you turn it on, the session hold always ends after 30 minutes, after 2 hours, or when the last TEA tab closes. There's no setting to keep it on forever, and if you walk away from your computer, TEAL goes back to its normal timeout. An optional badge shows two times: when TEAL would sign you out, and when Sweet TEA will stop holding the session.

Super PDF, no server required

Howard's SOF Downloader combines a full Summary of Finances run into one PDF, with working drill-down links and bookmarks. The people who want that PDF are usually already on TEA's Summary of Finances page, so Sweet TEA adds a Super PDF button under each run right there.

Instead of building the PDF on TEA's page, the Super PDF button opens Howard's SOF Downloader in a new tab with the district, year, and run already filled in. That meant no new API, no new browser permission, and no new install warning. The Chrome Web Store review stays simple, and the extension still has no server.

The only data sent is three numbers TEA already publishes publicly without a login, and it's only sent when you click the button. After you press Submit, TEA removes its year and district pickers, so Sweet TEA reads those values from the summary header. Sorting changes the table rows in place, so Sweet TEA builds each link from its own row, and because a nearby TEA report shows an identical table, the button checks which report is on the page before it appears.

The plumbing

TEA uses two separate root domains that share only the agency's name, so before Sweet TEA shows anything, its routing has to identify which TEA app is on the page. The grant links come from a public spreadsheet that is kept up to date, and that data is cached in the browser with a short TTL so a slow fetch never delays the button. Each host permission has a written justification for the store review, the privacy policy describes what the extension actually does, and Applause keeps notes on what will break when the state next redesigns its sites—which we expect will happen.

The Sweet TEA page lists the features and has screenshots. You can get it from the Chrome Web Store, and it also runs in Firefox from the same source code.

Start your project

Not affiliated with, or endorsed by, the Texas Education Agency. TEA, TEAL, eGrants and EMAT are names of Texas Education Agency systems.