I'm Ngo Quoc Viet, a fullstack engineer focused on practical open-source maintenance. I use reproducible diagnostics, test evidence, and agent-assisted implementation to turn concrete upstream issues into narrow, reviewable patches.
| Character stat | Current build |
|---|---|
| Class | Fullstack Engineer / OSS Contributor |
| Experience | Nearly 4 years across product and outsourced projects |
| Party role | Project-level Dev Lead experience in healthcare systems |
| Main quests | Developer platforms, AI tooling, MCP, desktop apps, Windows DX |
| Play style | Reproduce the issue → ship a narrow fix → add regression coverage → follow through on review |
My favorite contributions are the ones maintainers can immediately use: broken runtime paths, cross-platform bugs, stale setup flows, incorrect API behavior, missing safety checks, and tests that prevent the same regression from returning.
Public contribution data for NgoQuocViet2001, refreshed 2026-09-05. The merged count covers public PRs submitted from this account and accepted into repositories it does not own during the preceding 12 months.
| Stat | Total | Meaning |
|---|---|---|
| Merged quests | 116 | External PRs merged by community maintainers in the last 12 months |
| Worlds visited | 40 | Community repositories with at least one merged contribution |
| Active quests | 66 | External PRs currently open for maintainer review |
The most recent merges, newest first. Earlier merged work is summarized in the Guild History table below.
| Project | PR | Quest result | Merged |
|---|---|---|---|
| AI-For-Beginners | #733 | Completes a quiz on its own question count, so the fourth question of the lesson 24 post-quiz is no longer skipped. | 2026-09-04 |
| Xinference | #5483 | Counts records under an active ban when reporting a bulk unban, so the number returned agrees with the banned-IP and banned-key listings instead of including expired and never-banned records. | 2026-09-04 |
| OpenCADStudio | #983 | Renders DIMAUNIT 4 through the dimension's own DMS formatter, so a drawing authored in surveyor units stops annotating bearings as decimal degrees. | 2026-09-03 |
| OpenCADStudio | #984 | Makes ^ right-associative in the expression evaluator, so a chained exponent such as 2^3^2 evaluates to a number instead of returning the text 8^2. |
2026-09-03 |
| OpenCADStudio | #982 | Reads the per-object DIMCLRE and DIMCLRT overrides in the renderer, so extension-line and text colours set in the Properties panel take effect on screen. | 2026-09-03 |
| OpenCADStudio | #981 | Rounds engineering units before splitting feet from inches, so a measurement of 35.999 inches reads 3'-0.00" rather than the impossible 2'-12.00". |
2026-09-03 |
| Vite | #23346 | Keeps the image URL when a density descriptor omits its leading zero, so .5x candidates are no longer dropped from srcset and image-set(). |
2026-09-01 |
| repowise | #1752 | Shares the sink-reachability walk between the cross-function loop and lock passes while preserving call-line accurate first-hop resolution. | 2026-08-29 |
| repowise | #1751 | Makes coverage add exit non-zero when it stores nothing, with opt-in strict handling for partial ingests. |
2026-08-27 |
| book-to-skill | #178 | Strips four invisible carriers a Cf category filter cannot reach — variation selectors, interlinear annotation controls, the braille blank, and zero-width musical marks — while leaving dotted braille patterns and the code points just outside each range alone. |
2026-08-25 |
| text-to-cad | #331 | Reads the arc angle keys the DXF parsers actually emit, so a 90° arc stops being drawn as a complete circle. | 2026-08-25 |
| mise | #12362 | Emits the list separator when prepending to PATH in elvish, so a new entry no longer fuses onto the first existing one. |
2026-08-25 |
| mise | #12361 | Unsets __MISE_SESSION on nushell deactivate, which listed __MISE_DIFF twice and left the session marker behind. |
2026-08-25 |
| Yaak | #606 | Keeps an = inside --url-query and form values during curl import, preserving base64 padding and nested filters. |
2026-08-25 |
| Yaak | #607 | Escapes control characters in json.escape so a value containing a newline no longer produces an unparseable JSON document. |
2026-08-25 |
| Yaak | #605 | Uses the signing key as the OAuth 1.0 PLAINTEXT signature instead of the signature base string, per RFC 5849 3.4.4. | 2026-08-25 |
| drawDB | #1126 | Escapes single quotes in ENUM/SET values so a label such as it's fine no longer terminates the generated SQL literal early. |
2026-08-24 |
| repowise | #1754 | Scopes a module page's decision records to that module's own files, deduplicates them, and ranks by confidence instead of list position. | 2026-08-24 |
| repowise | #1753 | Counts a Prisma verb as a database sink only on a member call, so a local aggregate() stops producing false N+1 findings in code with no database. |
2026-08-24 |
| RAGFlow | #18292 | Classifies CLI benchmark responses by envelope code as well as HTTP status so failed calls stop inflating the success count. | 2026-08-21 |
| Vite | #23256 | Closes config bundles from a finally block so failed generation releases Rolldown plugin and native resources as reliably as the successful path. |
2026-08-21 |
| pnpm | #13900 | Preserves caret, tilde, bare, and equals-prefixed range styles when updates resolve to prereleases, keeping the TypeScript and Rust implementations aligned. | 2026-08-21 |
| OpenCADStudio | #827 | Rounds lengths and angles in their smallest displayed unit before splitting larger units, carrying values such as 12 inches or 60 seconds into the next column. | 2026-08-20 |
| Yaak | #593 | Emits shell-safe curl and gRPCurl arguments when values contain apostrophes, spaces, or file form-field type suffixes. | 2026-08-20 |
| Yaak | #597 | Keeps each --data-urlencode argument whole and preserves malformed percent text instead of failing the entire curl import. |
2026-08-20 |
| OpenCADStudio | #826 | Keeps DDPTYPE glyphs off dimension definition points on the Defpoints layer while preserving styles for user-created points. |
2026-08-20 |
| OpenCADStudio | #825 | Routes Up and Down to the MText caret while the editor is open instead of walking command history behind the dialog. | 2026-08-20 |
| zmx | #239 | Scopes the README session picker to the active ZMX_SESSION_PREFIX and prevents preview or attach from applying that prefix twice. |
2026-08-20 |
| OpenCADStudio | #823 | Gives SUBTRACT a deterministic operand order instead of taking the minuend and subtrahend from arbitrary HashSet iteration. |
2026-08-20 |
| OpenCADStudio | #822 | Restores tangent-tangent-radius solutions where the new circle encloses an existing circle without disturbing the external-tangency family. | 2026-08-20 |
| archify | #91 | Counts BMP emoji-presentation symbols and extended Hangul as full-width text units so fitted labels no longer overrun their nodes. | 2026-08-20 |
| OpenCADStudio | #820 | Requires identifier word boundaries during expression rescans so names such as ASPIRATORE no longer have their internal pi evaluated. |
2026-08-20 |
| cuda-oxide | #1051 | Rejects variadic #[device] externs at macro expansion with a source span, including declarations that are never reached by kernel MIR. |
2026-08-20 |
| Text-Grab | #670 | Applies Latin character correction only for Latin-based capture languages across paragraph, table, PDF, Tesseract, and Grab Frame OCR paths. | 2026-08-20 |
| Logto | #9462 | Aligns contributor prerequisites with the package engines by documenting Node ^22.14.0 and support for pnpm 9 and 10. |
2026-08-20 |
| Community project | Merged quests | Contribution territory |
|---|---|---|
| HakanSeven12/OpenCADStudio | 16 | CAD geometry, commands, expression evaluation, dimension styling, unit formatting, DWG rendering, Windows file locking, and printer integration |
| mksglu/context-mode | 13 | Codex/MCP reliability, Windows shells, plugin installs, analytics, cache behavior, docs, and regression coverage |
| CJackHwang/ds2api | 8 | OpenAI-compatible routes, streaming, citations, tool output, Vercel sync, and file metadata |
| tinyhumansai/openhuman | 8 | Desktop OAuth, deep links, packaging, startup cleanup, RPC security, AppImage release safety, and Windows contributor setup |
| mountain-loop/yaak | 6 | Curl import parsing, shell-safe curl and gRPCurl export, OAuth 1.0 PLAINTEXT signing, and JSON template escaping |
| slidevjs/slidev | 6 | Base-path routing, reactive frontmatter, addon preprocessing, test lifecycle cleanup, local exports, and scaffold setup |
| earthtojake/text-to-cad | 5 | Windows SMB write resilience, cross-language CAD selector and label parity, and DXF arc angle parsing |
| repowise-dev/repowise | 4 | Health-analysis precision, sink-reachability sharing, wiki page scoping, and CLI exit-code correctness |
| github/spec-kit | 4 | Development agent symlinks, safe Kiro multi-install behavior, authentication host matching, and workflow step-type validation |
| jdx/mise | 4 | Filesystem-safe install linking, portable generated bootstrap paths, and nushell and elvish activation correctness |
| drawdb-io/drawdb | 3 | Clipboard schema validation, self-referencing foreign keys, and SQL literal escaping for enum values |
| neurosnap/zmx | 3 | Session wildcard matching, prefixed picker behavior, and nested-session documentation |
| tt-a1i/archify | 3 | CLI validation, renderer-bound safety, and full-width text measurement |
| Crosstalk-Solutions/project-nomad | 2 | Offline content download reliability and benchmark startup correctness |
| DayuanJiang/next-ai-draw-io | 2 | MCP diagram edit consistency, stale-state protection, and multi-page export preservation |
| logto-io/logto | 2 | Tenant initialization error observability and accurate contributor prerequisites |
| ruvnet/RuView | 2 | ESP32 swarm configuration validation and mesh-to-dashboard documentation |
| virgiliojr94/book-to-skill | 2 | Literal handling for bracketed input paths and invisible-carrier sanitization |
| vitejs/vite | 2 | Config-bundle resource cleanup on failed generation and srcset density-descriptor parsing |
Community repositories with one merged contribution so far:
| Community project | Contribution territory |
|---|---|
| 3b1b/manim | Graph point lookup on manual curves outside unit x-ranges |
| addyosmani/agent-skills | Eval grader-result validation and summary integrity |
| agegr/pi-web | Wrapper process lifecycle, signal forwarding, and exit statuses |
| BarutSRB/OmniWM | Complete public CLI and IPC command reference |
| cathrynlavery/diagram-design | Accessible keyboard navigation for diagram gallery choices |
| infiniflow/ragflow | CLI benchmark failure accounting by response envelope |
| microsoft/AI-For-Beginners | Quiz completion driven by each quiz's own question count |
| NVIDIA-NeMo/Switchyard | Nested protocol metadata normalization and header precedence |
| NVlabs/cuda-oxide | Early validation for variadic CUDA device extern declarations |
| opengeos/GeoLibre | Geographic-to-planar projection for buffer processing |
| pacifio/atlas | Agent turn epoch handling and late transcript events |
| paperless-ngx/paperless-ngx | Sanity-check data correctness and regression coverage |
| pingdotgg/t3code | Cross-platform repository symlink integrity |
| pnpm/pnpm | Prerelease range-style preservation across TypeScript and Rust update paths |
| rorkai/App-Store-Connect-CLI | CLI argument validation before authentication |
| supertone-inc/supertonic | Multi-language CLI option documentation |
| TheJoeFin/Text-Grab | Language-aware Latin correction across OCR capture paths |
| tw93/Pake | CLI startup independence from native image dependencies |
| withastro/astro | Page-directory boundary correctness and regression coverage |
| xorbitsai/inference | Truthful ban accounting in bulk unban responses |
| ZSeven-W/openpencil | CLI positional argument forwarding |
The newest open contributions waiting for maintainer review, ordered by creation time. 66 are open in total; the 20 most recent are listed here.
| Project | PR | Quest in progress |
|---|---|---|
| page-agent | #704 | Sets a <select> through the native value setter and fires input before change, so React's change tracker sees the new value instead of dropping the agent's selection. |
| page-agent | #700 | Reads the alpha channel when measuring background luminance, so a light page carrying a faint tint is no longer painted with the dark-mode mask. |
| page-agent | #699 | Accumulates every frame offset up to the top document, so the visual pointer lands on the element inside a nested iframe rather than hundreds of pixels short. |
| page-agent | #698 | Takes the last segment of a model id, so a gateway id with two prefixes stops disabling the Claude patch and stops misfiring the Qwen one, which raised the temperature on exactly the models its max/plus check excludes. |
| page-agent | #697 | Replaces non-object tool-call arguments before repacking, so the one function meant to absorb malformed model output stops throwing on it. |
| page-agent | #696 | Resolves translations from own properties only, rejects intermediate objects, and keeps a deliberately empty string instead of reporting it missing. |
| hindsight | #4076 | Rolls "last weekend" and 上周末 back a full week on both weekend days, so the question asked on a Sunday stops resolving to the weekend in progress. |
| manim | #2524 | Clips channels before the square root in interpolate_color, so an overshooting rate function animates the colour instead of turning it white. |
| spec-kit | #4417 | Unwraps a group spanning a whole workflow expression, so adding parentheses to make precedence explicit stops inverting the result. |
| manim | #2523 | Makes the three array resizers agree on an empty input, which otherwise raised IndexError or silently dropped the trailing axis. |
| spec-kit | #4416 | Resolves negative list indices in workflow expressions, so task_list[-1] returns the last item instead of rendering empty. |
| Slidev | #2733 | Strips an optional title and angle brackets from markdown image destinations, so preloading stops requesting URLs that can never resolve. |
| Slidev | #2732 | Rejects a unit-less timestamp that is not a number, so duration: 30,5 fails at parse time instead of rendering NaN in the timer. |
| drawDB | #1134 | Resolves identifier nodes when rebuilding CHECK expressions, so imported constraints stop containing [object Object]. |
| text-to-cad | #332 | Stops MTEXT paragraph-properties commands leaking their payload into engraved text, and regenerates the two skill bundles the parser is baked into. |
| manim | #2518 | Handles a single reference color and a single output sample in color_gradient, which raised IndexError and returned the wrong end respectively. |
| manim | #2517 | Strips LaTeX environments whose argument carries a star or a column spec, so align* stops inflating the glyph count used for submobject slicing. |
| drawDB | #1125 | Stops treating a plain-text default that merely ends in (...) as a SQL function, which emitted it unquoted into the export. |
| drawDB | #1124 | Keeps a column declared NULL nullable on import across five dialects, instead of inverting it to NOT NULL. |
| joshuto | #634 | Returns no visual-mode anchor when a listing filters down to nothing, so toggling hidden files off in a dotfile-only directory stops underflowing contents_len - 1 and panicking. |
| Inventory slot | Equipped tools |
|---|---|
| Frontend | JavaScript, TypeScript, React, Vue, Next.js, Vite, Tailwind CSS |
| Backend | Node.js, C#, ASP.NET, PHP, Laravel, Python, Java, Go, Rust |
| Data stores | MySQL, PostgreSQL, MongoDB, Redis |
| Infrastructure | AWS, Linux, Docker, Nginx, CI/CD, GitHub Actions, VPS operations |
| AI developer tooling | Codex, MCP, Claude Code, OpenAI-compatible APIs, agent workflows |
| Product toolkit | Git, GitHub, Figma, Postman, VS Code |
- AI developer tooling: MCP servers, Codex integrations, context optimization, local analytics, safe upgrade paths.
- Windows-first reliability: PowerShell,
pwsh,cmd, Git Bash, WSL, symlink restrictions, desktop deep links, packaging quirks. - API and data correctness: OpenAI-compatible routes, streaming behavior, file metadata, citation markers, validation, and counting semantics.
- Release safety: dependency checks, runtime guards, reproducible setup, CI and test lifecycle fixes.
- Maintainer-friendly delivery: narrow diffs, issue-backed scope, concrete tests, concise validation, and follow-up fixes.
| Project | What it equips |
|---|---|
| codex-keyring | Native multi-account manager for Codex with aliases, health checks, and failover support |
| codex-observatory | Local Codex usage analytics, token trends, model breakdowns, and dashboard views |
| google-workspace-mcp | MCP server for structured Google Docs and Sheets extraction with image-aware output |
- Fullstack delivery across product and outsourced environments, with project bootstrapping, reusable component design, code review, Git flow, mentoring, and internal training.
- Project-level Dev Lead experience in healthcare systems, including BA/QC/developer coordination and legacy-parity work.
- Hands-on deployment and support across AWS, Linux, Docker, Nginx, CI/CD, VPS, staging, and production environments.
- AWS Certified Solutions Architect – Associate, scored 861/1000.
Open to OSS collaboration, maintainer support, developer tooling, automation, and practical fullstack/internal-tool work.




