A Chrome extension that makes the Vantage timesheet app easier to use — freeze and hide columns, add task descriptions, and get autocomplete while entering daily activities.
- Frozen columns — Keep key columns like employee name and project code pinned while you scroll horizontally through date columns.
- Hidden columns — Declutter your view by hiding columns you don't need.
- Description lookup column — Add an optional column that displays task descriptions pulled from a CSV file you upload.
- Daily Activity autocomplete — Get suggestions as you type in the Daily Activity field, sourced from your uploaded lookup data.
- Update Timesheet shortcut — On
Timesheet (TIMEI)in theDaily Activitytab, adds anUpdate Timesheetbutton next to the lower three-dot menu so you can trigger the native action in one click. - Automatic pagination upgrade — On grids that expose larger page sizes, the extension automatically selects the highest available visible option above the default 20 rows, including after adding a new row when the grid resets.
- Quarter-hour warnings — Time cells that don't end in
:00,:15,:30, or:45are highlighted with an orange outline, helping you catch accidental decimal-style entries. - Works on both
vantage.utah.govandvantage.access.utah.gov(for non-state networks).
Type-ahead search for tasks based on description:
Warnings for non-quarter-hour time entries:
Install directly from the Chrome Web Store.
The extension icon will appear in your Chrome toolbar. It is only active when you are on the Vantage site.
- Navigate to Vantage at
https://vantage.utah.gov/(orhttps://vantage.access.utah.gov/). - The extension activates automatically — columns are frozen and your saved visibility preferences are applied.
- Click the extension icon in your Chrome toolbar to open the popup, where you can:
- Show or hide individual columns.
- Upload or replace the description lookup CSV.
- On
Timesheet (TIMEI)with theDaily Activitygrid visible, use the addedUpdate Timesheetbutton beside the lower three-dot menu to run the same native update action without opening the menu first. - When a grid shows inline pagination options such as
50or100, the extension automatically switches to the highest enabled option on load and after row additions if the grid falls back to20.
Uploading a CSV file enables the Description column and Daily Activity autocomplete.
- The CSV must include a
Task#(orTask #) column and either aTask NameorVantagecolumn. - Your uploaded data is stored locally in
chrome.storage.local— it stays in your current Chrome profile and is never synced to other devices. - To disable description lookups, clear the uploaded file from the popup.
- Node.js 22.12+
- pnpm (install with
npm install -g pnpmor via other methods)
-
Install dependencies:
pnpm install
-
Start the development server:
pnpm dev
This starts the Vite dev server with HMR via
@crxjs/vite-plugin. Extension files are written todist-devand requirehttp://localhost:5173to remain running. -
Launch the dedicated debug browser:
pnpm chrome:dev
Opens Google Chrome Dev with remote debugging on
http://127.0.0.1:9223. Keep this browser open while using MCP-based browser inspection. -
In the Chrome Dev window, go to
chrome://extensions/, enable Developer mode, and load thedist-devfolder as an unpacked extension. -
Log in to Vantage in that same Chrome Dev window.
-
Reload VS Code after the browser is running so the MCP server in
.vscode/mcp.jsoncan connect.
You can verify the remote debugging endpoint with:
curl http://127.0.0.1:9223/json/versionIf Chrome Dev is already running without the remote debugging flag, macOS may reuse the existing instance and ignore the new launch arguments. Quit Chrome Dev and run
pnpm chrome:devagain.
pnpm buildBundles and minifies the extension into the dist folder. Load dist as an unpacked extension in chrome://extensions/ to test the production build.
The release workflow can publish new versions to the Chrome Web Store after the first manual submission.
- Create a Chrome Web Store developer account and enable 2-step verification.
- Run
pnpm build. - Upload the
distcontents as a new item in the Chrome Web Store dashboard. - Complete the listing, privacy, and distribution sections, then submit so Google assigns a permanent extension ID.
Add these repository secrets to enable automated publishing on release:
CWS_CLIENT_IDCWS_CLIENT_SECRETCWS_REFRESH_TOKENCWS_EXTENSION_ID
If any secret is missing, the release workflow still uploads the built zip to GitHub Releases and skips the Chrome Web Store step.
To generate the OAuth credentials, follow this guide.
Once configured, each published GitHub release will build the extension, zip dist, upload the archive to GitHub Releases, and publish it to the Chrome Web Store.
Releases are managed with agrc/release-composite-action via GitHub Actions using conventional commits.
| Commit type | Release bump |
|---|---|
feat |
minor |
fix |
patch |
docs |
patch |
style |
patch |
deps |
patch |
- Pushes to
devcreate or update prerelease PRs and tags. - Pushes to
maincreate or update stable release PRs and tags. - Merging a release PR publishes the release and uploads the built extension archive.
Use squash merges so the PR title becomes the changelog entry. The workflow automatically bumps the version in package.json and manifest.json — do not edit those files manually to cut a release.


