<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://calvincchan.com/</loc>
<lastmod>2026-04-10T03:52:57.097Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/about</loc>
<lastmod>2026-04-10T03:52:57.097Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog</loc>
<lastmod>2026-04-10T03:52:57.097Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/projects/invoicelite</loc>
<lastmod>2026-04-08T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/projects/displaytoggle</loc>
<lastmod>2026-04-07T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/can-ai-be-my-project-manager-a-local-first-idea-with-n8n-postgres</loc>
<lastmod>2025-07-31T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/250531-google-tts-with-chirp3-hd-in-japanese</loc>
<lastmod>2025-05-31T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/250515-harnessing-ai-code-agents-for-react-native-codebase-maintenance</loc>
<lastmod>2025-05-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/250509-context7-vscode-insider</loc>
<lastmod>2025-05-09T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/250507-mcp-experiment-agentic-web-browsing-with-claude-desktop</loc>
<lastmod>2025-05-07T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/241125-google-tts-japanese</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/241009-using-ai-to-summarize-and-recap-the-bc-election-debate</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/241004-reflecting-on-completing-the-coursera-generative-ai-certificate</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240924-line-me-up-waitlist-management</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240806-chat-with-your-logseq-journal-with-gpt4all</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240524-logseq-rag-further-exploration-with-qdrant-and-chat-history</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240519-conversational-search-on-logseq-with-local-llms</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240513_persist_state_in_reactjs</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240416_supabase_js_auto_expiring_session</loc>
<lastmod>2024-04-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240321_supabase_custom_claim</loc>
<lastmod>2024-03-21T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240228_self_hosted_supabase_with_saml_attribute_mapping</loc>
<lastmod>2024-02-28T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240217_free_offline_ai_writing_assistance_for_mac_with_local_llm</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/240212_local_llm_for_function_calling_with_open_llama_nexus_raven_and_js_ts</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/attendance-taking-ai-chatbot-with-react-frontend</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/student-attendance-chatbot-with-parallel-function-calling</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/student-attendance-chatbot</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/self-hosted-supabase-enable-sso</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/redesign-iconimg-com</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/ios-app-accelerometer-triggers-sound-effect-chatgpt</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/nextra-add-latest-blog-posts-to-index</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/react-version-check-and-auto-update</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/icon-image-maker-react-webapp</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/icon-image-maker-lambda-func</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/langchain-test</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/build-ios-app-with-ai-assisted-coding</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/blog/learning-about-ai</loc>
<lastmod>2025-05-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/contact</loc>
<lastmod>2026-04-10T03:52:57.098Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/projects</loc>
<lastmod>2026-04-10T03:52:57.098Z</lastmod>
</url>
<url>
<loc>https://calvincchan.com/projects/line-me-up</loc>
<lastmod>2026-04-10T03:52:57.098Z</lastmod>
</url>
</urlset>
