<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.duncanleung.com/</loc>
<lastmod>2026-05-23</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog</loc>
<lastmod>2026-05-23</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/projects</loc>
<lastmod>2026-05-23</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/tags</loc>
<lastmod>2026-05-23</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/avoiding-react-setstate-pitfalls</loc>
<lastmod>2017-07-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/webpack-build-react-production-windows</loc>
<lastmod>2017-07-31T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/react-pure-render-this-binding-patterns</loc>
<lastmod>2017-08-02T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/fixing-react-warning-synthetic-events-in-setstate</loc>
<lastmod>2017-08-14T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/testing-formik-form-onsubmit</loc>
<lastmod>2018-10-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/hacktoberfest-oc-meetup</loc>
<lastmod>2018-10-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/fixing-netlify-build-fail</loc>
<lastmod>2019-11-26T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/set-up-python-pyenv-virtualenv-poetry</loc>
<lastmod>2019-11-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/python-name-main-pattern</loc>
<lastmod>2019-12-02T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/testing-validation-schema-formik-form</loc>
<lastmod>2019-12-03T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/git-sync-remote-upstream-fork</loc>
<lastmod>2019-12-18T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/emotion-css-prop-jsx-pragma-storybook</loc>
<lastmod>2020-01-06T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/import-svg-storybook-webpack-loader</loc>
<lastmod>2020-01-08T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/storybook-decorators-emotion-theme-provider</loc>
<lastmod>2020-01-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/storybook-decorators-react-intl-provider</loc>
<lastmod>2020-01-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/aws-amplify-aws-exports-js-typescript</loc>
<lastmod>2020-01-13T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/typescript-module-declaration-svg-img-assets</loc>
<lastmod>2020-01-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/profile-measure-find-remove-slow-eslint-rules</loc>
<lastmod>2020-01-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/how-to-setup-eslint-eslintrc-config-difference-eslint-config-plugin</loc>
<lastmod>2020-01-28T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/improve-aws-lambda-cold-start</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/why-slow-plugin-typescript-eslint-performance-issues</loc>
<lastmod>2020-02-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/aws-lambda-caching-variables-between-invocations</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-cloudformation-ref-getatt</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-debugging</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-dynamo-db</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-export-environment-variables</loc>
<lastmod>2020-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-manager-users-cognito-user-pool</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-nodejs-aws-sdk-promise</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-nodejs-callback-async-await</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-testing</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-useful-commands</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-week-01-serverless-101</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/typescript-generics-conditional-types-emotion-as-prop</loc>
<lastmod>2020-02-17T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/testing-react-helmet-document-head-meta-tag-react-testing-library</loc>
<lastmod>2020-02-18T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/python-understanding-error-traceback</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/python-with-context-manager</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/styled-system-emotion-object-styles-css-grid</loc>
<lastmod>2020-02-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/python-environment-variables</loc>
<lastmod>2020-04-06T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/typescript-array-map-over-union-array-type</loc>
<lastmod>2020-04-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/typescript-type-guards</loc>
<lastmod>2020-04-17T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/select-contentful-locale-gatsby-context-graphql-variable</loc>
<lastmod>2020-04-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-animation-render-performance</loc>
<lastmod>2020-04-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-javascript-array</loc>
<lastmod>2020-04-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-javascript-this</loc>
<lastmod>2020-04-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-javascript-timing</loc>
<lastmod>2020-04-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/how-to-teach-programming-the-importance-of-mental-models</loc>
<lastmod>2020-04-30T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-javascript-DOM</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-javascript-object-composition</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-javascript-promises</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-javascript-prototypal-inheritance-class</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-javascript-scope-closure</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-web-cache-invalidation</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/notes-web-rendering-performance</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/react-state-rerender-useeffect</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/react-use-reducer</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/switch-multiple-aws-profile-aws-cli-serverless</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/visual-studio-code-yml-custom-serverless-tag</loc>
<lastmod>2020-05-08T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-pseudo-parameters-reference-another-lambda</loc>
<lastmod>2020-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-set-breakpoint-locally-debug-aws-lambda</loc>
<lastmod>2020-05-28T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/serverless-securing-authenticate-aws-api-gateway-endpoints-cognito-iam-api-key</loc>
<lastmod>2020-05-30T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/aws-set-up-email-billing-alert</loc>
<lastmod>2020-06-17T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/accessing-material-ui-theme-object-emotion-styled-component-css-prop</loc>
<lastmod>2020-10-22T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/eslint-mixed-javascript-typescript-files-codebase</loc>
<lastmod>2021-01-06T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/golang-aws-ec2-deploy</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/golang-fmt.Sprintf-Printf</loc>
<lastmod>2020-05-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/golang-readers-writers</loc>
<lastmod>2021-05-03T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/husky-prettier-eslint-precise-commits-lint-staged-pre-commit-pre-push</loc>
<lastmod>2021-06-12T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/iterating-index-strings-runes-go-golang</loc>
<lastmod>2021-06-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/find-kill-process-port-3000-mac</loc>
<lastmod>2021-06-30T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/go-basic-data-structures-types-pointers-structs-arrays-slices-int-float-string</loc>
<lastmod>2021-07-09T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/next-js-typescript-svg-any-module-declaration</loc>
<lastmod>2021-07-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/recover-accidental-git-push-force</loc>
<lastmod>2021-12-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/understand-go-golang-interfaces</loc>
<lastmod>2021-12-23T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/nvm-commands-cheatsheet</loc>
<lastmod>2022-12-23T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/tailwind-css-unknown-at-rule</loc>
<lastmod>2023-01-11T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/go-function-arguments-passed-by-value</loc>
<lastmod>2023-06-08T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/go-json-encoding-and-decoding</loc>
<lastmod>2023-06-19T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/slices-in-go</loc>
<lastmod>2023-06-26T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/allocating-memory-go</loc>
<lastmod>2023-06-28T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/methods-in-go</loc>
<lastmod>2023-06-28T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/go-idiom-accept-interfaces-return-types</loc>
<lastmod>2023-06-30T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/missing-initial-state-firebase-auth-proxy-nextjs-vercel</loc>
<lastmod>2023-09-23T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/image-scrolling-loading</loc>
<lastmod>2024-04-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/useref-resize-observer-react-dynamic-measurements</loc>
<lastmod>2024-04-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/eslint-v9-typescript</loc>
<lastmod>2024-07-18T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://www.duncanleung.com/blog/claude-code-global-mcp-config</loc>
<lastmod>2025-06-22T00:00:00.000Z</lastmod>
</url>
</urlset>
