<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Panupong WS</title><description>Projects, Resources และ Notes จาก Panupong — web, AI และ automation</description><link>https://panupongws.com/</link><language>th</language><item><title>[Note] YAML dates ใน Astro Content Collections</title><link>https://panupongws.com/notes/astro-yaml-dates/</link><guid isPermaLink="true">https://panupongws.com/notes/astro-yaml-dates/</guid><description>YAML parse date โดยอัตโนมัติ — quoted vs unquoted ให้ผลต่างกัน และส่งผลกับ z.date() ใน Astro schema</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>yaml</category><category>content-collections</category><category>til</category></item><item><title>[Project] ระบบจัดการหลักฐานคดี (evidence case app)</title><link>https://panupongws.com/projects/evidence-case-app/</link><guid isPermaLink="true">https://panupongws.com/projects/evidence-case-app/</guid><description>ระบบจัดการหลักฐานคดี</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate></item><item><title>[Note] Astro Actions — type-safe server functions ใน Astro 5</title><link>https://panupongws.com/notes/astro-actions/</link><guid isPermaLink="true">https://panupongws.com/notes/astro-actions/</guid><description>Astro Actions — type-safe server functions ใน Astro 5</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>typescript</category><category>backend</category><category>forms</category></item><item><title>[Note] Astro Middleware — intercept requests ก่อนถึง page</title><link>https://panupongws.com/notes/astro-middleware/</link><guid isPermaLink="true">https://panupongws.com/notes/astro-middleware/</guid><description>Astro Middleware — intercept requests ก่อนถึง page</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>middleware</category><category>typescript</category><category>backend</category></item><item><title>[Note] @starting-style — CSS transition ตอน element ปรากฏครั้งแรก</title><link>https://panupongws.com/notes/css-starting-style/</link><guid isPermaLink="true">https://panupongws.com/notes/css-starting-style/</guid><description>@starting-style — CSS transition ตอน element ปรากฏครั้งแรก</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>animation</category><category>frontend</category></item><item><title>[Note] text-wrap: balance — จัดบรรทัด heading ให้สมดุลอัตโนมัติ</title><link>https://panupongws.com/notes/css-text-wrap-balance/</link><guid isPermaLink="true">https://panupongws.com/notes/css-text-wrap-balance/</guid><description>text-wrap: balance — จัดบรรทัด heading ให้สมดุลอัตโนมัติ</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>typography</category><category>frontend</category></item><item><title>[Note] git blame --ignore-rev — ซ่อน commit ที่เป็นแค่ formatting</title><link>https://panupongws.com/notes/git-blame-ignore-revs/</link><guid isPermaLink="true">https://panupongws.com/notes/git-blame-ignore-revs/</guid><description>git blame --ignore-rev — ซ่อน commit ที่เป็นแค่ formatting</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>tools</category><category>productivity</category></item><item><title>[Note] git rebase --onto — ย้าย commits ไปอยู่บน branch อื่น</title><link>https://panupongws.com/notes/git-rebase-onto/</link><guid isPermaLink="true">https://panupongws.com/notes/git-rebase-onto/</guid><description>git rebase --onto — ย้าย commits ไปอยู่บน branch อื่น</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>tools</category><category>productivity</category></item><item><title>[Note] git sparse-checkout — clone แค่บางโฟลเดอร์จาก monorepo</title><link>https://panupongws.com/notes/git-sparse-checkout/</link><guid isPermaLink="true">https://panupongws.com/notes/git-sparse-checkout/</guid><description>git sparse-checkout — clone แค่บางโฟลเดอร์จาก monorepo</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>tools</category><category>productivity</category></item><item><title>[Note] HTML lazy loading — โหลด resource เมื่อใกล้จะเห็น</title><link>https://panupongws.com/notes/html-lazy-loading/</link><guid isPermaLink="true">https://panupongws.com/notes/html-lazy-loading/</guid><description>HTML lazy loading — โหลด resource เมื่อใกล้จะเห็น</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>html</category><category>performance</category><category>frontend</category></item><item><title>[Note] Array.flat() และ flatMap() — จัดการ nested arrays</title><link>https://panupongws.com/notes/js-array-flat-flatmap/</link><guid isPermaLink="true">https://panupongws.com/notes/js-array-flat-flatmap/</guid><description>Array.flat() และ flatMap() — จัดการ nested arrays</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>array</category><category>programming</category></item><item><title>[Note] JavaScript Error Types — ประเภท Error ที่ควรรู้</title><link>https://panupongws.com/notes/js-error-types/</link><guid isPermaLink="true">https://panupongws.com/notes/js-error-types/</guid><description>JavaScript Error Types — ประเภท Error ที่ควรรู้</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>error-handling</category><category>programming</category></item><item><title>[Note] Event Delegation — ผูก listener ครั้งเดียวกับ parent</title><link>https://panupongws.com/notes/js-event-delegation/</link><guid isPermaLink="true">https://panupongws.com/notes/js-event-delegation/</guid><description>Event Delegation — ผูก listener ครั้งเดียวกับ parent</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>dom</category><category>performance</category><category>frontend</category></item><item><title>[Note] fetch + ReadableStream — อ่านข้อมูลแบบ streaming</title><link>https://panupongws.com/notes/js-fetch-stream/</link><guid isPermaLink="true">https://panupongws.com/notes/js-fetch-stream/</guid><description>fetch + ReadableStream — อ่านข้อมูลแบบ streaming</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>fetch</category><category>browser</category><category>frontend</category></item><item><title>[Note] Intl API — format ตัวเลข วันที่ และ relative time แบบ native</title><link>https://panupongws.com/notes/js-intl-api/</link><guid isPermaLink="true">https://panupongws.com/notes/js-intl-api/</guid><description>Intl API — format ตัวเลข วันที่ และ relative time แบบ native</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>i18n</category><category>browser</category><category>frontend</category></item><item><title>[Note] TypeScript Declaration Merging — ต่อเติม type ที่มีอยู่</title><link>https://panupongws.com/notes/ts-declaration-merging/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-declaration-merging/</guid><description>TypeScript Declaration Merging — ต่อเติม type ที่มีอยู่</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>types</category><category>programming</category></item><item><title>[Note] TypeScript Exhaustive Check — ให้ compiler บอกเมื่อลืม case</title><link>https://panupongws.com/notes/ts-exhaustive-check/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-exhaustive-check/</guid><description>TypeScript Exhaustive Check — ให้ compiler บอกเมื่อลืม case</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>types</category><category>programming</category></item><item><title>[Project] AI Prompt Library</title><link>https://panupongws.com/projects/ai-prompt-library/</link><guid isPermaLink="true">https://panupongws.com/projects/ai-prompt-library/</guid><description>คลัง prompts ส่วนตัวที่ใช้จริง จัดเก็บเป็น Markdown ใน ~/.prompts/ พร้อม CLI สำหรับค้นหา, ใช้งาน และ track ว่า prompt ไหนให้ผลดี</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>cli</category><category>nodejs</category><category>productivity</category><category>prompt-engineering</category></item><item><title>[Project] Astro Blog Theme</title><link>https://panupongws.com/projects/astro-blog-theme/</link><guid isPermaLink="true">https://panupongws.com/projects/astro-blog-theme/</guid><description>Minimal Astro blog starter theme ที่ focus บน typography, dark mode, และ content — ไม่มี bloat</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>typescript</category><category>static-site</category><category>design</category><category>open-source</category><category>frontend</category></item><item><title>[Project] CSS Variable Toolkit</title><link>https://panupongws.com/projects/css-variable-toolkit/</link><guid isPermaLink="true">https://panupongws.com/projects/css-variable-toolkit/</guid><description>npm package สำหรับ CSS custom properties — ชุด design tokens, utility mixins, และ dark mode theme generator พร้อมใช้ใน Astro, Next.js, และ Vanilla CSS</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>npm</category><category>design-tokens</category><category>open-source</category></item><item><title>[Project] Dev Session Starter</title><link>https://panupongws.com/projects/dev-session-starter/</link><guid isPermaLink="true">https://panupongws.com/projects/dev-session-starter/</guid><description>Script และ tmux config สำหรับเปิด development environment ด้วยคำสั่งเดียว — sessions, panes, และ services ขึ้นมาพร้อมทำงานทันที</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>tmux</category><category>productivity</category><category>cli</category><category>terminal</category><category>automation</category></item><item><title>[Project] E-commerce Content AI</title><link>https://panupongws.com/projects/e-commerce-content-ai/</link><guid isPermaLink="true">https://panupongws.com/projects/e-commerce-content-ai/</guid><description>ใช้ Claude API สร้าง product descriptions สำหรับอะไหล่มอเตอร์ไซค์ — รับ spec จาก CSV, ส่งผ่าน Anthropic SDK, export เป็น JSON/Markdown ที่พร้อม copy เข้า platform</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude</category><category>nodejs</category><category>automation</category><category>e-commerce</category></item><item><title>[Project] JSON Diff Visualizer</title><link>https://panupongws.com/projects/json-diff-visualizer/</link><guid isPermaLink="true">https://panupongws.com/projects/json-diff-visualizer/</guid><description>เว็บ tool สำหรับเปรียบ JSON สอง version แบบ side-by-side พร้อม highlight การเปลี่ยนแปลงแบบ nested</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>tool</category><category>json</category><category>frontend</category><category>typescript</category><category>diff</category><category>developer-tools</category></item><item><title>[Project] Markdown Notes Exporter</title><link>https://panupongws.com/projects/markdown-notes-exporter/</link><guid isPermaLink="true">https://panupongws.com/projects/markdown-notes-exporter/</guid><description>Script สำหรับ export note จาก Obsidian vault เป็น formats ต่างๆ — PDF, HTML, และ clean Markdown ที่ไม่มี wiki links</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>cli</category><category>node</category><category>typescript</category><category>markdown</category><category>obsidian</category><category>productivity</category></item><item><title>[Project] quick-note-cli</title><link>https://panupongws.com/projects/quick-note-cli/</link><guid isPermaLink="true">https://panupongws.com/projects/quick-note-cli/</guid><description>terminal notepad เขียนด้วย Node.js — บันทึก note ลง ~/.notes/ ด้วยคำสั่งเดียว พร้อม tag, search, และ export เป็น markdown</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>nodejs</category><category>cli</category><category>typescript</category><category>productivity</category></item><item><title>[Project] RSS Reader CLI</title><link>https://panupongws.com/projects/rss-reader-cli/</link><guid isPermaLink="true">https://panupongws.com/projects/rss-reader-cli/</guid><description>CLI tool สำหรับอ่าน RSS feeds ใน terminal — ดึง feed, แสดงบทความล่าสุด, บันทึก source ไว้ใน config</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>cli</category><category>node</category><category>typescript</category><category>rss</category><category>terminal</category><category>productivity</category></item><item><title>[Project] Site Screenshot Tool</title><link>https://panupongws.com/projects/site-screenshot-tool/</link><guid isPermaLink="true">https://panupongws.com/projects/site-screenshot-tool/</guid><description>CLI tool ถ่าย screenshot จาก URL list ด้วย Playwright — รองรับ responsive breakpoints, dark mode และ batch export</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>cli</category><category>playwright</category><category>typescript</category><category>tools</category><category>automation</category></item><item><title>[Project] Type Scale Explorer</title><link>https://panupongws.com/projects/type-scale-explorer/</link><guid isPermaLink="true">https://panupongws.com/projects/type-scale-explorer/</guid><description>เครื่องมือสำรวจ typographic scale แบบ visual — ปรับ base size, ratio, และ font family แล้วดู preview ทันที</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typography</category><category>design</category><category>css</category><category>tool</category><category>frontend</category></item><item><title>[Resource] AI Agents &amp; Agentic Patterns</title><link>https://panupongws.com/resources/ai-agents-patterns/</link><guid isPermaLink="true">https://panupongws.com/resources/ai-agents-patterns/</guid><description>สถาปัตยกรรมและ patterns สำหรับ AI agents: agentic loop, tool use, multi-step planning, orchestration, parallel agents และการจัดการ context window</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude</category><category>agents</category><category>automation</category><category>patterns</category></item><item><title>[Resource] Astro Islands Architecture — JavaScript เฉพาะที่จำเป็น</title><link>https://panupongws.com/resources/astro-islands-architecture/</link><guid isPermaLink="true">https://panupongws.com/resources/astro-islands-architecture/</guid><description>เข้าใจ Islands Architecture ของ Astro ว่าทำงานอย่างไร ทำไมถึงส่ง zero JS by default และเมื่อไรควรใช้ client directives เพื่อ hydrate component</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>performance</category><category>web</category><category>static-site</category></item><item><title>[Resource] Astro Server Islands — Dynamic Content ใน Static Site</title><link>https://panupongws.com/resources/astro-server-islands/</link><guid isPermaLink="true">https://panupongws.com/resources/astro-server-islands/</guid><description>Server Islands คือ Astro 5 feature ที่ช่วยฝัง dynamic server-rendered component ลงใน static page โดยไม่ต้อง sacrifice performance ของหน้าอื่น</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>performance</category><category>frontend</category><category>ssr</category></item><item><title>[Resource] Browser DevTools Tips — Debug เร็วขึ้น 10 เท่า</title><link>https://panupongws.com/resources/browser-devtools-tips/</link><guid isPermaLink="true">https://panupongws.com/resources/browser-devtools-tips/</guid><description>เทคนิค DevTools ที่ใช้บ่อยใน Chrome และ Firefox — Console shortcuts, Network tab, CSS live edit, Performance profiling, Accessibility panel และ JavaScript debugging</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>tools</category><category>tips</category><category>web</category></item><item><title>[Resource] Browser Web APIs — ResizeObserver, Clipboard, Broadcast Channel, Web Workers</title><link>https://panupongws.com/resources/browser-web-apis/</link><guid isPermaLink="true">https://panupongws.com/resources/browser-web-apis/</guid><description>Web APIs ที่ใช้บ่อยและมักถูกมองข้าม: ResizeObserver, MutationObserver, Clipboard, Broadcast Channel, Web Workers</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>web-apis</category><category>frontend</category><category>browser</category><category>performance</category></item><item><title>[Resource] Claude API &amp; Anthropic SDK</title><link>https://panupongws.com/resources/claude-api-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/claude-api-guide/</guid><description>ใช้งาน Anthropic SDK กับ TypeScript: Messages API, streaming, tool use (function calling), system prompts, token counting และ best practices</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude</category><category>typescript</category><category>api</category><category>automation</category></item><item><title>[Resource] CSS Animations &amp; Transitions — ทำ UI ให้มีชีวิตชีวา</title><link>https://panupongws.com/resources/css-animations-transitions/</link><guid isPermaLink="true">https://panupongws.com/resources/css-animations-transitions/</guid><description>รวม pattern CSS animation และ transition ที่ใช้จริงในการสร้าง UI ที่ smooth — hover effects, micro-interactions, page transitions และ reduced motion</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>web</category><category>performance</category><category>tips</category></item><item><title>[Resource] CSS Architecture — BEM, CUBE CSS, Utility Classes</title><link>https://panupongws.com/resources/css-architecture-bem/</link><guid isPermaLink="true">https://panupongws.com/resources/css-architecture-bem/</guid><description>แนวทางจัดการ CSS ใน project ขนาดใหญ่: BEM naming, CUBE CSS methodology, เปรียบเทียบ Tailwind vs custom CSS</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>architecture</category><category>bem</category><category>design-system</category><category>frontend</category></item><item><title>[Resource] CSS @property — Typed Custom Properties</title><link>https://panupongws.com/resources/css-at-property/</link><guid isPermaLink="true">https://panupongws.com/resources/css-at-property/</guid><description>CSS @property ทำให้ custom properties มี type, initial value, และ inheritance control — รองรับ animation ของ color, number, และ gradient</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>advanced</category><category>animation</category><category>frontend</category></item><item><title>[Resource] CSS Cascade Layers — จัดการ Specificity แบบมีระบบ</title><link>https://panupongws.com/resources/css-cascade-layers/</link><guid isPermaLink="true">https://panupongws.com/resources/css-cascade-layers/</guid><description>@layer ช่วยควบคุมลำดับความสำคัญของ CSS โดยไม่ต้องพึ่ง specificity hack หรือ !important</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>cascade</category><category>layers</category><category>frontend</category><category>architecture</category></item><item><title>[Resource] CSS color-mix() และ Modern Color Functions</title><link>https://panupongws.com/resources/css-color-mix/</link><guid isPermaLink="true">https://panupongws.com/resources/css-color-mix/</guid><description>color-mix() ผสมสีโดยตรงใน CSS, relative color syntax แก้ไข channel เดียว, light-dark() สำหรับ adaptive color ไม่ต้องการ media query</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>color</category><category>frontend</category><category>advanced</category></item><item><title>[Resource] CSS Container Queries — Responsive ตาม Container ไม่ใช่ Viewport</title><link>https://panupongws.com/resources/css-container-queries/</link><guid isPermaLink="true">https://panupongws.com/resources/css-container-queries/</guid><description>Container queries ให้ component ปรับ layout ตามขนาดของ parent container แทน viewport — ทำให้ component เป็น truly reusable ในทุกที่ที่วาง</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>tips</category><category>web</category></item><item><title>[Resource] CSS Flexbox Cheatsheet — จัดวาง Layout ให้ตรงใจ</title><link>https://panupongws.com/resources/css-flexbox-cheatsheet/</link><guid isPermaLink="true">https://panupongws.com/resources/css-flexbox-cheatsheet/</guid><description>รวม CSS Flexbox properties ที่ใช้บ่อย ทั้ง container และ item properties พร้อม visual guide และ use cases จริงสำหรับ navigation, card grid, centering</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>tips</category></item><item><title>[Resource] CSS Grid Advanced — Subgrid, Template Areas, Named Lines</title><link>https://panupongws.com/resources/css-grid-advanced/</link><guid isPermaLink="true">https://panupongws.com/resources/css-grid-advanced/</guid><description>เทคนิค Grid ระดับสูง: subgrid, named grid areas, auto-placement algorithm, และ grid ซ้อน grid</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>grid</category><category>layout</category><category>frontend</category><category>advanced</category></item><item><title>[Resource] CSS Logical Properties — Writing Mode Aware Layout</title><link>https://panupongws.com/resources/css-logical-properties/</link><guid isPermaLink="true">https://panupongws.com/resources/css-logical-properties/</guid><description>margin-inline, padding-block, inset-inline-start — เขียน CSS ที่รองรับ RTL และ vertical text โดยไม่ต้องเขียน rule ซ้ำ</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>logical-properties</category><category>i18n</category><category>frontend</category><category>layout</category></item><item><title>[Resource] CSS Nesting — Native Nested Selectors</title><link>https://panupongws.com/resources/css-nesting/</link><guid isPermaLink="true">https://panupongws.com/resources/css-nesting/</guid><description>CSS Nesting ที่รองรับใน browser ตั้งแต่ Chrome 120+ ทำให้เขียน nested selectors ได้โดยไม่ต้องใช้ Sass — ครอบคลุม syntax, &amp;, @nest, และ gotchas</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>frontend</category><category>advanced</category></item><item><title>[Resource] CSS oklch() — ระบบสีสมัยใหม่ที่ดีกว่า hsl()</title><link>https://panupongws.com/resources/css-oklch-color-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/css-oklch-color-guide/</guid><description>oklch() คือ color space ที่มนุษย์มองเห็นได้สม่ำเสมอ (perceptually uniform) — สร้าง palette ที่ consistent กว่าเดิมด้วย 3 ค่า: Lightness, Chroma, Hue</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>design</category><category>color</category><category>frontend</category></item><item><title>[Resource] CSS Scroll-Driven Animations</title><link>https://panupongws.com/resources/css-scroll-driven-animations/</link><guid isPermaLink="true">https://panupongws.com/resources/css-scroll-driven-animations/</guid><description>Animate elements ตาม scroll position โดยใช้ animation-timeline: scroll() และ view() — ไม่ต้องการ JavaScript หรือ ScrollTrigger</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>animation</category><category>frontend</category><category>performance</category><category>advanced</category></item><item><title>[Resource] CSS Scroll Snap</title><link>https://panupongws.com/resources/css-scroll-snap/</link><guid isPermaLink="true">https://panupongws.com/resources/css-scroll-snap/</guid><description>CSS Scroll Snap สำหรับ carousel, full-page scroll และ horizontal scroll — scroll-snap-type, scroll-snap-align, mandatory vs proximity, และ scroll-padding</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>frontend</category><category>ux</category><category>tips</category></item><item><title>[Resource] CSS Subgrid — Nested Grids ที่ Align กับ Parent</title><link>https://panupongws.com/resources/css-subgrid/</link><guid isPermaLink="true">https://panupongws.com/resources/css-subgrid/</guid><description>CSS Subgrid ช่วยให้ nested elements align กับ grid ของ parent ได้ — แก้ปัญหา misaligned columns ใน card grids</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>grid</category><category>layout</category><category>frontend</category><category>advanced</category></item><item><title>[Resource] Deploying Static Sites — Vercel, Netlify, GitHub Pages</title><link>https://panupongws.com/resources/deploying-static-sites/</link><guid isPermaLink="true">https://panupongws.com/resources/deploying-static-sites/</guid><description>วิธี deploy static site ด้วย Vercel, Netlify, และ GitHub Pages — เปรียบเทียบ features, ราคา, และ workflow</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>deployment</category><category>devops</category><category>static-site</category><category>astro</category><category>git</category><category>frontend</category></item><item><title>[Resource] Docker Basics — Container, Image, Compose</title><link>https://panupongws.com/resources/docker-basics/</link><guid isPermaLink="true">https://panupongws.com/resources/docker-basics/</guid><description>คำสั่ง Docker ที่ใช้บ่อยสำหรับ developer: build image, run container, Compose, volume, network</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>docker</category><category>devops</category><category>cli</category><category>node</category><category>productivity</category></item><item><title>[Resource] ESLint + Prettier Configuration — TypeScript Project Setup</title><link>https://panupongws.com/resources/eslint-prettier-config/</link><guid isPermaLink="true">https://panupongws.com/resources/eslint-prettier-config/</guid><description>ตั้งค่า ESLint + Prettier ที่ทำงานร่วมกันได้สำหรับ TypeScript project: rules, integrations, pre-commit hooks</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tooling</category><category>eslint</category><category>prettier</category><category>configuration</category><category>frontend</category></item><item><title>[Resource] Fetch API Patterns — Data Fetching, AbortController, Retry</title><link>https://panupongws.com/resources/fetch-api-patterns/</link><guid isPermaLink="true">https://panupongws.com/resources/fetch-api-patterns/</guid><description>Patterns สำหรับ fetch ข้อมูล: timeout, retry, AbortController, error handling, caching headers, streaming response</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>fetch</category><category>async</category><category>web-apis</category><category>frontend</category><category>performance</category></item><item><title>[Resource] Git Advanced — Rebase, Stash, Bisect, Reflog</title><link>https://panupongws.com/resources/git-advanced-rebase/</link><guid isPermaLink="true">https://panupongws.com/resources/git-advanced-rebase/</guid><description>คำสั่ง Git ขั้นสูงที่ใช้บ่อยในงานจริง: interactive rebase, stash, cherry-pick, bisect, reflog, และ fixup workflow</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>workflow</category><category>cli</category><category>productivity</category><category>advanced</category></item><item><title>[Resource] Git Branching Workflow — Feature Branch, Trunk-Based, GitFlow</title><link>https://panupongws.com/resources/git-branching-workflow/</link><guid isPermaLink="true">https://panupongws.com/resources/git-branching-workflow/</guid><description>เปรียบเทียบ branching strategy แต่ละแบบ เมื่อไหรควรใช้อะไร พร้อม command ที่ใช้บ่อย</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>workflow</category><category>team</category><category>devops</category><category>cli</category></item><item><title>[Resource] GitHub Actions Advanced — Matrix, Cache, Reusable Workflows</title><link>https://panupongws.com/resources/github-actions-advanced/</link><guid isPermaLink="true">https://panupongws.com/resources/github-actions-advanced/</guid><description>GitHub Actions ขั้นสูง: matrix builds, dependency caching, reusable workflows, environment secrets, และ workflow triggers</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>github</category><category>ci-cd</category><category>workflow</category><category>tooling</category><category>devops</category><category>automation</category></item><item><title>[Resource] GitHub Actions สำหรับ Static Site — CI/CD อัตโนมัติ</title><link>https://panupongws.com/resources/github-actions-static-site/</link><guid isPermaLink="true">https://panupongws.com/resources/github-actions-static-site/</guid><description>ตั้งค่า GitHub Actions workflow สำหรับ static site ให้รัน build check อัตโนมัติทุก push และ deploy ไปยัง Railway หรือ GitHub Pages เมื่อ merge เข้า main</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>tools</category><category>web</category></item><item><title>[Resource] GSAP Animation Guide — คู่มือ Animation ที่ทุก Frontend ควรรู้</title><link>https://panupongws.com/resources/gsap-animation-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/gsap-animation-guide/</guid><description>GSAP คืออะไร ทำงานยังไง และวิธีใช้งานจริงในโปรเจกต์ — ตั้งแต่ gsap.to() พื้นฐานไปถึง ScrollTrigger และ Timeline</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>gsap</category><category>animation</category><category>javascript</category><category>frontend</category><category>css</category></item><item><title>[Resource] HTML Forms &amp; Native Validation</title><link>https://panupongws.com/resources/html-forms-validation/</link><guid isPermaLink="true">https://panupongws.com/resources/html-forms-validation/</guid><description>Native HTML5 form validation, Constraint Validation API, custom error messages, และ patterns สำหรับ accessible forms</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>html</category><category>javascript</category><category>accessibility</category><category>frontend</category></item><item><title>[Resource] HTML Semantic Elements — เขียน HTML ให้มีความหมาย</title><link>https://panupongws.com/resources/html-semantic-elements/</link><guid isPermaLink="true">https://panupongws.com/resources/html-semantic-elements/</guid><description>รวม HTML5 semantic elements ที่ควรรู้ทั้งหมด ว่าควรใช้ element ไหนในสถานการณ์ใด ทำไมถึงสำคัญต่อ accessibility และ SEO และความสัมพันธ์กับ ARIA</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>web</category><category>tips</category><category>css</category></item><item><title>[Resource] HTTP Caching — Cache-Control, ETag, Stale-While-Revalidate</title><link>https://panupongws.com/resources/http-caching-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/http-caching-guide/</guid><description>ทำความเข้าใจ HTTP caching headers ที่ถูกต้อง ลด server load และเร็วขึ้นสำหรับผู้ใช้กลับมา</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>http</category><category>caching</category><category>performance</category><category>web</category><category>devops</category></item><item><title>[Resource] Browser Storage — localStorage, sessionStorage, IndexedDB</title><link>https://panupongws.com/resources/indexeddb-storage-patterns/</link><guid isPermaLink="true">https://panupongws.com/resources/indexeddb-storage-patterns/</guid><description>เปรียบเทียบและใช้งาน browser storage: localStorage สำหรับ simple KV, IndexedDB สำหรับ structured data ขนาดใหญ่</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>web-apis</category><category>browser</category><category>frontend</category><category>performance</category></item><item><title>[Resource] Intersection Observer API — Lazy Load, Scroll Animations, Infinite Scroll</title><link>https://panupongws.com/resources/intersection-observer-api/</link><guid isPermaLink="true">https://panupongws.com/resources/intersection-observer-api/</guid><description>ใช้ IntersectionObserver ตรวจว่า element เข้า/ออก viewport โดยไม่ต้องใช้ scroll event</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>web-apis</category><category>performance</category><category>frontend</category><category>animation</category></item><item><title>[Resource] JavaScript Array Methods ที่ใช้บ่อยใน Frontend</title><link>https://panupongws.com/resources/javascript-array-methods/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-array-methods/</guid><description>รวม array methods สำคัญใน JavaScript/TypeScript ที่ใช้จริงในการ transform, filter, และ reduce data ก่อน render ใน Astro/React</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tips</category><category>web</category></item><item><title>[Resource] JavaScript Closures และ Scope — เข้าใจจริง ไม่ใช่แค่ท่อง</title><link>https://panupongws.com/resources/javascript-closures-scope/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-closures-scope/</guid><description>Scope chain, lexical environment, closures ทำงานยังไง, และ use cases จริงที่เจอบ่อย</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>closures</category><category>scope</category><category>fundamentals</category><category>frontend</category></item><item><title>[Resource] JavaScript Date &amp; Intl API — จัดการวันที่และการแสดงผลหลายภาษา</title><link>https://panupongws.com/resources/javascript-date-intl/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-date-intl/</guid><description>วิธีใช้ Date object, Intl.DateTimeFormat, Intl.NumberFormat, Intl.RelativeTimeFormat และ Temporal API สำหรับจัดการวันที่ใน JavaScript โดยไม่ต้องใช้ library</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>typescript</category><category>tips</category></item><item><title>[Resource] JavaScript Design Patterns</title><link>https://panupongws.com/resources/javascript-design-patterns/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-design-patterns/</guid><description>Design patterns ที่ใช้บ่อยใน JavaScript/TypeScript: Singleton, Observer, Factory, Strategy, Command, และ Module pattern</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>typescript</category><category>patterns</category><category>advanced</category></item><item><title>[Resource] JavaScript Error Handling — try/catch, Custom Errors, Result Pattern</title><link>https://panupongws.com/resources/javascript-error-handling/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-error-handling/</guid><description>Patterns สำหรับจัดการ errors ใน JavaScript/TypeScript: custom error classes, error chaining, Result type, async error handling</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>typescript</category><category>patterns</category><category>async</category><category>frontend</category></item><item><title>[Resource] JavaScript Generators และ Iterators — Lazy Sequences</title><link>https://panupongws.com/resources/javascript-generators/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-generators/</guid><description>function*, yield, iterators protocol และ use cases จริง: infinite sequences, async generators, pipeline</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>generators</category><category>iterators</category><category>advanced</category><category>frontend</category></item><item><title>[Resource] JavaScript Modern APIs (2023–2025)</title><link>https://panupongws.com/resources/javascript-modern-apis/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-modern-apis/</guid><description>APIs ใหม่ที่ใช้ได้ใน modern browsers และ Node.js: Object.groupBy, Array methods ใหม่, structuredClone, Promise.withResolvers, และอื่นๆ</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>web-apis</category><category>frontend</category><category>node</category></item><item><title>[Resource] JavaScript Modules (ESM) — Import/Export ที่ควรรู้</title><link>https://panupongws.com/resources/javascript-modules-esm/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-modules-esm/</guid><description>เข้าใจ ES Modules, named exports, default exports, dynamic import(), re-exports และการใช้ร่วมกับ TypeScript และ Astro</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>typescript</category><category>tips</category></item><item><title>[Resource] JavaScript Promises &amp; Async/Await — จัดการ Asynchronous อย่างถูกต้อง</title><link>https://panupongws.com/resources/javascript-promises-async-await/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-promises-async-await/</guid><description>อธิบาย Promise chain, async/await, error handling, Promise.all/race/allSettled และ pitfalls ที่พบบ่อยเมื่อเขียน async JavaScript ใน TypeScript</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>typescript</category><category>tips</category></item><item><title>[Resource] JavaScript Proxy &amp; Reflect</title><link>https://panupongws.com/resources/javascript-proxy-reflect/</link><guid isPermaLink="true">https://panupongws.com/resources/javascript-proxy-reflect/</guid><description>Proxy ดักจับ operations บน object (get, set, delete) และ Reflect ให้ default behavior — ใช้สร้าง reactive data, validation, lazy loading</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>advanced</category><category>patterns</category><category>frontend</category></item><item><title>[Resource] Node.js CLI Tools — commander, inquirer, chalk, ora</title><link>https://panupongws.com/resources/node-cli-tools/</link><guid isPermaLink="true">https://panupongws.com/resources/node-cli-tools/</guid><description>สร้าง CLI tool ด้วย Node.js: parse args ด้วย commander, prompts ด้วย inquirer, colors ด้วย chalk, spinner ด้วย ora</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>node</category><category>cli</category><category>typescript</category><category>productivity</category><category>automation</category></item><item><title>[Resource] Node.js File System — fs/promises, path, Common Patterns</title><link>https://panupongws.com/resources/node-js-file-system/</link><guid isPermaLink="true">https://panupongws.com/resources/node-js-file-system/</guid><description>อ่าน เขียน คัดลอก ลบไฟล์และ directory ด้วย fs/promises และ path module — patterns ที่ใช้บ่อยใน scripts</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>node</category><category>javascript</category><category>cli</category><category>file-system</category><category>typescript</category></item><item><title>[Resource] Node.js Streams — Readable, Writable, Transform, Pipeline</title><link>https://panupongws.com/resources/node-js-streams/</link><guid isPermaLink="true">https://panupongws.com/resources/node-js-streams/</guid><description>จัดการข้อมูลปริมาณมากด้วย Node.js Streams: pipe, pipeline, Transform streams, backpressure, และ async iteration</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>node</category><category>javascript</category><category>cli</category><category>performance</category><category>advanced</category></item><item><title>[Resource] npm Scripts — Task Automation โดยไม่ต้องใช้ Gulp หรือ Makefile</title><link>https://panupongws.com/resources/npm-scripts-automation/</link><guid isPermaLink="true">https://panupongws.com/resources/npm-scripts-automation/</guid><description>ใช้ npm scripts ใน package.json เป็น task runner สำหรับ build, dev, lint, format, test และ deploy — ไม่ต้องติดตั้ง tool เพิ่ม เพราะ npm มีให้ทุก project อยู่แล้ว</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>tools</category><category>productivity</category><category>tips</category></item><item><title>[Resource] npm Workspaces &amp; Monorepo Basics</title><link>https://panupongws.com/resources/npm-workspaces-monorepo/</link><guid isPermaLink="true">https://panupongws.com/resources/npm-workspaces-monorepo/</guid><description>จัดการ multiple packages ใน repo เดียวด้วย npm workspaces — shared dependencies, cross-package scripts, และ monorepo patterns</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>npm</category><category>node</category><category>tooling</category><category>workflow</category><category>typescript</category><category>advanced</category></item><item><title>[Resource] package.json Modern Fields — exports, type, engines</title><link>https://panupongws.com/resources/package-json-exports/</link><guid isPermaLink="true">https://panupongws.com/resources/package-json-exports/</guid><description>Fields สำคัญใน package.json สำหรับ modern npm packages: exports map, type: module, engines, files, และ npm publish workflow</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>npm</category><category>node</category><category>tooling</category><category>typescript</category><category>configuration</category></item><item><title>[Resource] Playwright E2E Testing — Browser Automation for Modern Web</title><link>https://panupongws.com/resources/playwright-e2e-testing/</link><guid isPermaLink="true">https://panupongws.com/resources/playwright-e2e-testing/</guid><description>ทดสอบ UI แบบ end-to-end ด้วย Playwright: เขียน tests, locators, page objects, API mocking, CI integration</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>testing</category><category>playwright</category><category>automation</category><category>frontend</category><category>cli</category></item><item><title>[Resource] Prompt Engineering — Patterns ที่ใช้จริง</title><link>https://panupongws.com/resources/prompt-engineering-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/prompt-engineering-guide/</guid><description>เทคนิค prompt engineering ที่ใช้กับ Claude และ LLM ทั่วไป: zero-shot, few-shot, chain-of-thought, system prompts, structured output และ prompt injection</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude</category><category>prompt-engineering</category><category>automation</category></item><item><title>[Resource] Progressive Web App (PWA) — Manifest, Service Worker, Offline</title><link>https://panupongws.com/resources/pwa-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/pwa-guide/</guid><description>สร้าง PWA ตั้งแต่ web app manifest ถึง service worker caching strategy และ install prompt</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>pwa</category><category>service-worker</category><category>web</category><category>offline</category><category>frontend</category><category>performance</category></item><item><title>[Resource] Regular Expressions ใน JavaScript — Pattern Matching ที่ใช้ได้จริง</title><link>https://panupongws.com/resources/regular-expressions-javascript/</link><guid isPermaLink="true">https://panupongws.com/resources/regular-expressions-javascript/</guid><description>Regex patterns ที่ใช้บ่อยใน JavaScript และ TypeScript รวม flags, character classes, groups, lookahead/lookbehind และ use cases จริงสำหรับ validation และ parsing</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>typescript</category><category>tips</category></item><item><title>[Resource] TypeScript Conditional Types — infer, Mapped Types, Template Literal Types</title><link>https://panupongws.com/resources/typescript-conditional-types/</link><guid isPermaLink="true">https://panupongws.com/resources/typescript-conditional-types/</guid><description>เทคนิค TypeScript ระดับสูง: conditional types, infer keyword, mapped types modifiers, template literal types</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>advanced</category><category>types</category><category>frontend</category></item><item><title>[Resource] TypeScript Configuration — tsconfig.json Guide</title><link>https://panupongws.com/resources/typescript-config-tsconfig/</link><guid isPermaLink="true">https://panupongws.com/resources/typescript-config-tsconfig/</guid><description>เข้าใจ tsconfig.json ทุก option ที่สำคัญ: strict mode, paths, module resolution, target, lib — ตั้งค่าให้ถูกสำหรับแต่ละ project</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>configuration</category><category>node</category><category>frontend</category><category>build-tools</category></item><item><title>[Resource] TypeScript Generics — เขียน Code ที่ flexible และ type-safe</title><link>https://panupongws.com/resources/typescript-generics/</link><guid isPermaLink="true">https://panupongws.com/resources/typescript-generics/</guid><description>เข้าใจ TypeScript generics ตั้งแต่พื้นฐานจนถึง advanced — generic functions, constraints, conditional types, infer keyword และ utility types ที่สร้างเอง</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tips</category><category>types</category></item><item><title>[Resource] TypeScript Module Augmentation &amp; Declaration Merging</title><link>https://panupongws.com/resources/typescript-module-augmentation/</link><guid isPermaLink="true">https://panupongws.com/resources/typescript-module-augmentation/</guid><description>เพิ่ม types ให้ third-party modules, extend interface ที่มีอยู่, และสร้าง .d.ts files สำหรับ JavaScript libraries</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>advanced</category><category>types</category><category>tooling</category></item><item><title>[Resource] TypeScript Type Narrowing — จัดการ Union Types อย่างปลอดภัย</title><link>https://panupongws.com/resources/typescript-narrowing/</link><guid isPermaLink="true">https://panupongws.com/resources/typescript-narrowing/</guid><description>เทคนิค TypeScript type narrowing ที่ช่วยให้ compiler รู้ type ที่แน่นอน ณ จุดนั้น ครอบคลุม typeof, instanceof, in, discriminated unions และ type guards</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tips</category><category>types</category></item><item><title>[Resource] TypeScript satisfies &amp; const Assertions</title><link>https://panupongws.com/resources/typescript-satisfies-const/</link><guid isPermaLink="true">https://panupongws.com/resources/typescript-satisfies-const/</guid><description>satisfies operator (TS 4.9) และ as const ช่วย infer types ที่แคบลงโดยไม่ต้อง annotate — ทำให้โค้ดปลอดภัยขึ้นโดยไม่เสีย flexibility</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>advanced</category><category>types</category></item><item><title>[Resource] Vite Config Guide — Plugins, Alias, Build Options</title><link>https://panupongws.com/resources/vite-config-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/vite-config-guide/</guid><description>vite.config.ts ตั้งแต่ alias, resolve, plugins จนถึง build optimization และ dev server options</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>vite</category><category>build-tools</category><category>frontend</category><category>javascript</category><category>typescript</category></item><item><title>[Resource] Vitest — Unit Testing สำหรับ TypeScript และ Vite Projects</title><link>https://panupongws.com/resources/vitest-unit-testing/</link><guid isPermaLink="true">https://panupongws.com/resources/vitest-unit-testing/</guid><description>Vitest คือ test runner ที่เร็วที่สุดสำหรับ Vite-based projects — setup วิธีเขียน test และ pattern ที่ใช้จริง</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>vitest</category><category>testing</category><category>typescript</category><category>frontend</category><category>javascript</category></item><item><title>[Resource] VS Code Setup สำหรับ Astro + TypeScript</title><link>https://panupongws.com/resources/vscode-setup-for-astro/</link><guid isPermaLink="true">https://panupongws.com/resources/vscode-setup-for-astro/</guid><description>การตั้งค่า VS Code ที่ทำให้การเขียน Astro + TypeScript smooth ที่สุด — extensions, settings.json, snippets, และ debug config</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>typescript</category><category>productivity</category><category>tools</category></item><item><title>[Resource] Web Components &amp; Custom Elements</title><link>https://panupongws.com/resources/web-components-custom-elements/</link><guid isPermaLink="true">https://panupongws.com/resources/web-components-custom-elements/</guid><description>สร้าง reusable components ด้วย browser APIs โดยตรง: Custom Elements, Shadow DOM, HTML Templates — ไม่ต้องการ framework</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>web-apis</category><category>frontend</category><category>html</category><category>advanced</category></item><item><title>[Resource] Web Fonts Optimization — โหลด Font เร็วโดยไม่กระทบ UX</title><link>https://panupongws.com/resources/web-fonts-optimization/</link><guid isPermaLink="true">https://panupongws.com/resources/web-fonts-optimization/</guid><description>วิธี optimize font loading ให้ไม่เกิด FOUT/FOIT, ใช้ font-display อย่างถูกต้อง, preconnect, self-host fonts, variable fonts และ system font stack</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>web</category><category>performance</category><category>css</category></item><item><title>[Resource] Web Performance Checklist — ตรวจสอบก่อน Ship</title><link>https://panupongws.com/resources/web-performance-checklist/</link><guid isPermaLink="true">https://panupongws.com/resources/web-performance-checklist/</guid><description>Checklist สำหรับ frontend performance ที่ครอบคลุม Core Web Vitals, images, fonts, JavaScript, และ network — ใช้ก่อน deploy ทุกครั้ง</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>performance</category><category>web-vitals</category><category>frontend</category><category>seo</category><category>optimization</category></item><item><title>[Resource] HTTP Security Headers — ป้องกันเว็บด้วย Headers</title><link>https://panupongws.com/resources/web-security-headers/</link><guid isPermaLink="true">https://panupongws.com/resources/web-security-headers/</guid><description>รายการ HTTP security headers ที่ควรตั้งค่าสำหรับเว็บใดก็ตาม ครอบคลุม CSP, HSTS, X-Frame-Options, Permissions-Policy และวิธีตั้งค่าใน Astro + Railway</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>web</category><category>tips</category></item><item><title>[Resource] Zsh/Bash Shell Scripting — Automation ใน Terminal</title><link>https://panupongws.com/resources/zsh-shell-scripting/</link><guid isPermaLink="true">https://panupongws.com/resources/zsh-shell-scripting/</guid><description>เขียน shell scripts สำหรับ automate งาน: variables, conditions, loops, functions, error handling, และ common patterns</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>cli</category><category>terminal</category><category>automation</category><category>linux</category><category>productivity</category></item><item><title>[Note] CSS Anchor Positioning — ยึด element กับ element อื่น</title><link>https://panupongws.com/notes/css-anchor-positioning/</link><guid isPermaLink="true">https://panupongws.com/notes/css-anchor-positioning/</guid><description>CSS Anchor Positioning — ยึด element กับ element อื่น</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>layout</category><category>frontend</category></item><item><title>[Note] sharp รองรับ SVG input ได้โดยตรงผ่าน librsvg</title><link>https://panupongws.com/notes/sharp-svg-to-png/</link><guid isPermaLink="true">https://panupongws.com/notes/sharp-svg-to-png/</guid><description>ไม่ต้องติดตั้ง Inkscape หรือ ImageMagick — sharp แปลง SVG เป็น PNG ได้ทันที</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>nodejs</category><category>tooling</category><category>svg</category></item><item><title>[Project] Panupong WS</title><link>https://panupongws.com/projects/panupong-ws/</link><guid isPermaLink="true">https://panupongws.com/projects/panupong-ws/</guid><description>เว็บส่วนตัวสำหรับรวบรวม projects, resources และ notes ด้าน tech, dev และ graphic design สร้างด้วย Astro และ TypeScript แบบ static site</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>typescript</category><category>web</category><category>personal</category><category>static-site</category><category>content-collections</category></item><item><title>[Resource] SEO Meta Tags — คู่มือครบสำหรับ Static Site</title><link>https://panupongws.com/resources/seo-meta-tags-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/seo-meta-tags-guide/</guid><description>รวม meta tags ที่จำเป็น ตั้งแต่ title, description, Open Graph, Twitter Card ไปจนถึง JSON-LD structured data สำหรับ static site</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><category>web</category><category>astro</category><category>static-site</category><category>performance</category></item><item><title>[Note] Performance API — วัด timing ใน browser อย่างแม่นยำ</title><link>https://panupongws.com/notes/js-performance-api/</link><guid isPermaLink="true">https://panupongws.com/notes/js-performance-api/</guid><description>Performance API — วัด timing ใน browser อย่างแม่นยำ</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>performance</category><category>browser</category><category>frontend</category></item><item><title>[Project] CSS Animation Library</title><link>https://panupongws.com/projects/css-animation-library/</link><guid isPermaLink="true">https://panupongws.com/projects/css-animation-library/</guid><description>collection ของ CSS animation snippets แบบ copy-paste — entrance, exit, loading, micro-interaction พร้อม Astro demo page</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>animation</category><category>frontend</category><category>tools</category></item><item><title>[Resource] Responsive Design Patterns — CSS ที่ใช้จริงบน Static Site</title><link>https://panupongws.com/resources/responsive-design-patterns/</link><guid isPermaLink="true">https://panupongws.com/resources/responsive-design-patterns/</guid><description>Pattern สำหรับ responsive layout บน CSS ล้วนๆ ที่ใช้ได้จริง ครอบคลุม fluid typography, container queries, intrinsic grid และ mobile-first approach</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>web</category><category>tips</category><category>performance</category></item><item><title>[Note] TypeScript Conditional Types — T extends U ? X : Y</title><link>https://panupongws.com/notes/ts-conditional-types/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-conditional-types/</guid><description>TypeScript Conditional Types — T extends U ? X : Y</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>types</category><category>programming</category></item><item><title>[Project] Color Contrast Checker</title><link>https://panupongws.com/projects/color-contrast-checker/</link><guid isPermaLink="true">https://panupongws.com/projects/color-contrast-checker/</guid><description>CLI + Web tool ตรวจ WCAG color contrast ratio — รับ hex/rgb/hsl แสดง pass/fail AA/AAA และ suggest สี alternative</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><category>accessibility</category><category>tools</category><category>typescript</category><category>css</category><category>cli</category></item><item><title>[Project] Schema Markup Generator</title><link>https://panupongws.com/projects/schema-markup-generator/</link><guid isPermaLink="true">https://panupongws.com/projects/schema-markup-generator/</guid><description>Web tool สร้าง JSON-LD structured data สำหรับ e-commerce — Product, BreadcrumbList, Organization schema พร้อม copy-paste</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>seo</category><category>e-commerce</category><category>tools</category><category>javascript</category><category>json</category></item><item><title>[Resource] HTMX — HTML Attributes แทน JavaScript สำหรับ Dynamic UI</title><link>https://panupongws.com/resources/htmx-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/htmx-guide/</guid><description>คู่มือ HTMX — ทำ AJAX, WebSocket และ SSE ด้วย HTML attributes โดยไม่เขียน JavaScript</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>frontend</category><category>html</category><category>tools</category><category>performance</category><category>javascript</category></item><item><title>[Resource] Linux Terminal Tips สำหรับ Web Developer</title><link>https://panupongws.com/resources/linux-terminal-tips/</link><guid isPermaLink="true">https://panupongws.com/resources/linux-terminal-tips/</guid><description>รวม command และ pattern ที่ใช้บ่อยใน terminal — file management, git shortcuts, process, และ productivity tips สำหรับ dev workflow</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>cli</category><category>productivity</category><category>tools</category><category>tips</category></item><item><title>[Resource] Turborepo — Monorepo Build System ที่เร็วด้วย Cache</title><link>https://panupongws.com/resources/monorepo-turborepo/</link><guid isPermaLink="true">https://panupongws.com/resources/monorepo-turborepo/</guid><description>คู่มือ Turborepo สำหรับจัดการ monorepo — task pipeline, remote caching และการตั้งค่า workspace กับ pnpm</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>monorepo</category><category>tools</category><category>node</category><category>typescript</category><category>productivity</category></item><item><title>[Note] CSS :has() เปลี่ยนวิธีเขียน hamburger nav ไปเลย</title><link>https://panupongws.com/notes/css-has-selector/</link><guid isPermaLink="true">https://panupongws.com/notes/css-has-selector/</guid><description>:has() ทำให้ hamburger menu เป็น CSS-only ได้จริงโดยไม่ต้อง JavaScript</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>frontend</category><category>tips</category></item><item><title>[Note] git reflog — กู้ commit ที่หายไปแล้ว</title><link>https://panupongws.com/notes/git-reflog/</link><guid isPermaLink="true">https://panupongws.com/notes/git-reflog/</guid><description>git reflog — กู้ commit ที่หายไปแล้ว</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>cli</category><category>tips</category></item><item><title>[Note] CSS View Transitions API — page transition แบบ native</title><link>https://panupongws.com/notes/css-view-transitions/</link><guid isPermaLink="true">https://panupongws.com/notes/css-view-transitions/</guid><description>CSS View Transitions API — page transition แบบ native</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>javascript</category><category>animation</category><category>browser</category></item><item><title>[Resource] Cloudflare Workers — Serverless บน Edge Network</title><link>https://panupongws.com/resources/cloudflare-workers-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/cloudflare-workers-guide/</guid><description>คู่มือ Cloudflare Workers — เขียน serverless function ที่รันบน 300+ edge locations พร้อม KV, D1, R2 storage</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><category>edge</category><category>serverless</category><category>javascript</category><category>backend</category><category>deployment</category></item><item><title>[Resource] OpenAI API — Text Generation, Vision และ Embeddings</title><link>https://panupongws.com/resources/openai-api-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/openai-api-guide/</guid><description>คู่มือใช้ OpenAI API กับ Node.js/TypeScript — chat completions, streaming, vision และ embeddings</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>api</category><category>typescript</category><category>node</category><category>tools</category></item><item><title>[Resource] Web Accessibility Checklist — สิ่งที่ต้องทำก่อน Deploy</title><link>https://panupongws.com/resources/web-accessibility-checklist/</link><guid isPermaLink="true">https://panupongws.com/resources/web-accessibility-checklist/</guid><description>รายการตรวจสอบ accessibility สำหรับ static site ครอบคลุม keyboard navigation, ARIA, color contrast และ screen reader</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><category>web</category><category>tips</category><category>performance</category></item><item><title>[Note] CSS Custom Properties inherit ลงมาตาม DOM — override ได้ที่ระดับ component</title><link>https://panupongws.com/notes/css-custom-property-scope/</link><guid isPermaLink="true">https://panupongws.com/notes/css-custom-property-scope/</guid><description>CSS variables ทำงานแบบ cascade เหมือน property ทั่วไป — ตั้งที่ :root แล้ว override ใน component ได้เลยโดยไม่กระทบส่วนอื่น</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>tips</category><category>frontend</category></item><item><title>[Note] Set Methods ใหม่ ES2025 — union, intersection, difference</title><link>https://panupongws.com/notes/js-set-operations/</link><guid isPermaLink="true">https://panupongws.com/notes/js-set-operations/</guid><description>Set Methods ใหม่ ES2025 — union, intersection, difference</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>data-structures</category><category>es2025</category></item><item><title>[Project] Markdown to PDF</title><link>https://panupongws.com/projects/markdown-to-pdf/</link><guid isPermaLink="true">https://panupongws.com/projects/markdown-to-pdf/</guid><description>CLI tool แปลง Markdown เป็น PDF ด้วย Playwright — รองรับ custom CSS, syntax highlight และ Thai font</description><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate><category>cli</category><category>typescript</category><category>playwright</category><category>tools</category><category>productivity</category></item><item><title>[Note] git worktree แก้ปัญหา context switching ได้ดีกว่า stash</title><link>https://panupongws.com/notes/git-worktree-workflow/</link><guid isPermaLink="true">https://panupongws.com/notes/git-worktree-workflow/</guid><description>worktree ให้มีหลาย branch active พร้อมกันโดยไม่ต้อง stash หรือ commit กลางคัน</description><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>workflow</category><category>tips</category></item><item><title>[Note] Web Workers — รัน JS บน background thread</title><link>https://panupongws.com/notes/js-web-workers/</link><guid isPermaLink="true">https://panupongws.com/notes/js-web-workers/</guid><description>Web Workers — รัน JS บน background thread</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>performance</category><category>async</category><category>browser</category></item><item><title>[Resource] Astro SSR — output server/hybrid mode</title><link>https://panupongws.com/resources/astro-ssr-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/astro-ssr-guide/</guid><description>คู่มือ Astro SSR mode — เปิด server rendering, adapters (Node.js, Cloudflare, Vercel), และ hybrid (บาง page static บาง page server)</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>ssr</category><category>backend</category><category>tools</category><category>deployment</category></item><item><title>[Resource] Bun Runtime — JavaScript runtime ที่เร็วกว่า Node</title><link>https://panupongws.com/resources/bun-runtime-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/bun-runtime-guide/</guid><description>คู่มือ Bun — runtime ที่รวม bundler, test runner และ package manager ไว้ด้วยกัน ใช้แทน Node + npm ได้เลย</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>node</category><category>tools</category><category>performance</category><category>backend</category></item><item><title>[Resource] Excalidraw — วาด diagram แบบ hand-drawn สำหรับ developer</title><link>https://panupongws.com/resources/excalidraw-for-developers/</link><guid isPermaLink="true">https://panupongws.com/resources/excalidraw-for-developers/</guid><description>Excalidraw คือ whiteboard tool แบบ open-source ที่วาด diagram ออกมาดูเหมือนวาดมือ เหมาะสำหรับ brainstorm, system design และอธิบาย architecture</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>tools</category><category>diagram</category><category>design</category><category>productivity</category><category>open-source</category></item><item><title>[Resource] Conventional Commits — เขียน Git Message อย่างเป็นระบบ</title><link>https://panupongws.com/resources/git-conventional-commits/</link><guid isPermaLink="true">https://panupongws.com/resources/git-conventional-commits/</guid><description>มาตรฐาน Conventional Commits ที่ทำให้ git log อ่านง่าย ทำ changelog อัตโนมัติได้ และเชื่อมกับ semantic versioning</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>productivity</category><category>tips</category><category>tools</category></item><item><title>[Note] HTML &lt;picture&gt; — responsive image ที่ถูกวิธี</title><link>https://panupongws.com/notes/html-picture-element/</link><guid isPermaLink="true">https://panupongws.com/notes/html-picture-element/</guid><description>HTML &lt;picture&gt; — responsive image ที่ถูกวิธี</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>html</category><category>performance</category><category>images</category></item><item><title>[Note] type-safe process.env ด้วย declaration merging</title><link>https://panupongws.com/notes/ts-process-env-types/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-process-env-types/</guid><description>process.env ทุกตัวเป็น string | undefined โดยค่าเริ่มต้น — merge declaration ทำให้ autocomplete และ type safe ได้ง่ายๆ</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>nodejs</category><category>tips</category></item><item><title>[Project] URL Shortener CLI</title><link>https://panupongws.com/projects/url-shortener-cli/</link><guid isPermaLink="true">https://panupongws.com/projects/url-shortener-cli/</guid><description>CLI tool ย่อ URL ด้วย TinyURL API และจัดการ history — บันทึก, ค้นหา และ copy ไปยัง clipboard</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>cli</category><category>typescript</category><category>node</category><category>tools</category><category>productivity</category></item><item><title>[Note] git bisect หา commit ที่ทำให้เกิด bug ด้วย binary search</title><link>https://panupongws.com/notes/git-bisect/</link><guid isPermaLink="true">https://panupongws.com/notes/git-bisect/</guid><description>ไม่ต้องไล่ดูทีละ commit — git bisect ให้ mark good/bad แล้ว Git บอกเองว่า commit ไหนทำให้พัง</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>git</category><category>tips</category></item><item><title>[Note] ทำไม static site ถึงเหมาะกับเว็บส่วนตัวมากกว่า CMS</title><link>https://panupongws.com/notes/static-site-personal/</link><guid isPermaLink="true">https://panupongws.com/notes/static-site-personal/</guid><description>ความคิดเรื่อง trade-off ระหว่าง static generator กับ CMS สำหรับเว็บ developer ส่วนตัว</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>static-site</category><category>astro</category><category>personal</category></item><item><title>[Note] TypeScript Mapped Types — แปลง type ทุก key พร้อมกัน</title><link>https://panupongws.com/notes/ts-mapped-types/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-mapped-types/</guid><description>TypeScript Mapped Types — แปลง type ทุก key พร้อมกัน</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>typescript</category><category>types</category><category>patterns</category></item><item><title>[Project] Daily Summary Bot</title><link>https://panupongws.com/projects/daily-summary-bot/</link><guid isPermaLink="true">https://panupongws.com/projects/daily-summary-bot/</guid><description>LINE Notify bot สรุปงานประจำวัน — ดึง git commits, tasks จาก todo file และ send สรุปผ่าน LINE ทุกเย็น</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>automation</category><category>typescript</category><category>node</category><category>productivity</category><category>tools</category></item><item><title>[Resource] Astro Content Collections — คู่มือฉบับใช้งานจริง</title><link>https://panupongws.com/resources/astro-content-collections/</link><guid isPermaLink="true">https://panupongws.com/resources/astro-content-collections/</guid><description>คู่มือการใช้ Content Collections ใน Astro 6 สำหรับจัดการเนื้อหาแบบ type-safe ด้วย Zod schema พร้อม patterns ที่ใช้บ่อยในโปรเจคจริง</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>astro</category><category>content-collections</category><category>typescript</category><category>zod</category></item><item><title>[Resource] CSS Custom Properties — Pattern สำหรับ Theming และ Dark Mode</title><link>https://panupongws.com/resources/css-custom-properties/</link><guid isPermaLink="true">https://panupongws.com/resources/css-custom-properties/</guid><description>วิธีใช้ CSS custom properties (variables) อย่างเป็นระบบ สำหรับ theming, dark mode, และ design tokens บน static site</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>css</category><category>web</category><category>tips</category><category>performance</category></item><item><title>[Resource] Drizzle ORM — Type-safe SQL ที่ไม่ซ่อน SQL จากคุณ</title><link>https://panupongws.com/resources/drizzle-orm-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/drizzle-orm-guide/</guid><description>คู่มือ Drizzle ORM สำหรับ TypeScript — schema definition, query builder, migration และใช้กับ SQLite, PostgreSQL</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>database</category><category>typescript</category><category>orm</category><category>tools</category><category>backend</category></item><item><title>[Resource] Turso &amp; LibSQL — SQLite บน Edge</title><link>https://panupongws.com/resources/turso-libsql/</link><guid isPermaLink="true">https://panupongws.com/resources/turso-libsql/</guid><description>คู่มือใช้ Turso (LibSQL) สำหรับ edge database — เชื่อมต่อจาก Node.js, Cloudflare Workers และ Astro</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>database</category><category>sqlite</category><category>edge</category><category>tools</category><category>backend</category></item><item><title>[Note] Array.at() อ่าน element จากท้าย array ได้โดยไม่ต้องคำนวณ index</title><link>https://panupongws.com/notes/js-array-at/</link><guid isPermaLink="true">https://panupongws.com/notes/js-array-at/</guid><description>arr.at(-1) อ่าน element สุดท้าย — สะอาดกว่า arr[arr.length - 1] มาก</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>tips</category></item><item><title>[Note] crypto.randomUUID() — สร้าง UUID v4 ใน browser และ Node.js โดยไม่ต้องลง library</title><link>https://panupongws.com/notes/js-crypto-uuid/</link><guid isPermaLink="true">https://panupongws.com/notes/js-crypto-uuid/</guid><description>Web Crypto API มี randomUUID() ในตัว — ไม่ต้อง import uuid หรือ nanoid เพื่อแค่สร้าง unique ID</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>web-api</category><category>tips</category></item><item><title>[Resource] Web Storage — localStorage, sessionStorage และ IndexedDB</title><link>https://panupongws.com/resources/web-storage-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/web-storage-guide/</guid><description>เปรียบเทียบ storage options ใน browser — localStorage, sessionStorage, IndexedDB และเมื่อไหร่ควรใช้อะไร</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>javascript</category><category>browser</category><category>performance</category><category>frontend</category></item><item><title>[Note] HTML Constraint Validation API — validate form โดยไม่ต้อง JS</title><link>https://panupongws.com/notes/html-form-validation/</link><guid isPermaLink="true">https://panupongws.com/notes/html-form-validation/</guid><description>HTML Constraint Validation API — validate form โดยไม่ต้อง JS</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>html</category><category>forms</category><category>javascript</category><category>ux</category></item><item><title>[Resource] Astro View Transitions — เปลี่ยนหน้าแบบ Smooth ด้วย ClientRouter</title><link>https://panupongws.com/resources/astro-view-transitions/</link><guid isPermaLink="true">https://panupongws.com/resources/astro-view-transitions/</guid><description>วิธีใช้ View Transitions API ใน Astro ผ่าน ClientRouter, transition:name สำหรับ shared elements, และการ handle events ที่ถูกต้อง</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>performance</category><category>web</category><category>tips</category></item><item><title>[Resource] Zod — Schema Validation ที่ TypeScript รัก</title><link>https://panupongws.com/resources/zod-schema-validation/</link><guid isPermaLink="true">https://panupongws.com/resources/zod-schema-validation/</guid><description>Zod คือ library สำหรับ validate ข้อมูลแบบ type-safe ซึ่ง Astro Content Collections ใช้ภายใต้ฝาครอบ รู้จัก Zod ให้ดีคือรู้จัก schema ของ content collection ให้ดีขึ้น</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>typescript</category><category>validation</category><category>zod</category><category>astro</category><category>content-collections</category></item><item><title>[Note] :focus-visible แทน :focus สำหรับ keyboard accessibility</title><link>https://panupongws.com/notes/css-focus-visible/</link><guid isPermaLink="true">https://panupongws.com/notes/css-focus-visible/</guid><description>:focus-visible แสดง outline เฉพาะเมื่อ navigate ด้วย keyboard — ไม่รกตาเมื่อ click ด้วย mouse</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>css</category><category>accessibility</category><category>frontend</category></item><item><title>[Note] Pagefind กับ Thai: ค้นหาได้แต่ stemming ไม่ทำงาน</title><link>https://panupongws.com/notes/pagefind-thai-stemming/</link><guid isPermaLink="true">https://panupongws.com/notes/pagefind-thai-stemming/</guid><description>Pagefind ค้นหาภาษาไทยได้ แต่ไม่รู้จัก root word — ต้องพิมพ์ตรงๆ ถึงจะเจอ</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>search</category><category>pagefind</category><category>tips</category></item><item><title>[Note] TypeScript Utility Types ที่ใช้บ่อยสุด</title><link>https://panupongws.com/notes/ts-utility-types/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-utility-types/</guid><description>TypeScript Utility Types ที่ใช้บ่อยสุด</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>typescript</category><category>types</category></item><item><title>[Resource] Service Workers — Cache Strategy สำหรับ Static Site</title><link>https://panupongws.com/resources/service-workers-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/service-workers-guide/</guid><description>คู่มือ Service Worker สำหรับ offline caching, stale-while-revalidate และ cache management บน static site</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>pwa</category><category>performance</category><category>javascript</category><category>browser</category><category>frontend</category></item><item><title>[Note] .vscode/settings.json ตั้ง config แยกต่อ project</title><link>https://panupongws.com/notes/vscode-workspace-settings/</link><guid isPermaLink="true">https://panupongws.com/notes/vscode-workspace-settings/</guid><description>settings บาง project-specific ควรอยู่ใน .vscode/settings.json ไม่ใช่ global — commit ไว้ใน repo ได้เลย</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>vscode</category><category>tooling</category><category>tips</category></item><item><title>[Note] CSS grid-template-areas — layout เป็น visual map</title><link>https://panupongws.com/notes/css-grid-areas/</link><guid isPermaLink="true">https://panupongws.com/notes/css-grid-areas/</guid><description>CSS grid-template-areas — layout เป็น visual map</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>css</category><category>layout</category><category>grid</category></item><item><title>[Note] unknown vs any — ต่างกันตรงที่ต้อง narrow ก่อนใช้</title><link>https://panupongws.com/notes/ts-unknown-vs-any/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-unknown-vs-any/</guid><description>any ปิด type checker ทั้งหมด ส่วน unknown บังคับ narrow ก่อน — ใช้ unknown เมื่อไม่รู้ type จริงๆ</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tips</category></item><item><title>[Project] Chrome Extension Starter</title><link>https://panupongws.com/projects/chrome-extension-starter/</link><guid isPermaLink="true">https://panupongws.com/projects/chrome-extension-starter/</guid><description>Template สำหรับสร้าง Chrome Extension Manifest V3 พร้อม Vite + TypeScript — มี popup, content script และ background service worker</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>browser</category><category>typescript</category><category>tools</category><category>vite</category><category>extension</category></item><item><title>[Resource] Pagefind — Full-text Search สำหรับ Static Site</title><link>https://panupongws.com/resources/pagefind-static-search/</link><guid isPermaLink="true">https://panupongws.com/resources/pagefind-static-search/</guid><description>Pagefind คือ library สำหรับเพิ่มระบบค้นหาให้กับ static site โดยไม่ต้องมี server หรือ external API ทำงานได้หลัง build เลย</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>search</category><category>static-site</category><category>astro</category><category>performance</category><category>open-source</category></item><item><title>[Resource] Tailwind CSS v4 — สิ่งที่เปลี่ยนไปและสิ่งที่ต้องรู้</title><link>https://panupongws.com/resources/tailwind-css-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/tailwind-css-guide/</guid><description>สรุป Tailwind CSS v4 — CSS-first config, เลิก tailwind.config.js, @theme directive และ performance ที่ดีขึ้น</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>css</category><category>tailwind</category><category>frontend</category><category>tools</category></item><item><title>[Note] Astro 5: ใช้ entry.id แทน entry.slug ใน Content Collections</title><link>https://panupongws.com/notes/astro-content-entry-id/</link><guid isPermaLink="true">https://panupongws.com/notes/astro-content-entry-id/</guid><description>Astro 5 เปลี่ยน API — entry.slug ถูกลบออก ใช้ entry.id แทนสำหรับ glob loader</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>typescript</category><category>tips</category></item><item><title>[Note] &lt;details&gt; และ &lt;summary&gt; — accordion โดยไม่ต้องเขียน JavaScript</title><link>https://panupongws.com/notes/html-details-summary/</link><guid isPermaLink="true">https://panupongws.com/notes/html-details-summary/</guid><description>details/summary ทำ accordion toggle ได้ใน HTML ล้วน — browser จัดการ open/close, keyboard และ accessibility ให้ทั้งหมด</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>html</category><category>accessibility</category><category>tips</category></item><item><title>[Note] &lt;dialog&gt; element — native modal โดยไม่ต้อง library</title><link>https://panupongws.com/notes/html-dialog-element/</link><guid isPermaLink="true">https://panupongws.com/notes/html-dialog-element/</guid><description>browser มี &lt;dialog&gt; built-in พร้อม focus trap, backdrop, Escape key — ไม่ต้อง install อะไรเพิ่ม</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>html</category><category>frontend</category><category>tips</category></item><item><title>[Note] Nullish Coalescing ?? — ต่างจาก || ตรงไหน</title><link>https://panupongws.com/notes/js-nullish-coalescing/</link><guid isPermaLink="true">https://panupongws.com/notes/js-nullish-coalescing/</guid><description>Nullish Coalescing ?? — ต่างจาก || ตรงไหน</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><category>javascript</category><category>operators</category><category>tips</category></item><item><title>[Note] structuredClone() deep copy ที่ถูกต้องกว่า JSON trick</title><link>https://panupongws.com/notes/js-structuredclone/</link><guid isPermaLink="true">https://panupongws.com/notes/js-structuredclone/</guid><description>ลืม JSON.parse(JSON.stringify()) ไปได้เลย — structuredClone() รองรับ Date, Map, Set และ type อื่นๆ ได้ถูกต้อง</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><category>javascript</category><category>tips</category></item><item><title>[Resource] สร้าง RSS Feed กับ Astro — @astrojs/rss</title><link>https://panupongws.com/resources/astro-rss-feed/</link><guid isPermaLink="true">https://panupongws.com/resources/astro-rss-feed/</guid><description>วิธีตั้งค่า RSS feed สำหรับ Astro static site ด้วย @astrojs/rss รองรับ Content Collections และ custom channel metadata</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>rss</category><category>content</category><category>seo</category><category>tools</category></item><item><title>[Resource] TypeScript Utility Types ที่ใช้บ่อย</title><link>https://panupongws.com/resources/typescript-utility-types/</link><guid isPermaLink="true">https://panupongws.com/resources/typescript-utility-types/</guid><description>รวม Utility Types ใน TypeScript ที่ช่วยลดการเขียน type ซ้ำซ้อน พร้อมตัวอย่างการใช้งานจริง</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><category>typescript</category><category>types</category><category>tips</category></item><item><title>[Note] clamp() สำหรับ fluid typography ไม่ต้อง media query</title><link>https://panupongws.com/notes/css-clamp-fluid/</link><guid isPermaLink="true">https://panupongws.com/notes/css-clamp-fluid/</guid><description>font-size ที่ scale ตาม viewport อัตโนมัติ ไม่ต้องเขียน breakpoint เลย</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><category>css</category><category>tips</category><category>frontend</category></item><item><title>[Note] AbortController — ยกเลิก fetch ที่กำลังรอได้</title><link>https://panupongws.com/notes/js-abort-controller/</link><guid isPermaLink="true">https://panupongws.com/notes/js-abort-controller/</guid><description>AbortController — ยกเลิก fetch ที่กำลังรอได้</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><category>javascript</category><category>async</category><category>fetch</category><category>performance</category></item><item><title>[Note] git stash push -m ช่วยให้จำได้ว่า stash ไหนคืออะไร</title><link>https://panupongws.com/notes/git-stash-message/</link><guid isPermaLink="true">https://panupongws.com/notes/git-stash-message/</guid><description>stash โดยไม่ใส่ชื่อคือหายนะเมื่อมีหลาย stash — -m ช่วยได้</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><category>git</category><category>tips</category></item><item><title>[Project] Astro Component Playground</title><link>https://panupongws.com/projects/astro-component-playground/</link><guid isPermaLink="true">https://panupongws.com/projects/astro-component-playground/</guid><description>Interactive sandbox สำหรับทดสอบ Astro components แบบ real-time — เขียน component code แล้วเห็น preview ทันที</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>typescript</category><category>tooling</category><category>frontend</category><category>developer-experience</category></item><item><title>[Note] CSS @layer — จัดการ specificity โดยไม่ต้องแข่ง selector</title><link>https://panupongws.com/notes/css-cascade-layers/</link><guid isPermaLink="true">https://panupongws.com/notes/css-cascade-layers/</guid><description>CSS @layer — จัดการ specificity โดยไม่ต้องแข่ง selector</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><category>css</category><category>architecture</category><category>specificity</category></item><item><title>[Note] as const ทำให้ TypeScript รู้ว่าค่าคือ literal จริงๆ</title><link>https://panupongws.com/notes/typescript-as-const/</link><guid isPermaLink="true">https://panupongws.com/notes/typescript-as-const/</guid><description>ไม่ต้อง enum — as const ทำให้ array หรือ object เป็น readonly literal type ที่ infer ได้แม่นยำ</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tips</category></item><item><title>[Note] CSS Nesting — เขียน nested selector ได้เหมือน Sass โดยไม่ต้องใช้ preprocessor</title><link>https://panupongws.com/notes/css-nesting/</link><guid isPermaLink="true">https://panupongws.com/notes/css-nesting/</guid><description>Native CSS nesting ใช้ &amp; แทน parent selector เหมือน Sass/SCSS — build tool ไม่จำเป็นอีกต่อไปสำหรับ nested CSS</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><category>css</category><category>tips</category></item><item><title>[Project] Link Garden</title><link>https://panupongws.com/projects/link-garden/</link><guid isPermaLink="true">https://panupongws.com/projects/link-garden/</guid><description>พื้นที่รวบรวมและจัดหมวดหมู่ลิงก์ที่น่าสนใจในแบบ digital garden สร้างด้วย Astro ไม่ใช่ bookmark ธรรมดา แต่มี note อธิบายว่าทำไมลิงก์นี้ถึงมีคุณค่า</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>digital-garden</category><category>curation</category><category>static-site</category><category>knowledge-management</category></item><item><title>[Project] Astro SEO Audit</title><link>https://panupongws.com/projects/astro-seo-audit/</link><guid isPermaLink="true">https://panupongws.com/projects/astro-seo-audit/</guid><description>CLI script ตรวจ SEO ของ Astro static site — ตรวจ meta tags, canonical URL, Open Graph, structured data และ performance hints</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>seo</category><category>cli</category><category>tools</category><category>typescript</category></item><item><title>[Note] git rebase -i — จัดเรียง รวม และแก้ commit ก่อน push</title><link>https://panupongws.com/notes/git-interactive-rebase/</link><guid isPermaLink="true">https://panupongws.com/notes/git-interactive-rebase/</guid><description>git rebase -i HEAD~N เปิด editor ให้เลือก squash, reword, drop หรือ reorder commit ก่อน push — ทำให้ history อ่านแล้วเข้าใจได้</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate><category>git</category><category>tips</category></item><item><title>[Resource] SQLite สำหรับ Web Developer — ใช้ได้ทั้ง local และ edge</title><link>https://panupongws.com/resources/sqlite-for-web-devs/</link><guid isPermaLink="true">https://panupongws.com/resources/sqlite-for-web-devs/</guid><description>คู่มือใช้ SQLite ใน Node.js, Cloudflare Workers (D1) และ LibSQL — database ที่ไม่ต้องการ server</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><category>database</category><category>sqlite</category><category>nodejs</category><category>tools</category><category>backend</category></item><item><title>[Note] Discriminated Unions — type narrowing ที่ TypeScript ชอบที่สุด</title><link>https://panupongws.com/notes/ts-discriminated-unions/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-discriminated-unions/</guid><description>Discriminated Unions — type narrowing ที่ TypeScript ชอบที่สุด</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><category>typescript</category><category>types</category><category>patterns</category></item><item><title>[Project] Zod Schema Studio</title><link>https://panupongws.com/projects/zod-schema-studio/</link><guid isPermaLink="true">https://panupongws.com/projects/zod-schema-studio/</guid><description>Web tool สำหรับเขียน Zod schema แบบ interactive — เห็น type output และ validation errors แบบ real-time ไม่ต้อง setup project</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><category>typescript</category><category>zod</category><category>astro</category><category>tools</category><category>frontend</category></item><item><title>[Project] Reading Log</title><link>https://panupongws.com/projects/reading-log/</link><guid isPermaLink="true">https://panupongws.com/projects/reading-log/</guid><description>Static site สำหรับบันทึกหนังสือที่อ่าน พร้อม rating, note และ tags จัดการด้วย Astro Content Collections ไม่ต้องมี backend</description><pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate><category>astro</category><category>static-site</category><category>reading</category><category>content-collections</category><category>typescript</category></item><item><title>[Project] Product Catalog Validator</title><link>https://panupongws.com/projects/product-catalog-validator/</link><guid isPermaLink="true">https://panupongws.com/projects/product-catalog-validator/</guid><description>TypeScript CLI สำหรับ validate product catalog ก่อน import — ตรวจ required fields, format ราคา, รูปภาพ URL และ category hierarchy</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><category>cli</category><category>typescript</category><category>e-commerce</category><category>tools</category><category>validation</category></item><item><title>[Note] Branded Types — TypeScript nominal typing ที่ไม่มีใน spec</title><link>https://panupongws.com/notes/ts-branded-types/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-branded-types/</guid><description>string กับ string ที่เป็น UserId หรือ Email — TypeScript มองเหมือนกัน Branded Type ทำให้ต่าง เพิ่มความปลอดภัยโดยไม่มี runtime cost</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tips</category><category>type-safety</category></item><item><title>[Resource] Content Security Policy (CSP) — ป้องกัน XSS ด้วย HTTP Header</title><link>https://panupongws.com/resources/content-security-policy/</link><guid isPermaLink="true">https://panupongws.com/resources/content-security-policy/</guid><description>คู่มือตั้งค่า CSP header เพื่อป้องกัน Cross-Site Scripting (XSS) และ injection attacks บน static site</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate><category>security</category><category>web</category><category>http</category><category>performance</category><category>frontend</category></item><item><title>[Note] Generator Functions — function ที่ pause ได้</title><link>https://panupongws.com/notes/js-generators/</link><guid isPermaLink="true">https://panupongws.com/notes/js-generators/</guid><description>Generator Functions — function ที่ pause ได้</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate><category>javascript</category><category>async</category><category>patterns</category></item><item><title>[Note] Object.groupBy — จัดกลุ่ม array ใน ES2024 โดยไม่ต้องเขียน reduce</title><link>https://panupongws.com/notes/js-object-groupby/</link><guid isPermaLink="true">https://panupongws.com/notes/js-object-groupby/</guid><description>Object.groupBy(array, keyFn) แทน reduce ที่ verbose — ส่งคืน object ที่ key คือค่าที่ groupBy และ value คือ array ของ items ในกลุ่มนั้น</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><category>javascript</category><category>tips</category><category>es2024</category></item><item><title>[Project] Astro Minimal Starter</title><link>https://panupongws.com/projects/astro-minimal-starter/</link><guid isPermaLink="true">https://panupongws.com/projects/astro-minimal-starter/</guid><description>Starter template สำหรับ Astro ที่ stripped-down จนเหลือแค่สิ่งจำเป็น — dark mode, TypeScript strict, font loading, global CSS reset พร้อมใช้งานได้เลย</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><category>astro</category><category>typescript</category><category>web</category><category>static-site</category></item><item><title>[Note] WeakMap &amp; WeakSet — reference ที่ไม่กัน GC</title><link>https://panupongws.com/notes/js-weakmap-weakset/</link><guid isPermaLink="true">https://panupongws.com/notes/js-weakmap-weakset/</guid><description>WeakMap &amp; WeakSet — reference ที่ไม่กัน GC</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>memory</category><category>performance</category></item><item><title>[Resource] SVG Sprites &amp; Icon System — icon ที่ maintain ง่ายและ accessible</title><link>https://panupongws.com/resources/svg-sprites-icon-system/</link><guid isPermaLink="true">https://panupongws.com/resources/svg-sprites-icon-system/</guid><description>วิธีสร้าง icon system ด้วย SVG sprite (symbol + use) และแนวทางทำ accessible icons ที่ถูกต้อง</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate><category>svg</category><category>icons</category><category>accessibility</category><category>frontend</category><category>design</category></item><item><title>[Note] oklch() — color function ที่ perceptually uniform กว่า hsl()</title><link>https://panupongws.com/notes/css-oklch/</link><guid isPermaLink="true">https://panupongws.com/notes/css-oklch/</guid><description>oklch(lightness chroma hue) ปรับ lightness แล้วสีดูสว่างขึ้นจริงในสายตา ไม่ใช่แค่ค่าตัวเลข — ต่างจาก hsl ที่ yellow กับ blue มี perceived brightness ต่างกันมาก</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>design</category><category>color</category></item><item><title>[Project] Font Pairing Tool</title><link>https://panupongws.com/projects/font-pairing-tool/</link><guid isPermaLink="true">https://panupongws.com/projects/font-pairing-tool/</guid><description>เครื่องมือ web-based สำหรับทดลอง Google Fonts pairing แบบ real-time เลือก heading + body font แล้วดูผลทันที ไม่ต้องสลับไป Google Fonts</description><pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate><category>web</category><category>design</category><category>typescript</category><category>static-site</category></item><item><title>[Resource] Accessibility Testing Tools — ตรวจ a11y อย่างมีระบบ</title><link>https://panupongws.com/resources/accessibility-testing-tools/</link><guid isPermaLink="true">https://panupongws.com/resources/accessibility-testing-tools/</guid><description>รวม tools สำหรับ test web accessibility ตั้งแต่ automated scan ถึง manual testing ด้วย screen reader</description><pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate><category>accessibility</category><category>testing</category><category>tools</category><category>web</category><category>html</category></item><item><title>[Project] Second Brain CLI</title><link>https://panupongws.com/projects/second-brain-cli/</link><guid isPermaLink="true">https://panupongws.com/projects/second-brain-cli/</guid><description>เครื่องมือ command-line สำหรับจัดการ notes และ knowledge base ในแบบ Zettelkasten ช่วยเชื่อมโยงความคิดและดึงข้อมูลกลับมาได้รวดเร็ว</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><category>cli</category><category>productivity</category><category>notes</category><category>typescript</category><category>zettelkasten</category></item><item><title>[Note] TypeScript Template Literal Types — type ที่ประกอบจาก string</title><link>https://panupongws.com/notes/ts-template-literal-types/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-template-literal-types/</guid><description>TypeScript Template Literal Types — type ที่ประกอบจาก string</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><category>typescript</category><category>types</category></item><item><title>[Project] CSV Budget CLI</title><link>https://panupongws.com/projects/csv-budget-cli/</link><guid isPermaLink="true">https://panupongws.com/projects/csv-budget-cli/</guid><description>CLI tool สำหรับวิเคราะห์รายจ่ายจากไฟล์ CSV ของธนาคาร — จัดหมวดหมู่อัตโนมัติ สรุปรายเดือน และ export รายงาน</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><category>cli</category><category>typescript</category><category>node</category><category>csv</category><category>productivity</category></item><item><title>[Resource] Astro Image Optimization — ใช้ astro:assets ให้ถูกต้อง</title><link>https://panupongws.com/resources/astro-image-optimization/</link><guid isPermaLink="true">https://panupongws.com/resources/astro-image-optimization/</guid><description>คู่มือใช้ &lt;Image /&gt; component และ getImage() ใน Astro สำหรับ WebP, lazy loading และ responsive images ที่ optimize แล้ว</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><category>astro</category><category>performance</category><category>images</category><category>web</category></item><item><title>[Note] git cherry-pick — เอา commit เดียวข้าม branch โดยไม่ merge ทั้งหมด</title><link>https://panupongws.com/notes/git-cherry-pick/</link><guid isPermaLink="true">https://panupongws.com/notes/git-cherry-pick/</guid><description>cherry-pick เอา commit hash ที่ต้องการมาใส่ branch ปัจจุบัน — ใช้เมื่อ hotfix อยู่ใน feature branch แต่ต้องการ deploy ก่อน</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate><category>git</category><category>tips</category></item><item><title>[Project] Web Component UI Kit</title><link>https://panupongws.com/projects/web-component-ui-kit/</link><guid isPermaLink="true">https://panupongws.com/projects/web-component-ui-kit/</guid><description>ชุด UI components ที่สร้างด้วย Custom Elements ล้วน — Button, Badge, Tooltip, Dialog — ใช้ร่วมกับทุก framework หรือ vanilla HTML</description><pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate><category>javascript</category><category>web-apis</category><category>html</category><category>css</category><category>components</category><category>frontend</category></item><item><title>[Note] CSS Logical Properties — เขียน layout ที่ตามทิศทางข้อความ</title><link>https://panupongws.com/notes/css-logical-properties/</link><guid isPermaLink="true">https://panupongws.com/notes/css-logical-properties/</guid><description>CSS Logical Properties — เขียน layout ที่ตามทิศทางข้อความ</description><pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate><category>css</category><category>layout</category><category>i18n</category></item><item><title>[Resource] CSS Print Styles — ทำ @media print ให้ดูดีจริง</title><link>https://panupongws.com/resources/css-print-styles/</link><guid isPermaLink="true">https://panupongws.com/resources/css-print-styles/</guid><description>เทคนิค print stylesheet สำหรับหน้า CV, report และ document ที่พิมพ์หรือบันทึกเป็น PDF ได้อย่างถูกต้อง</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate><category>css</category><category>print</category><category>pdf</category><category>layout</category><category>tips</category></item><item><title>[Note] TypeScript satisfies — validate type โดยไม่ทำให้ type กว้างขึ้น</title><link>https://panupongws.com/notes/ts-satisfies-operator/</link><guid isPermaLink="true">https://panupongws.com/notes/ts-satisfies-operator/</guid><description>satisfies ตรวจว่า value ตรงกับ type ไหม โดยยังเก็บ inferred type ที่แคบกว่าไว้ใช้งาน — ต่างจาก as ที่ยอมทุกอย่าง และ : ที่ทำให้ type กว้างขึ้น</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tips</category></item><item><title>[Note] CSS color-mix() — ผสมสีใน browser ได้เลย ไม่ต้องพึ่ง JS</title><link>https://panupongws.com/notes/css-color-mix/</link><guid isPermaLink="true">https://panupongws.com/notes/css-color-mix/</guid><description>CSS color-mix() — ผสมสีใน browser ได้เลย ไม่ต้องพึ่ง JS</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate><category>css</category><category>color</category><category>design</category></item><item><title>[Resource] pnpm — Package Manager ที่เร็วและประหยัด Disk</title><link>https://panupongws.com/resources/pnpm-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/pnpm-guide/</guid><description>คู่มือใช้ pnpm แทน npm/yarn — content-addressable store, strict isolation และ workspace สำหรับ monorepo</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><category>nodejs</category><category>cli</category><category>workflow</category><category>performance</category><category>tools</category></item><item><title>[Note] HTML Popover API — tooltip และ dropdown โดยไม่ต้องเขียน JS เอง</title><link>https://panupongws.com/notes/html-popover-api/</link><guid isPermaLink="true">https://panupongws.com/notes/html-popover-api/</guid><description>popover attribute + popovertarget ทำ overlay ที่ accessible ได้ใน HTML ล้วน — มี focus trap, light dismiss และ :popover-open selector</description><pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate><category>html</category><category>web-api</category><category>accessibility</category></item><item><title>[Resource] GitHub CLI (gh) — จัดการ GitHub จาก Terminal ได้เลย</title><link>https://panupongws.com/resources/github-cli-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/github-cli-guide/</guid><description>คู่มือใช้ gh CLI สำหรับ PR, Issues, Actions และ workflow automation โดยไม่ต้องเปิด browser</description><pubDate>Thu, 05 Feb 2026 00:00:00 GMT</pubDate><category>git</category><category>cli</category><category>github</category><category>workflow</category><category>automation</category></item><item><title>[Project] Link-in-Bio Page</title><link>https://panupongws.com/projects/link-in-bio/</link><guid isPermaLink="true">https://panupongws.com/projects/link-in-bio/</guid><description>หน้า link-in-bio แบบ static ที่สร้างด้วย Astro ไม่พึ่ง third-party service ดูแลการออกแบบเองได้ 100% โหลดเร็วกว่า Linktree มาก</description><pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate><category>astro</category><category>web</category><category>static-site</category><category>design</category></item><item><title>[Note] Promise.allSettled ไม่หยุดแม้ promise ตัวใดตัวหนึ่ง reject</title><link>https://panupongws.com/notes/js-promise-allsettled/</link><guid isPermaLink="true">https://panupongws.com/notes/js-promise-allsettled/</guid><description>Promise.all หยุดทันทีเมื่อมี reject — Promise.allSettled รอทุกตัวจบแล้วค่อยรายงานผลแยก fulfilled/rejected</description><pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate><category>javascript</category><category>async</category><category>tips</category></item><item><title>[Project] type-safe-env</title><link>https://panupongws.com/projects/type-safe-env/</link><guid isPermaLink="true">https://panupongws.com/projects/type-safe-env/</guid><description>TypeScript utility สำหรับ parse และ validate environment variables ด้วย Zod — crash ทันทีถ้า env ขาดหาย แทนที่จะ fail แบบ silent</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><category>typescript</category><category>tooling</category><category>zod</category><category>node</category><category>configuration</category></item><item><title>[Note] CSS Subgrid ทำให้ grandchildren align กับ parent grid ได้</title><link>https://panupongws.com/notes/css-subgrid/</link><guid isPermaLink="true">https://panupongws.com/notes/css-subgrid/</guid><description>grid-template-columns: subgrid ส่ง grid track ของ parent ลงมาให้ลูกหลานใช้ต่อ — ไม่ต้องวาง column ซ้ำอีกชั้น</description><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate><category>css</category><category>grid</category><category>layout</category></item><item><title>[Project] Multi-Agent Tmux Workflow</title><link>https://panupongws.com/projects/tmux-workflow/</link><guid isPermaLink="true">https://panupongws.com/projects/tmux-workflow/</guid><description>ระบบ orchestration ใช้ tmux แบ่ง session หลายหน้าต่าง ให้ AI หลายตัวทำงานพร้อมกันบน codebase เดียวโดยไม่ชนกัน</description><pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate><category>cli</category><category>productivity</category><category>typescript</category><category>web</category></item><item><title>[Project] Color Palette Explorer</title><link>https://panupongws.com/projects/color-palette-explorer/</link><guid isPermaLink="true">https://panupongws.com/projects/color-palette-explorer/</guid><description>เครื่องมือสำหรับสำรวจ color palette ที่ใช้ CSS custom properties อย่างเดียว ไม่มี JavaScript library ให้ copy hex code และดู contrast ratio แบบ real-time</description><pubDate>Mon, 01 Dec 2025 00:00:00 GMT</pubDate><category>css</category><category>design</category><category>web</category><category>tools</category></item><item><title>[Resource] Core Web Vitals — ทำ Static Site ให้ได้คะแนนสูง</title><link>https://panupongws.com/resources/web-vitals-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/web-vitals-guide/</guid><description>แนวทางปรับ LCP, CLS, INP สำหรับ static site บน Astro ที่ทำได้จริงโดยไม่ต้องจ้างผู้เชี่ยวชาญ</description><pubDate>Mon, 01 Dec 2025 00:00:00 GMT</pubDate><category>performance</category><category>web</category><category>astro</category></item><item><title>[Project] DevLog Bot</title><link>https://panupongws.com/projects/devlog-bot/</link><guid isPermaLink="true">https://panupongws.com/projects/devlog-bot/</guid><description>บอท Discord สำหรับบันทึก dev log อัตโนมัติ ช่วยติดตามความก้าวหน้าของโปรเจคต่างๆ โดยไม่ต้องออกจาก workspace</description><pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate><category>discord</category><category>bot</category><category>typescript</category><category>productivity</category></item><item><title>[Project] Shareable ESLint Config</title><link>https://panupongws.com/projects/eslint-config-package/</link><guid isPermaLink="true">https://panupongws.com/projects/eslint-config-package/</guid><description>ESLint configuration package ที่แชร์ได้ across TypeScript projects — รวม rules สำหรับ Node.js, Astro, และ vanilla TS ในชุดเดียว</description><pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate><category>typescript</category><category>eslint</category><category>tooling</category><category>npm</category><category>configuration</category></item><item><title>[Resource] Git Worktree — ทำงานหลาย Branch พร้อมกันโดยไม่ต้อง stash</title><link>https://panupongws.com/resources/git-worktree-guide/</link><guid isPermaLink="true">https://panupongws.com/resources/git-worktree-guide/</guid><description>git worktree ให้ checkout หลาย branch ออกมาเป็น folder แยกกันได้พร้อมกัน แก้ปัญหา &quot;ต้องรีบ hotfix แต่ feature branch ยังไม่เสร็จ&quot; อย่างถาวร</description><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate><category>cli</category><category>tools</category><category>productivity</category></item><item><title>[Resource] CSS Grid — Cheatsheet ฉบับใช้งานจริง</title><link>https://panupongws.com/resources/css-grid-cheatsheet/</link><guid isPermaLink="true">https://panupongws.com/resources/css-grid-cheatsheet/</guid><description>รวม CSS Grid properties ที่ใช้บ่อย พร้อม pattern สำเร็จรูปสำหรับ layout ยอดนิยม เปิดดูได้เลยโดยไม่ต้องค้น MDN ทุกครั้ง</description><pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate><category>web</category><category>design</category><category>tips</category></item><item><title>[Project] Markdown CV</title><link>https://panupongws.com/projects/markdown-cv/</link><guid isPermaLink="true">https://panupongws.com/projects/markdown-cv/</guid><description>CV/Resume ที่เขียนใน Markdown แล้ว render เป็น HTML ด้วย Astro — แก้ไขง่าย print-ready และไม่ต้องพึ่ง Canva หรือ Google Docs</description><pubDate>Wed, 15 Oct 2025 00:00:00 GMT</pubDate><category>astro</category><category>web</category><category>design</category><category>static-site</category></item><item><title>[Project] CSS Playground</title><link>https://panupongws.com/projects/css-playground/</link><guid isPermaLink="true">https://panupongws.com/projects/css-playground/</guid><description>พื้นที่ทดลอง CSS techniques ที่อยากจำ ตั้งแต่ layout tricks ไปจนถึง animation และ custom properties</description><pubDate>Sun, 05 Oct 2025 00:00:00 GMT</pubDate><category>web</category><category>design</category><category>personal</category></item><item><title>[Project] Obsidian Starter Vault</title><link>https://panupongws.com/projects/obsidian-starter-vault/</link><guid isPermaLink="true">https://panupongws.com/projects/obsidian-starter-vault/</guid><description>Vault สำหรับ second brain ที่ออกแบบให้ใช้งานได้จริงตั้งแต่วันแรก ไม่ซับซ้อนเกินไป เน้น capture → process → output</description><pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate><category>knowledge-management</category><category>notes</category><category>productivity</category></item><item><title>[Project] Obsidian to Astro Exporter</title><link>https://panupongws.com/projects/obsidian-to-astro/</link><guid isPermaLink="true">https://panupongws.com/projects/obsidian-to-astro/</guid><description>Script แปลง Obsidian vault เป็น Astro Content Collection — ดึง frontmatter, แปลง wikilinks เป็น markdown links, และ copy assets อัตโนมัติ</description><pubDate>Fri, 12 Sep 2025 00:00:00 GMT</pubDate><category>node</category><category>cli</category><category>astro</category><category>markdown</category><category>obsidian</category><category>typescript</category></item><item><title>[Project] CSS Art Wallpaper Generator</title><link>https://panupongws.com/projects/css-art-wallpaper/</link><guid isPermaLink="true">https://panupongws.com/projects/css-art-wallpaper/</guid><description>Wallpaper patterns ที่สร้างด้วย CSS ล้วนๆ ไม่มี JavaScript ไม่มี canvas ใช้ CSS gradients, conic-gradient, และ custom properties ในการสร้าง pattern ที่เปลี่ยนแปลงได้</description><pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate><category>css</category><category>design</category><category>web</category></item><item><title>[Project] Image Optimizer CLI</title><link>https://panupongws.com/projects/image-optimizer-cli/</link><guid isPermaLink="true">https://panupongws.com/projects/image-optimizer-cli/</guid><description>Node.js CLI สำหรับ bulk compress รูปภาพ — แปลงเป็น WebP/AVIF, resize, และ strip metadata อัตโนมัติก่อน deploy</description><pubDate>Sun, 03 Aug 2025 00:00:00 GMT</pubDate><category>cli</category><category>node</category><category>typescript</category><category>performance</category><category>tooling</category></item></channel></rss>