Duc Dao
Full-stack Developer
- +84 362 915 688
- duc.dao.98d@gmail.com
- 429 Linh Nam - Vinh Hung - Hanoi
- https://www.linkedin.com/in/ducdaodinh/
About
Full-stack developer with 4+ years on Node.js, TypeScript, PostgreSQL, Redis, Elasticsearch, Directus (headless CMS), Vue.js, and Next.js. Works with AI agents Claude, Codex, and Grok: sets up the harness that automates the workflow, then supervises the agents as they work.
Experience
Codihaus Co., Ltd. (Full-stack Engineer)
Jul 2022 - Present
- Built Node.js APIs for web apps and third-party integrations with Directus extensions, Express, and NestJS: OpenAI, OnePay, Twilio, CleverTap, Chatwoot, Sentry.
- Modeled PostgreSQL and MySQL data around business rules for 5 production products; queries through Knex, caching and job queues with Redis and BullMQ.
- Helped build the company's in-house headless CMS, designed for applying AI agents to projects and for avoiding open-source licensing risk.
- Structured the backend in layers (controller, service, infrastructure) with a factory-function pattern; split the webhook and Twilio endpoint into standalone Express microservices shipped as Docker images.
- Wrote unit and integration tests with Vitest and Jest: 140 test files for the Adaptably backend extensions.
- Git with a standard workflow: feature branches, pull requests, and Conventional Commits; CI/CD with GitHub Actions and GitLab CI.
- Set up the harness for AI agents Claude, Codex, and Grok (CLAUDE.md, AGENTS.md, custom commands, hooks, MCP) to automate workflows such as the task queue and weekly report from GitHub Issues and Chatwoot, then supervised the agents doing the work.
- Defined rules for AI-generated code: GitNexus impact analysis before edits, required tests for business logic, no hardcoded secrets, no invented business rules.
Projects and case studies
Adaptably (Full-stack Engineer)
2024 - Present
- Integrated AI marking for over 1,000 worksheets a month, with a pre-check that drops empty, junk, and copied answers before any LLM call; teachers review only disputed marks, so results arrive far sooner.
- Gave each AI feature (marking, OCR, oral exam scoring, chat) its own model and harness to keep cost down.
- Developed with a multi-agent setup: Claude as the lead agent orchestrating Codex and Grok as sub-agents, taking each new request through to test and review within the coding standards.
- Tracked errors in Sentry and took user feedback directly through Chatwoot into an automated AI workflow, so issues are fixed and answered quickly and accurately.
- Built an AI analytics chat where students and parents ask about learning progress, streamed over SSE with per-role access checks and a daily rate limit.
- Built homework OCR: scanned PDF pages become images so AI can read handwritten answers and marker ticks.
- Built the whole backend alone for about 3,000 users: the PostgreSQL data model on Directus and Node.js APIs (Directus extensions, Express) for levelled exercises and reward points, with Twilio and CleverTap.
Medialabs (Backend Engineer)
2023 - 2025
- Built the whole backend alone: designed the PostgreSQL data model on Directus for media inventory, packages, vendors, orders, and the partner directory.
- Built the Node.js REST APIs for the Nuxt frontend: media booking, cart, orders, and saved items.
- Used AI to plan and write the code for backend features.
- OnePay payments: a middleware that checks each transaction's hash signature, and QueryDR calls that update the payment status.
- Budget-based media plans: turn a plan into a campaign, share it by email, re-invite, and clone a shared plan.
- Invoices with slot, vendor, and parent-product discounts and an approval email; vendor withdrawal orders and revenue statistics.
- Vendor and product search on Typesense; OTP with reCAPTCHA and per-IP rate limits on Redis.
- Built the whole backend alone: designed the PostgreSQL data model on Directus for products, case studies, training, events, and news.
- Built the Node.js REST APIs for the Nuxt frontend, including image transforms for responsive WebP delivery.
- Account registration API that assigns roles by email, sends a welcome email, and alerts admins to each new sign-up.
- Daily and weekly email digests of updated portal documents, sent by cron according to each user's subscription.
- Hooks that keep the Algolia search index in sync on every create or update, and process high-resolution images when a product changes.
- Scheduled price-list updates across price types with an API to serve them, plus a license checker by order number and email.
Phú Hưng Securities (Backend Engineer)
2022 - 2024
- In a team of 10, owned the database structure: the MySQL schema on Directus for products, services, news, and multilingual market research.
- Built the NestJS side of the website (SSR): search, market research, events, careers, and contact-form APIs, with content from Directus.
- Synced content from Directus to Elasticsearch with hooks configured per collection (full reindex on start, updates on every create, edit, or delete), queried from NestJS for site search.
- NestJS middlewares for language, device detection, SEO redirects, login, file proxying, and uploads; interceptors that add SEO meta, schema, and breadcrumbs to each page.
- A daily cron job that pulls news from an external API into Directus, keeping allowed categories with tags and translations; an SEO module for the Directus admin in Vue.
- Built the whole backend alone: designed the MySQL data model on Directus for insurance products, partner insurers, promotions, and blog content.
- Built the Node.js REST APIs for the Nuxt frontend for product listing, comparison, and online purchase, with Redis caching.
- Synced insurers, categories, products, plans, and benefits with translations from Izion's API into the CMS on a cron schedule, with an endpoint to rerun it on demand.
- Built proxy endpoints to Izion's API for phone OTP, policy lookup, account registration, and document download, managing the access token and verifying captcha.
- Cached product analysis and shared data in Redis, refreshed by Directus hooks whenever editors change content in the CMS.
Skills
- Backend
- Node.js, TypeScript (4+ years); NestJS, Express; Directus (headless CMS); REST API, WebSocket, SSE
- AI agents
- Multi-agent orchestration: Claude, Codex, Grok; Harness: CLAUDE.md, AGENTS.md, commands, hooks, MCP; Supervising agent output; LLM API integration (OpenAI)
- Database
- PostgreSQL, MySQL, Redis
- Search
- Elasticsearch, Typesense, Algolia
- DevOps
- Docker, Dokploy, AWS, Vercel; CI/CD: GitHub Actions, GitLab CI
- Frontend
- Vue.js, Nuxt, Next.js
- Other
- Python (scripts)
Education
Hanoi University of Science and Technology
Major: Information Technology - Degree classification: Good