{"id":47793834,"url":"https://github.com/stdavis/ad-vantage","last_synced_at":"2026-04-11T01:23:28.930Z","repository":{"id":346900552,"uuid":"1192090081","full_name":"stdavis/ad-vantage","owner":"stdavis","description":"A Chrome extension for making Vantage more useable","archived":false,"fork":false,"pushed_at":"2026-03-26T21:12:53.000Z","size":65,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T21:12:58.890Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stdavis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-25T22:07:49.000Z","updated_at":"2026-03-26T21:12:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stdavis/ad-vantage","commit_stats":null,"previous_names":["stdavis/ad-vantage"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/stdavis/ad-vantage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdavis%2Fad-vantage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdavis%2Fad-vantage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdavis%2Fad-vantage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdavis%2Fad-vantage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stdavis","download_url":"https://codeload.github.com/stdavis/ad-vantage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdavis%2Fad-vantage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31362672,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-03T16:01:07.180Z","updated_at":"2026-04-11T01:23:28.919Z","avatar_url":"https://github.com/stdavis.png","language":"TypeScript","readme":"# ad-vantage\n\nA Chrome extension that makes the [Vantage timesheet app](https://vantage.utah.gov/) easier to use — freeze and hide columns, add task descriptions, and get autocomplete while entering daily activities.\n\n## Features\n\n- **Frozen columns** — Keep key columns like employee name and project code pinned while you scroll horizontally through date columns.\n- **Hidden columns** — Declutter your view by hiding columns you don't need.\n- **Description lookup column** — Add an optional column that displays task descriptions pulled from a CSV file you upload.\n- **Daily Activity autocomplete** — Get suggestions as you type in the Daily Activity field, sourced from your uploaded lookup data.\n- **Update Timesheet shortcut** — On `Timesheet (TIMEI)` in the `Daily Activity` tab, adds an `Update Timesheet` button next to the lower three-dot menu so you can trigger the native action in one click.\n- **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.\n- **Quarter-hour warnings** — Time cells that don't end in `:00`, `:15`, `:30`, or `:45` are highlighted with an orange outline, helping you catch accidental decimal-style entries.\n- Works on both `vantage.utah.gov` and `vantage.access.utah.gov` (for non-state networks).\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"popup.png\" alt=\"ad-vantage popup screenshot\" /\u003e\u003c/p\u003e\n\nType-ahead search for tasks based on description:\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"screenshot.png\" alt=\"grid screenshot\" /\u003e\u003c/p\u003e\n\nWarnings for non-quarter-hour time entries:\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"warnings.png\" alt=\"warnings screenshot\" /\u003e\u003c/p\u003e\n\n## Installation\n\nInstall directly from the [Chrome Web Store](https://chromewebstore.google.com/detail/ad-vantage/hhilhapkdkgcgbippfodmdldmlnihkgp).\n\nThe extension icon will appear in your Chrome toolbar. It is only active when you are on the Vantage site.\n\n## Usage\n\n1. **Navigate to Vantage** at `https://vantage.utah.gov/` (or `https://vantage.access.utah.gov/`).\n2. The extension activates automatically — columns are frozen and your saved visibility preferences are applied.\n3. **Click the extension icon** in your Chrome toolbar to open the popup, where you can:\n   - Show or hide individual columns.\n   - Upload or replace the description lookup CSV.\n4. On `Timesheet (TIMEI)` with the `Daily Activity` grid visible, use the added `Update Timesheet` button beside the lower three-dot menu to run the same native update action without opening the menu first.\n5. When a grid shows inline pagination options such as `50` or `100`, the extension automatically switches to the highest enabled option on load and after row additions if the grid falls back to `20`.\n\n### Description Lookup CSV\n\nUploading a CSV file enables the Description column and Daily Activity autocomplete.\n\n- The CSV must include a `Task#` (or `Task #`) column and either a `Task Name` or `Vantage` column.\n- Your uploaded data is stored locally in `chrome.storage.local` — it stays in your current Chrome profile and is never synced to other devices.\n- To disable description lookups, clear the uploaded file from the popup.\n\n---\n\n## Developer Guide\n\n### Prerequisites\n\n- [Node.js](https://nodejs.org/) v18 or higher\n- [pnpm](https://pnpm.io/) (install with `npm install -g pnpm` or via [other methods](https://pnpm.io/installation))\n\n### Local Development\n\n1. **Install dependencies:**\n\n   ```bash\n   pnpm install\n   ```\n\n2. **Start the development server:**\n\n   ```bash\n   pnpm dev\n   ```\n\n   This starts the Vite dev server with HMR via `@crxjs/vite-plugin`. Extension files are written to `dist-dev` and require `http://localhost:5173` to remain running.\n\n3. **Launch the dedicated debug browser:**\n\n   ```bash\n   pnpm chrome:dev\n   ```\n\n   Opens Google Chrome Dev with remote debugging on `http://127.0.0.1:9223`. Keep this browser open while using MCP-based browser inspection.\n\n4. In the Chrome Dev window, go to `chrome://extensions/`, enable **Developer mode**, and load the `dist-dev` folder as an unpacked extension.\n\n5. Log in to Vantage in that same Chrome Dev window.\n\n6. Reload VS Code after the browser is running so the MCP server in `.vscode/mcp.json` can connect.\n\nYou can verify the remote debugging endpoint with:\n\n```bash\ncurl http://127.0.0.1:9223/json/version\n```\n\n\u003e If 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:dev` again.\n\n### Production Build\n\n```bash\npnpm build\n```\n\nBundles and minifies the extension into the `dist` folder. Load `dist` as an unpacked extension in `chrome://extensions/` to test the production build.\n\n### Chrome Web Store\n\nThe release workflow can publish new versions to the Chrome Web Store after the first manual submission.\n\n#### First-Time Store Setup\n\n1. Create a Chrome Web Store developer account and enable 2-step verification.\n2. Run `pnpm build`.\n3. Upload the `dist` contents as a new item in the Chrome Web Store dashboard.\n4. Complete the listing, privacy, and distribution sections, then submit so Google assigns a permanent extension ID.\n\n#### Automated Publishing via GitHub Actions\n\nAdd these repository secrets to enable automated publishing on release:\n\n- `CWS_CLIENT_ID`\n- `CWS_CLIENT_SECRET`\n- `CWS_REFRESH_TOKEN`\n- `CWS_EXTENSION_ID`\n\nIf any secret is missing, the release workflow still uploads the built zip to GitHub Releases and skips the Chrome Web Store step.\n\nTo generate the OAuth credentials, follow [this guide](https://github.com/fregante/chrome-webstore-upload-keys).\n\nOnce 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.\n\n### Releases\n\nReleases are managed with `agrc/release-composite-action` via GitHub Actions using conventional commits.\n\n| Commit type | Release bump |\n| ----------- | ------------ |\n| `feat`      | minor        |\n| `fix`       | patch        |\n| `docs`      | patch        |\n| `style`     | patch        |\n| `deps`      | patch        |\n\n- Pushes to `dev` create or update prerelease PRs and tags.\n- Pushes to `main` create or update stable release PRs and tags.\n- Merging a release PR publishes the release and uploads the built extension archive.\n\nUse 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.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstdavis%2Fad-vantage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstdavis%2Fad-vantage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstdavis%2Fad-vantage/lists"}