Skip to content
View victory-c's full-sized avatar
  • San Francisco Bay Area

Block or report victory-c

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
victory-c/README.md

Victor Chun

DS + CogSci @ UC Berkeley. I build local-first tools — software that runs on your own machine, keeps your data there, and automates something I got tired of doing by hand.

Things I've built

token-counter — audits monthly AI coding-agent spend across Claude Code, Codex, Cursor, and Gemini, and flags every run that would have been fine on a cheaper model.

fitpet — a Claude Code status-line companion that grows from real Garmin training load.

vibeapply — an AI-native job-application copilot: a browser extension that rides along on job boards, backed by a structured candidate profile and evidence bank. Scaffolded with agents, then audited — all nine findings fixed before any feature work.

cal-dining-scanner — watches UC Berkeley dining menus for the foods you care about and emails you when they appear. One command to set up, runs free on GitHub Actions.

magene-garmin-fix — Garmin inflates climb 10–70× for third-party bike computers by throwing away barometric altitude. This fixes it.

bay-area-venture-mapinteractive map of the Bay Area venture cluster; filter by AUM, stage, sector, and check size.

qosmic-audit-harness — contracts-first agent harness: every claim in a generated audit must cite a real crawled page, enforced by a validator that the writer and the evaluator share.

Open source

Taxuspt/garmin_mcp1.1k ★, listed contributor

Garmin's API returns explicit null for sections you have no data in, so resp.get(k, {}) yields None — the default only applies when the key is absent. Most of my merged work there is that bug and its relatives.

#253 ✅ merged Five unguarded null-section crashes — HRV baseline, progress-summary .items(), the sleep-score chain, body-battery event iteration, and a GraphQL {"data": null} that slipped past the existing guard. Each fix ships a regression test feeding the explicit-null payload.
#254 ✅ merged Garmin occasionally stalls a request indefinitely; because every tool calls the client synchronously, one stalled call hung the whole MCP server until the client's ~4-minute timeout fired (issue #248). Bounds each proxied call on a daemon worker thread, surfacing a retry-able TimeoutError instead. Configurable via GARMIN_MCP_CALL_TIMEOUT.
#250 ✅ merged Gear notes never appeared, because the pinned client reads the legacy filterGear endpoint and Notes only exists on /gear/v2/list. Joins the two — the v2 response hyphenates its UUIDs and the legacy one doesn't, so the join normalizes them first.
#276 Per-sport heart-rate zone reads and writes, via read-modify-write so unrelated sport profiles aren't clobbered. Verified against a live account; documents the quirk that Garmin won't persist a CUSTOM calculation method.
#170 There's a Dockerfile but no published image, so everyone builds locally. Publishes multi-arch (amd64 + arm64) images to GHCR on release — no extra secrets, just GITHUB_TOKEN.
#167 The security workflow had a # Add pip-audit here if desired placeholder where the dependency scan should be. Wires up pip-audit and clears the one CVE it flags — h11 request smuggling (CVE-2025-43859).

clash-verge-rev141k ★

  • #7672 — importing a single vless:// / trojan:// / ss:// share link required creating a throwaway subscription and pasting URIs into Edit Proxy. Adds real import.
  • #7652 — every proxy selection rebuilt the entire native tray menu. On profiles with thousands of nodes that meant stalls and memory spikes. Caches menu handles and updates only the two items that changed.
  • #64036 — reasoning-visibility leak on Gemini/Vertex: with show_reasoning: false, users still got dozens of raw thought-summary blocks. Two causes — effort and visibility were coupled in the request builder, and Vertex returns summaries untagged unless you set thought_tag_marker, so nothing downstream could key on them. Splits the two knobs to match Google's own API.
  • #68524web_extract had one backend; expired credits or a rate limit meant total failure plus a gateway restart. Adds a configurable fallback chain.

Elsewhere

Berkeley, CA — usually on a bike when I'm not here.

Pinned Loading

  1. garmin_mcp garmin_mcp Public

    Forked from Taxuspt/garmin_mcp

    MCP server to access Garmin data

    Python

  2. cal-dining-scanner cal-dining-scanner Public

    Watches UC Berkeley dining hall menus for the foods you care about and emails you when they appear. One-command setup; runs free on GitHub Actions.

    Python 5

  3. resumeblock resumeblock Public

    Resume builder with template-aware LaTeX compilation (Deedy Reversed two-column + single-column). Next.js, Prisma, Ollama.

    TypeScript

  4. bay-area-venture-map bay-area-venture-map Public

    Interactive map of every VC firm in the 5-county San Francisco Bay Area, sourced from SEC Form ADV filings.

    Python

  5. fitpet fitpet Public

    A Claude Code status-line companion that grows from your real-world fitness (Garmin) and reacts to your coding via hooks.

    TypeScript

  6. magene-garmin-fix magene-garmin-fix Public

    Upload Magene / non-Garmin bike-computer .fit to Garmin Connect and auto-fix inflated elevation (disable server-side Elevation Correction) + wrong activity type. EN/中文 docs + Claude Code skill.

    Python