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-10-02. 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 | 139 | External PRs merged by community maintainers in the last 12 months |
| Worlds visited | 48 | 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 |
|---|---|---|---|
| Spec Kit | #4417 | Unwraps a group spanning a whole workflow expression, so adding parentheses to make precedence explicit stops inverting the result. | 2026-09-29 |
| Spec Kit | #4416 | Resolves negative list indices in workflow expressions, so task_list[-1] returns the last item instead of rendering empty. |
2026-09-29 |
| vscode-languageserver-node | #1857 | Releases the parallelism slot when a dispatched message rejects, so one failed response write no longer stalls every later message on a connection with maxParallelism. |
2026-09-29 |
| DeepSeek-Reasonix | #7992 | Rejects remote install manifests over the documented 2 MiB fetch limit instead of silently truncating them, while still accepting a manifest of exactly that size. | 2026-09-25 |
| marked | #4091 | Strips leading and trailing whitespace when normalizing link reference labels, so a definition and a reference that differ only in surrounding whitespace match as CommonMark requires. | 2026-09-21 |
| Poetry | #11014 | Reads the tags from the built extension wheel's filename instead of assuming the backend picks the first supported tag, so the chef test passes on any compatible platform. | 2026-09-19 |
| vscode-languageserver-node | #1858 | Falls back to a full semantic-tokens result when previousResult gets an unknown id, instead of returning edits diffed against an older generation. |
2026-09-18 |
| drawDB | #1146 | Skips custom types that have no fields when exporting to SQL Server, which previously threw and left the export disabled. | 2026-09-17 |
| Yaak | #647 | Uses the current time when uuid.v6 has no timestamp, instead of passing NaN to the generator and producing a UUID dated 1582. |
2026-09-15 |
| Slidev | #2704 | Answers an out-of-range slide patch with a 404, so a stale editor save no longer dereferences a missing slide and stops the dev server. | 2026-09-15 |
| 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. |
2026-09-15 |
| Slidev | #2733 | Strips an optional title and angle brackets from markdown image destinations, so preloading stops requesting URLs that can never resolve. | 2026-09-15 |
| Slidev | #2740 | Whitelists the resolved snippet path for {monaco-write}, so a relative snippet import can be saved back from the editor instead of being rejected. |
2026-09-15 |
| undici | #5808 | Keeps a numeric Expires of 0 when serializing a cookie, which the truthiness check silently dropped even though the epoch means expire now. |
2026-09-15 |
| Rollup | #6514 | Removes the whole CRLF pair when suppressing ASI, so a lone CR no longer triggers the semicolon insertion the removal was meant to prevent. | 2026-09-14 |
| undici | #5807 | Treats inherited Object.prototype names such as constructor as unsupported encodings in the decompress interceptor instead of calling them as decompressors. |
2026-09-14 |
| Project N.O.M.A.D. | #1245 | Routes the model-download queue through the shared orphan guard, so one orphaned BullMQ job no longer makes GET /api/downloads/jobs fail on every poll. |
2026-09-13 |
| Project N.O.M.A.D. | #1220 | Aborts a streaming chat response when the chat is unmounted, disabled or switched, so abandoned streams stop exhausting the browser's connection pool. | 2026-09-13 |
| Yaak | #643 | Stops the Postman importer from swapping an API key's name and value. | 2026-09-12 |
| OpenHuman | #5455 | Makes the Windows installer fail with a real PowerShell error and a non-zero exit code when a release, checksum or MSI/EXE step fails, instead of printing a message and returning success. | 2026-09-11 |
| vscode-css-languageservice | #497 | Treats ICSS :import(...) blocks like :export, so their aliases stop being reported as unknown properties. |
2026-09-08 |
| vscode-css-languageservice | #496 | Inserts the CSS Color 4 rgb(R G B / A) form for the rgb completion, so alpha no longer needs the legacy rgba alias. |
2026-09-08 |
| 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. | 2026-09-07 |
| 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 |
| 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 |
| slidevjs/slidev | 10 | Base-path routing, reactive frontmatter, addon preprocessing, test lifecycle cleanup, local exports, scaffold setup, slide-patch bounds, parser input validation, and Monaco write-back paths |
| tinyhumansai/openhuman | 9 | Desktop OAuth, deep links, packaging, startup cleanup, RPC security, AppImage release safety, Windows contributor setup, and Windows installer failure reporting |
| CJackHwang/ds2api | 8 | OpenAI-compatible routes, streaming, citations, tool output, Vercel sync, and file metadata |
| mountain-loop/yaak | 8 | Curl import parsing, shell-safe curl and gRPCurl export, OAuth 1.0 PLAINTEXT signing, JSON template escaping, Postman API key import, and UUID v6 timestamps |
| github/spec-kit | 6 | Development agent symlinks, safe Kiro multi-install behavior, authentication host matching, workflow step-type validation, and workflow expression indexing and grouping |
| earthtojake/text-to-cad | 5 | Windows SMB write resilience, cross-language CAD selector and label parity, and DXF arc angle parsing |
| Crosstalk-Solutions/project-nomad | 4 | Offline content download reliability, benchmark startup correctness, orphaned download-job handling, and chat stream cleanup |
| drawdb-io/drawdb | 4 | Clipboard schema validation, self-referencing foreign keys, SQL literal escaping for enum values, and SQL Server export of fieldless custom types |
| jdx/mise | 4 | Filesystem-safe install linking, portable generated bootstrap paths, and nushell and elvish activation correctness |
| repowise-dev/repowise | 4 | Health-analysis precision, sink-reachability sharing, wiki page scoping, and CLI exit-code correctness |
| 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 |
| 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 |
| microsoft/vscode-css-languageservice | 2 | CSS Color 4 rgb() completions and ICSS :import property linting |
| microsoft/vscode-languageserver-node | 2 | JSON-RPC parallelism slot accounting and semantic-token delta baselines |
| nodejs/undici | 2 | Decompression encoding lookup safety and cookie Expires serialization |
| 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 |
| cathrynlavery/diagram-design | Accessible keyboard navigation for diagram gallery choices |
| esengine/DeepSeek-Reasonix | Remote install manifest size enforcement |
| infiniflow/ragflow | CLI benchmark failure accounting by response envelope |
| markedjs/marked | CommonMark link reference label normalization |
| microsoft/AI-For-Beginners | Quiz completion driven by each quiz's own question count |
| NVIDIA-NeMo/Switchyard | Nested protocol metadata normalization and header precedence |
| NVIDIA/cuda-rust | Early validation for variadic CUDA device extern declarations |
| OmniNull/OmniWM | Complete public CLI and IPC command reference |
| 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 |
| python-poetry/poetry | Extension wheel tag handling in the build tests |
| rollup/rollup | CRLF-safe line-break removal when suppressing ASI |
| rorkai/App-Store-Connect-CLI | CLI argument validation before authentication |
| supertone-oss-archive/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 |
| vectorize-io/hindsight | Weekend-relative date resolution |
| 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 |
|---|---|---|
| Astro | #18200 | Escapes # and ? before resolving glob() entry paths, so a file such as c#-basics.md is loaded instead of being read from .../c and dropped. |
| Mermaid | #8359 | Resets the gantt task-id index in clear(), so a later diagram stops resolving after dependencies and click handlers against an earlier diagram's tasks. |
| Hono | #5498 | Falls back to single-segment matching for regex params in basePath(), as the router does, so a /api/:version{v[0-9]+} mount reports /api/v2 instead of /api/. |
| undici | #5953 | Stores repeated response headers as arrays in mock snapshots, so two Set-Cookie headers replay as two cookies instead of one comma-joined value. |
| Slidev | #2760 | Accepts # and + in fence languages, so c#, c++ and f# blocks keep their grammar, title and ranges, and work in Magic Move. |
| Svelte | #18903 | Decodes numeric character references in planes 3, 15 and 16 instead of replacing them with U+0000. |
| Yaak | #723 | Returns the value of attribute, text and CDATA nodes selected by XPath, which previously rendered as empty strings. |
| Poetry | #11120 | Normalizes POETRY_CERTIFICATES_<NAME>_CERT=false to a boolean, so it disables TLS verification instead of being used as a CA bundle path named false. |
| vscode-js-debug | #2424 | Lets a ** in the middle of a skipFiles glob match zero directories, so lib/**/*.js also skips lib/index.js. |
| marked | #4115 | Ends a block quote before a lazy line that follows a heading, thematic break or HTML block, as CommonMark specifies. |
| vscode-textmate | #302 | Skips a zero-width range in LineFonts.produceFromScopes, as LineTokens already does, so a zero-width rule end no longer creates an empty font range. |
| vscode-html-languageservice | #261 | Anchors the #endregion marker regex, so a comment that merely contains the word endregion stops closing the open region. |
| vscode-json-languageservice | #368 | Runs the $vocabulary gate for keywords introduced in 2019-09 and later, such as dependentRequired and unevaluatedProperties, instead of enabling them by draft alone. |
| Express | #7467 | Treats the app etag setting as a default for res.sendFile(), so an explicit etag: false option is respected again. |
| Fastify | #7023 | Makes removeContentTypeParser('*') and hasContentTypeParser('*') find the catch-all parser, which is stored under a different key. |
| date-fns | #4320 | Parses Vietnamese quarters II and III as Q2 and Q3 instead of Q1. |
| manim | #2532 | Uses the step from a three-element x_range when extending the right endpoint in get_riemann_rectangles, and stops mutating the caller's sequence. |
| vscode-css-languageservice | #521 | Gives each LCS matrix row its own array in difference(), so rows no longer share one array and corrupt each other's values. |
| 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 | Blends a translucent background over what is behind it when measuring luminance, so a light page carrying a faint tint is no longer painted with the dark-mode mask. |
| 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.