- 掃描 ID:
- c8320297-0768-47c1-81c4-ebebc23f16a4已完成
- 已提交的 URL:
- https://techtruth.dev/
- 報告完成時間:
連結 · 找到 6 個
從頁面中識別的傳出連結
連結 | Text |
---|---|
https://hashnode.com/@ClintTheEngineer | Find me on Hashnode, external website, opens in new tab |
https://hashnode.com/privacy?source=blog-footer | Privacy policy |
https://hashnode.com/terms?source=blog-footer | Terms |
https://hashnode.com?source=blog-footer | |
https://hashnode.com/products/blogs?source=blog-footer | Start your blog |
https://hashnode.com/products/docs?source=blog-footer | Create docs |
JavaScript 變數 · 找到 24 個
在頁面的視窗物件上載入的全域 JavaScript 變數是在函數外部宣告的變數,可從目前範圍內程式碼中的任何位置存取
名稱 | 類型 |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
gtag | function |
dataLayer | object |
SUPPORTS_PASSIVE | boolean |
opts | object |
webpackChunk_N_E | object |
__next_require__ | function |
next | object |
主控台記錄訊息 · 找到 0 條
記錄到 Web 主控台的訊息
HTML
頁面的原始 HTML 主體
<!DOCTYPE html><html lang="en" data-theme="light" class=""><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="image" property="og:image" content="https://techtruth.dev/api/og/home?og=eyJ0aXRsZSI6IlRlY2glMjBUcnV0aCIsImRvbWFpbiI6InRlY2h0cnV0aC5kZXYiLCJmb2xsb3dlcnMiOjIsInBob3RvIjoiaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NzA2MTU5NDQ4NjcvTmVnMGJEeVNrLnBuZyIsImJnY29sb3IiOiIjMjk2MkZGIiwiYXJ0aWNsZXMiOnsidG90YWxEb2N1bWVudHMiOjMyfX0="><link rel="canonical" href="https://techtruth.dev"><title>Tech Truth</title><meta name="description" content="Tech Truth"><meta property="og:title" content="Tech Truth"><meta property="og:description" content="Tech Truth"><meta property="og:site_name" content="Tech Truth"><meta property="og:type" content="website"><meta property="og:url" content="https://techtruth.dev"><link rel="apple-touch-icon" sizes="180x180" href="https://cdn.hashnode.com/res/hashnode/image/upload/v1611242155728/W3_BYVVVh.png"><link rel="icon" type="image/png" sizes="32x32" href="https://cdn.hashnode.com/res/hashnode/image/upload/v1611242173172/AOX1gE2jc.png"><link rel="icon" type="image/png" sizes="16x16" href="https://cdn.hashnode.com/res/hashnode/image/upload/v1611242187756/TRTNYp32O.png"><link rel="mask-icon" href="/static/images/brand/safari-pinned-tab-new.svg" color="#2962ff"><meta name="msapplication-TileColor" content="#ffffff"><meta name="theme-color" content="#2962FF"><meta property="twitter:card" content="summary_large_image"><meta property="twitter:title" content="Tech Truth"><meta property="twitter:description" content="Tech Truth"><meta property="twitter:image" content="https://techtruth.dev/api/og/home?og=eyJ0aXRsZSI6IlRlY2glMjBUcnV0aCIsImRvbWFpbiI6InRlY2h0cnV0aC5kZXYiLCJmb2xsb3dlcnMiOjIsInBob3RvIjoiaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NzA2MTU5NDQ4NjcvTmVnMGJEeVNrLnBuZyIsImJnY29sb3IiOiIjMjk2MkZGIiwiYXJ0aWNsZXMiOnsidG90YWxEb2N1bWVudHMiOjMyfX0="><link rel="alternate" type="application/rss+xml" title="RSS Feed for Tech Truth" href="https://techtruth.dev/rss.xml"><link rel="preload" as="image" href="https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png?w=400&h=400&fit=crop&crop=faces&auto=compress,format&format=webp"><link rel="preload" as="image" href="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/1r2CG6EQ4-Y/upload/66aa1fea120b89137634546bc26c3abe.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"><style>:root { --color-custom-header: #2962FF; }</style><meta name="next-head-count" content="25"><style>#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);-ms-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}</style><script async="" src="https://ping.hashnode.com/gtag/js?id=G-72XG3F8LNJ"></script><script type="text/javascript">
window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
gtag('js', new Date());
</script><link rel="preload" href="/_next/static/media/a34f9d1faa5f3315-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"><link rel="preload" href="/_next/static/css/27eb83560ecd092b.css" as="style"><link rel="stylesheet" href="/_next/static/css/27eb83560ecd092b.css" data-n-g=""><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-f1f6e1caa9316ead.js" defer=""></script><script src="/_next/static/chunks/framework-ce84985cd166733a.js" defer=""></script><script src="/_next/static/chunks/main-999609f14ec7de7a.js" defer=""></script><script src="/_next/static/chunks/pages/_app-9b7e51f28796fc05.js" defer=""></script><script src="/_next/static/chunks/0b5ea8d6-6ac0c2d57f55ed79.js" defer=""></script><script src="/_next/static/chunks/6365-3d0e1852af604b43.js" defer=""></script><script src="/_next/static/chunks/8820-56721d947d773244.js" defer=""></script><script src="/_next/static/chunks/5772-330b7829e95060dd.js" defer=""></script><script src="/_next/static/chunks/6933-a4d32b5ac615361f.js" defer=""></script><script src="/_next/static/chunks/4960-7dfd2acc96d768e6.js" defer=""></script><script src="/_next/static/chunks/pages/index-3e1ff38c69c01c31.js" defer=""></script><script src="/_next/static/Je1wsH-vX6EWKHR9eCaeV/_buildManifest.js" defer=""></script><script src="/_next/static/Je1wsH-vX6EWKHR9eCaeV/_ssgManifest.js" defer=""></script><style id="__jsx-668768712">@font-face{font-family:"Suisse Intl";src:url("/fonts/SuisseIntl-Book-WebXL.woff2")format("woff2"),url("/fonts/SuisseIntl-Book-WebXL.woff")format("woff");font-weight:450;font-style:normal;font-display:block}@font-face{font-family:"Suisse Intl";src:url("/fonts/SuisseIntl-Medium-WebXL.woff2")format("woff2"),url("/fonts/SuisseIntl-Medium-WebXL.woff")format("woff");font-weight:500;font-style:normal;font-display:block}@font-face{font-family:"Suisse Intl";src:url("/fonts/SuisseIntl-SemiBold-WebXL.woff2")format("woff2"),url("/fonts/SuisseIntl-SemiBold-WebXL.woff")format("woff");font-weight:600;font-style:normal;font-display:block}@font-face{font-family:"Suisse Intl";src:url("/fonts/SuisseIntl-Bold-WebXL.woff2")format("woff2"),url("/fonts/SuisseIntl-Bold-WebXL.woff")format("woff");font-weight:700;font-style:normal;font-display:block}html{--font-inter:__Inter_a184c8;--font-suisse-intl:'Suisse Intl';--font-mermaid:var(--font-inter)}</style><style type="text/css">html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY( calc(var(--lift-amount) * var(--toasts-before)) ) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY( calc(var(--lift) * var(--offset) + var(--lift) * -100%) );opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}
</style><link as="script" rel="prefetch" href="/_next/static/chunks/pages/%5B...slug%5D-02cb0eb0ef099009.js"></head><body class="bg-white leading-normal antialiased dark:bg-slate-950"><input type="hidden" id="hn-user"><style id="__jsx-668768712">@font-face{font-family:"Suisse Intl";src:url("/fonts/SuisseIntl-Book-WebXL.woff2")format("woff2"),url("/fonts/SuisseIntl-Book-WebXL.woff")format("woff");font-weight:450;font-style:normal;font-display:block}@font-face{font-family:"Suisse Intl";src:url("/fonts/SuisseIntl-Medium-WebXL.woff2")format("woff2"),url("/fonts/SuisseIntl-Medium-WebXL.woff")format("woff");font-weight:500;font-style:normal;font-display:block}@font-face{font-family:"Suisse Intl";src:url("/fonts/SuisseIntl-SemiBold-WebXL.woff2")format("woff2"),url("/fonts/SuisseIntl-SemiBold-WebXL.woff")format("woff");font-weight:600;font-style:normal;font-display:block}@font-face{font-family:"Suisse Intl";src:url("/fonts/SuisseIntl-Bold-WebXL.woff2")format("woff2"),url("/fonts/SuisseIntl-Bold-WebXL.woff")format("woff");font-weight:700;font-style:normal;font-display:block}html{--font-inter:__Inter_a184c8;--font-suisse-intl:'Suisse Intl';--font-mermaid:var(--font-inter)}</style><div id="__next"><div class="bg-white dark:bg-slate-950" data-theme="light"><script type="application/ld+json">{"@context":"https://schema.org","@type":"Website","name":"Tech Truth","url":"https://techtruth.dev","description":"Tech Truth","mainEntityOfPage":{"@type":"WebPage","url":"https://techtruth.dev"},"image":{"@type":"ImageObject","url":"https://techtruth.dev/api/og/home?og=eyJ0aXRsZSI6IlRlY2glMjBUcnV0aCIsImRvbWFpbiI6InRlY2h0cnV0aC5kZXYiLCJmb2xsb3dlcnMiOjIsInBob3RvIjoiaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NzA2MTU5NDQ4NjcvTmVnMGJEeVNrLnBuZyIsImJnY29sb3IiOiIjMjk2MkZGIiwiYXJ0aWNsZXMiOnsidG90YWxEb2N1bWVudHMiOjMyfX0="},"publisher":{"@type":"Organization","name":"Tech Truth","url":"https://techtruth.dev"}}</script><header style="background-color:#2962FF" class="blog-header z-50 w-full border-b relative border-transparent md:border-none"><div class="container mx-auto px-2 md:px-4 2xl:px-10"><div class="relative z-40 flex flex-row items-center justify-between pb-2 pt-8 md:mb-4"><div class="flex flex-row items-center py-1"><div class="md:hidden text-white"><button type="button" aria-label="Open blog links" class="blog-bars-button focus-ring-base flex flex-row items-center rounded-full font-medium transition duration-100 ease-in-out focus-ring-colors-dark-header hover:bg-white/20 mr-2 p-2" data-state="closed"><svg class="h-6 w-6 stroke-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20.9889 11.9969H11.9945H3M20.9889 17.8745H3M21 6.12451H3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div><div class="hidden md:block"><div class="blog-title text-xl md:text-2xl text-left break-words font-heading font-semibold leading-snug md:font-bold text-white"><a href="/" class="focus-ring-base flex flex-row items-center focus-ring-colors-dark-header" aria-label="Tech Truth home page"><div class="mr-2 h-10 w-10 shrink-0 overflow-hidden rounded-full"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative;max-width:100%"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;max-width:100%"><img style="display:block;max-width:100%;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0" alt="" aria-hidden="true" src="data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%27400%27%20height=%27400%27/%3e"></span><img alt="Clint" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png?w=400&h=400&fit=crop&crop=faces&auto=compress,format&format=webp" decoding="async" data-nimg="intrinsic" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"></span></div>Tech Truth</a></div></div></div><div class="flex flex-row items-center text-white"><button type="button" aria-label="Open blog search" class="blog-search-button focus-ring-base flex flex-row items-center rounded-full font-medium transition duration-100 ease-in-out focus-ring-colors-dark-header hover:bg-white/20 mr-2 p-2" data-state="closed"><svg class="h-6 w-6 stroke-current" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M21 21L15.8091 15.8091M18 10.5C18 14.6421 14.6421 18 10.5 18C6.35786 18 3 14.6421 3 10.5C3 6.35786 6.35786 3 10.5 3C14.6421 3 18 6.35786 18 10.5Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button><button type="button" aria-label="Toggle blog theme" class="blog-theme-switcher focus-ring-base flex flex-row items-center rounded-full font-medium transition duration-100 ease-in-out focus-ring-colors-dark-header hover:bg-white/20 mr-2 p-2" data-state="closed"><svg class="h-6 w-6 stroke-current" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M3 11.4489C3 16.7238 7.16904 21 12.3118 21C16.2709 21 19.6529 18.4657 21 14.8925C19.9331 15.4065 18.7418 15.6938 17.485 15.6938C12.9137 15.6938 9.20787 11.8928 9.20787 7.20396C9.20787 5.24299 9.85605 3.4373 10.9446 2C6.45002 2.6783 3 6.65034 3 11.4489Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button><div class="h-10 w-10 rounded-full"><button type="button" aria-label="Toggle sign-up options" class="focus-ring-base flex flex-row items-center rounded-full font-medium transition duration-100 ease-in-out focus-ring-colors-dark-header hover:bg-white/20 blog-more-icon p-2" id="radix-:r4:" aria-haspopup="menu" aria-expanded="false" data-state="closed"><svg class="h-6 w-6 stroke-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6 9L12 15L18 9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div></div></div><div class="mx-auto my-5 flex w-2/3 flex-row items-center justify-center md:hidden"><div class="blog-title text-2xl text-center break-words font-heading font-semibold leading-snug md:font-bold text-white"><a href="/" class="focus-ring-base flex flex-row items-center focus-ring-colors-dark-header" aria-label="Tech Truth home page">Tech Truth</a></div></div><div class="blog-sub-header" data-testid="blog-sub-header"><div class="mx-0 mb-2 hidden w-full flex-row items-center md:flex"><div class="blog-social-media-section flex flex-row flex-wrap gap-y-2 justify-center gap-x-1.5 text-white"><a href="https://hashnode.com/@ClintTheEngineer" aria-label="Find me on Hashnode, external website, opens in new tab" target="_blank" rel="me noopener" class="focus-ring-base flex flex-row items-center justify-center rounded-full p-2 transition-colors duration-150 focus-ring-colors-dark-header hover:bg-white/20"><svg class="h-5 w-5 fill-current" viewBox="0 0 200 200" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.742 66.824c-18.323 18.323-18.323 48.029 0 66.352l53.082 53.082c18.323 18.323 48.029 18.323 66.352 0l53.082-53.082c18.323-18.323 18.323-48.03 0-66.352l-53.082-53.082c-18.323-18.323-48.03-18.323-66.352 0L13.742 66.824zm109.481 56.399c12.826-12.826 12.826-33.62 0-46.446s-33.62-12.826-46.446 0-12.826 33.62 0 46.446 33.62 12.826 46.446 0z"></path></svg></a><a href="/rss.xml" aria-label="Open blog XML Feed, opens in new tab" target="_blank" rel="me noopener" class="focus-ring-base flex flex-row items-center justify-center rounded-full p-2 transition-colors duration-150 focus-ring-colors-dark-header hover:bg-white/20"><svg class="h-5 w-5 fill-current" viewBox="0 0 448 512"><path d="M80 368c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32m0-48c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80zm367.996 147.615c-6.449-237.834-198.057-429.163-435.61-435.61C5.609 31.821 0 37.229 0 44.007v24.02c0 6.482 5.147 11.808 11.626 11.992 211.976 6.04 382.316 176.735 388.354 388.354.185 6.479 5.51 11.626 11.992 11.626h24.02c6.78.001 12.187-5.608 12.004-12.384zm-136.239-.05C305.401 305.01 174.966 174.599 12.435 168.243 5.643 167.977 0 173.444 0 180.242v24.024c0 6.431 5.072 11.705 11.497 11.98 136.768 5.847 246.411 115.511 252.258 252.258.275 6.425 5.549 11.497 11.98 11.497h24.024c6.797-.001 12.264-5.644 11.998-12.436z"></path></svg></a></div><div class="mb-0 ml-auto flex flex-row items-center justify-center gap-x-3"><button type="button" class="blog-follow-button focus-ring-base flex flex-row items-center rounded-full border-1-1/2 px-4 py-2 text-center text-sm font-medium transition-colors duration-150 hover:bg-opacity-90 disabled:cursor-not-allowed disabled:opacity-50 text-slate-800 bg-white border-white hover:bg-blue-50 focus-ring-colors-dark-header" aria-label="Follow user" data-state="closed"><svg class="mr-2 h-5 w-5 stroke-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 19.25C2.5 15.5221 5.52208 12.5 9.25 12.5V12.5C12.9779 12.5 16 15.5221 16 19.25V19.5C16 20.6046 15.1046 21.5 14 21.5H4.5C3.39543 21.5 2.5 20.6046 2.5 19.5V19.25Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12.75 6C12.75 7.933 11.183 9.5 9.25 9.5C7.317 9.5 5.75 7.933 5.75 6C5.75 4.067 7.317 2.5 9.25 2.5C11.183 2.5 12.75 4.067 12.75 6Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M19 7.5V10.5M19 10.5V13.5M19 10.5H16M19 10.5H22" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span>Follow</span></button><button class="blog-newsletter-button rounded-full border-1-1/2 bg-transparent p-2 transition-colors duration-150 focus-ring-base border-white text-white hover:bg-black/10 dark:border-white dark:text-white dark:hover:bg-black/10 focus-ring-colors-dark-header" type="button" aria-label="Open subscribe to newsletter" data-state="closed"><svg class="h-5 w-5 fill-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.1367 7.50493C13.551 7.50493 13.8867 7.16914 13.8867 6.75493C13.8867 6.34071 13.551 6.00493 13.1367 6.00493V7.50493ZM19.9024 13.0846C19.9024 12.6704 19.5666 12.3346 19.1524 12.3346C18.7382 12.3346 18.4024 12.6704 18.4024 13.0846H19.9024ZM2.5013 9.95291C2.1333 9.76278 1.68084 9.90697 1.49071 10.275C1.30058 10.643 1.44477 11.0954 1.81277 11.2855L2.5013 9.95291ZM16.5938 12.1078C16.9382 11.8778 17.031 11.412 16.8009 11.0676C16.5709 10.7231 16.1051 10.6304 15.7607 10.8604L16.5938 12.1078ZM16.2825 6.01303C15.8683 6.01303 15.5325 6.34882 15.5325 6.76303C15.5325 7.17725 15.8683 7.51303 16.2825 7.51303V6.01303ZM22 7.51303C22.4142 7.51303 22.75 7.17725 22.75 6.76303C22.75 6.34882 22.4142 6.01303 22 6.01303V7.51303ZM18.3913 9.62177C18.3913 10.036 18.727 10.3718 19.1413 10.3718C19.5555 10.3718 19.8913 10.036 19.8913 9.62177H18.3913ZM19.8913 3.9043C19.8913 3.49008 19.5555 3.1543 19.1413 3.1543C18.727 3.1543 18.3913 3.49008 18.3913 3.9043H19.8913ZM8.27708 13.7812L7.93282 14.4475L8.27708 13.7812ZM10.1277 14.5662L10.0103 15.307L10.1277 14.5662ZM11.3949 14.4952L11.1955 13.7722L11.3949 14.4952ZM18.4024 18.1899C18.4024 18.8282 17.8849 19.3457 17.2466 19.3457V20.8457C18.7134 20.8457 19.9024 19.6566 19.9024 18.1899H18.4024ZM17.2466 19.3457H3.90583V20.8457H17.2466V19.3457ZM3.90583 19.3457C3.26748 19.3457 2.75 18.8282 2.75 18.1899H1.25C1.25 19.6566 2.43905 20.8457 3.90583 20.8457V19.3457ZM2.75 18.1899V8.66075H1.25V18.1899H2.75ZM2.75 8.66075C2.75 8.02241 3.26748 7.50493 3.90583 7.50493V6.00493C2.43905 6.00493 1.25 7.19398 1.25 8.66075H2.75ZM3.90583 7.50493H13.1367V6.00493H3.90583V7.50493ZM19.9024 18.1899V13.0846H18.4024V18.1899H19.9024ZM1.81277 11.2855L7.93282 14.4475L8.62134 13.1149L2.5013 9.95291L1.81277 11.2855ZM13.5627 14.1321L16.5938 12.1078L15.7607 10.8604L12.7297 12.8847L13.5627 14.1321ZM16.2825 7.51303H19.1413V6.01303H16.2825V7.51303ZM19.1413 7.51303H22V6.01303H19.1413V7.51303ZM19.8913 9.62177V6.76303H18.3913V9.62177H19.8913ZM19.8913 6.76303V3.9043H18.3913V6.76303H19.8913ZM7.93282 14.4475C8.80209 14.8966 9.38471 15.2078 10.0103 15.307L10.2451 13.8255C9.91517 13.7732 9.58255 13.6115 8.62134 13.1149L7.93282 14.4475ZM12.7297 12.8847C11.8299 13.4856 11.5175 13.6834 11.1955 13.7722L11.5943 15.2182C12.2049 15.0498 12.7491 14.6755 13.5627 14.1321L12.7297 12.8847ZM10.0103 15.307C10.5386 15.3907 11.0786 15.3604 11.5943 15.2182L11.1955 13.7722C10.8861 13.8575 10.562 13.8757 10.2451 13.8255L10.0103 15.307Z"></path></svg></button></div></div><div class="mb-2 flex w-full flex-col items-center md:hidden"><div class="mb-6 flex flex-row items-center justify-center gap-x-3"><button type="button" class="blog-follow-button focus-ring-base flex flex-row items-center rounded-full border-1-1/2 px-4 py-2 text-center text-sm font-medium transition-colors duration-150 hover:bg-opacity-90 disabled:cursor-not-allowed disabled:opacity-50 text-slate-800 bg-white border-white hover:bg-blue-50 focus-ring-colors-dark-header" aria-label="Follow user" data-state="closed"><svg class="mr-2 h-5 w-5 stroke-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 19.25C2.5 15.5221 5.52208 12.5 9.25 12.5V12.5C12.9779 12.5 16 15.5221 16 19.25V19.5C16 20.6046 15.1046 21.5 14 21.5H4.5C3.39543 21.5 2.5 20.6046 2.5 19.5V19.25Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12.75 6C12.75 7.933 11.183 9.5 9.25 9.5C7.317 9.5 5.75 7.933 5.75 6C5.75 4.067 7.317 2.5 9.25 2.5C11.183 2.5 12.75 4.067 12.75 6Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M19 7.5V10.5M19 10.5V13.5M19 10.5H16M19 10.5H22" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span>Follow</span></button><button class="blog-newsletter-button rounded-full border-1-1/2 bg-transparent p-2 transition-colors duration-150 focus-ring-base border-white text-white hover:bg-black/10 dark:border-white dark:text-white dark:hover:bg-black/10 focus-ring-colors-dark-header" type="button" aria-label="Open subscribe to newsletter" data-state="closed"><svg class="h-5 w-5 fill-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.1367 7.50493C13.551 7.50493 13.8867 7.16914 13.8867 6.75493C13.8867 6.34071 13.551 6.00493 13.1367 6.00493V7.50493ZM19.9024 13.0846C19.9024 12.6704 19.5666 12.3346 19.1524 12.3346C18.7382 12.3346 18.4024 12.6704 18.4024 13.0846H19.9024ZM2.5013 9.95291C2.1333 9.76278 1.68084 9.90697 1.49071 10.275C1.30058 10.643 1.44477 11.0954 1.81277 11.2855L2.5013 9.95291ZM16.5938 12.1078C16.9382 11.8778 17.031 11.412 16.8009 11.0676C16.5709 10.7231 16.1051 10.6304 15.7607 10.8604L16.5938 12.1078ZM16.2825 6.01303C15.8683 6.01303 15.5325 6.34882 15.5325 6.76303C15.5325 7.17725 15.8683 7.51303 16.2825 7.51303V6.01303ZM22 7.51303C22.4142 7.51303 22.75 7.17725 22.75 6.76303C22.75 6.34882 22.4142 6.01303 22 6.01303V7.51303ZM18.3913 9.62177C18.3913 10.036 18.727 10.3718 19.1413 10.3718C19.5555 10.3718 19.8913 10.036 19.8913 9.62177H18.3913ZM19.8913 3.9043C19.8913 3.49008 19.5555 3.1543 19.1413 3.1543C18.727 3.1543 18.3913 3.49008 18.3913 3.9043H19.8913ZM8.27708 13.7812L7.93282 14.4475L8.27708 13.7812ZM10.1277 14.5662L10.0103 15.307L10.1277 14.5662ZM11.3949 14.4952L11.1955 13.7722L11.3949 14.4952ZM18.4024 18.1899C18.4024 18.8282 17.8849 19.3457 17.2466 19.3457V20.8457C18.7134 20.8457 19.9024 19.6566 19.9024 18.1899H18.4024ZM17.2466 19.3457H3.90583V20.8457H17.2466V19.3457ZM3.90583 19.3457C3.26748 19.3457 2.75 18.8282 2.75 18.1899H1.25C1.25 19.6566 2.43905 20.8457 3.90583 20.8457V19.3457ZM2.75 18.1899V8.66075H1.25V18.1899H2.75ZM2.75 8.66075C2.75 8.02241 3.26748 7.50493 3.90583 7.50493V6.00493C2.43905 6.00493 1.25 7.19398 1.25 8.66075H2.75ZM3.90583 7.50493H13.1367V6.00493H3.90583V7.50493ZM19.9024 18.1899V13.0846H18.4024V18.1899H19.9024ZM1.81277 11.2855L7.93282 14.4475L8.62134 13.1149L2.5013 9.95291L1.81277 11.2855ZM13.5627 14.1321L16.5938 12.1078L15.7607 10.8604L12.7297 12.8847L13.5627 14.1321ZM16.2825 7.51303H19.1413V6.01303H16.2825V7.51303ZM19.1413 7.51303H22V6.01303H19.1413V7.51303ZM19.8913 9.62177V6.76303H18.3913V9.62177H19.8913ZM19.8913 6.76303V3.9043H18.3913V6.76303H19.8913ZM7.93282 14.4475C8.80209 14.8966 9.38471 15.2078 10.0103 15.307L10.2451 13.8255C9.91517 13.7732 9.58255 13.6115 8.62134 13.1149L7.93282 14.4475ZM12.7297 12.8847C11.8299 13.4856 11.5175 13.6834 11.1955 13.7722L11.5943 15.2182C12.2049 15.0498 12.7491 14.6755 13.5627 14.1321L12.7297 12.8847ZM10.0103 15.307C10.5386 15.3907 11.0786 15.3604 11.5943 15.2182L11.1955 13.7722C10.8861 13.8575 10.562 13.8757 10.2451 13.8255L10.0103 15.307Z"></path></svg></button></div><div class="blog-social-media-section flex flex-row flex-wrap gap-y-2 justify-center gap-x-1.5 text-white"><a href="https://hashnode.com/@ClintTheEngineer" aria-label="Find me on Hashnode, external website, opens in new tab" target="_blank" rel="me noopener" class="focus-ring-base flex flex-row items-center justify-center rounded-full p-2 transition-colors duration-150 focus-ring-colors-dark-header hover:bg-white/20"><svg class="h-5 w-5 fill-current" viewBox="0 0 200 200" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.742 66.824c-18.323 18.323-18.323 48.029 0 66.352l53.082 53.082c18.323 18.323 48.029 18.323 66.352 0l53.082-53.082c18.323-18.323 18.323-48.03 0-66.352l-53.082-53.082c-18.323-18.323-48.03-18.323-66.352 0L13.742 66.824zm109.481 56.399c12.826-12.826 12.826-33.62 0-46.446s-33.62-12.826-46.446 0-12.826 33.62 0 46.446 33.62 12.826 46.446 0z"></path></svg></a><a href="/rss.xml" aria-label="Open blog XML Feed, opens in new tab" target="_blank" rel="me noopener" class="focus-ring-base flex flex-row items-center justify-center rounded-full p-2 transition-colors duration-150 focus-ring-colors-dark-header hover:bg-white/20"><svg class="h-5 w-5 fill-current" viewBox="0 0 448 512"><path d="M80 368c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32m0-48c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80zm367.996 147.615c-6.449-237.834-198.057-429.163-435.61-435.61C5.609 31.821 0 37.229 0 44.007v24.02c0 6.482 5.147 11.808 11.626 11.992 211.976 6.04 382.316 176.735 388.354 388.354.185 6.479 5.51 11.626 11.992 11.626h24.02c6.78.001 12.187-5.608 12.004-12.384zm-136.239-.05C305.401 305.01 174.966 174.599 12.435 168.243 5.643 167.977 0 173.444 0 180.242v24.024c0 6.431 5.072 11.705 11.497 11.98 136.768 5.847 246.411 115.511 252.258 252.258.275 6.425 5.549 11.497 11.98 11.497h24.024c6.797-.001 12.264-5.644 11.998-12.436z"></path></svg></a></div></div><div class="relative mt-8 hidden flex-row items-center justify-center overflow-hidden text-base md:flex" data-tom="hidden md:flex relative flex-row items-center justify-center overflow-hidden text-base mt-8"><div class="scrollbar-container overflow-hidden ps"><nav class="relative flex flex-row flex-nowrap items-end whitespace-nowrap px-2 pt-2"><a class="blog-nav-active group flex items-center justify-center border-b-2 border-transparent px-2 capitalize focus:outline-none border-slate-50" href="/"><span class="blog-nav-text mb-2 block rounded-lg px-2 py-1 ring-offset-2 transition-colors duration-150 group-focus:ring text-white hover:bg-white/20 group-focus:ring-white/80 group-focus:ring-offset-custom-header font-semibold text-opacity-100 dark:text-opacity-100">home</span></a><a class="blog-nav group flex items-center justify-center border-b-2 border-transparent px-2 capitalize focus:outline-none" href="/badges"><span class="blog-nav-text mb-2 block rounded-lg px-2 py-1 ring-offset-2 transition-colors duration-150 group-focus:ring text-white hover:bg-white/20 group-focus:ring-white/80 group-focus:ring-offset-custom-header font-medium text-opacity-70 dark:text-opacity-70">badges</span></a><a class="blog-nav group flex items-center justify-center border-b-2 border-transparent px-2 capitalize focus:outline-none" href="/newsletter"><span class="blog-nav-text mb-2 block rounded-lg px-2 py-1 ring-offset-2 transition-colors duration-150 group-focus:ring text-white hover:bg-white/20 group-focus:ring-white/80 group-focus:ring-offset-custom-header font-medium text-opacity-70 dark:text-opacity-70">newsletter</span></a></nav><div class="ps__rail-x" style="left: 0px; top: 0px;"><div class="ps__thumb-x" tabindex="0" style="left: 0px; width: 0px;"></div></div><div class="ps__rail-y" style="top: 0px; left: 0px;"><div class="ps__thumb-y" tabindex="0" style="top: 0px; height: 0px;"></div></div></div></div></div></div></header><div class="blog-featured-area mx-auto border-b bg-slate-50 dark:border-slate-800 dark:bg-black"><div class="blog-featured-container container mx-auto grid grid-cols-1 gap-8 px-4 py-4 md:grid-flow-col md:grid-cols-2 md:grid-rows-2 xl:grid-cols-3 xl:px-10 xl:py-10 2xl:px-24 2xl:py-10"><div class="blog-article-card col-span-1 md:row-span-2 xl:col-span-2"><a aria-label="Cover photo of the article titled Writing Clean and Maintainable Code in JavaScript" class="blog-article-card-cover mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="/writing-clean-and-maintainable-code-in-javascript"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="Writing Clean and Maintainable Code in JavaScript" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/1r2CG6EQ4-Y/upload/66aa1fea120b89137634546bc26c3abe.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp" decoding="async" data-nimg="responsive" class="block w-full" style="position: absolute; inset: 0px; box-sizing: border-box; padding: 0px; border: none; margin: auto; display: block; width: 0px; height: 0px; min-width: 100%; max-width: 100%; min-height: 100%; max-height: 100%;"><noscript><img alt="Writing Clean and Maintainable Code in JavaScript" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/1r2CG6EQ4-Y/upload/66aa1fea120b89137634546bc26c3abe.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=1r2CG6EQ4-Y"></a><h2 class="blog-article-card-title mx-4 mb-3 block font-heading font-bold text-slate-900 hover:opacity-75 dark:text-slate-100 text-xl md:text-3xl lg:text-4xl"><a href="/writing-clean-and-maintainable-code-in-javascript">Writing Clean and Maintainable Code in JavaScript</a></h2><p class="blog-article-card-brief mx-4 mb-3 break-words text-lg leading-snug text-slate-500 hover:opacity-75 dark:text-slate-400"><a href="/writing-clean-and-maintainable-code-in-javascript">Introduction
Writing clean and maintainable code is crucial for the long-term success and sustainability of any software project. In JavaScript, a popular and versatile programming language, adhering to best practices can greatly enhance code readabi...</a></p><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><a href="https://hashnode.com/@ClintTheEngineer" class="blog-article-card-author-photo mr-2 block h-8 w-8 overflow-hidden rounded-full bg-slate-100 dark:border-slate-800 dark:bg-slate-900"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative;max-width:100%"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;max-width:100%"><img style="display:block;max-width:100%;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0" alt="" aria-hidden="true" src="data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%2772%27%20height=%2772%27/%3e"></span><img alt="Clint" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png?w=72&h=72&fit=crop&crop=faces&auto=compress,format&format=webp" decoding="async" data-nimg="intrinsic" class="block" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"><noscript><img alt="Clint" loading="lazy" decoding="async" data-nimg="intrinsic" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="block" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png?w=72&h=72&fit=crop&crop=faces&auto=compress,format&format=webp"/></noscript></span></a><div class="flex flex-col items-start leading-snug"><a class="blog-article-card-author-name block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="/writing-clean-and-maintainable-code-in-javascript"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>3<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled Working with APIs in React: Fetch, Axios, and Beyond" class="blog-article-card-cover mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="/working-with-apis-in-react-fetch-axios-and-beyond"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="Working with APIs in React: Fetch, Axios, and Beyond" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/qlaj76CocqY/upload/2346ece635b6d42912f791c6bbf03fa6.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp" decoding="async" data-nimg="responsive" class="block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/qlaj76CocqY/upload/2346ece635b6d42912f791c6bbf03fa6.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="Working with APIs in React: Fetch, Axios, and Beyond" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/qlaj76CocqY/upload/2346ece635b6d42912f791c6bbf03fa6.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=qlaj76CocqY"></a><h2 class="blog-article-card-title mx-4 mb-3 block font-heading font-bold text-slate-900 hover:opacity-75 dark:text-slate-100 text-xl"><a href="/working-with-apis-in-react-fetch-axios-and-beyond">Working with APIs in React: Fetch, Axios, and Beyond</a></h2><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><a href="https://hashnode.com/@ClintTheEngineer" class="blog-article-card-author-photo mr-2 block h-8 w-8 overflow-hidden rounded-full bg-slate-100 dark:border-slate-800 dark:bg-slate-900"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative;max-width:100%"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;max-width:100%"><img style="display:block;max-width:100%;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0" alt="" aria-hidden="true" src="data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%2772%27%20height=%2772%27/%3e"></span><img alt="Clint" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png?w=72&h=72&fit=crop&crop=faces&auto=compress,format&format=webp" decoding="async" data-nimg="intrinsic" class="block" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"><noscript><img alt="Clint" loading="lazy" decoding="async" data-nimg="intrinsic" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="block" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png?w=72&h=72&fit=crop&crop=faces&auto=compress,format&format=webp"/></noscript></span></a><div class="flex flex-col items-start leading-snug"><a class="blog-article-card-author-name block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="/working-with-apis-in-react-fetch-axios-and-beyond"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>3<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled React: Because No One Said Programming Was Fun" class="blog-article-card-cover mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="/react-because-no-one-said-programming-was-fun"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="React: Because No One Said Programming Was Fun" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/0EEKgGOe3ps/upload/2fe702c2e8611e4f946791f97334011f.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp" decoding="async" data-nimg="responsive" class="block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/0EEKgGOe3ps/upload/2fe702c2e8611e4f946791f97334011f.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="React: Because No One Said Programming Was Fun" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/0EEKgGOe3ps/upload/2fe702c2e8611e4f946791f97334011f.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=0EEKgGOe3ps"></a><h2 class="blog-article-card-title mx-4 mb-3 block font-heading font-bold text-slate-900 hover:opacity-75 dark:text-slate-100 text-xl"><a href="/react-because-no-one-said-programming-was-fun">React: Because No One Said Programming Was Fun</a></h2><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><a href="https://hashnode.com/@ClintTheEngineer" class="blog-article-card-author-photo mr-2 block h-8 w-8 overflow-hidden rounded-full bg-slate-100 dark:border-slate-800 dark:bg-slate-900"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative;max-width:100%"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;max-width:100%"><img style="display:block;max-width:100%;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0" alt="" aria-hidden="true" src="data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%2772%27%20height=%2772%27/%3e"></span><img alt="Clint" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="intrinsic" class="block" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"><noscript><img alt="Clint" loading="lazy" decoding="async" data-nimg="intrinsic" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="block" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png?w=72&h=72&fit=crop&crop=faces&auto=compress,format&format=webp"/></noscript></span></a><div class="flex flex-col items-start leading-snug"><a class="blog-article-card-author-name block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="/react-because-no-one-said-programming-was-fun"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>3<!-- --> min read</span></span></a></div></div></div></div></div></div><div class="blog-content-area feed-width mx-auto md:w-2/3"><div></div></div><div class="blog-articles-area mx-auto mt-10 border-b pb-10 dark:border-slate-800"><div class="blog-articles-container container mx-auto grid grid-cols-1 gap-10 px-4 py-4 md:grid-cols-2 lg:grid-cols-3 xl:px-10 xl:py-10 2xl:px-24 2xl:py-5"><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled Building Offline-First Web Applications with Service Workers and IndexedDB" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/building-offline-first-web-applications-with-service-workers-and-indexeddb"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="Building Offline-First Web Applications with Service Workers and IndexedDB" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/QwAL909kTiY/upload/59eca892d0f2129b6c11ec5d2d0ce3ad.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="Building Offline-First Web Applications with Service Workers and IndexedDB" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/QwAL909kTiY/upload/59eca892d0f2129b6c11ec5d2d0ce3ad.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=QwAL909kTiY"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/building-offline-first-web-applications-with-service-workers-and-indexeddb">Building Offline-First Web Applications with Service Workers and IndexedDB</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/building-offline-first-web-applications-with-service-workers-and-indexeddb"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>5<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled State Management in React Explained" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/state-management-in-react-explained"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="State Management in React Explained" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/cxoR55-bels/upload/11843e603d9a76486f59dac498ab005a.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="State Management in React Explained" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/cxoR55-bels/upload/11843e603d9a76486f59dac498ab005a.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=cxoR55-bels"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/state-management-in-react-explained">State Management in React Explained</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/state-management-in-react-explained"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>4<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled Introduction to Data Structures and Algorithms in JavaScript" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/introduction-to-data-structures-and-algorithms-in-javascript"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="Introduction to Data Structures and Algorithms in JavaScript" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/LqKhnDzSF-8/upload/41adf80e2f17b9a64c708dc24f25394e.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="Introduction to Data Structures and Algorithms in JavaScript" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/LqKhnDzSF-8/upload/41adf80e2f17b9a64c708dc24f25394e.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=LqKhnDzSF-8"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/introduction-to-data-structures-and-algorithms-in-javascript">Introduction to Data Structures and Algorithms in JavaScript</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/introduction-to-data-structures-and-algorithms-in-javascript"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>24<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled How to Build a Progressive Web Application with JavaScript" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/how-to-build-a-progressive-web-application-with-javascript"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="How to Build a Progressive Web Application with JavaScript" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/QwAL909kTiY/upload/0bfed85c6a7f9dd7641ae2f50f1f5695.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="How to Build a Progressive Web Application with JavaScript" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/QwAL909kTiY/upload/0bfed85c6a7f9dd7641ae2f50f1f5695.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=QwAL909kTiY"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/how-to-build-a-progressive-web-application-with-javascript">How to Build a Progressive Web Application with JavaScript</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/how-to-build-a-progressive-web-application-with-javascript"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>8<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled Understanding React Components and Props" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/understanding-react-components-and-props"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="Understanding React Components and Props" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/HpMihL323k0/upload/0a17323e981dc38c0e1d132e2ea5c69d.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="Understanding React Components and Props" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/HpMihL323k0/upload/0a17323e981dc38c0e1d132e2ea5c69d.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=HpMihL323k0"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/understanding-react-components-and-props">Understanding React Components and Props</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/understanding-react-components-and-props"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>4<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled A Quick Look at Promises and Async/Await in JavaScript" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/a-quick-look-at-promises-and-asyncawait-in-javascript"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="A Quick Look at Promises and Async/Await in JavaScript" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/hopnkQoC0dg/upload/7dacd3a91a4badc5ebdbd04d63dfec0c.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="A Quick Look at Promises and Async/Await in JavaScript" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/hopnkQoC0dg/upload/7dacd3a91a4badc5ebdbd04d63dfec0c.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=hopnkQoC0dg"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/a-quick-look-at-promises-and-asyncawait-in-javascript">A Quick Look at Promises and Async/Await in JavaScript</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/a-quick-look-at-promises-and-asyncawait-in-javascript"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>3<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled JavaScript Frameworks: A Comprehensive Guide for Beginners" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/javascript-frameworks-a-comprehensive-guide-for-beginners"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="JavaScript Frameworks: A Comprehensive Guide for Beginners" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/ZMraoOybTLQ/upload/92ba2fe4db0e75a10a1686aae9fd98b7.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="JavaScript Frameworks: A Comprehensive Guide for Beginners" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/ZMraoOybTLQ/upload/92ba2fe4db0e75a10a1686aae9fd98b7.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=ZMraoOybTLQ"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/javascript-frameworks-a-comprehensive-guide-for-beginners">JavaScript Frameworks: A Comprehensive Guide for Beginners</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/javascript-frameworks-a-comprehensive-guide-for-beginners"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>4<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled Building a Real-Time Chat App with Node.js and Socket.io" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/building-a-real-time-chat-app-with-nodejs-and-socketio"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="Building a Real-Time Chat App with Node.js and Socket.io" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/PEJtZfT6C1Q/upload/ca725f30b7549725bdfc499c742fccaf.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="Building a Real-Time Chat App with Node.js and Socket.io" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/PEJtZfT6C1Q/upload/ca725f30b7549725bdfc499c742fccaf.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=PEJtZfT6C1Q"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/building-a-real-time-chat-app-with-nodejs-and-socketio">Building a Real-Time Chat App with Node.js and Socket.io</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/building-a-real-time-chat-app-with-nodejs-and-socketio"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>5<!-- --> min read</span></span></a></div></div></div></div><div class="blog-article-card col-span-1"><a aria-label="Cover photo of the article titled Best Practices for JavaScript Debugging and Error Handling" class="mb-4 block w-full overflow-hidden rounded-lg border bg-slate-100 hover:opacity-90 dark:border-slate-800 dark:bg-slate-800" href="https://techtruth.dev/best-practices-for-javascript-debugging-and-error-handling"><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:52.5%"></span><img alt="Best Practices for JavaScript Debugging and Error Handling" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="blog-article-card-cover block w-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;background-size:cover;background-position:0% 0%;filter:blur(20px);background-image:url("https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Q-X5hto7oHg/upload/498e172177191cbf262dd7d27f974c01.jpeg?w=400&h=210&fit=crop&crop=entropy&auto=compress,format&format=webp&fm=blurhash")"><noscript><img alt="Best Practices for JavaScript Debugging and Error Handling" loading="lazy" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="blog-article-card-cover block w-full" src="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Q-X5hto7oHg/upload/498e172177191cbf262dd7d27f974c01.jpeg?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp"/></noscript></span><img alt="" class="hidden" src="https://views.unsplash.com/v?app_id=261036&photo_id=Q-X5hto7oHg"></a><h1 class="blog-article-card-title mx-4 mb-2 block break-words font-heading text-2xl font-bold leading-snug text-slate-900 hover:opacity-75 dark:text-slate-100"><a href="https://techtruth.dev/best-practices-for-javascript-debugging-and-error-handling">Best Practices for JavaScript Debugging and Error Handling</a></h1><div class="blog-article-card-author-strip mx-4 flex flex-row flex-wrap items-center"><div class="flex flex-col items-start leading-snug"><a class="block font-semibold text-slate-700 dark:text-slate-400" href="https://hashnode.com/@ClintTheEngineer">Clint</a><div class="blog-article-card-article-meta flex flex-row text-sm"><a class="flex flex-row items-center text-slate-500 dark:text-slate-400" href="https://techtruth.dev/best-practices-for-javascript-debugging-and-error-handling"><span class="flex items-center"><svg class="mr-2 h-4 w-4 fill-current" viewBox="0 0 576 512"><path d="M540.9 56.77c-45.95-16.66-90.23-24.09-129.1-24.75-60.7.94-102.7 17.45-123.8 27.72-21.1-10.27-64.1-26.8-123.2-27.74-40-.05-84.4 8.35-129.7 24.77C14.18 64.33 0 84.41 0 106.7v302.9c0 14.66 6.875 28.06 18.89 36.8 11.81 8.531 26.64 10.98 40.73 6.781 118.9-36.34 209.3 19.05 214.3 22.19C277.8 477.6 281.2 480 287.1 480c6.52 0 10.12-2.373 14.07-4.578 10.78-6.688 98.3-57.66 214.3-22.27 14.11 4.25 28.86 1.75 40.75-6.812C569.1 437.6 576 424.2 576 409.6V106.7c0-22.28-14.2-42.35-35.1-49.93zM272 438.1c-24.95-12.03-71.01-29.37-130.5-29.37-27.83 0-58.5 3.812-91.19 13.77-4.406 1.344-9 .594-12.69-2.047C34.02 417.8 32 413.1 32 409.6V106.7c0-8.859 5.562-16.83 13.86-19.83C87.66 71.7 127.9 63.95 164.5 64c51.8.81 89.7 15.26 107.5 23.66V438.1zm272-28.5c0 4.375-2.016 8.234-5.594 10.84-3.766 2.703-8.297 3.422-12.69 2.125C424.1 391.6 341.3 420.4 304 438.3V87.66c17.8-8.4 55.7-22.85 107.4-23.66 35.31-.063 76.34 7.484 118.8 22.88 8.2 3 13.8 10.96 13.8 19.82v302.9z"></path></svg><span>8<!-- --> min read</span></span></a></div></div></div></div><div class="col-span-1 flex flex-row justify-center py-10 md:col-span-2 lg:col-span-3"><button class="rounded-full border border-transparent font-medium hover:bg-slate-200 disabled:opacity-50 hover:dark:bg-slate-700 flex flex-row items-center focus:outline-none w-full justify-center px-4 py-2 text-lg text-blue-600 dark:text-blue-500" type="button" variant="transparent"><span>Load more</span><svg class="ml-3 h-5 w-5 fill-current" viewBox="0 0 448 512"><path d="M443.5 162.6l-7.1-7.1c-4.7-4.7-12.3-4.7-17 0L224 351 28.5 155.5c-4.7-4.7-12.3-4.7-17 0l-7.1 7.1c-4.7 4.7-4.7 12.3 0 17l211 211.1c4.7 4.7 12.3 4.7 17 0l211-211.1c4.8-4.7 4.8-12.3.1-17z"></path></svg></button></div></div></div><div class="blog-footer border-t bg-slate-100 dark:border-slate-800 dark:bg-slate-950"><footer class="container mx-auto grid grid-cols-2 items-center gap-12 px-4 pb-20 pt-10 xl:px-10 2xl:px-24"><div class="col-span-full flex flex-col items-center gap-3 md:col-span-1 md:items-start md:gap-5"><p class="text-sm font-medium text-slate-600 dark:text-slate-400">©2024 Tech Truth</p></div><div class="col-span-full md:col-span-1"><div class="flex flex-row flex-wrap justify-center gap-2 text-sm text-slate-800 dark:text-slate-200 md:flex-nowrap md:justify-end"><a class="hover:text-blue-600 dark:hover:text-blue-500" rel="noopener" href="/archive">Archive</a><span class="font-extrabold text-slate-500 dark:text-slate-400">·</span><a href="https://hashnode.com/privacy?source=blog-footer" class="hover:text-blue-600 dark:hover:text-blue-500">Privacy policy</a><span class="font-extrabold text-slate-500 dark:text-slate-400">·</span><a class="hover:text-blue-600 dark:hover:text-blue-500" href="https://hashnode.com/terms?source=blog-footer">Terms</a></div></div><div class="col-span-full flex flex-row items-center justify-center gap-1 text-slate-600 dark:text-slate-500"><svg fill="none" class="h-3 w-3 stroke-current" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="1.5" d="M11.2 5.06s.3-1.295.8-1.295.8 1.295.8 1.295c1.34 4.47 1.67 4.8 6.14 6.14 0 0 1.295.3 1.295.8s-1.295.8-1.295.8c-4.47 1.34-4.8 1.67-6.14 6.14 0 0-.3 1.295-.8 1.295s-.8-1.295-.8-1.295c-1.34-4.47-1.67-4.8-6.14-6.14 0 0-1.295-.3-1.295-.8s1.295-.8 1.295-.8c4.47-1.34 4.8-1.67 6.14-6.14Z"></path></svg><svg fill="none" class="h-3 w-3 stroke-current" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="1.5" d="M11.2 5.06s.3-1.295.8-1.295.8 1.295.8 1.295c1.34 4.47 1.67 4.8 6.14 6.14 0 0 1.295.3 1.295.8s-1.295.8-1.295.8c-4.47 1.34-4.8 1.67-6.14 6.14 0 0-.3 1.295-.8 1.295s-.8-1.295-.8-1.295c-1.34-4.47-1.67-4.8-6.14-6.14 0 0-1.295-.3-1.295-.8s1.295-.8 1.295-.8c4.47-1.34 4.8-1.67 6.14-6.14Z"></path></svg><svg fill="none" class="h-3 w-3 stroke-current" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="1.5" d="M11.2 5.06s.3-1.295.8-1.295.8 1.295.8 1.295c1.34 4.47 1.67 4.8 6.14 6.14 0 0 1.295.3 1.295.8s-1.295.8-1.295.8c-4.47 1.34-4.8 1.67-6.14 6.14 0 0-.3 1.295-.8 1.295s-.8-1.295-.8-1.295c-1.34-4.47-1.67-4.8-6.14-6.14 0 0-1.295-.3-1.295-.8s1.295-.8 1.295-.8c4.47-1.34 4.8-1.67 6.14-6.14Z"></path></svg><svg fill="none" class="h-3 w-3 stroke-current" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="1.5" d="M11.2 5.06s.3-1.295.8-1.295.8 1.295.8 1.295c1.34 4.47 1.67 4.8 6.14 6.14 0 0 1.295.3 1.295.8s-1.295.8-1.295.8c-4.47 1.34-4.8 1.67-6.14 6.14 0 0-.3 1.295-.8 1.295s-.8-1.295-.8-1.295c-1.34-4.47-1.67-4.8-6.14-6.14 0 0-1.295-.3-1.295-.8s1.295-.8 1.295-.8c4.47-1.34 4.8-1.67 6.14-6.14Z"></path></svg></div><div class="col-span-full flex flex-col items-center justify-center gap-5 text-slate-600 dark:text-slate-400"><a href="https://hashnode.com?source=blog-footer" target="_Blank" rel="noopener" class="hover:text-slate-800 dark:hover:text-slate-50"><svg class="h-8 w-8 fill-current" viewBox="0 0 200 200" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.742 66.824c-18.323 18.323-18.323 48.029 0 66.352l53.082 53.082c18.323 18.323 48.029 18.323 66.352 0l53.082-53.082c18.323-18.323 18.323-48.03 0-66.352l-53.082-53.082c-18.323-18.323-48.03-18.323-66.352 0L13.742 66.824zm109.481 56.399c12.826-12.826 12.826-33.62 0-46.446s-33.62-12.826-46.446 0-12.826 33.62 0 46.446 33.62 12.826 46.446 0z"></path></svg></a><p class="text-center text-sm">Powered by Hashnode - Build your developer hub.</p><div class="flex flex-row gap-2"><a href="https://hashnode.com/products/blogs?source=blog-footer" class="block rounded-lg border bg-white px-4 py-2 text-sm hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-900 dark:hover:bg-slate-800">Start your blog</a><a href="https://hashnode.com/products/docs?source=blog-footer" class="block rounded-lg border bg-white px-4 py-2 text-sm hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-900 dark:hover:bg-slate-800">Create docs</a></div></div></footer></div></div></div><script type="text/javascript">
var SUPPORTS_PASSIVE = false;
try {
var opts = Object.defineProperty({}, 'passive', {
get: function() {
SUPPORTS_PASSIVE = true;
}
});
window.addEventListener("testPassive", null, opts);
window.removeEventListener("testPassive", null, opts);
} catch (e) {}
</script><script type="text/javascript">
// Array.prototype.flat polyfill
if (!Array.prototype.flat) {
// eslint-disable-next-line no-extend-native
Object.defineProperty(Array.prototype, 'flat', {
configurable: true,
writable: true,
value() {
// eslint-disable-next-line prefer-rest-params
const depth = typeof arguments[0] === 'undefined' ? 1 : Number(arguments[0]) || 0;
const result = [];
const { forEach } = result;
// eslint-disable-next-line no-var
var flatDeep = function (arr, depth) {
forEach.call(arr, (val) => {
if (depth > 0 && Array.isArray(val)) {
flatDeep(val, depth - 1);
} else {
result.push(val);
}
});
};
flatDeep(this, depth);
return result;
},
});
}
</script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"publication":{"__typename":"Publication","id":"639393ab15750808b26990f5","url":"https://techtruth.dev","canonicalURL":"https://techtruth.dev","urlPattern":"SIMPLE","title":"Tech Truth","displayTitle":null,"hasBadges":true,"descriptionSEO":"","about":null,"features":{"proTeam":{"isEnabled":false},"newsletter":{"isEnabled":true},"viewCount":{"isEnabled":false},"readTime":{"isEnabled":true},"textSelectionSharer":{"isEnabled":true},"customCSS":{"isEnabled":false,"published":null,"draft":null},"gptBotCrawling":{"__typename":"GPTBotCrawlingFeature","isEnabled":false}},"metaTags":"\u003cscript async src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9296829839073348\"\n crossorigin=\"anonymous\"\u003e\u003c/script\u003e\n\ngoogle.com, pub-9296829839073348, DIRECT, f08c47fec0942fa0\n\n\u003cscript async src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9296829839073348\"\n crossorigin=\"anonymous\"\u003e\u003c/script\u003e","ogMetaData":{"image":null},"author":{"__typename":"User","id":"6393938615750808b26990f1","name":"Clint","username":"ClintTheEngineer","profilePicture":"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png","followersCount":2},"preferences":{"__typename":"Preferences","logo":null,"darkMode":{"__typename":"DarkModePreferences","logo":null,"enabled":null},"navbarItems":[],"enabledPages":{"__typename":"PagesPreferences","badges":true,"newsletter":true,"members":null},"layout":"magazine","disableFooterBranding":false,"isSubscriptionModalDisabled":false},"favicon":null,"headerColor":"#2962FF","integrations":{"fbPixelID":"","fathomSiteID":"","fathomCustomDomainEnabled":null,"fathomCustomDomain":"","hotjarSiteID":"","matomoSiteID":null,"matomoURL":"","gaTrackingID":"","gTagManagerID":null,"plausibleAnalyticsEnabled":null,"wmPaymentPointer":"","koalaPublicKey":null,"msClarityID":null},"imprintV2":null,"postsCount":{"totalDocuments":32},"isTeam":false,"links":{"twitter":"","instagram":"","github":"","website":"","hashnode":"https://hashnode.com/@ClintTheEngineer","youtube":"","dailydev":"","linkedin":"","mastodon":"","facebook":null,"bluesky":null},"domainInfo":{"__typename":"DomainInfo","hashnodeSubdomain":"clinttheengineer","domain":{"__typename":"DomainStatus","host":"techtruth.dev","ready":true},"wwwPrefixedDomain":{"__typename":"DomainStatus","host":"www.techtruth.dev","ready":true}},"redirectionRules":[],"totalRecommendedPublications":0,"sponsorship":{"content":{"html":"\u003cp\u003eI am not a hacker, but I do love energy drinks and and hoodies. Buy me one?\u003c/p\u003e\n","markdown":"I am not a hacker, but I do love energy drinks and and hoodies. Buy me one?"},"stripe":{"connected":true,"accountId":"acct_1MFSJQIZgymSme3K","country":"US"}},"pro":null,"allowContributorEdits":true,"followersCount":0,"pinnedPost":null},"initialLimit":12,"urqlState":{"9709241589":{"data":"{\"publication\":{\"__typename\":\"Publication\",\"id\":\"639393ab15750808b26990f5\",\"url\":\"https://techtruth.dev\",\"canonicalURL\":\"https://techtruth.dev\",\"urlPattern\":\"SIMPLE\",\"title\":\"Tech Truth\",\"displayTitle\":null,\"hasBadges\":true,\"descriptionSEO\":\"\",\"about\":null,\"features\":{\"proTeam\":{\"isEnabled\":false,\"__typename\":\"ProTeamFeature\"},\"newsletter\":{\"isEnabled\":true,\"__typename\":\"NewsletterFeature\"},\"viewCount\":{\"isEnabled\":false,\"__typename\":\"ViewCountFeature\"},\"readTime\":{\"isEnabled\":true,\"__typename\":\"ReadTimeFeature\"},\"textSelectionSharer\":{\"isEnabled\":true,\"__typename\":\"TextSelectionSharerFeature\"},\"customCSS\":{\"isEnabled\":false,\"published\":null,\"draft\":null,\"__typename\":\"CustomCSSFeature\"},\"gptBotCrawling\":{\"__typename\":\"GPTBotCrawlingFeature\",\"isEnabled\":false},\"__typename\":\"PublicationFeatures\"},\"metaTags\":\"\u003cscript async src=\\\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9296829839073348\\\"\\n crossorigin=\\\"anonymous\\\"\u003e\u003c/script\u003e\\n\\ngoogle.com, pub-9296829839073348, DIRECT, f08c47fec0942fa0\\n\\n\u003cscript async src=\\\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9296829839073348\\\"\\n crossorigin=\\\"anonymous\\\"\u003e\u003c/script\u003e\",\"ogMetaData\":{\"image\":null,\"__typename\":\"OpenGraphMetaData\"},\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"name\":\"Clint\",\"username\":\"ClintTheEngineer\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"preferences\":{\"__typename\":\"Preferences\",\"logo\":null,\"darkMode\":{\"__typename\":\"DarkModePreferences\",\"logo\":null,\"enabled\":null},\"navbarItems\":[],\"enabledPages\":{\"__typename\":\"PagesPreferences\",\"badges\":true,\"newsletter\":true,\"members\":null},\"layout\":\"magazine\",\"disableFooterBranding\":false,\"isSubscriptionModalDisabled\":false},\"favicon\":null,\"headerColor\":\"#2962FF\",\"integrations\":{\"fbPixelID\":\"\",\"fathomSiteID\":\"\",\"fathomCustomDomainEnabled\":null,\"fathomCustomDomain\":\"\",\"hotjarSiteID\":\"\",\"matomoSiteID\":null,\"matomoURL\":\"\",\"gaTrackingID\":\"\",\"gTagManagerID\":null,\"plausibleAnalyticsEnabled\":null,\"wmPaymentPointer\":\"\",\"koalaPublicKey\":null,\"msClarityID\":null,\"__typename\":\"PublicationIntegrations\"},\"imprintV2\":null,\"postsCount\":{\"totalDocuments\":32,\"__typename\":\"PublicationPostConnection\"},\"isTeam\":false,\"links\":{\"twitter\":\"\",\"instagram\":\"\",\"github\":\"\",\"website\":\"\",\"hashnode\":\"https://hashnode.com/@ClintTheEngineer\",\"youtube\":\"\",\"dailydev\":\"\",\"linkedin\":\"\",\"mastodon\":\"\",\"facebook\":null,\"bluesky\":null,\"__typename\":\"PublicationLinks\"},\"domainInfo\":{\"__typename\":\"DomainInfo\",\"hashnodeSubdomain\":\"clinttheengineer\",\"domain\":{\"__typename\":\"DomainStatus\",\"host\":\"techtruth.dev\",\"ready\":true},\"wwwPrefixedDomain\":{\"__typename\":\"DomainStatus\",\"host\":\"www.techtruth.dev\",\"ready\":true}},\"redirectionRules\":[],\"totalRecommendedPublications\":0,\"sponsorship\":{\"content\":{\"html\":\"\u003cp\u003eI am not a hacker, but I do love energy drinks and and hoodies. Buy me one?\u003c/p\u003e\\n\",\"markdown\":\"I am not a hacker, but I do love energy drinks and and hoodies. Buy me one?\",\"__typename\":\"Content\"},\"stripe\":{\"connected\":true,\"accountId\":\"acct_1MFSJQIZgymSme3K\",\"country\":\"US\",\"__typename\":\"StripeConfiguration\"},\"__typename\":\"PublicationSponsorship\"},\"pro\":null,\"allowContributorEdits\":true,\"followersCount\":0,\"pinnedPost\":null}}","hasNext":false},"-2375017285":{"data":"{\"publication\":{\"id\":\"639393ab15750808b26990f5\",\"posts\":{\"edges\":[{\"node\":{\"__typename\":\"Post\",\"id\":\"6492e66af012983651c2f9b7\",\"title\":\"Writing Clean and Maintainable Code in JavaScript\",\"slug\":\"writing-clean-and-maintainable-code-in-javascript\",\"publishedAt\":\"2023-06-21T12:00:42.016Z\",\"cuid\":\"clj5nxn5100mh0fnvdmid2xlg\",\"url\":\"https://techtruth.dev/writing-clean-and-maintainable-code-in-javascript\",\"subtitle\":\"\",\"brief\":\"Introduction\\nWriting clean and maintainable code is crucial for the long-term success and sustainability of any software project. In JavaScript, a popular and versatile programming language, adhering to best practices can greatly enhance code readabi...\",\"readTimeInMinutes\":3,\"views\":17,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/1r2CG6EQ4-Y/upload/66aa1fea120b89137634546bc26c3abe.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ5MmU2NmFmMDEyOTgzNjUxYzJmOWI3XzIwMjMtMDYtMjFUMTI6MDA6NDIuMDE2Wg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"64904367aa3e031681680d6c\",\"title\":\"Working with APIs in React: Fetch, Axios, and Beyond\",\"slug\":\"working-with-apis-in-react-fetch-axios-and-beyond\",\"publishedAt\":\"2023-06-19T12:00:39.284Z\",\"cuid\":\"clj2t1vo9017cq7nv5q80e44f\",\"url\":\"https://techtruth.dev/working-with-apis-in-react-fetch-axios-and-beyond\",\"subtitle\":\"\",\"brief\":\"Introduction APIs (Application Programming Interfaces) play a vital role in modern web development, allowing applications to interact with external services and retrieve data dynamically. React, a popular JavaScript library for building user interfac...\",\"readTimeInMinutes\":3,\"views\":23,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/qlaj76CocqY/upload/2346ece635b6d42912f791c6bbf03fa6.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ5MDQzNjdhYTNlMDMxNjgxNjgwZDZjXzIwMjMtMDYtMTlUMTI6MDA6MzkuMjg0Wg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"648a54aa920a9cbde36e6a23\",\"title\":\"React: Because No One Said Programming Was Fun\",\"slug\":\"react-because-no-one-said-programming-was-fun\",\"publishedAt\":\"2023-06-15T00:00:42.245Z\",\"cuid\":\"cliwdklxw01pe82nvfw63f3rd\",\"url\":\"https://techtruth.dev/react-because-no-one-said-programming-was-fun\",\"subtitle\":\"\",\"brief\":\"JavaScript developers, rejoice! Today, we're going to dive into the fascinating world of React, the undeniable framework that will take over your life and make you question your existence. Get ready for a sarcastic rollercoaster ride as we explore wh...\",\"readTimeInMinutes\":3,\"views\":19,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/0EEKgGOe3ps/upload/2fe702c2e8611e4f946791f97334011f.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ4YTU0YWE5MjBhOWNiZGUzNmU2YTIzXzIwMjMtMDYtMTVUMDA6MDA6NDIuMjQ1Wg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"646a07e9264da515c75b6182\",\"title\":\"Building Offline-First Web Applications with Service Workers and IndexedDB\",\"slug\":\"building-offline-first-web-applications-with-service-workers-and-indexeddb\",\"publishedAt\":\"2023-05-21T12:00:41.949Z\",\"cuid\":\"clhxda8e002jsg7nvf8z875l1\",\"url\":\"https://techtruth.dev/building-offline-first-web-applications-with-service-workers-and-indexeddb\",\"subtitle\":\"\",\"brief\":\"Abstract: In this article, we will explore the concept of offline-first web applications and delve into the tools and techniques that enable this functionality. Specifically, we will focus on Service Workers and IndexedDB, two powerful technologies t...\",\"readTimeInMinutes\":5,\"views\":310,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/QwAL909kTiY/upload/59eca892d0f2129b6c11ec5d2d0ce3ad.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ2YTA3ZTkyNjRkYTUxNWM3NWI2MTgyXzIwMjMtMDUtMjFUMTI6MDA6NDEuOTQ5Wg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"646699afe4683bfca224af6d\",\"title\":\"State Management in React Explained\",\"slug\":\"state-management-in-react-explained\",\"publishedAt\":\"2023-05-18T21:33:35.005Z\",\"cuid\":\"clhtnfesd000509me7xfzff0f\",\"url\":\"https://techtruth.dev/state-management-in-react-explained\",\"subtitle\":null,\"brief\":\"React, the popular JavaScript library for building user interfaces, has gained significant traction in the development community. With its component-based architecture and virtual DOM rendering, React offers a robust and efficient way to create dynam...\",\"readTimeInMinutes\":4,\"views\":44,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/cxoR55-bels/upload/11843e603d9a76486f59dac498ab005a.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ2Njk5YWZlNDY4M2JmY2EyMjRhZjZkXzIwMjMtMDUtMThUMjE6MzM6MzUuMDA1Wg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6464c1e7773a75ddf7c732d4\",\"title\":\"Introduction to Data Structures and Algorithms in JavaScript\",\"slug\":\"introduction-to-data-structures-and-algorithms-in-javascript\",\"publishedAt\":\"2023-05-17T12:00:39.633Z\",\"cuid\":\"clhrnis0x001sfcnv5vl1bxgn\",\"url\":\"https://techtruth.dev/introduction-to-data-structures-and-algorithms-in-javascript\",\"subtitle\":\"\",\"brief\":\"Data structures and algorithms are fundamental concepts in computer science that every developer should be familiar with. They are the building blocks that form the foundation of computer programs, enabling us to efficiently store, retrieve, and mani...\",\"readTimeInMinutes\":24,\"views\":13,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/LqKhnDzSF-8/upload/41adf80e2f17b9a64c708dc24f25394e.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ2NGMxZTc3NzNhNzVkZGY3YzczMmQ0XzIwMjMtMDUtMTdUMTI6MDA6MzkuNjMzWg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6463706a6e1565b8d2d4857a\",\"title\":\"How to Build a Progressive Web Application with JavaScript\",\"slug\":\"how-to-build-a-progressive-web-application-with-javascript\",\"publishedAt\":\"2023-05-16T12:00:42.070Z\",\"cuid\":\"clhq82z7l004a37nvd5z43b9k\",\"url\":\"https://techtruth.dev/how-to-build-a-progressive-web-application-with-javascript\",\"subtitle\":\"\",\"brief\":\"As technology advances and mobile usage continues to increase, building web applications that work seamlessly on both desktop and mobile devices is becoming a necessity. A Progressive Web Application (PWA) is a web app that offers a native app-like e...\",\"readTimeInMinutes\":8,\"views\":12,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/QwAL909kTiY/upload/0bfed85c6a7f9dd7641ae2f50f1f5695.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ2MzcwNmE2ZTE1NjViOGQyZDQ4NTdhXzIwMjMtMDUtMTZUMTI6MDA6NDIuMDcwWg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"64621ee7f72e54ac2a303afd\",\"title\":\"Understanding React Components and Props\",\"slug\":\"understanding-react-components-and-props\",\"publishedAt\":\"2023-05-15T12:00:39.197Z\",\"cuid\":\"clhosn29c00vnl7nv0theehpv\",\"url\":\"https://techtruth.dev/understanding-react-components-and-props\",\"subtitle\":\"\",\"brief\":\"React is one of the most popular and widely used JavaScript frameworks in the world today, and for good reason. Its architecture and syntax provide developers with a streamlined and efficient way to create dynamic, interactive user interfaces.\\nOne of...\",\"readTimeInMinutes\":4,\"views\":7,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/HpMihL323k0/upload/0a17323e981dc38c0e1d132e2ea5c69d.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ2MjFlZTdmNzJlNTRhYzJhMzAzYWZkXzIwMjMtMDUtMTVUMTI6MDA6MzkuMTk3Wg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"6460cd6708369c990387f351\",\"title\":\"A Quick Look at Promises and Async/Await in JavaScript\",\"slug\":\"a-quick-look-at-promises-and-asyncawait-in-javascript\",\"publishedAt\":\"2023-05-14T12:00:39.230Z\",\"cuid\":\"clhnd77ms03tqt0nvc9u65w21\",\"url\":\"https://techtruth.dev/a-quick-look-at-promises-and-asyncawait-in-javascript\",\"subtitle\":\"\",\"brief\":\"Asynchronous programming is a crucial part of modern web development. JavaScript is a language that heavily relies on asynchronous operations, such as fetching data from APIs, handling user input, and updating the UI. In JavaScript, Promises and Asyn...\",\"readTimeInMinutes\":3,\"views\":7,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/hopnkQoC0dg/upload/7dacd3a91a4badc5ebdbd04d63dfec0c.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ2MGNkNjcwODM2OWM5OTAzODdmMzUxXzIwMjMtMDUtMTRUMTI6MDA6MzkuMjMwWg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"645f7bea4824b288fcf1160c\",\"title\":\"JavaScript Frameworks: A Comprehensive Guide for Beginners\",\"slug\":\"javascript-frameworks-a-comprehensive-guide-for-beginners\",\"publishedAt\":\"2023-05-13T12:00:42.192Z\",\"cuid\":\"clhlxrf8s04kqn1nv9ngmcuny\",\"url\":\"https://techtruth.dev/javascript-frameworks-a-comprehensive-guide-for-beginners\",\"subtitle\":\"\",\"brief\":\"JavaScript is one of the most popular programming languages in the world, and it's used to build all kinds of web applications. However, building complex web applications from scratch can be a daunting task, especially for beginners. Fortunately, the...\",\"readTimeInMinutes\":4,\"views\":91,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/ZMraoOybTLQ/upload/92ba2fe4db0e75a10a1686aae9fd98b7.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ1ZjdiZWE0ODI0YjI4OGZjZjExNjBjXzIwMjMtMDUtMTNUMTI6MDA6NDIuMTkyWg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"645e2a670d2cfe7dbccad88c\",\"title\":\"Building a Real-Time Chat App with Node.js and Socket.io\",\"slug\":\"building-a-real-time-chat-app-with-nodejs-and-socketio\",\"publishedAt\":\"2023-05-12T12:00:39.913Z\",\"cuid\":\"clhkibitl03c1f1nv45bacvh7\",\"url\":\"https://techtruth.dev/building-a-real-time-chat-app-with-nodejs-and-socketio\",\"subtitle\":\"\",\"brief\":\"Real-time chat applications are becoming increasingly popular in today's world, and there are several ways to build one. In this article, we will explore how to build a real-time chat application using Socket.io and Node.js. Socket.io is a JavaScript...\",\"readTimeInMinutes\":5,\"views\":91,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/PEJtZfT6C1Q/upload/ca725f30b7549725bdfc499c742fccaf.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ1ZTJhNjcwZDJjZmU3ZGJjY2FkODhjXzIwMjMtMDUtMTJUMTI6MDA6MzkuOTEzWg==\",\"__typename\":\"PostEdge\"},{\"node\":{\"__typename\":\"Post\",\"id\":\"645cd8eaaa9a486af6d628f9\",\"title\":\"Best Practices for JavaScript Debugging and Error Handling\",\"slug\":\"best-practices-for-javascript-debugging-and-error-handling\",\"publishedAt\":\"2023-05-11T12:00:42.582Z\",\"cuid\":\"clhj2vq7l02fdpjnv7ewg3pip\",\"url\":\"https://techtruth.dev/best-practices-for-javascript-debugging-and-error-handling\",\"subtitle\":\"\",\"brief\":\"JavaScript is one of the most popular programming languages in use today. As such, it is important for developers to have a strong understanding of the best practices for debugging and error handling. Bugs and errors can be difficult to find and fix,...\",\"readTimeInMinutes\":8,\"views\":17,\"author\":{\"__typename\":\"User\",\"id\":\"6393938615750808b26990f1\",\"username\":\"ClintTheEngineer\",\"name\":\"Clint\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"followersCount\":2},\"coverImage\":{\"__typename\":\"PostCoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Q-X5hto7oHg/upload/498e172177191cbf262dd7d27f974c01.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},\"cursor\":\"NjQ1Y2Q4ZWFhYTlhNDg2YWY2ZDYyOGY5XzIwMjMtMDUtMTFUMTI6MDA6NDIuNTgyWg==\",\"__typename\":\"PostEdge\"}],\"pageInfo\":{\"hasNextPage\":true,\"endCursor\":\"NjQ1Y2Q4ZWFhYTlhNDg2YWY2ZDYyOGY5XzIwMjMtMDUtMTFUMTI6MDA6NDIuNTgyWg==\",\"__typename\":\"PageInfo\"},\"__typename\":\"PublicationPostConnection\"},\"__typename\":\"Publication\"}}","hasNext":false}},"host":"techtruth.dev","integrations":{"fbPixelID":null,"fathomSiteID":null,"fathomCustomDomainEnabled":null,"fathomCustomDomain":null,"hotjarSiteID":null,"matomoSiteID":null,"matomoURL":null,"gaTrackingID":null,"gTagManagerID":null,"plausibleAnalyticsEnabled":null,"koalaPublicKey":null,"msClarityID":null,"domainURL":"techtruth.dev"},"rootLayout":{"legacyPublicationJSON":"{\"_id\":\"639393ab15750808b26990f5\",\"author\":{\"_id\":\"6393938615750808b26990f1\",\"name\":\"Clint\",\"photo\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png\",\"username\":\"ClintTheEngineer\"},\"badgePageEnabled\":false,\"description\":\"\",\"domain\":\"techtruth.dev\",\"domainStatus\":{\"ready\":true,\"certIssued\":true},\"wwwPrefixedDomain\":\"www.techtruth.dev\",\"wwwPrefixedDomainStatus\":{\"ready\":true,\"certIssued\":true},\"customCSSEnabled\":false,\"customCSSPublished\":{\"homeMin\":\"\",\"postMin\":\"\",\"staticMin\":\"\"},\"customRules\":[],\"darkModeLogo\":\"\",\"disableFooterBranding\":false,\"isSubscriptionModalDisabled\":false,\"displayTitle\":\"\",\"fathomCustomDomain\":\"\",\"fathomSiteID\":\"\",\"favicon\":\"\",\"fbPixelID\":\"\",\"gaTrackingID\":\"\",\"gTagManagerID\":\"\",\"hasBadges\":true,\"headerColor\":\"#2962FF\",\"hideMembersPage\":true,\"hotjarSiteID\":\"\",\"isTeam\":false,\"layout\":\"magazine\",\"matomoURL\":\"\",\"menu\":[],\"metaHTML\":\"\",\"metaHTMLSanitized\":\"\",\"newsletterEnabled\":true,\"proTeamEnabled\":false,\"newsletterPageEnabled\":false,\"ogImage\":\"\",\"logo\":\"\",\"textSelectionSharerEnabled\":true,\"title\":\"Tech Truth\",\"urlPattern\":\"simple\",\"username\":\"clinttheengineer\",\"viewCountVisible\":false,\"wmPaymentPointer\":\"\",\"readTimeHidden\":false,\"links\":{\"twitter\":\"\",\"instagram\":\"\",\"github\":\"\",\"website\":\"\",\"hashnode\":\"https://hashnode.com/@ClintTheEngineer\",\"youtube\":\"\",\"dailydev\":\"\",\"linkedin\":\"\",\"mastodon\":\"\",\"facebook\":\"\"},\"numPosts\":32,\"sponsorship\":{\"content\":\"\u003cp\u003eI am not a hacker, but I do love energy drinks and and hoodies. Buy me one?\u003c/p\u003e\\n\",\"contentMarkdown\":\"I am not a hacker, but I do love energy drinks and and hoodies. Buy me one?\"},\"stripe\":{\"connected\":true,\"accountId\":\"acct_1MFSJQIZgymSme3K\",\"country\":\"US\"},\"allowContributorEdits\":true,\"allowCrawlingByGPT\":false}","legacyPostJSON":null,"legacySeriesJSON":null,"headProps":{"title":"Tech Truth","description":"Tech Truth","links":[{"rel":"canonical","href":"https://techtruth.dev"}],"pageType":"website","bannerType":"large","ogTitle":"Tech Truth","ogSiteName":"Tech Truth","url":"https://techtruth.dev","ogImage":"https://techtruth.dev/api/og/home?og=eyJ0aXRsZSI6IlRlY2glMjBUcnV0aCIsImRvbWFpbiI6InRlY2h0cnV0aC5kZXYiLCJmb2xsb3dlcnMiOjIsInBob3RvIjoiaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NzA2MTU5NDQ4NjcvTmVnMGJEeVNrLnBuZyIsImJnY29sb3IiOiIjMjk2MkZGIiwiYXJ0aWNsZXMiOnsidG90YWxEb2N1bWVudHMiOjMyfX0=","twitterImage":"https://techtruth.dev/api/og/home?og=eyJ0aXRsZSI6IlRlY2glMjBUcnV0aCIsImRvbWFpbiI6InRlY2h0cnV0aC5kZXYiLCJmb2xsb3dlcnMiOjIsInBob3RvIjoiaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NzA2MTU5NDQ4NjcvTmVnMGJEeVNrLnBuZyIsImJnY29sb3IiOiIjMjk2MkZGIiwiYXJ0aWNsZXMiOnsidG90YWxEb2N1bWVudHMiOjMyfX0=","monetization":null,"style":{},"customHeadItems":{"customFavicon":null,"customTheme":"#2962FF","customMeta":"\n\ngoogle.com, pub-9296829839073348, DIRECT, f08c47fec0942fa0\n\n"}},"isDarkTheme":false,"headerColor":"#2962FF","isBadge":null,"isRecommendations":null,"isHome":true,"currentMenuId":null,"hnmcMode":false,"postCUID":null,"seoSchema":{"@context":"https://schema.org","@type":"Website","name":"Tech Truth","url":"https://techtruth.dev","description":"Tech Truth","mainEntityOfPage":{"@type":"WebPage","url":"https://techtruth.dev"},"image":{"@type":"ImageObject","url":"https://techtruth.dev/api/og/home?og=eyJ0aXRsZSI6IlRlY2glMjBUcnV0aCIsImRvbWFpbiI6InRlY2h0cnV0aC5kZXYiLCJmb2xsb3dlcnMiOjIsInBob3RvIjoiaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NzA2MTU5NDQ4NjcvTmVnMGJEeVNrLnBuZyIsImJnY29sb3IiOiIjMjk2MkZGIiwiYXJ0aWNsZXMiOnsidG90YWxEb2N1bWVudHMiOjMyfX0="},"publisher":{"@type":"Organization","name":"Tech Truth","url":"https://techtruth.dev"}},"publication":{"__typename":"Publication","id":"639393ab15750808b26990f5","url":"https://techtruth.dev","canonicalURL":"https://techtruth.dev","urlPattern":"SIMPLE","title":"Tech Truth","displayTitle":null,"hasBadges":true,"descriptionSEO":"","about":null,"features":{"proTeam":{"isEnabled":false},"newsletter":{"isEnabled":true},"viewCount":{"isEnabled":false},"readTime":{"isEnabled":true},"textSelectionSharer":{"isEnabled":true},"customCSS":{"isEnabled":false,"published":null,"draft":null},"gptBotCrawling":{"__typename":"GPTBotCrawlingFeature","isEnabled":false}},"metaTags":"\u003cscript async src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9296829839073348\"\n crossorigin=\"anonymous\"\u003e\u003c/script\u003e\n\ngoogle.com, pub-9296829839073348, DIRECT, f08c47fec0942fa0\n\n\u003cscript async src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9296829839073348\"\n crossorigin=\"anonymous\"\u003e\u003c/script\u003e","ogMetaData":{"image":null},"author":{"__typename":"User","id":"6393938615750808b26990f1","name":"Clint","username":"ClintTheEngineer","profilePicture":"https://cdn.hashnode.com/res/hashnode/image/upload/v1670615944867/Neg0bDySk.png","followersCount":2},"preferences":{"__typename":"Preferences","logo":null,"darkMode":{"__typename":"DarkModePreferences","logo":null,"enabled":null},"navbarItems":[],"enabledPages":{"__typename":"PagesPreferences","badges":true,"newsletter":true,"members":null},"layout":"magazine","disableFooterBranding":false,"isSubscriptionModalDisabled":false},"favicon":null,"headerColor":"#2962FF","integrations":{"fbPixelID":null,"fathomSiteID":null,"fathomCustomDomainEnabled":null,"fathomCustomDomain":null,"hotjarSiteID":null,"matomoSiteID":null,"matomoURL":null,"gaTrackingID":null,"gTagManagerID":null,"plausibleAnalyticsEnabled":null,"koalaPublicKey":null,"msClarityID":null},"imprintV2":null,"postsCount":{"totalDocuments":32},"isTeam":false,"links":{"twitter":"","instagram":"","github":"","website":"","hashnode":"https://hashnode.com/@ClintTheEngineer","youtube":"","dailydev":"","linkedin":"","mastodon":"","facebook":null,"bluesky":null},"domainInfo":{"__typename":"DomainInfo","hashnodeSubdomain":"clinttheengineer","domain":{"__typename":"DomainStatus","host":"techtruth.dev","ready":true},"wwwPrefixedDomain":{"__typename":"DomainStatus","host":"www.techtruth.dev","ready":true}},"redirectionRules":[],"totalRecommendedPublications":0,"sponsorship":{"content":{"html":"\u003cp\u003eI am not a hacker, but I do love energy drinks and and hoodies. Buy me one?\u003c/p\u003e\n","markdown":"I am not a hacker, but I do love energy drinks and and hoodies. Buy me one?"},"stripe":{"connected":true,"accountId":"acct_1MFSJQIZgymSme3K","country":"US"}},"pro":null,"allowContributorEdits":true,"followersCount":0,"pinnedPost":null},"series":null}},"__N_SSP":true},"page":"/","query":{"x-host":"techtruth.dev"},"buildId":"Je1wsH-vX6EWKHR9eCaeV","isFallback":false,"gssp":true,"scriptLoader":[]}</script><div id="hn-modal"></div><div id="hn-toast"></div><next-route-announcer><p aria-live="assertive" id="__next-route-announcer__" role="alert" style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 1px; white-space: nowrap; overflow-wrap: normal;"></p></next-route-announcer><script src="/_next/static/chunks/pages/%5B...slug%5D-02cb0eb0ef099009.js"></script></body></html>