PageSourceSearch

https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/

html peyanski.com collected 2026-10-03 23:10:46 UTC 136,465 bytes, 1,196 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US" prefix="og: https://ogp.me/ns#">
3
4<head>
5	
6	<meta charset="UTF-8">
7	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
8	<link rel="profile" href="https://gmpg.org/xfn/11">
9		
9<script id="ezoic-wp-plugin-cmp" async src="https://cmp.gatekeeperconsent.com/min.js" data-cfasync="false"></script>
vendor: 1 bytes, line 9
9
10<script id="ezoic-wp-plugin-gatekeeper" async src="https://the.gatekeeperconsent.com/cmp.min.js" data-cfasync="false"></script>
vendor: 1 bytes, line 10
10
11<script id="ezoic-wp-plugin-js" async src="//www.ezojs.com/ezoic/sa.min.js"></script>
vendor: 1 bytes, line 11
11
12<script data-ezoic="1">window.ezstandalone = window.ezstandalone || {};ezstandalone.cmd = ezstandalone.cmd || [];</script>
vendor: 1 bytes, line 12
12
13<script async src="//ezoicanalytics.com/analytics.js"></script>
13
14
15<!-- Google Tag Manager for WordPress by gtm4wp.com -->
16<script data-cfasync="false" data-pagespeed-no-defer>
17	var gtm4wp_datalayer_name = "dataLayer";
18	var dataLayer = dataLayer || [];
19	(function(){dataLayer.push(arguments);})('set', 'developer_id.dNGJiYT', true);
20	const gtm4wp_use_sku_instead = 1;
21	const gtm4wp_currency = "EUR";
22	const gtm4wp_product_per_impression = 0;
23	const gtm4wp_clear_ecommerce = false;
24	const gtm4wp_datalayer_max_timeout = 2000;
25	const gtm4wp_console_log = true;
26	const gtm4wp_remarketing_prod_id_prefix = "";
27	const gtm4wp_list_attribution = 0;
28	const gtm4wp_checkoutwc = 0;
29</script>
29
30<!-- End Google Tag Manager for WordPress by gtm4wp.com -->
31<!-- Search Engine Optimization by Rank Math - https://rankmath.com/ -->
32<title>ha-mcp and Codex: Build Home Assistant Dashboards Without Entity Hunting - Kiril Peyanski Blog</title>
33<meta name="description" content="I tested Codex with ha-mcp and Home Assistant after the Claude video worked well but hit free-tier limits. Here is what felt useful for dashboards, automations, and debugging, plus where to get the setup PDF."/>
34<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/>
35<link rel="canonical" href="https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/" />
36<meta property="og:locale" content="en_US" />
37<meta property="og:type" content="article" />
38<meta property="og:title" content="ha-mcp and Codex: Build Home Assistant Dashboards Without Entity Hunting - Kiril Peyanski Blog" />
39<meta property="og:description" content="I tested Codex with ha-mcp and Home Assistant after the Claude video worked well but hit free-tier limits. Here is what felt useful for dashboards, automations, and debugging, plus where to get the setup PDF." />
40<meta property="og:url" content="https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/" />
41<meta property="og:site_name" content="Kiril Peyanski Blog" />
42<meta property="article:tag" content="Codex" />
43<meta property="article:tag" content="ha-mcp" />
44<meta property="article:tag" content="Home Assistant AI" />
45<meta property="article:tag" content="Home Assistant automations" />
46<meta property="article:tag" content="Home Assistant dashboards" />
47<meta property="article:tag" content="Home Assistant MCP" />
48<meta property="article:tag" content="Smart home AI" />
49<meta property="article:section" content="Home Assistant" />
50<meta property="og:updated_time" content="2026-07-03T21:53:30+03:00" />
51<meta property="og:image" content="https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif" />
52<meta property="og:image:secure_url" content="https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif" />
53<meta property="og:image:width" content="929" />
54<meta property="og:image:height" content="523" />
55<meta property="og:image:alt" content="ha-mcp Codex Home Assistant dashboard automation featured image" />
56<meta property="og:image:type" content="image/jpeg" />
57<meta property="article:published_time" content="2026-07-03T20:23:23+03:00" />
58<meta property="article:modified_time" content="2026-07-03T21:53:30+03:00" />
59<meta name="twitter:card" content="summary" />
60<meta name="twitter:title" content="ha-mcp and Codex: Build Home Assistant Dashboards Without Entity Hunting - Kiril Peyanski Blog" />
61<meta name="twitter:description" content="I tested Codex with ha-mcp and Home Assistant after the Claude video worked well but hit free-tier limits. Here is what felt useful for dashboards, automations, and debugging, plus where to get the setup PDF." />
62<meta name="twitter:site" content="@kpeyanski" />
63<meta name="twitter:creator" content="@kpeyanski" />
64<meta name="twitter:image" content="https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif" />
65<meta name="twitter:label1" content="Written by" />
66<meta name="twitter:data1" content="Kiril Peyanski" />
67<meta name="twitter:label2" content="Time to read" />
68<meta name="twitter:data2" content="10 minutes" />
69<script type="application/ld+json" class="rank-math-schema">{"@context":"https://schema.org","@graph":[{"@type":["Person","Organization"],"@id":"https://peyanski.com/#person","name":"Kiril","sameAs":["https://twitter.com/kpeyanski"],"logo":{"@type":"ImageObject","@id":"https://peyanski.com/#logo","url":"https://peyanski.com/wp-content/uploads/2019/11/cropped-My_Way_Logo-KP-shadow_metal-K-150x150.png","contentUrl":"https://peyanski.com/wp-content/uploads/2019/11/cropped-My_Way_Logo-KP-shadow_metal-K-150x150.png","caption":"Kiril Peyanski Blog","inLanguage":"en-US","width":"150","height":"100"},"image":{"@type":"ImageObject","@id":"https://peyanski.com/#logo","url":"https://peyanski.com/wp-content/uploads/2019/11/cropped-My_Way_Logo-KP-shadow_metal-K-150x150.png","contentUrl":"https://peyanski.com/wp-content/uploads/2019/11/cropped-My_Way_Logo-KP-shadow_metal-K-150x150.png","caption":"Kiril Peyanski Blog","inLanguage":"en-US","width":"150","height":"100"}},{"@type":"WebSite","@id":"https://peyanski.com/#website","url":"https://peyanski.com","name":"Kiril Peyanski Blog","publisher":{"@id":"https://peyanski.com/#person"},"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif","url":"https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif","width":"929","height":"523","caption":"ha-mcp Codex Home Assistant dashboard automation featured image","inLanguage":"en-US"},{"@type":"WebPage","@id":"https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/#webpage","url":"https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/","name":"ha-mcp and Codex: Build Home Assistant Dashboards Without Entity Hunting - Kiril Peyanski Blog","datePublished":"2026-07-03T20:23:23+03:00","dateModified":"2026-07-03T21:53:30+03:00","isPartOf":{"@id":"https://peyanski.com/#website"},"primaryImageOfPage":{"@id":"https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif"},"inLanguage":"en-US"},{"@type":"Person","@id":"https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/#author","name":"Kiril Peyanski","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/54ddcad8febf4b411655bdfa32b596218b0a4997822013324f3d7af4d6932def?s=96&amp;d=mm&amp;r=g","url":"https://secure.gravatar.com/avatar/54ddcad8febf4b411655bdfa32b596218b0a4997822013324f3d7af4d6932def?s=96&amp;d=mm&amp;r=g","caption":"Kiril Peyanski","inLanguage":"en-US"},"sameAs":["https://peyanski.com"]},{"@type":"BlogPosting","headline":"ha-mcp and Codex: Build Home Assistant Dashboards Without Entity Hunting - Kiril Peyanski Blog","keywords":"ha-mcp,codex home assistant","datePublished":"2026-07-03T20:23:23+03:00","dateModified":"2026-07-03T21:53:30+03:00","articleSection":"Home Assistant","author":{"@id":"https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/#author","name":"Kiril Peyanski"},"publisher":{"@id":"https://peyanski.com/#person"},"description":"I tested Codex with ha-mcp and Home Assistant after the Claude video worked well but hit free-tier limits. Here is what felt useful for dashboards, automations, and debugging, plus where to get the setup PDF.","name":"ha-mcp and Codex: Build Home Assistant Dashboards Without Entity Hunting - Kiril Peyanski Blog","@id":"https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/#richSnippet","isPartOf":{"@id":"https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/#webpage"},"image":{"@id":"https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif"},"inLanguage":"en-US","mainEntityOfPage":{"@id":"https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/#webpage"}}]}</script>
69
70<!-- /Rank Math WordPress SEO plugin -->
71
72<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://peyanski.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fpeyanski.com%2Fha-mcp-codex-home-assistant-dashboards-automations%2F" />
73<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://peyanski.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fpeyanski.com%2Fha-mcp-codex-home-assistant-dashboards-automations%2F&#038;format=xml" />
74<link rel="alternate" type="application/rss+xml" title="Kiril Peyanski Blog &raquo; Stories Feed" href="https://peyanski.com/web-stories/feed/"><style id="wp-img-auto-sizes-contain-inline-css">
75img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
76/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
77</style>
78<style id="wp-emoji-styles-inline-css">
79
80	img.wp-smiley, img.emoji {
81		display: inline !important;
82		border: none !important;
83		box-shadow: none !important;
84		height: 1em !important;
85		width: 1em !important;
86		margin: 0 0.07em !important;
87		vertical-align: -0.1em !important;
88		background: none !important;
89		padding: 0 !important;
90	}
91/*# sourceURL=wp-emoji-styles-inline-css */
92</style>
93<style id="wp-block-library-inline-css">
94:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
94--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
95
96/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
97</style>
98<style id="wp-block-heading-inline-css">
99h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}
100/*# sourceURL=https://peyanski.com/wp-includes/blocks/heading/style.min.css */
101</style>
102<style id="wp-block-image-inline-css">
103.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;backdrop-filter:blur(16px) saturate(180%);background-color:rgba(90,90,90,.25);border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto rgba(90,90,90,.25);outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:rgba(90,90,90,.25);border:none}.wp-lightbox-overlay{box-sizing:border-box;
103cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .wp-lightbox-close-button{align-items:center;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 4px;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .wp-lightbox-close-button:focus,.wp-lightbox-overlay .wp-lightbox-close-button:hover,.wp-lightbox-overlay .wp-lightbox-close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .wp-lightbox-close-button:has(.wp-lightbox-close-text:not([hidden])) .wp-lightbox-close-icon svg{height:1em;width:1em}.wp-lightbox-overlay .wp-lightbox-close-icon svg{display:block}.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{align-items:center;bottom:16px;cursor:pointer;display:flex;font-family:inherit;gap:4px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 8px;position:absolute;z-index:2000002}.wp-lightbox-overlay .wp-lightbox-navigation-button-next[hidden],.wp-lightbox-overlay .wp-lightbox-navigation-button-prev[hidden]{display:none}@media (min-width:960px){.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{bottom:50%;transform:translateY(-50%)}}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:not(:hover):not(:active):not(.has-background),.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:not(:hover):not(:active):not(.has-background){background:none;border:none;padding:0 8px}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg{display:block;height:1.5em;width:1.5em}.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{left:calc(env(safe-area-inset-left) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-button-next{right:calc(env(safe-area-inset-right) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-icon svg{vertical-align:middle}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:2000001}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}
103@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}
104/*# sourceURL=https://peyanski.com/wp-includes/blocks/image/style.min.css */
105</style>
106<style id="wp-block-list-inline-css">
107ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}
108/*# sourceURL=https://peyanski.com/wp-includes/blocks/list/style.min.css */
109</style>
110<style id="wp-block-paragraph-inline-css">
111.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
112/*# sourceURL=https://peyanski.com/wp-includes/blocks/paragraph/style.min.css */
113</style>
114<style id="wp-block-embed-inline-css">
115.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-group.is-layout-flex .wp-block-embed{flex:1 1 0%;min-width:0}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:"";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}
116/*# sourceURL=https://peyanski.com/wp-includes/blocks/embed/style.min.css */
117</style>
118<style id="wp-block-quote-inline-css">
119.wp-block-quote{box-sizing:border-box;overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not
119(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:right}.wp-block-quote>cite{display:block}
120/*# sourceURL=https://peyanski.com/wp-includes/blocks/quote/style.min.css */
121</style>
122
123<style id="classic-theme-styles-inline-css">
124/*! This file is auto-generated */
125.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
126/*# sourceURL=/wp-includes/css/classic-themes.min.css */
127</style>
128
129<style id="global-styles-inline-css">
130:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--neve-link-color: var(--nv-primary-accent);--wp--preset--color--neve-link-hover-color: var(--nv-secondary-accent);--wp--preset--color--nv-site-bg: var(--nv-site-bg);--wp--preset--color--nv-light-bg: var(--nv-light-bg);--wp--preset--color--nv-dark-bg: var(--nv-dark-bg);--wp--preset--color--neve-text-color: var(--nv-text-color);--wp--preset--color--nv-text-dark-bg: var(--nv-text-dark-bg);--wp--preset--color--nv-c-1: var(--nv-c-1);--wp--preset--color--nv-c-2: var(--nv-c-2);--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
130--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-neve-link-color-color{color: var(--wp--preset--color--neve-link-color) !important;}.has-neve-link-hover-color-color{color: var(--wp--preset--color--neve-link-hover-color) !important;}.has-nv-site-bg-color{color: var(--wp--preset--color--nv-site-bg) !important;}.has-nv-light-bg-color{color: var(--wp--preset--color--nv-light-bg) !important;}.has-nv-dark-bg-color{color: var(--wp--preset--color--nv-dark-bg) !important;}.has-neve-text-color-color{color: var(--wp--preset--color--neve-text-color) !important;}.has-nv-text-dark-bg-color{color: var(--wp--preset--color--nv-text-dark-bg) !important;}.has-nv-c-1-color{color: var(--wp--preset--color--nv-c-1) !important;}.has-nv-c-2-color{color: var(--wp--preset--color--nv-c-2) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-neve-link-color-background-color{background-color: var(--wp--preset--color--neve-link-color) !important;}.has-neve-link-hover-color-background-color{background-color: var(--wp--preset--color--neve-link-hover-color) !important;}.has-nv-site-bg-background-color{background-color: var(--wp--preset--color--nv-site-bg) !important;}.has-nv-light-bg-background-color{background-color: var(--wp--preset--color--nv-light-bg) !important;}.has-nv-dark-bg-background-color{background-color: var(--wp--preset--color--nv-dark-bg) !important;}.has-neve-text-color-background-color{background-color: var(--wp--preset--color--neve-text-color) !important;}.has-nv-text-dark-bg-background-color{background-color: var(--wp--preset--color--nv-text-dark-bg) !important;}.has-nv-c-1-background-color{background-color: var(--wp--preset--color--nv-c-1) !important;}.has-nv-c-2-background-color{background-color: var(--wp--preset--color--nv-c-2) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-neve-link-color-border-color{border-color: var(--wp--preset--color--neve-link-color) !important;}.has-neve-link-hover-color-border-color{border-color: var(--wp--preset--color--neve-link-hover-color) !important;}.has-nv-site-bg-border-color{border-color: var(--wp--preset--color--nv-site-bg) !important;}.has-nv-light-bg-border-color{border-color: var(--wp--preset--color--nv-light-bg) !important;}.has-nv-dark-bg-border-color{border-color: var(--wp--preset--color--nv-dark-bg) !important;}.has-neve-text-color-border-color{border-color: var(--wp--preset--color--neve-text-color) !important;}.has-nv-text-dark-bg-border-color{border-color: var(--wp--preset--color--nv-text-dark-bg) !important;}.has-nv-c-1-border-color{border-color: var(--wp--preset--color--nv-c-1) !important;}.has-nv-c-2-border-color{border-color: var(--wp--preset--color--nv-c-2) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
130.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
131/*# sourceURL=global-styles-inline-css */
132</style>
133
134<style id="dominant-color-styles-inline-css">
135img[data-dominant-color]:not(.has-transparency) { background-color: var(--dominant-color); }
136/*# sourceURL=dominant-color-styles-inline-css */
137</style>
138<link rel='stylesheet' id='wpa-css-css' href='https://peyanski.com/wp-content/plugins/honeypot/includes/css/wpa.css?ver=2.4.02' media='all' />
139<link rel='stylesheet' id='woocommerce-layout-css' href='https://peyanski.com/wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver=11.1.2' media='all' />
140<link rel='stylesheet' id='woocommerce-smallscreen-css' href='https://peyanski.com/wp-content/plugins/woocommerce/assets/css/woocommerce-smallscreen.css?ver=11.1.2' media='only screen and (max-width: 768px)' />
141<link rel='stylesheet' id='woocommerce-general-css' href='https://peyanski.com/wp-content/plugins/woocommerce/assets/css/woocommerce.css?ver=11.1.2' media='all' />
142<style id="woocommerce-inline-inline-css">
143.woocommerce form .form-row .required { visibility: visible; }
144/*# sourceURL=woocommerce-inline-inline-css */
145</style>
146<link rel='stylesheet' id='eztoc-css' href='https://peyanski.com/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.88' media='all' />
147<style id="eztoc-inline-css">
148div#ez-toc-container .ez-toc-title, .ez-toc-split-section .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title, .ez-toc-split-section .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li , div#ez-toc-container ul li a, .ez-toc-split-section ul li , .ez-toc-split-section ul li a {font-size: 95%;}div#ez-toc-container ul li , div#ez-toc-container ul li a, .ez-toc-split-section ul li , .ez-toc-split-section ul li a {font-weight: 500;}div#ez-toc-container nav ul ul li, .ez-toc-split-section nav ul ul li {font-size: 90%;}.ez-toc-box-title {font-weight: bold; margin-bottom: 10px; text-align: center; text-transform: uppercase; letter-spacing: 1px; color: #666; padding-bottom: 5px;position:absolute;top:-4%;left:5%;background-color: inherit;transition: top 0.3s ease;}.ez-toc-box-title.toc-closed {top:-25%;}
149.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
150/*# sourceURL=eztoc-inline-css */
151</style>
152<link rel='stylesheet' id='neve-woocommerce-css' href='https://peyanski.com/wp-content/themes/neve/assets/css/woocommerce.min.css?ver=4.2.11' media='all' />
153<style id="neve-woocommerce-inline-css">
154 .woocommerce.single .entry-summary > form.cart { display:block; } .woocommerce div.product form.cart .button { float: none; } .sp-wl-wrap.sp-wl-product-wrap { margin-left: 0; margin-top: 5px;}.woocommerce .cart_totals .wc-proceed-to-checkout { display:block; }
155/*# sourceURL=neve-woocommerce-inline-css */
156</style>
157<link rel='stylesheet' id='neve-style-css' href='https://peyanski.com/wp-content/themes/neve/style-main-new.min.css?ver=4.2.11' media='all' />
158<style id="neve-style-inline-css">
159.is-menu-sidebar .header-menu-sidebar { visibility: visible; }.is-menu-sidebar.menu_sidebar_slide_left .header-menu-sidebar { transform: translate3d(0, 0, 0); left: 0; }.is-menu-sidebar.menu_sidebar_slide_right .header-menu-sidebar { transform: translate3d(0, 0, 0); right: 0; }.is-menu-sidebar.menu_sidebar_pull_right .header-menu-sidebar, .is-menu-sidebar.menu_sidebar_pull_left .header-menu-sidebar { transform: translateX(0); }.is-menu-sidebar.menu_sidebar_dropdown .header-menu-sidebar { height: auto; }.is-menu-sidebar.menu_sidebar_dropdown .header-menu-sidebar-inner { max-height: 400px; padding: 20px 0; }.is-menu-sidebar.menu_sidebar_full_canvas .header-menu-sidebar { opacity: 1; }.header-menu-sidebar .menu-item-nav-search:not(.floating) { pointer-events: none; }.header-menu-sidebar .menu-item-nav-search .is-menu-sidebar { pointer-events: unset; }@media screen and (max-width: 960px) { .builder-item.cr .item--inner { --textal
159ign: center; --justify: center; } }
160.nv-meta-list li.meta:not(:last-child):after { content:"/" }.nv-meta-list .no-mobile{
161			display:none;
162		}.nv-meta-list li.last::after{
163			content: ""!important;
164		}@media (min-width: 769px) {
165			.nv-meta-list .no-mobile {
166				display: inline-block;
167			}
168			.nv-meta-list li.last:not(:last-child)::after {
169		 		content: "/" !important;
170			}
171		}
172 :root{ --container: 748px;--postwidth:100%; --primarybtnbg: var(--nv-c-1); --primarybtnhoverbg: rgba(222, 9, 59, 0.24); --primarybtncolor: #ffffff; --secondarybtncolor: var(--nv-primary-accent); --primarybtnhovercolor: #ffffff; --secondarybtnhovercolor: var(--nv-primary-accent);--primarybtnborderradius:3px;--secondarybtnborderradius:3px;--secondarybtnborderwidth:3px;--btnpadding:13px 15px;--primarybtnpadding:13px 15px;--secondarybtnpadding:calc(13px - 3px) calc(15px - 3px); --bodyfontfamily: Arial,Helvetica,sans-serif; --bodyfontsize: 15px; --bodylineheight: 1.6; --bodyletterspacing: 0px; --bodyfontweight: 400; --h1fontsize: 36px; --h1fontweight: 700; --h1lineheight: 1.2; --h1letterspacing: 0px; --h1texttransform: none; --h2fontsize: 28px; --h2fontweight: 700; --h2lineheight: 1.3; --h2letterspacing: 0px; --h2texttransform: none; --h3fontsize: 24px; --h3fontweight: 700; --h3lineheight: 1.4; --h3letterspacing: 0px; --h3texttransform: none; --h4fontsize: 20px; --h4fontweight: 700; --h4lineheight: 1.6; --h4letterspacing: 0px; --h4texttransform: none; --h5fontsize: 16px; --h5fontweight: 700; --h5lineheight: 1.6; --h5letterspacing: 0px; --h5texttransform: none; --h6fontsize: 14px; --h6fontweight: 700; --h6lineheight: 1.6; --h6letterspacing: 0px; --h6texttransform: none;--formfieldborderwidth:2px;--formfieldborderradius:3px; --formfieldbgcolor: var(--nv-site-bg); --formfieldbordercolor: #dddddd; --formfieldcolor: var(--nv-text-color);--formfieldpadding:10px 12px; } .nv-index-posts{ --borderradius:0px; } .single-post-container .alignfull > [class*="__inner-container"], .single-post-container .alignwide > [class*="__inner-container"]{ max-width:718px } .single-product .alignfull > [class*="__inner-container"], .single-product .alignwide > [class*="__inner-container"]{ max-width:718px } .nv-meta-list{ --avatarsize: 20px; } .single .nv-meta-list{ --avatarsize: 20px; } .nv-post-cover{ --height: 250px;--padding:40px 15px;--justify: flex-start; --textalign: left; --valign: center; } .nv-post-cover .nv-title-meta-wrap, .nv-page-title-wrap, .entry-header{ --textal
172ign: left; } .nv-is-boxed.nv-title-meta-wrap{ --padding:40px 15px; --bgcolor: var(--nv-dark-bg); } .nv-overlay{ --opacity: 50; --blendmode: normal; } .nv-is-boxed.nv-comments-wrap{ --padding:20px; } .nv-is-boxed.comment-respond{ --padding:20px; } .single:not(.single-product), .page{ --c-vspace:0 0 0 0;; } .scroll-to-top{ --color: var(--nv-text-dark-bg);--padding:8px 10px; --borderradius: 3px; --bgcolor: var(--nv-primary-accent); --hovercolor: var(--nv-text-dark-bg); --hoverbgcolor: var(--nv-primary-accent);--size:16px; } .global-styled{ --bgcolor: var(--nv-site-bg); } .header-top{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .header-main{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .header-bottom{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .header-menu-sidebar-bg{ --justify: flex-start; --textalign: left;--flexg: 1;--wrapdropdownwidth: auto; --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .header-menu-sidebar{ width: 360px; } .builder-item--logo{ --maxwidth: 120px; --fs: 24px;--padding:10px 0;--margin:0; --textalign: left;--justify: flex-start; } .builder-item--nav-icon,.header-menu-sidebar .close-sidebar-panel .navbar-toggle{ --borderradius:0; } .builder-item--nav-icon{ --label-margin:0 5px 0 0;;--padding:10px 15px;--margin:0; } .builder-item--primary-menu{ --hovercolor: var(--nv-secondary-accent); --hovertextcolor: var(--nv-text-color); --activecolor: var(--nv-primary-accent); --spacing: 20px; --height: 25px;--padding:0;--margin:0; --fontsize: 1em; --lineheight: 1.6; --letterspacing: 0px; --fontweight: 500; --texttransform: none; --iconsize: 1em; } .hfg-is-group.has-primary-menu .inherit-ff{ --inheritedfw: 500; } .builder-item--header_search_responsive{ --iconsize: 15px; --formfieldfontsize: 14px;--formfieldborderwidth:2px;--formfieldborderradius:2px; --height: 40px;--padding:0 10px;--margin:0; } .footer-top-inner .row{ grid-template-columns:1fr 1fr 1fr; --valign: flex-start; } .footer-top{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .footer-main-inner .row{ grid-template-columns:1fr 1fr 1fr; --valign: flex-start; } .footer-main{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .footer-bottom-inner .row{ grid-template-columns:1fr 1fr 1fr; --valign: flex-start; } .footer-bottom{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-dark-bg); --bgcolor: var(--nv-dark-bg); } @media(min-width: 576px){ :root{ --container: 992px;--postwidth:50%;--btnpadding:13px 15px;--primarybtnpadding:13px 15px;--secondarybtnpadding:calc(13px - 3px) calc(15px - 3px); --bodyfontsize: 16px; --bodylineheight: 1.6; --bodyletterspacing: 0px; --h1fontsize: 38px; --h1lineheight: 1.2; --h1letterspacing: 0px; --h2fontsize: 30px; --h2lineheight: 1.2; --h2letterspacing: 0px; --h3fontsize: 26px; --h3lineheight: 1.4; --h3letterspacing: 0px; --h4fontsize: 22px; --h4lineheight: 1.5; --h4letterspacing: 0px; --h5fontsize: 18px; --h5lineheight: 1.6; --h5letterspacing: 0px; --h6fontsize: 14px; --h6lineheight: 1.6; --h6letterspacing: 0px; } .single-post-container .alignfull > [class*="__inner-container"], .single-post-container .alignwide > [class*="__inner-container"]{ max-width:962px } .single-product .alignfull > [class*="__inner-container"], .single-product .alignwide > [class*="__inner-container"]{ max-width:962px } .nv-meta-list{ --avatarsize: 20px; } .single .nv-meta-list{ --avatarsize: 20px; } .nv-post-cover{ --height: 320px;--padding:60px 30px;--justify: flex-start; --textalign: left; --valign: center; } .nv-post-cover .nv-title-meta-wrap, .nv-page-title-wrap, .entry-header{ --textal
172ign: left; } .nv-is-boxed.nv-title-meta-wrap{ --padding:60px 30px; } .nv-is-boxed.nv-comments-wrap{ --padding:30px; } .nv-is-boxed.comment-respond{ --padding:30px; } .single:not(.single-product), .page{ --c-vspace:0 0 0 0;; } .scroll-to-top{ --padding:8px 10px;--size:16px; } .header-menu-sidebar-bg{ --justify: flex-start; --textalign: left;--flexg: 1;--wrapdropdownwidth: auto; } .header-menu-sidebar{ width: 360px; } .builder-item--logo{ --maxwidth: 120px; --fs: 24px;--padding:10px 0;--margin:0; --textalign: left;--justify: flex-start; } .builder-item--nav-icon{ --label-margin:0 5px 0 0;;--padding:10px 15px;--margin:0; } .builder-item--primary-menu{ --spacing: 20px; --height: 25px;--padding:0;--margin:0; --fontsize: 1em; --lineheight: 1.6; --letterspacing: 0px; --iconsize: 1em; } .builder-item--header_search_responsive{ --formfieldfontsize: 14px;--formfieldborderwidth:2px;--formfieldborderradius:2px; --height: 40px;--padding:0 10px;--margin:0; } }@media(min-width: 960px){ :root{ --container: 1170px;--postwidth:33.333333333333%;--btnpadding:3px 15px 5px 15px;;--primarybtnpadding:3px 15px 5px 15px;;--secondarybtnpadding:calc(3px - 3px) calc(15px - 3px) calc(5px - 3px) calc(15px - 3px);; --bodyfontsize: 16px; --bodylineheight: 1.7; --bodyletterspacing: 0px; --h1fontsize: 40px; --h1lineheight: 1.1; --h1letterspacing: 0px; --h2fontsize: 32px; --h2lineheight: 1.2; --h2letterspacing: 0px; --h3fontsize: 28px; --h3lineheight: 1.4; --h3letterspacing: 0px; --h4fontsize: 24px; --h4lineheight: 1.5; --h4letterspacing: 0px; --h5fontsize: 20px; --h5lineheight: 1.6; --h5letterspacing: 0px; --h6fontsize: 16px; --h6lineheight: 1.6; --h6letterspacing: 0px; } body:not(.single):not(.archive):not(.blog):not(.search):not(.error404) .neve-main > .container .col, body.post-type-archive-course .neve-main > .container .col, body.post-type-archive-llms_membership .neve-main > .container .col{ max-width: 100%; } body:not(.single):not(.archive):not(.blog):not(.search):not(.error404) .nv-sidebar-wrap, body.post-type-archive-course .nv-sidebar-wrap, body.post-type-archive-llms_membership .nv-sidebar-wrap{ max-width: 0%; } .neve-main > .archive-container .nv-index-posts.col{ max-width: 100%; } .neve-main > .archive-container .nv-sidebar-wrap{ max-width: 0%; } .neve-main > .single-post-container .nv-single-post-wrap.col{ max-width: 70%; } .single-post-container .alignfull > [class*="__inner-container"], .single-post-container .alignwide > [class*="__inner-container"]{ max-width:789px } .container-fluid.single-post-container .alignfull > [class*="__inner-container"], .container-fluid.single-post-container .alignwide > [class*="__inner-container"]{ max-width:calc(70% + 15px) } .neve-main > .single-post-container .nv-sidebar-wrap{ max-width: 30%; } .archive.woocommerce .neve-main > .shop-container .nv-shop.col{ max-width: 70%; } .archive.woocommerce .neve-main > .shop-container .nv-sidebar-wrap{ max-width: 30%; } .single-product .neve-main > .shop-container .nv-shop.col{ max-width: 100%; } .single-product .alignfull > [class*="__inner-container"], .single-product .alignwide > [class*="__inner-container"]{ max-width:1140px } .single-product .container-fluid .alignfull > [class*="__inner-container"], .single-product .alignwide > [class*="__inner-container"]{ max-width:calc(100% + 15px) } .single-product .neve-main > .shop-container .nv-sidebar-wrap{ max-width: 0%; } .nv-meta-list{ --avatarsize: 20px; } .single .nv-meta-list{ --avatarsize: 20px; } .nv-post-cover{ --height: 400px;--padding:60px 40px;--justify: flex-start; --textalign: left; --valign: center; } .nv-post-cover .nv-title-meta-wrap, .nv-page-title-wrap, .entry-header{ --textal
172ign: left; } .nv-is-boxed.nv-title-meta-wrap{ --padding:60px 40px; } .nv-is-boxed.nv-comments-wrap{ --padding:40px; } .nv-is-boxed.comment-respond{ --padding:40px; } .single:not(.single-product), .page{ --c-vspace:0 0 0 0;; } .scroll-to-top{ --padding:8px 10px;--size:16px; } .header-menu-sidebar-bg{ --justify: flex-start; --textalign: left;--flexg: 1;--wrapdropdownwidth: auto; } .header-menu-sidebar{ width: 360px; } .builder-item--logo{ --maxwidth: 120px; --fs: 24px;--padding:10px 0;--margin:0; --textalign: left;--justify: flex-start; } .builder-item--nav-icon{ --label-margin:0 5px 0 0;;--padding:10px 15px;--margin:0; } .builder-item--primary-menu{ --spacing: 20px; --height: 25px;--padding:0;--margin:0; --fontsize: 1em; --lineheight: 1.6; --letterspacing: 0px; --iconsize: 1em; } .builder-item--header_search_responsive{ --formfieldfontsize: 14px;--formfieldborderwidth:0 2px 2px 2px;;--formfieldborderradius:0 2px 2px 2px;; --height: 40px;--padding:0 10px;--margin:0; } }.scroll-to-top {right: 20px; border: none; position: fixed; bottom: 30px; display: none; opacity: 0; visibility: hidden; transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out; align-items: center; justify-content: center; z-index: 999; } @supports (-webkit-overflow-scrolling: touch) { .scroll-to-top { bottom: 74px; } } .scroll-to-top.image { background-position: center; } .scroll-to-top .scroll-to-top-image { width: 100%; height: 100%; } .scroll-to-top .scroll-to-top-label { margin: 0; padding: 5px; } .scroll-to-top:hover { text-decoration: none; } .scroll-to-top.scroll-to-top-left {left: 20px; right: unset;} .scroll-to-top.scroll-show-mobile { display: flex; } @media (min-width: 960px) { .scroll-to-top { display: flex; } }.scroll-to-top { color: var(--color); padding: var(--padding); border-radius: var(--borderradius); background: var(--bgcolor); } .scroll-to-top:hover, .scroll-to-top:focus { color: var(--hovercolor); background: var(--hoverbgcolor); } .scroll-to-top-icon, .scroll-to-top.image .scroll-to-top-image { width: var(--size); height: var(--size); } .scroll-to-top-image { background-image: var(--bgimage); background-size: cover; }:root{--nv-primary-accent:#15abe5;--nv-secondary-accent:#2f5aae;--nv-site-bg:#ffffff;--nv-light-bg:#f4f5f7;--nv-dark-bg:#121212;--nv-text-color:#272626;--nv-text-dark-bg:#ffffff;--nv-c-1:#9463ae;--nv-c-2:#be574b;--nv-fallback-ff:Arial, Helvetica, sans-serif;}
173/*# sourceURL=neve-style-inline-css */
174</style>
175<link rel='stylesheet' id='tfhb-style-css' href='https://peyanski.com/wp-content/plugins/hydra-booking/assets/app/css/style.css?ver=1.2.6' media='all' />
176<style id="tfhb-style-inline-css">
177
178        :root {
179            --tfhb-primary-color: #2E6B38;
180            --tfhb-primary-hover-color: #4C9959;
181            --tfhb-secondary-color: #273F2B;
182            --tfhb-secondary-hover-color: #E1F2E4;
183            --tfhb-paragraph-color: #273F2B;
184            --tfhb-text-title-color: #141915;
185            --tfhb-surface-primary-color: #C0D8C4;
186            --tfhb-surface-background-color: #EEF6F0;
187          }
188        
189/*# sourceURL=tfhb-style-inline-css */
190</style>
191<link rel='stylesheet' id='tablepress-default-css' href='https://peyanski.com/wp-content/tablepress-combined.min.css?ver=54' media='all' />
192<link rel='stylesheet' id='neve-child-style-css' href='https://peyanski.com/wp-content/themes/neve-child-master/style.css?ver=4.2.11' media='all' />
193<script id="jquery-core-js" src="https://peyanski.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 193
193
194<script id="jquery-migrate-js" src="https://peyanski.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 194
194
195<script data-wp-strategy="defer" defer id="wc-jquery-blockui-js" src="https://peyanski.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.11.1.2"></script>
vendor: 1 bytes, line 195
195
196<script id="wc-add-to-cart-js-extra">
197var wc_add_to_cart_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https://peyanski.com/cart/","is_cart":"","cart_redirect_after_add":"yes"};
198//# sourceURL=wc-add-to-cart-js-extra
199</script>
vendor: 1 bytes, line 199
199
200<script data-wp-strategy="defer" defer id="wc-add-to-cart-js" src="https://peyanski.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=11.1.2"></script>
vendor: 1 bytes, line 200
200
201<script data-wp-strategy="defer" defer id="wc-js-cookie-js" src="https://peyanski.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.11.1.2"></script>
vendor: 1 bytes, line 201
201
202<script id="woocommerce-js-extra">
203var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"Show password","i18n_password_hide":"Hide password"};
204//# sourceURL=woocommerce-js-extra
205</script>
vendor: 1 bytes, line 205
205
206<script data-wp-strategy="defer" defer id="woocommerce-js" src="https://peyanski.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=11.1.2"></script>
206
207<link rel="https://api.w.org/" href="https://peyanski.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://peyanski.com/wp-json/wp/v2/posts/26562" /><meta name="generator" content="dominant-color-images 1.3.0">
208<meta name="generator" content="performance-lab 4.2.0; plugins: dominant-color-images, webp-uploads">
209<meta name="generator" content="webp-uploads 2.7.1">
210
211<!-- Google Tag Manager for WordPress by gtm4wp.com -->
212<!-- GTM Container placement set to automatic -->
213<script data-cfasync="false" data-pagespeed-no-defer>
214	var dataLayer_content = {"pagePostType":"post","pagePostType2":"single-post","pageCategory":["home-assistant"],"pageAttributes":["codex","ha-mcp","home-assistant-ai","home-assistant-automations","home-assistant-dashboards","home-assistant-mcp","smart-home-ai"],"pagePostAuthor":"Kiril Peyanski","customerTotalOrders":0,"customerTotalOrderValue":0,"customerFirstName":"","customerLastName":"","customerBillingFirstName":"","customerBillingLastName":"","customerBillingCompany":"","customerBillingAddress1":"","customerBillingAddress2":"","customerBillingCity":"","customerBillingState":"","customerBillingPostcode":"","customerBillingCountry":"","customerBillingEmail":"","customerBillingEmailHash":"","customerBillingPhone":"","customerShippingFirstName":"","customerShippingLastName":"","customerShippingCompany":"","customerShippingAddress1":"","customerShippingAddress2":"","customerShippingCity":"","customerShippingState":"","customerShippingPostcode":"","customerShippingCountry":""};
215	dataLayer.push( dataLayer_content );
216</script>
vendor: 1 bytes, line 216
216
217<script data-cfasync="false" data-pagespeed-no-defer>
vendor: 322 bytes, lines 217-222
217
218(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
219new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
220j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
221'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
222})(window,document,'script','dataLayer','
222GTM-PWKWWZ7
vendor: 4 bytes, line 222
222');
223</script>
223
224<!-- End Google Tag Manager for WordPress by gtm4wp.com -->	<noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript>
225	<link rel="icon" href="https://peyanski.com/wp-content/uploads/2019/08/LogoMakr_150x150-100x100.webp" sizes="32x32" />
226<link rel="icon" href="https://peyanski.com/wp-content/uploads/2019/08/LogoMakr_150x150.webp" sizes="192x192" />
227<link rel="apple-touch-icon" href="https://peyanski.com/wp-content/uploads/2019/08/LogoMakr_150x150.webp" />
228<meta name="msapplication-TileImage" content="https://peyanski.com/wp-content/uploads/2019/08/LogoMakr_150x150.webp" />
229<style id="wp-custom-css">
230.hfg-slot.left {
231	display: none;
232}
233
234/* NEW: Use this class to center the card on your page.
235  It replaces the old 'body' styles.
236*/
237.product-card-container {
238    display: flex;
239    justify-content: center;
240    align-items: center;
241    padding: 2rem 0; /* Adds some space above/below */
242    /* You can add a background here if you want *just* this section gray */
243    /* background-color: #f0f2f5; */
244}
245
246/* BELOW IS THE ORIGINAL CARD STYLING
247  (It is unchanged, but included for completeness) 
248*/
249.product-card {
250    position: relative;
251    max-width: 650px;
252    width: 90%; /* Added width: 90% for better mobile stacking */
253    display: flex;
254    align-items: center;
255    margin: 2rem;
256}
257
258.product-image {
259    position: absolute;
260    left: 0;
261    top: 50%;
262    transform: translateY(-50%);
263    width: 200px; 
264    z-index: 2;
265}
266
267.product-image img {
268    width: 100%;
269    height: auto;
270    filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.1));
271    transition: transform 0.3s ease;
272}
273
274.product-image img:hover {
275
276    transform: scale(1.05); /* Scales up to 105% of its original size */
277    /* If you want a slight depth, you could also adjust the shadow on hover */
278    /* filter: drop-shadow(0 8px 16px rgba(0, 0, 0, 0.2)); */
279    filter: drop-shadow(0 0 15px rgba(255, 255, 255, 0.6)) /* white glow */
280            drop-shadow(0 4px 8px rgba(0, 0, 0, 0.1)); /* keep original shadow */
281}
282
283.product-info {
284    background-color: rgb(130, 137, 139);
285    color: white;
286    border-radius: 24px;
287    padding: 24px;
288    padding-left: 150px;
289    width: 100%;
290    box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
291    margin-left: 100px; 
292}
293
294.specs-list {
295    list-style: none;
296    padding: 0;
297    margin: 0 0 24px 0;
298}
299
300.specs-list li {
301    display: flex;
302    align-items: center;
303    margin-bottom: 12px;
304    font-size: 1rem;
305    color: #E0E0E0;
306    font-family: Arial, sans-serif; /* Added font-family here */
307}
308
309.specs-list li i {
310    width: 28px;
311    text-align: center;
312    margin-right: 12px;
313    color: #E0E0E0;
314    font-size: 1.1rem;
315}
316
317.button-container {
318    display: flex;
319    flex-wrap: wrap;
320    gap: 12px;
321}
322
323.store-button {
324    text-decoration: none;
325    color: white;
326    background-color: transparent;
327    border: 2px solid #7A94B8;
328    padding: 10px 16px;
329    border-radius: 12px;
330    display: inline-flex;
331    align-items: center;
332    font-weight: 600;
333    font-size: 0.9rem;
334    transition: all 0.3s ease;
335    font-family: Arial, sans-serif; /* Added font-family here */
336}
337
338.store-button i {
339    margin-right: 8px;
340    font-size: 1rem;
341}
342
343.store-button:hover {
344    background-color: white;
345    color: #192A45;
346}
347
348/* NEW: Added a simple media query for small screens.
349  This stacks the card vertically on phones.
350*/
351@media (max-width: 600px) {
352    .product-image {
353        position: relative; /* Un-do the absolute positioning */
354        transform: none;
355        width: 150px; /* Make image smaller */
356        margin: 0 auto; /* Center it */
357        top: -20px; /* Pull it up a bit */
358    }
359
360    .product-card {
361        flex-direction: column; /* Stack vertically */
362        margin: 0 1rem; /* Give some side margin */
363        width: auto;
364    }
365    
366    .product-info {
367        margin-left: 0; /* Reset margin */
368        padding: 24px; /* Reset padding */
369        padding-top: 100px; /* Add space for image */
370        margin-top: -80px; /* Pull info box up */
371        width: 100%;
372    }
373}
374
375
376
377
378
379</style>
380
381	</head>
382
383<body  class="wp-singular post-template-default single single-post postid-26562 single-format-standard wp-custom-logo wp-theme-neve wp-child-theme-neve-child-master theme-neve woocommerce-no-js  nv-blog-grid nv-sidebar-right menu_sidebar_slide_left" id="neve_body"  ><a href="https://peyanski.com/cdn-cgi/content?id=w0A6hRQ1ByVzqgfzco5Nlo0ylyo33wVOcM2GUSZrId8-1791069045.7024765-1.2.1.1-qMacngKTP8MoAGpeaibuuk5jJc8yIlJI8K9uTZRzULdRpax.B5S32yv9RJcJCU5x" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a>
384
385<!-- GTM Container placement set to automatic -->
386<!-- Google Tag Manager (noscript) -->
387				<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PWKWWZ7" height="0" width="0" style="display:none;visibility:hidden" aria-hidden="true"></iframe></noscript>
388<!-- End Google Tag Manager (noscript) --><div class="wrapper">
389	
390	<header class="header"  >
391		<a class="neve-skip-link show-on-focus" href="#content" >
392			Skip to content		</a>
393		<div id="header-grid"  class="hfg_header site-header">
394	
395<nav class="header--row header-main hide-on-mobile hide-on-tablet layout-full-contained nv-navbar has-center header--row"
396	data-row-id="main" data-show-on="desktop">
397
398	<div
399		class="header--row-inner header-main-inner">
400		<div class="container">
401			<div
402				class="row row--wrapper"
403				data-section="hfg_header_layout_main" >
404				<div class="hfg-slot left"></div><div class="hfg-slot center"><div class="builder-item desktop-left"><div class="item--inner builder-item--logo"
405		data-section="title_tagline"
406		data-item-id="logo">
407	
408<div class="site-logo">
409	<a class="brand" href="https://peyanski.com/" aria-label="Kiril Peyanski Blog Smart Home, Home Automation, IoT, Home Assistant, Node-RED, Raspberry Pi and everything related." rel="home"><img width="150" height="100" src="https://peyanski.com/wp-content/uploads/2019/11/cropped-My_Way_Logo-KP-shadow_metal-K-150x150.webp" class="neve-site-logo skip-lazy has-transparency" alt="" data-variant="logo" decoding="async" data-has-transparency="true" data-dominant-color="0b1113" style="--dominant-color: #0b1113;" /></a></div>
410	</div>
411
412</div></div><div class="hfg-slot right"><div class="builder-item has-nav hfg-is-group has-primary-menu"><div class="item--inner builder-item--primary-menu has_menu"
413		data-section="header_menu_primary"
414		data-item-id="primary-menu">
415	<div class="nv-nav-wrap">
416	<div role="navigation" class="nav-menu-primary"
417			aria-label="Primary Menu">
418
419		<ul id="nv-primary-navigation-main" class="primary-menu-ul nav-ul menu-desktop"><li id="menu-item-16551" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-16551"><div class="wrap"><a href="https://peyanski.com">Home</a></div></li>
420<li id="menu-item-4316" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-4316"><div class="wrap"><a href="https://peyanski.com/contact">Contact</a></div></li>
421<li id="menu-item-4529" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-4529"><div class="wrap"><a href="https://peyanski.com/newsletter">Newsletter</a></div></li>
422<li id="menu-item-21501" class="button button-secondary menu-item menu-item-type-custom menu-item-object-custom menu-item-21501"><div class="wrap">
422<a href="https://automatelike.pro/ai-ha-book/">Get My Free+Shipping Book</a></div></li>
423<li id="menu-item-4989" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-4989"><div class="wrap"><a href="https://peyanski.com/support">Support</a></div></li>
424<li id="menu-item-19175" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19175"><div class="wrap"><a href="https://peyanski.com/about/">About Me</a></div></li>
425<li id="menu-item-25687" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-25687"><div class="wrap"><a href="https://peyanski.com/coaching/">Coaching 1:1</a></div></li>
426</ul>	</div>
427</div>
428
429	</div>
430
431<div class="item--inner builder-item--header_search_responsive"
432		data-section="header_search_responsive"
433		data-item-id="header_search_responsive">
434	<div class="nv-search-icon-component" >
435	<div  class="menu-item-nav-search minimal">
436		<a aria-label="Search" href="#" class="nv-icon nv-search" >
437				<svg width="15" height="15" viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z" /></svg>
438			</a>		<div class="nv-nav-search" aria-label="search">
439			<div class="form-wrap ">
440				
441<form role="search"
442	method="get"
443	class="search-form"
444	action="https://peyanski.com/">
445	<label>
446		<span class="screen-reader-text">Search for...</span>
447	</label>
448	<input type="search"
449		class="search-field"
450		aria-label="Search"
451		placeholder="Search for..."
452		value=""
453		name="s"/>
454	<button type="submit"
455			class="search-submit nv-submit"
456			aria-label="Search">
457					<span class="nv-search-icon-wrap">
458				<span class="nv-icon nv-search" >
459				<svg width="15" height="15" viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z" /></svg>
460			</span>			</span>
461			</button>
462	</form>
463			</div>
464					</div>
465	</div>
466</div>
467	</div>
468
469</div></div>							</div>
470		</div>
471	</div>
472</nav>
473
474<div class="header--row header-top hide-on-desktop layout-full-contained header--row"
475	data-row-id="top" data-show-on="mobile">
476
477	<div
478		class="header--row-inner header-top-inner">
479		<div class="container">
480			<div
481				class="row row--wrapper"
482				data-section="hfg_header_layout_top" >
483				<div class="hfg-slot left"></div><div class="hfg-slot right"><div class="builder-item tablet-left mobile-left"><div class="item--inner builder-item--nav-icon"
484		data-section="header_menu_icon"
485		data-item-id="nav-icon">
486	<div class="menu-mobile-toggle item-button navbar-toggle-wrapper">
487	<button type="button" class=" navbar-toggle"
488			value="Navigation Menu"
489					aria-label="Navigation Menu "
490			aria-expanded="false" onclick="if('undefined' !== typeof toggleAriaClick ) { toggleAriaClick() }">
491					<span class="bars">
492				<span class="icon-bar"></span>
493				<span class="icon-bar"></span>
494				<span class="icon-bar"></span>
495			</span>
496					<span class="screen-reader-text">Navigation Menu</span>
497	</button>
498</div> <!--.navbar-toggle-wrapper-->
499
500
501	</div>
502
503</div></div>							</div>
504		</div>
505	</div>
506</div>
507
508<div
509		id="header-menu-sidebar" class="header-menu-sidebar tcb menu-sidebar-panel slide_left hfg-pe"
510		data-row-id="sidebar">
511	<div id="header-menu-sidebar-bg" class="header-menu-sidebar-bg">
512				<div class="close-sidebar-panel navbar-toggle-wrapper">
513			<button type="button" class="hamburger is-active  navbar-toggle active" 					value="Navigation Menu"
514					aria-label="Navigation Menu "
515					aria-expanded="false" onclick="if('undefined' !== typeof toggleAriaClick ) { toggleAriaClick() }">
516								<span class="bars">
517						<span class="icon-bar"></span>
518						<span class="icon-bar"></span>
519						<span class="icon-bar"></span>
520					</span>
521								<span class="screen-reader-text">
522			Navigation Menu					</span>
523			</button>
524		</div>
525					<div id="header-menu-sidebar-inner" class="header-menu-sidebar-inner tcb ">
526						<div class="builder-item has-nav"><div class="item--inner builder-item--primary-menu has_menu"
527		data-section="header_menu_primary"
528		data-item-id="primary-menu">
529	<div class="nv-nav-wrap">
530	<div role="navigation" class="nav-menu-primary"
531			aria-label="Primary Menu">
532
533		<ul id="nv-primary-navigation-sidebar" class="primary-menu-ul nav-ul menu-mobile"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-16551"><div class="wrap"><a href="https://peyanski.com">Home</a></div></li>
534<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-4316"><div class="wrap"><a href="https://peyanski.com/contact">Contact</a></div></li>
535<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-4529"><div class="wrap"><a href="https://peyanski.com/newsletter">Newsletter</a></div></li>
536<li class="button button-secondary menu-item menu-item-type-custom menu-item-object-custom menu-item-21501"><div class="wrap">
536<a href="https://automatelike.pro/ai-ha-book/">Get My Free+Shipping Book</a></div></li>
537<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-4989"><div class="wrap"><a href="https://peyanski.com/support">Support</a></div></li>
538<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19175"><div class="wrap"><a href="https://peyanski.com/about/">About Me</a></div></li>
539<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-25687"><div class="wrap"><a href="https://peyanski.com/coaching/">Coaching 1:1</a></div></li>
540</ul>	</div>
541</div>
542
543	</div>
544
545</div>					</div>
546	</div>
547</div>
548<div class="header-menu-sidebar-overlay hfg-ov hfg-pe" onclick="if('undefined' !== typeof toggleAriaClick ) { toggleAriaClick() }"></div>
549</div>
550	</header>
551
552	<style>.nav-ul li:focus-within .wrap.active + .sub-menu { opacity: 1; visibility: visible; }.nav-ul li.neve-mega-menu:focus-within .wrap.active + .sub-menu { display: grid; }.nav-ul li > .wrap { display: flex; align-items: center; position: relative; padding: 0 4px; }.nav-ul:not(.menu-mobile):not(.neve-mega-menu) > li > .wrap > a { padding-top: 1px }</style>
553
554	
555	<main id="content" class="neve-main">
556
557	<div class="container single-post-container">
558		<div class="row">
559						<article id="post-26562"
560					class="nv-single-post-wrap col post-26562 post type-post status-publish format-standard has-post-thumbnail hentry category-home-assistant tag-codex tag-ha-mcp tag-home-assistant-ai tag-home-assistant-automations tag-home-assistant-dashboards tag-home-assistant-mcp tag-smart-home-ai">
561				<div class="entry-header" ><div class="nv-title-meta-wrap"><small class="neve-breadcrumbs-wrapper"></small><h1 class="title entry-title">ha-mcp and Codex: Build Home Assistant Dashboards Without Entity Hunting</h1><ul class="nv-meta-list"><li  class="meta author vcard "><span class="author-name fn">by <a href="https://peyanski.com/author/peyanski/" title="Posts by Kiril Peyanski" rel="author">Kiril Peyanski</a></span></li><li class="meta date posted-on "><time class="entry-date published" datetime="2026-07-03T20:23:23+03:00" content="2026-07-03">03/07/2026</time><time class="updated" datetime="2026-07-03T21:53:30+03:00">03/07/2026</time></li></ul></div></div><div class="nv-thumb-wrap"><img width="929" height="523" src="https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif" class="skip-lazy not-transparent wp-post-image" alt="ha-mcp Codex Home Assistant dashboard automation featured image" decoding="async" fetchpriority="high" srcset="https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog.avif 929w, https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog-300x169.avif 300w, https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog-768x432.avif 768w, https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog-600x338.avif 600w, https://peyanski.com/wp-content/uploads/2026/05/ha_mcp_codex_thumb_B_blog-150x84.avif 150w" sizes="(max-width: 929px) 100vw, 929px" data-has-transparency="false" data-dominant-color="363a35" style="--dominant-color: #363a35;" /></div><div class="nv-content-wrap entry-content">
562<p class="wp-block-paragraph"><strong>ha-mcp</strong> is the part that made this whole Codex and Home Assistant experiment feel different.</p><!-- Ezoic - wp_under_page_title - under_page_title --><div id="ezoic-pub-ad-placeholder-139" data-inserter-version="2" data-placement-location="under_page_title"></div>
562<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(139); });</script>
562<!-- End Ezoic - wp_under_page_title - under_page_title -->
563
564
565
566<p class="wp-block-paragraph">Without it, Codex can still write YAML examples. It can explain dashboards. It can suggest automation ideas. Nice, but also a bit detached from the real mess inside my Home Assistant.</p>
567
568
569
570<p class="wp-block-paragraph">With <strong>ha-mcp</strong>, Codex can ask Home Assistant what is actually there. Real entities. Real automations. Real dashboards. Real traces. That is where it stops feeling like a generic chatbot and starts feeling like a smart assistant sitting next to the dashboard editor.</p><!-- Ezoic - wp_under_first_paragraph - under_first_paragraph --><div id="ezoic-pub-ad-placeholder-147" data-inserter-version="2" data-placement-location="under_first_paragraph"></div>
570<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(147); });</script>
570<!-- End Ezoic - wp_under_first_paragraph - under_first_paragraph -->
571
572
573
574<p class="wp-block-paragraph">And yes, that is exciting. It is also the kind of exciting where I want a backup before I click anything important.</p>
575
576
577
578<p class="wp-block-paragraph">I tested this because my previous video about Claude, Home Assistant, and <a href="https://homeassistant-ai.github.io/ha-mcp/" target="_blank" rel="noopener">ha-mcp</a> did very well. People watched it, tried it, and then a very fair question appeared in the comments: can I use something else than Claude?</p>
579
580
581
582<p class="wp-block-paragraph">That question made sense. Claude worked nicely in my first test, but I was using the free tier and I hit usage limits very fast. Waiting for the reset is not the end of the world, but when you are in the middle of a Home Assistant rabbit hole, it feels like somebody locked the toolbox.</p><!-- Ezoic - wp_under_second_paragraph - under_second_paragraph --><div id="ezoic-pub-ad-placeholder-148" data-inserter-version="2" data-placement-location="under_second_paragraph"></div>
582<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(148); });</script>
582<!-- End Ezoic - wp_under_second_paragraph - under_second_paragraph -->
583
584
585
586<p class="wp-block-paragraph">I already pay for OpenAI Plus, so I wanted to test Codex with <strong>ha-mcp</strong>. Not for a theory video. For the things Home Assistant users actually do: build dashboard cards, create automations, and debug the old automations that everyone pretends they will clean up one day.</p>
587
588
589
590<div id="ez-toc-container" class="ez-toc-v2_0_88 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction">
591<p class="ez-toc-title" style="cursor:inherit">Table of Contents</p>
592<label for="ez-toc-cssicon-toggle-item-6ac18b764f219" class="ez-toc-cssicon-toggle-label"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></label><input type="checkbox"  id="ez-toc-cssicon-toggle-item-6ac18b764f219"  aria-label="Toggle" /><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Tired_of_reading" >Tired of reading?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#The_simple_idea_Codex_gets_Home_Assistant_tools" >The simple idea: Codex gets Home Assistant tools</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#Do_you_know_that_you_can_get_a_real_Free_HA_AI_book" >Do you know that you can get a real Free HA &amp; AI book?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#Dashboard_cards_are_where_this_becomes_useful_fast" >Dashboard cards are where this becomes useful fast</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-5" href="#Automation_creation_still_needs_a_human_brake_pedal" >Automation creation still needs a human brake pedal</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="#Debugging_old_automations_may_be_the_best_use_case" >Debugging old automations may be the best use case</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#The_PDF_has_the_Mac_and_Windows_setup_details" >The PDF has the Mac and Windows setup details</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="#One_Codex_detail_that_can_save_time" >One Codex detail that can save time</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#My_safety_rules_for_Codex_and_ha-mcp" >My safety rules for Codex and ha-mcp</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" href="#So_is_Codex_worth_testing_with_Home_Assistant" >So, is Codex worth testing with Home Assistant?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="#If_you_want_more" >If you want more</a></li></ul></nav></div>
593<h2 class="wp-block-heading"><span class="ez-toc-section" id="Tired_of_reading"></span>Tired of reading?<span class="ez-toc-section-end"></span></h2>
594
595
596
597<p class="wp-block-paragraph">I also made a video version of this experiment. You can watch it here: <a href="https://youtu.be/4ildkUCt4Hg" target="_blank" rel="noopener">Codex, ha-mcp, and Home Assistant video</a>.</p>
598
599
600
601<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
602<div class="nv-iframe-embed"><iframe title="The OpenAI Way to Build Home Assistant Dashboards and Automations" width="1200" height="675" src="https://www.youtube.com/embed/4ildkUCt4Hg?feature=oembed&#038;enablejsapi=1&#038;origin=https://peyanski.com" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture;
602 web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
603</div></figure>
604
605
606
607<p class="wp-block-paragraph">The video is better if you want to see the flow visually: Codex, the MCP bridge, dashboards, automation prompts, and the safety checks before approving changes.</p><!-- Ezoic - wp_mid_content - mid_content --><div id="ezoic-pub-ad-placeholder-149" data-inserter-version="2" data-placement-location="mid_content"></div>
607<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(149); });</script>
607<!-- End Ezoic - wp_mid_content - mid_content -->
608
609
610
611<h2 class="wp-block-heading"><span class="ez-toc-section" id="The_simple_idea_Codex_gets_Home_Assistant_tools"></span>The simple idea: Codex gets Home Assistant tools<span class="ez-toc-section-end"></span></h2>
612
613
614
615<p class="wp-block-paragraph">The basic structure is simple. Home Assistant is your smart home. Codex is the AI assistant. <strong>ha-mcp</strong> is the bridge between them.</p>
616
617
618
619<p class="wp-block-paragraph">MCP means Model Context Protocol. The less fancy explanation is this: it gives an AI assistant tools it can use. Instead of guessing what your entities are called, Codex can ask Home Assistant. Instead of giving a random automation example, it can inspect the current automation first, then suggest a safer fix.</p>
620
621
622
623<figure class="wp-block-image size-full"><img data-dominant-color="dadee0" data-has-transparency="false" style="--dominant-color: #dadee0;" decoding="async" width="2048" height="1152" src="https://peyanski.com/wp-content/uploads/2026/05/SL03-3.avif" alt="ha-mcp Codex Home Assistant bridge diagram" class="wp-image-26559 not-transparent" srcset="https://peyanski.com/wp-content/uploads/2026/05/SL03-3.avif 2048w, https://peyanski.com/wp-content/uploads/2026/05/SL03-3-300x169.avif 300w, https://peyanski.com/wp-content/uploads/2026/05/SL03-3-768x432.avif 768w, https://peyanski.com/wp-content/uploads/2026/05/SL03-3-1536x864.avif 1536w, https://peyanski.com/wp-content/uploads/2026/05/SL03-3-600x338.avif 600w, https://peyanski.com/wp-content/uploads/2026/05/SL03-3-150x84.avif 150w" sizes="(max-width: 2048px) 100vw, 2048px" /><figcaption class="wp-element-caption">ha-mcp works like the bridge between Codex and your real Home Assistant setup.</figcaption></figure>
624
625
626
627<p class="wp-block-paragraph">The official <a href="https://github.com/homeassistant-ai/ha-mcp" target="_blank" rel="noopener">ha-mcp GitHub page</a> shows examples like adding dashboard cards, debugging a motion sensor automation, and creating scripts. That is the interesting part. This is not only &#8220;AI, explain Home Assistant.&#8221; It is closer to &#8220;AI, look at my Home Assistant and help me build the thing.&#8221;</p><!-- Ezoic - wp_long_content - long_content --><div id="ezoic-pub-ad-placeholder-150" data-inserter-version="2" data-placement-location="long_content"></div>
627<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(150); });</script>
627<!-- End Ezoic - wp_long_content - long_content -->
628
629
630
631<p class="wp-block-paragraph">Of course, I do not want Codex to behave like a cowboy with Wi-Fi. So my rule is simple: plan first, change later. For early tests I prefer safe devices, dashboards, read-only inspection, and test environments where possible. I do not start with locks, alarms, garage doors, or water valves. Smart bulbs are brave enough for day one.</p>
632
633
634
635<h2 class="wp-block-heading"><span class="ez-toc-section" id="Do_you_know_that_you_can_get_a_real_Free_HA_AI_book"></span>Do you know that you can get a real Free HA &amp; AI book?<span class="ez-toc-section-end"></span></h2>
636
637
638
639<p class="wp-block-paragraph">I put more than 1,000 hours within 6 months on this project and I managed to develop a tool and describe in great details several real-life AI recipes. I put everything in a book called <strong>Home Assistant AI Recipes </strong>and it is your to have for <span style="text-decoration: underline;">free</span> you just have to cover printing &amp; shipping. But check this page for more info &#8211; <a href="https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/ ">https://peyanski.com/ha-mcp-codex-home-assistant-dashboards-automations/ </a></p>
640
641
642
643<h2 class="wp-block-heading"><span class="ez-toc-section" id="Dashboard_cards_are_where_this_becomes_useful_fast"></span>Dashboard cards are where this becomes useful fast<span class="ez-toc-section-end"></span></h2>
644
645
646
647<p class="wp-block-paragraph">The first use case I like is dashboard creation. Every Home Assistant user knows this small pain. You want one clean card, but first you have to remember the entity names, choose the right card type, make it readable on mobile, and avoid turning a simple dashboard into a tiny airplane cockpit.</p><!-- Ezoic - wp_longer_content - longer_content --><div id="ezoic-pub-ad-placeholder-151" data-inserter-version="2" data-placement-location="longer_content"></div>
647<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(151); });</script>
647<!-- End Ezoic - wp_longer_content - longer_content -->
648
649
650
651<p class="wp-block-paragraph">With <strong>ha-mcp</strong>, Codex can help with the boring first part. A prompt can be very normal:</p>
652
653
654
655<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
656<p class="wp-block-paragraph">Look at my Home Assistant entities and help me create a House Check dashboard card. I want garage door, front door lock, open windows, motion, temperature, and low batteries. Make it simple for a phone. Before changing anything, show me the entities you plan to use.</p>
657</blockquote>
658
659
660
661<p class="wp-block-paragraph">That last sentence is the important one. Before changing anything, show me the entities you plan to use.</p>
662
663
664
665<p class="wp-block-paragraph">Maybe Codex finds three motion sensors. Maybe two door locks. Maybe a battery entity with a name from five years ago when I apparently named devices by dropping the keyboard on the floor. This is why I want a plan first.</p><!-- Ezoic - wp_longest_content - longest_content --><div id="ezoic-pub-ad-placeholder-152" data-inserter-version="2" data-placement-location="longest_content"></div>
665<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(152); });</script>
665<!-- End Ezoic - wp_longest_content - longest_content -->
666
667
668
669<figure class="wp-block-image size-full"><img data-dominant-color="cdd2d5" data-has-transparency="false" style="--dominant-color: #cdd2d5;" loading="lazy" decoding="async" width="2048" height="1152" src="https://peyanski.com/wp-content/uploads/2026/05/SL05.avif" alt="ha-mcp Home Assistant dashboard card creation House Check concept" class="wp-image-26560 not-transparent" srcset="https://peyanski.com/wp-content/uploads/2026/05/SL05.avif 2048w, https://peyanski.com/wp-content/uploads/2026/05/SL05-300x169.avif 300w, https://peyanski.com/wp-content/uploads/2026/05/SL05-768x432.avif 768w, https://peyanski.com/wp-content/uploads/2026/05/SL05-1536x864.avif 1536w, https://peyanski.com/wp-content/uploads/2026/05/SL05-600x338.avif 600w, https://peyanski.com/wp-content/uploads/2026/05/SL05-150x84.avif 150w" sizes="auto, (max-width: 2048px) 100vw, 2048px" /><figcaption class="wp-element-caption">A simple House Check dashboard card is a good first ha-mcp and Codex test.</figcaption></figure>
670
671
672
673<p class="wp-block-paragraph">The workflow I like is not &#8220;AI does everything and I hope my house survives.&#8221; It is idea, AI search, AI first draft, human review, then Home Assistant result. Codex can reduce the friction, but I keep the steering wheel.</p>
674
675
676
677<h2 class="wp-block-heading"><span class="ez-toc-section" id="Automation_creation_still_needs_a_human_brake_pedal"></span>Automation creation still needs a human brake pedal<span class="ez-toc-section-end"></span></h2>
678
679
680
681<p class="wp-block-paragraph">The second useful area is automation creation. This is where <strong>ha-mcp</strong> can save time because automations often need several pieces to work together: triggers, conditions, services, helpers, entity states, maybe time windows, maybe a notification.</p>
682
683
684
685<p class="wp-block-paragraph">For example, a simple bedroom automation can still become annoying by hand. Motion at night should turn on a soft light. A cold room with an open window should warn you. Blinds should open in the morning, but not at 4:30 because some automation got too enthusiastic. These are normal smart home ideas, but they include enough small logic choices to slow you down.</p><!-- Ezoic - wp_incontent_5 - incontent_5 --><div id="ezoic-pub-ad-placeholder-153" data-inserter-version="2" data-placement-location="incontent_5"></div>
685<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(153); });</script>
685<!-- End Ezoic - wp_incontent_5 - incontent_5 -->
686
687
688
689<p class="wp-block-paragraph">So I would ask Codex for a plan first:</p>
690
691
692
693<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
694<p class="wp-block-paragraph">Create a Sleep Rescue automation plan for the bedroom. Use motion, window contact, temperature, lights, and blinds if they exist. Do not write changes yet. Show the plan first.</p>
695</blockquote>
696
697
698
699<p class="wp-block-paragraph">Then I can review the trigger, condition, action, and mode. Should it be single, restart, or queued? Should it be one automation or two? Should there be a helper? Codex can suggest an answer, but Home Assistant is still my home, not a code playground.</p>
700
701
702
703<p class="wp-block-paragraph">This is also why <strong>ha-mcp</strong> feels more useful than copying a YAML block from a normal chatbot. The AI can work from the real environment, but you can still force it to slow down and explain what it wants to do.</p>
704
705
706
707<h2 class="wp-block-heading"><span class="ez-toc-section" id="Debugging_old_automations_may_be_the_best_use_case"></span>Debugging old automations may be the best use case<span class="ez-toc-section-end"></span></h2>
708
709
710
711<p class="wp-block-paragraph">Creating new automations is fun. Debugging old automations may be more valuable.</p><!-- Ezoic - wp_incontent_6 - incontent_6 --><div id="ezoic-pub-ad-placeholder-154" data-inserter-version="2" data-placement-location="incontent_6"></div>
711<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(154); });</script>
711<!-- End Ezoic - wp_incontent_6 - incontent_6 -->
712
713
714
715<p class="wp-block-paragraph">Every Home Assistant user eventually has an automation graveyard. Old names. Old devices. Old logic. One automation called something like &#8220;test final fixed real final 2&#8221; and nobody wants to ask what happened there.</p>
716
717
718
719<p class="wp-block-paragraph">This is where I would use <strong>ha-mcp</strong> in a very safe way:</p>
720
721
722
723<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
724<p class="wp-block-paragraph">Look at my automation called Bedroom Night Light. Do not change it. Explain what it does in simple words. Then check why it may not be triggering. Use traces or history if available. Give me the safest fix first.</p>
725</blockquote>
726
727
728
729<figure class="wp-block-image size-full"><img data-dominant-color="d1d2d4" data-has-transparency="false" style="--dominant-color: #d1d2d4;" loading="lazy" decoding="async" width="2048" height="1152" src="https://peyanski.com/wp-content/uploads/2026/05/SL10-1.avif" alt="ha-mcp Home Assistant automation debugging workflow" class="wp-image-26561 not-transparent" srcset="https://peyanski.com/wp-content/uploads/2026/05/SL10-1.avif 2048w, https://peyanski.com/wp-content/uploads/2026/05/SL10-1-300x169.avif 300w, https://peyanski.com/wp-content/uploads/2026/05/SL10-1-768x432.avif 768w, https://peyanski.com/wp-content/uploads/2026/05/SL10-1-1536x864.avif 1536w, https://peyanski.com/wp-content/uploads/2026/05/SL10-1-600x338.avif 600w, https://peyanski.com/wp-content/uploads/2026/05/SL10-1-150x84.avif 150w" sizes="auto, (max-width: 2048px) 100vw, 2048px" /><figcaption class="wp-element-caption">Debugging old automations is where ha-mcp can turn confusion into a reviewable plan.</figcaption></figure>
730
731
732
733<p class="wp-block-paragraph">That is a very different request from &#8220;fix it.&#8221; I want Codex to explain first. If the condition never becomes true, tell me. If an entity was renamed, show me. If the trace points to the wrong branch, explain it. Then I decide if the fix makes sense.</p><!-- Ezoic - wp_incontent_7 - incontent_7 --><div id="ezoic-pub-ad-placeholder-155" data-inserter-version="2" data-placement-location="incontent_7"></div>
733<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(155); });</script>
733<!-- End Ezoic - wp_incontent_7 - incontent_7 -->
734
735
736
737<p class="wp-block-paragraph">AI being wrong is annoying. AI being wrong inside your real home at 2 AM is a different flavor of annoying. I prefer the first one.</p>
738
739
740
741<h2 class="wp-block-heading"><span class="ez-toc-section" id="The_PDF_has_the_Mac_and_Windows_setup_details"></span>The PDF has the Mac and Windows setup details<span class="ez-toc-section-end"></span></h2>
742
743
744
745<p class="wp-block-paragraph">I did not want the video or this article to become a full install marathon. The setup details matter, especially on Mac and Windows, but they can also eat the whole topic if I let them.</p>
746
747
748
749<p class="wp-block-paragraph">If you want the full setup path for Codex, <strong>ha-mcp</strong>, and Home Assistant, I made a PDF here: <a href="https://automatelike.pro/ha-mcp-codex" target="_blank" rel="noopener">Codex + ha-mcp + Home Assistant PDF guide</a>.</p><!-- Ezoic - wp_incontent_8 - incontent_8 --><div id="ezoic-pub-ad-placeholder-156" data-inserter-version="2" data-placement-location="incontent_8"></div>
749<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(156); });</script>
749<!-- End Ezoic - wp_incontent_8 - incontent_8 -->
750
751
752
753<p class="wp-block-paragraph">The PDF covers the Mac and Windows setup flow, the Home Assistant connection, token notes, Codex config notes, the local stdio option with uvx, and the safety checklist I would use before letting any AI assistant touch a real smart home.</p>
754
755
756
757<p class="wp-block-paragraph">To get the PDF, type your name and e-mail. You will receive an e-mail from me to confirm you are not a robot, and the PDF will be sent to your inbox. You&#8217;ll also be subscribed to my newsletter where I share new content, updates, and my exclusive AI and HA challenge. It&#8217;s free and you can unsubscribe anytime with one click.</p>
758
759
760
761<p class="wp-block-paragraph">Now back to the practical part, because there is one setup detail that explains why I separated the guide from the demo.</p><!-- Ezoic - wp_incontent_9 - incontent_9 --><div id="ezoic-pub-ad-placeholder-157" data-inserter-version="2" data-placement-location="incontent_9"></div>
761<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(157); });</script>
761<!-- End Ezoic - wp_incontent_9 - incontent_9 -->
762
763
764
765<h2 class="wp-block-heading"><span class="ez-toc-section" id="One_Codex_detail_that_can_save_time"></span>One Codex detail that can save time<span class="ez-toc-section-end"></span></h2>
766
767
768
769<p class="wp-block-paragraph">The <a href="https://homeassistant-ai.github.io/ha-mcp/setup/" target="_blank" rel="noopener">ha-mcp setup wizard</a> lists Codex as one of the supported clients. It also lists many others: Claude Desktop, Claude Code, Cursor, VS Code, GitHub Copilot Agents, Windsurf, Cline, ChatGPT, Gemini CLI, Open WebUI, OpenCode, Antigravity, and more.</p>
770
771
772
773<p class="wp-block-paragraph">That is the bigger lesson from this test. <strong>ha-mcp</strong> is not only a Claude thing. The bridge is the important part. Different AI clients can walk over the bridge.</p>
774
775
776
777<p class="wp-block-paragraph">But the path can be different depending on the client. The FAQ mentions an important Codex caveat: for HTTP native clients, Codex can connect to an add-on URL, but there has been a known Codex HTTP MCP initialization bug where no tools load. If that happens, the workaround is to run <strong>ha-mcp</strong> locally over stdio with uvx instead.</p><!-- Ezoic - wp_incontent_10 - incontent_10 --><div id="ezoic-pub-ad-placeholder-158" data-inserter-version="2" data-placement-location="incontent_10"></div>
777<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(158); });</script>
777<!-- End Ezoic - wp_incontent_10 - incontent_10 -->
778
779
780
781<p class="wp-block-paragraph">This is the kind of tiny detail that can steal an afternoon. One computer says &#8220;uvx not found,&#8221; another hides a config file, and suddenly the smart home is fine but the human needs a snack.</p>
782
783
784
785<h2 class="wp-block-heading"><span class="ez-toc-section" id="My_safety_rules_for_Codex_and_ha-mcp"></span>My safety rules for Codex and ha-mcp<span class="ez-toc-section-end"></span></h2>
786
787
788
789<p class="wp-block-paragraph">My current rules are boring, which is exactly why I like them.</p>
790
791
792
793<ol class="wp-block-list">
794<li>Ask Codex to show the entities before it builds anything.</li><!-- Ezoic - wp_incontent_11 - incontent_11 --><div id="ezoic-pub-ad-placeholder-159" data-inserter-version="2" data-placement-location="incontent_11"></div>
794<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(159); });</script>
794<!-- End Ezoic - wp_incontent_11 - incontent_11 -->
795
796
797
798<li>Ask for the plan before it writes changes.</li>
799
800
801
802<li>Start with dashboards, lights, and read-only inspection.</li>
803
804
805
806<li>Avoid locks, alarms, garage doors, and water valves in early tests.</li>
807
808
809
810<li>Make a backup before testing bigger changes.</li>
811
812
813
814<li>Do not approve a change you do not understand.</li>
815</ol>
816
817
818
819<p class="wp-block-paragraph">If you follow those rules, Codex plus <strong>ha-mcp</strong> can be a very useful helper. If you ignore them, congratulations, you have invented gambling with smart bulbs.</p>
820
821
822
823<p class="wp-block-paragraph">One prompt I think almost every Home Assistant user should try after setup is this:</p><!-- Ezoic - wp_incontent_12 - incontent_12 --><div id="ezoic-pub-ad-placeholder-160" data-inserter-version="2" data-placement-location="incontent_12"></div>
823<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(160); });</script>
823<!-- End Ezoic - wp_incontent_12 - incontent_12 -->
824
825
826
827<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
828<p class="wp-block-paragraph">Give me a simple overview of my Home Assistant. List the main areas, important devices, automations, and anything that looks confusing or badly named. Do not change anything.</p>
829</blockquote>
830
831
832
833<p class="wp-block-paragraph">It is not flashy, but it is useful. Before AI builds anything, it should understand your home. Honestly, before I build anything, maybe I should understand my home too.</p>
834
835
836
837<h2 class="wp-block-heading"><span class="ez-toc-section" id="So_is_Codex_worth_testing_with_Home_Assistant"></span>So, is Codex worth testing with Home Assistant?<span class="ez-toc-section-end"></span></h2>
838
839
840
841<p class="wp-block-paragraph">My current answer is yes, especially if you are already in the OpenAI world and you want help with dashboards, cards, automations, scripts, and debugging.</p>
842
843
844
845<p class="wp-block-paragraph">The old Claude test showed that AI plus <strong>ha-mcp</strong> can be scary good. This Codex test shows the idea is bigger than one AI app. The model matters, but the bridge matters more.</p><!-- Ezoic - wp_incontent_13 - incontent_13 --><div id="ezoic-pub-ad-placeholder-161" data-inserter-version="2" data-placement-location="incontent_13"></div>
845<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(161); });</script>
845<!-- End Ezoic - wp_incontent_13 - incontent_13 -->
846
847
848
849<p class="wp-block-paragraph">I would not treat Codex like a magic Home Assistant admin. I would treat it like a fast assistant that needs boundaries. It can find the boring details. It can draft the card. It can explain the automation. It can point at the broken condition. Then you decide.</p>
850
851
852
853<p class="wp-block-paragraph">That is the version of AI in the smart home that I actually like. You describe what you want. Codex uses <strong>ha-mcp</strong> to get the real Home Assistant context. You review the result. Your home gets a little easier to manage without you fighting entity names until midnight.</p>
854
855
856
857<h2 class="wp-block-heading"><span class="ez-toc-section" id="If_you_want_more"></span>If you want more<span class="ez-toc-section-end"></span></h2>
858
859
860
861<p class="wp-block-paragraph">If you want more simple smart home experiments like this, check my <a href="https://peyanski.com/category/home-assistant/">Home Assistant articles</a> and my <a href="https://peyanski.com/category/ai/">AI articles</a>.</p><!-- Ezoic - wp_incontent_14 - incontent_14 --><div id="ezoic-pub-ad-placeholder-162" data-inserter-version="2" data-placement-location="incontent_14"></div>
861<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(162); });</script>
861<!-- End Ezoic - wp_incontent_14 - incontent_14 -->
862
863
864
865<p class="wp-block-paragraph">And if you want the setup steps instead of the story version, grab the <a href="https://automatelike.pro/ha-mcp-codex" target="_blank" rel="noopener">Codex + ha-mcp + Home Assistant PDF guide</a>. It will not stop your smart home from developing opinions, but at least it can help you connect the pieces without guessing every path.</p>
866</div><div class="nv-tags-list"><span>Tags:</span><a href=https://peyanski.com/tag/codex/ title="Codex" class=codex rel="tag">Codex</a><a href=https://peyanski.com/tag/ha-mcp/ title="ha-mcp" class=ha-mcp rel="tag">ha-mcp</a><a href=https://peyanski.com/tag/home-assistant-ai/ title="Home Assistant AI" class=home-assistant-ai rel="tag">Home Assistant AI</a><a href=https://peyanski.com/tag/home-assistant-automations/ title="Home Assistant automations" class=home-assistant-automations rel="tag">Home Assistant automations</a><a href=https://peyanski.com/tag/home-assistant-dashboards/ title="Home Assistant dashboards" class=home-assistant-dashboards rel="tag">Home Assistant dashboards</a><a href=https://peyanski.com/tag/home-assistant-mcp/ title="Home Assistant MCP" class=home-assistant-mcp rel="tag">Home Assistant MCP</a><a href=https://peyanski.com/tag/smart-home-ai/ title="Smart home AI" class=smart-home-ai rel="tag">Smart home AI</a> </div> 
867<div id="comments" class="comments-area">
868		<div id="respond" class="comment-respond nv-is-boxed">
869		<h2 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/ha-mcp-codex-home-assistant-dashboards-automations/#respond" style="display:none;">Cancel reply</a></small></h2><form action="https://peyanski.com/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p>
870<p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p>
871<p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p>
872<p class="comment-form-comment"><label for="comment">Comment <span class="required">*</span></label> <textarea autocomplete="new-password"  id="d1abb894a1"  name="d1abb894a1"   cols="45" rows="8" maxlength="65525" required></textarea><textarea id="comment" aria-label="hp-comment" aria-hidden="true" name="comment" autocomplete="new-password" style="padding:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;position:absolute !important;white-space:nowrap !important;height:1px !important;width:1px !important;overflow:hidden !important;" tabindex="-1"></textarea>
872<script data-noptimize>document.getElementById("comment").setAttribute( "id", "a6b57656bb972a3dcbbeb5b4e97b675e" );document.getElementById("d1abb894a1").setAttribute( "id", "comment" );</script>
872</p><p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Save my name, email, and website in this browser for the next time I comment.</label></p>
873<p class="form-submit"><input name="submit" type="submit" id="submit" class="button button-primary" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='26562' id='comment_post_ID' />
874<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
875</p></form>	</div><!-- #respond -->
876	</div>
877			</article>
878			<div class="nv-sidebar-wrap col-sm-12 nv-right blog-sidebar " >
879		<aside id="secondary" role="complementary">
880		
881		<div id="categories-5" class="widget widget_categories"><p class="widget-title">Categories</p>
882			<ul>
883					<li class="cat-item cat-item-1659"><a href="https://peyanski.com/category/3d-printing/">3D Printing</a> (1)
884</li>
885	<li class="cat-item cat-item-2838"><a href="https://peyanski.com/category/smart-home/ai/">AI</a> (26)
886</li>
887	<li class="cat-item cat-item-1395"><a href="https://peyanski.com/category/crypto/">Crypto</a> (1)
888</li>
889	<li class="cat-item cat-item-39"><a href="https://peyanski.com/category/devops/">DevOps</a> (21)
890</li>
891	<li class="cat-item cat-item-693"><a href="https://peyanski.com/category/smart-home/home-assistant/">Home Assistant</a> (203)
892</li>
893	<li class="cat-item cat-item-732"><a href="https://peyanski.com/category/smart-home/networks/">Networks</a> (8)
894</li>
895	<li class="cat-item cat-item-692"><a href="https://peyanski.com/category/smart-home/node-red/">Node-RED</a> (14)
896</li>
897	<li class="cat-item cat-item-715"><a href="https://peyanski.com/category/smart-home/raspberry-pi/">Raspberry Pi</a> (23)
898</li>
899	<li class="cat-item cat-item-1104"><a href="https://peyanski.com/category/smart-home/security/">Security</a> (27)
900</li>
901	<li class="cat-item cat-item-54"><a href="https://peyanski.com/category/smart-home/">Smart Home</a> (167)
902</li>
903	<li class="cat-item cat-item-2183"><a href="https://peyanski.com/category/smart-rv-conversion/">Smart RV Conversion</a> (9)
904</li>
905	<li class="cat-item cat-item-2148"><a href="https://peyanski.com/category/smart-home/smart-sensors/">Smart Sensors</a> (27)
906</li>
907	<li class="cat-item cat-item-777"><a href="https://peyanski.com/category/smart-home/smartthings/">SmartThings</a> (1)
908</li>
909	<li class="cat-item cat-item-2851"><a href="https://peyanski.com/category/smart-home/switchbot/">SwitchBot</a> (21)
910</li>
911	<li class="cat-item cat-item-1"><a href="https://peyanski.com/category/uncategorized/">Uncategorized</a> (1)
912</li>
913	<li class="cat-item cat-item-949"><a href="https://peyanski.com/category/wordpress/">WordPress</a> (1)
914</li>
915	<li class="cat-item cat-item-1039"><a href="https://peyanski.com/category/youtube/">YouTube</a> (10)
916</li>
917			</ul>
918
919			</div>
919<div id="archives-3" class="widget widget_archive"><p class="widget-title">Articles</p>
920			<ul>
921					<li><a href='https://peyanski.com/2026/09/'>September 2026</a>&nbsp;(5)</li>
922	<li><a href='https://peyanski.com/2026/08/'>August 2026</a>&nbsp;(3)</li>
923	<li><a href='https://peyanski.com/2026/07/'>July 2026</a>&nbsp;(2)</li>
924	<li><a href='https://peyanski.com/2026/06/'>June 2026</a>&nbsp;(4)</li>
925	<li><a href='https://peyanski.com/2026/05/'>May 2026</a>&nbsp;(3)</li>
926	<li><a href='https://peyanski.com/2026/04/'>April 2026</a>&nbsp;(3)</li>
927	<li><a href='https://peyanski.com/2026/03/'>March 2026</a>&nbsp;(4)</li>
928	<li><a href='https://peyanski.com/2026/02/'>February 2026</a>&nbsp;(3)</li>
929	<li><a href='https://peyanski.com/2026/01/'>January 2026</a>&nbsp;(3)</li>
930	<li><a href='https://peyanski.com/2025/12/'>December 2025</a>&nbsp;(1)</li>
931	<li><a href='https://peyanski.com/2025/11/'>November 2025</a>&nbsp;(4)</li>
932	<li><a href='https://peyanski.com/2025/10/'>October 2025</a>&nbsp;(5)</li>
933	<li><a href='https://peyanski.com/2025/09/'>September 2025</a>&nbsp;(1)</li>
934	<li><a href='https://peyanski.com/2025/08/'>August 2025</a>&nbsp;(1)</li>
935	<li><a href='https://peyanski.com/2025/07/'>July 2025</a>&nbsp;(2)</li>
936	<li><a href='https://peyanski.com/2025/06/'>June 2025</a>&nbsp;(3)</li>
937	<li><a href='https://peyanski.com/2025/05/'>May 2025</a>&nbsp;(4)</li>
938	<li><a href='https://peyanski.com/2025/04/'>April 2025</a>&nbsp;(3)</li>
939	<li><a href='https://peyanski.com/2025/03/'>March 2025</a>&nbsp;(3)</li>
940	<li><a href='https://peyanski.com/2025/02/'>February 2025</a>&nbsp;(3)</li>
941	<li><a href='https://peyanski.com/2025/01/'>January 2025</a>&nbsp;(4)</li>
942	<li><a href='https://peyanski.com/2024/11/'>November 2024</a>&nbsp;(3)</li>
943	<li><a href='https://peyanski.com/2024/10/'>October 2024</a>&nbsp;(5)</li>
944	<li><a href='https://peyanski.com/2024/09/'>September 2024</a>&nbsp;(3)</li>
945	<li><a href='https://peyanski.com/2024/08/'>August 2024</a>&nbsp;(3)</li>
946	<li><a href='https://peyanski.com/2024/07/'>July 2024</a>&nbsp;(5)</li>
947	<li><a href='https://peyanski.com/2024/06/'>June 2024</a>&nbsp;(4)</li>
948	<li><a href='https://peyanski.com/2024/05/'>May 2024</a>&nbsp;(3)</li>
949	<li><a href='https://peyanski.com/2024/04/'>April 2024</a>&nbsp;(3)</li>
950	<li><a href='https://peyanski.com/2024/03/'>March 2024</a>&nbsp;(4)</li>
951	<li><a href='https://peyanski.com/2024/02/'>February 2024</a>&nbsp;(4)</li>
952	<li><a href='https://peyanski.com/2024/01/'>January 2024</a>&nbsp;(5)</li>
953	<li><a href='https://peyanski.com/2023/12/'>December 2023</a>&nbsp;(3)</li>
954	<li><a href='https://peyanski.com/2023/11/'>November 2023</a>&nbsp;(5)</li>
955	<li><a href='https://peyanski.com/2023/10/'>October 2023</a>&nbsp;(5)</li>
956	<li><a href='https://peyanski.com/2023/09/'>September 2023</a>&nbsp;(3)</li>
957	<li><a href='https://peyanski.com/2023/08/'>August 2023</a>&nbsp;(6)</li>
958	<li><a href='https://peyanski.com/2023/07/'>July 2023</a>&nbsp;(4)</li>
959	<li><a href='https://peyanski.com/2023/06/'>June 2023</a>&nbsp;(4)</li>
960	<li><a href='https://peyanski.com/2023/05/'>May 2023</a>&nbsp;(4)</li>
961	<li><a href='https://peyanski.com/2023/04/'>April 2023</a>&nbsp;(4)</li>
962	<li><a href='https://peyanski.com/2023/03/'>March 2023</a>&nbsp;(5)</li>
963	<li><a href='https://peyanski.com/2023/02/'>February 2023</a>&nbsp;(4)</li>
964	<li><a href='https://peyanski.com/2023/01/'>January 2023</a>&nbsp;(4)</li>
965	<li><a href='https://peyanski.com/2022/12/'>December 2022</a>&nbsp;(4)</li>
966	<li><a href='https://peyanski.com/2022/11/'>November 2022</a>&nbsp;(5)</li>
967	<li><a href='https://peyanski.com/2022/10/'>October 2022</a>&nbsp;(4)</li>
968	<li><a href='https://peyanski.com/2022/09/'>September 2022</a>&nbsp;(4)</li>
969	<li><a href='https://peyanski.com/2022/08/'>August 2022</a>&nbsp;(5)</li>
970	<li><a href='https://peyanski.com/2022/07/'>July 2022</a>&nbsp;(5)</li>
971	<li><a href='https://peyanski.com/2022/06/'>June 2022</a>&nbsp;(5)</li>
972	<li><a href='https://peyanski.com/2022/05/'>May 2022</a>&nbsp;(4)</li>
973	<li><a href='https://peyanski.com/2022/04/'>April 2022</a>&nbsp;(4)</li>
974	<li><a href='https://peyanski.com/2022/03/'>March 2022</a>&nbsp;(5)</li>
975	<li><a href='https://peyanski.com/2022/02/'>February 2022</a>&nbsp;(4)</li>
976	<li><a href='https://peyanski.com/2022/01/'>January 2022</a>&nbsp;(4)</li>
977	<li><a href='https://peyanski.com/2021/12/'>December 2021</a>&nbsp;(5)</li>
978	<li><a href='https://peyanski.com/2021/11/'>November 2021</a>&nbsp;(5)</li>
979	<li><a href='https://peyanski.com/2021/10/'>October 2021</a>&nbsp;(4)</li>
980	<li><a href='https://peyanski.com/2021/09/'>September 2021</a>&nbsp;(6)</li>
981	<li><a href='https://peyanski.com/2021/08/'>August 2021</a>&nbsp;(4)</li>
982	<li><a href='https://peyanski.com/2021/07/'>July 2021</a>&nbsp;(4)</li>
983	<li><a href='https://peyanski.com/2021/06/'>June 2021</a>&nbsp;(5)</li>
984	<li><a href='https://peyanski.com/2021/05/'>May 2021</a>&nbsp;(4)</li>
985	<li><a href='https://peyanski.com/2021/04/'>April 2021</a>&nbsp;(4)</li>
986	<li><a href='https://peyanski.com/2021/03/'>March 2021</a>&nbsp;(5)</li>
987	<li><a href='https://peyanski.com/2021/02/'>February 2021</a>&nbsp;(4)</li>
988	<li><a href='https://peyanski.com/2021/01/'>January 2021</a>&nbsp;(4)</li>
989	<li><a href='https://peyanski.com/2020/12/'>December 2020</a>&nbsp;(6)</li>
990	<li><a href='https://peyanski.com/2020/11/'>November 2020</a>&nbsp;(4)</li>
991	<li><a href='https://peyanski.com/2020/10/'>October 2020</a>&nbsp;(4)</li>
992	<li><a href='https://peyanski.com/2020/09/'>September 2020</a>&nbsp;(5)</li>
993	<li><a href='https://peyanski.com/2020/08/'>August 2020</a>&nbsp;(4)</li>
994	<li><a href='https://peyanski.com/2020/07/'>July 2020</a>&nbsp;(5)</li>
995	<li><a href='https://peyanski.com/2020/06/'>June 2020</a>&nbsp;(4)</li>
996	<li><a href='https://peyanski.com/2020/05/'>May 2020</a>&nbsp;(4)</li>
997	<li><a href='https://peyanski.com/2020/04/'>April 2020</a>&nbsp;(5)</li>
998	<li><a href='https://peyanski.com/2020/03/'>March 2020</a>&nbsp;(4)</li>
999	<li><a href='https://peyanski.com/2020/02/'>February 2020</a>&nbsp;(4)</li>
1000	<li><a href='https://peyanski.com/2020/01/'>January 2020</a>&nbsp;(4)</li>
1001	<li><a href='https://peyanski.com/2019/12/'>December 2019</a>&nbsp;(6)</li>
1002	<li><a href='https://peyanski.com/2019/11/'>November 2019</a>&nbsp;(4)</li>
1003	<li><a href='https://peyanski.com/2019/10/'>October 2019</a>&nbsp;(5)</li>
1004	<li><a href='https://peyanski.com/2019/09/'>September 2019</a>&nbsp;(1)</li>
1005	<li><a href='https://peyanski.com/2019/08/'>August 2019</a>&nbsp;(2)</li>
1006			</ul>
1007
1008			</div><div id="categories-15" class="widget widget_categories"><p class="widget-title">Categories</p>
1009			<ul>
1010					<li class="cat-item cat-item-1659"><a href="https://peyanski.com/category/3d-printing/">3D Printing</a> (1)
1011</li>
1012	<li class="cat-item cat-item-2838"><a href="https://peyanski.com/category/smart-home/ai/">AI</a> (26)
1013</li>
1014	<li class="cat-item cat-item-1395"><a href="https://peyanski.com/category/crypto/">Crypto</a> (1)
1015</li>
1016	<li class="cat-item cat-item-39"><a href="https://peyanski.com/category/devops/">DevOps</a> (21)
1017</li>
1018	<li class="cat-item cat-item-693"><a href="https://peyanski.com/category/smart-home/home-assistant/">Home Assistant</a> (203)
1019</li>
1020	<li class="cat-item cat-item-732"><a href="https://peyanski.com/category/smart-home/networks/">Networks</a> (8)
1021</li>
1022	<li class="cat-item cat-item-692"><a href="https://peyanski.com/category/smart-home/node-red/">Node-RED</a> (14)
1023</li>
1024	<li class="cat-item cat-item-715"><a href="https://peyanski.com/category/smart-home/raspberry-pi/">Raspberry Pi</a> (23)
1025</li>
1026	<li class="cat-item cat-item-1104"><a href="https://peyanski.com/category/smart-home/security/">Security</a> (27)
1027</li>
1028	<li class="cat-item cat-item-54"><a href="https://peyanski.com/category/smart-home/">Smart Home</a> (167)
1029</li>
1030	<li class="cat-item cat-item-2183"><a href="https://peyanski.com/category/smart-rv-conversion/">Smart RV Conversion</a> (9)
1031</li>
1032	<li class="cat-item cat-item-2148"><a href="https://peyanski.com/category/smart-home/smart-sensors/">Smart Sensors</a> (27)
1033</li>
1034	<li class="cat-item cat-item-777"><a href="https://peyanski.com/category/smart-home/smartthings/">SmartThings</a> (1)
1035</li>
1036	<li class="cat-item cat-item-2851"><a href="https://peyanski.com/category/smart-home/switchbot/">SwitchBot</a> (21)
1037</li>
1038	<li class="cat-item cat-item-1"><a href="https://peyanski.com/category/uncategorized/">Uncategorized</a> (1)
1039</li>
1040	<li class="cat-item cat-item-949"><a href="https://peyanski.com/category/wordpress/">WordPress</a> (1)
1041</li>
1042	<li class="cat-item cat-item-1039"><a href="https://peyanski.com/category/youtube/">YouTube</a> (10)
1043</li>
1044			</ul>
1045
1046			</div>
1047			</aside>
1048</div>
1049		</div>
1050	</div>
1051
1052</main><!--/.neve-main-->
1053
1054<button tabindex="0" id="scroll-to-top" class="scroll-to-top scroll-to-top-right  scroll-sh
1054ow-mobile icon" aria-label="Scroll To Top"><svg class="scroll-to-top-icon" aria-hidden="true" role="img" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15"><rect width="15" height="15" fill="none"/><path fill="currentColor" d="M2,8.48l-.65-.65a.71.71,0,0,1,0-1L7,1.14a.72.72,0,0,1,1,0l5.69,5.7a.71.71,0,0,1,0,1L13,8.48a.71.71,0,0,1-1,0L8.67,4.94v8.42a.7.7,0,0,1-.7.7H7a.7.7,0,0,1-.7-.7V4.94L3,8.47a.7.7,0,0,1-1,0Z"/></svg></button><footer class="site-footer" id="site-footer"  >
1055	<div class="hfg_footer">
1056		<div class="footer--row footer-bottom layout-full-contained"
1057	id="cb-row--footer-desktop-bottom"
1058	data-row-id="bottom" data-show-on="desktop">
1059	<div
1060		class="footer--row-inner footer-bottom-inner footer-content-wrap">
1061		<div class="container">
1062			<div
1063				class="hfg-grid nv-footer-content hfg-grid-bottom row--wrapper row "
1064				data-section="hfg_footer_layout_bottom" >
1065				<div class="hfg-slot left"><div class="builder-item cr"><div class="item--inner"><div class="component-wrap"><div><p><a href="https://themeisle.com/themes/neve/" rel="nofollow">Neve</a> | Powered by <a href="https://wordpress.org" rel="nofollow">WordPress</a></p></div></div></div></div></div><div class="hfg-slot c-left"></div><div class="hfg-slot center"></div>							</div>
1066		</div>
1067	</div>
1068</div>
1069
1070	</div>
1071</footer>
1072
1073</div><!--/.wrapper-->
1074<script type="speculationrules">
1075{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/neve-child-master/*","/wp-content/themes/neve/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
1076</script>
1076
1077<!-- Ezoic - wp_bottom_of_page - bottom_of_page --><div id="ezoic-pub-ad-placeholder-140" data-inserter-version="-1" data-placement-location="bottom_of_page"></div>
1077<script data-ezoic="1">ezstandalone.cmd.push(function () { ezstandalone.showAds(140); });</script>
1077<!-- End Ezoic - wp_bottom_of_page - bottom_of_page -->	
1077<script>
1078		(function () {
1079			var c = document.body.className;
1080			c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
1081			document.body.className = c;
1082		})();
1083	</script>
1083
1084	
1084<script id="wpascript-js" src="https://peyanski.com/wp-content/plugins/honeypot/includes/js/wpa.js?ver=2.4.02"></script>
vendor: 1 bytes, line 1084
1084
1085<script id="wpascript-js-after">
1086wpa_field_info = JSON.parse(atob("eyJ3cGFfZmllbGRfbmFtZSI6ImdncmhkdjM2ODMiLCJ3cGFfZmllbGRfdmFsdWUiOjY2Nzc1Mywid3BhX2FkZF90ZXN0Ijoibm8ifQ=="));
1087//# sourceURL=wpascript-js-after
1088</script>
vendor: 1 bytes, line 1088
1088
1089<script id="gtm4wp-form-move-tracker-js-before">
1090var gtm4wp_form_move_config = {"filledOnly":false};
1091//# sourceURL=gtm4wp-form-move-tracker-js-before
1092</script>
vendor: 1 bytes, line 1092
1092
1093<script data-wp-strategy="defer" defer id="gtm4wp-form-move-tracker-js" src="https://peyanski.com/wp-content/plugins/duracelltomi-google-tag-manager/build/gtm4wp-form-move-tracker.js?ver=2.0.5"></script>
vendor: 1 bytes, line 1093
1093
1094<script data-wp-strategy="defer" defer id="gtm4wp-ecommerce-generic-js" src="https://peyanski.com/wp-content/plugins/duracelltomi-google-tag-manager/build/gtm4wp-ecommerce-generic.js?ver=2.0.5"></script>
vendor: 1 bytes, line 1094
1094
1095<script id="gtm4wp-woocommerce-js-before">
1096window.gtm4wp_store_api_cart_url = "https:\/\/peyanski.com\/wp-json\/wc\/store\/v1\/cart";
1097//# sourceURL=gtm4wp-woocommerce-js-before
1098</script>
vendor: 1 bytes, line 1098
1098
1099<script id="gtm4wp-woocommerce-js" src="https://peyanski.com/wp-content/plugins/duracelltomi-google-tag-manager/build/gtm4wp-woocommerce.js?ver=2.0.5"></script>
vendor: 1 bytes, line 1099
1099
1100<script id="neve-script-js-extra">
1101var NeveProperties = {"ajaxurl":"https://peyanski.com/wp-admin/admin-ajax.php","nonce":"6571a59e66","isRTL":"","isCustomize":""};
1102//# sourceURL=neve-script-js-extra
1103</script>
vendor: 1 bytes, line 1103
1103
1104<script id="neve-script-js" src="https://peyanski.com/wp-content/themes/neve/assets/js/build/modern/frontend.js?ver=4.2.11" async></script>
vendor: 1 bytes, line 1104
1104
1105<script id="neve-script-js-after">
1106	;(function () {
1107	var htmlEl = document.documentElement;
1108	var theme = htmlEl.getAttribute('data-neve-theme') || 'light';
1109	var variants = {"logo":{"light":{"src":"https:\/\/peyanski.com\/wp-content\/uploads\/2019\/11\/cropped-My_Way_Logo-KP-shadow_metal-K-150x150.webp","srcset":false,"sizes":"(max-width: 150px) 100vw, 150px"},"dark":{"src":"https:\/\/peyanski.com\/wp-content\/uploads\/2019\/11\/cropped-My_Way_Logo-KP-shadow_metal-K-150x150.webp","srcset":false,"sizes":"(max-width: 150px) 100vw, 150px"},"same":true}};
1110
1111	function setCurrentTheme( theme ) {
1112		var pictures = document.getElementsByClassName( 'neve-site-logo' );
1113		for(var i = 0; i<pictures.length; i++) {
1114			var picture = pictures.item(i);
1115			if( ! picture ) {
1116				continue;
1117			};
1118			var fileExt = picture.src.slice((Math.max(0, picture.src.lastIndexOf(".")) || Infinity) + 1);
1119			if ( fileExt === 'svg' ) {
1120				picture.removeAttribute('width');
1121				picture.removeAttribute('height');
1122				picture.style = 'width: var(--maxwidth)';
1123			}
1124			var compId = picture.getAttribute('data-variant');
1125			if ( compId && variants[compId] ) {
1126				var isConditional = variants[compId]['same'];
1127				if ( theme === 'light' || isConditional || variants[compId]['dark']['src'] === false ) {
1128					picture.src = variants[compId]['light']['src'];
1129					picture.srcset = variants[compId]['light']['srcset'] || '';
1130					picture.sizes = variants[compId]['light']['sizes'];
1131					continue;
1132				};
1133				picture.src = variants[compId]['dark']['src'];
1134				picture.srcset = variants[compId]['dark']['srcset'] || '';
1135				picture.sizes = variants[compId]['dark']['sizes'];
1136			};
1137		};
1138	};
1139
1140	var observer = new MutationObserver(function(mutations) {
1141		mutations.forEach(function(mutation) {
1142			if (mutation.type == 'attributes' && mutation.attributeName === 'data-neve-theme') {
1143				theme = htmlEl.getAttribute('data-neve-theme');
1144				setCurrentTheme(theme);
1145			};
1146		});
1147	});
1148
1149	observer.observe(htmlEl, {
1150		attributes: true,
1151		attributeFilter: ['data-neve-theme']
1152	});
1153	})();
1154function toggleAriaClick() { function toggleAriaExpanded(toggle = 'true') { document.querySelectorAll('button.navbar-toggle').forEach(function(el) { if ( el.classList.contains('caret-wrap') ) { return; } el.setAttribute('aria-expanded', 'true' === el.getAttribute('aria-expanded') ? 'false' : toggle); }); } toggleAriaExpanded(); if ( document.body.hasAttribute('data-ftrap-listener') ) { return; } document.body.setAttribute('data-ftrap-listener', 'true'); document.addEventListener('ftrap-end', function() { toggleAriaExpanded('false'); }); }
1155//# sourceURL=neve-script-js-after
1156</script>
vendor: 1 bytes, line 1156
1156
1157<script async data-wp-strategy="async" fetchpriority="low" id="comment-reply-js" src="https://peyanski.com/wp-includes/js/comment-reply.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 1157
1157
1158<script id="neve-scroll-to-top-js-extra">
1159var neveScrollOffset = {"offset":"0"};
1160//# sourceURL=neve-scroll-to-top-js-extra
1161</script>
vendor: 1 bytes, line 1161
1161
1162<script id="neve-scroll-to-top-js" src="https://peyanski.com/wp-content/themes/neve/assets/js/build/modern/scroll-to-top.js?ver=4.2.11" async></script>
vendor: 1 bytes, line 1162
1162
1163<script id="tfhb-admin-script-js-extra">
1164var tfhb_admin_notice = {"_nonce":"1f217d3819","ajax_url":"https://peyanski.com/wp-admin/admin-ajax.php"};
1165//# sourceURL=tfhb-admin-script-js-extra
1166</script>
vendor: 1 bytes, line 1166
1166
1167<script id="tfhb-admin-script-js" src="https://peyanski.com/wp-content/plugins/hydra-booking/assets/admin/js/main.js?ver=1791069046"></script>
vendor: 1 bytes, line 1167
1167
1168<script id="wp-hooks-js" src="https://peyanski.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 1168
1168
1169<script id="wp-i18n-js" src="https://peyanski.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 1169
1169
1170<script id="wp-i18n-js-after">
1171wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
1172//# sourceURL=wp-i18n-js-after
1173</script>
vendor: 1 bytes, line 1173
1173
1174<script id="tfhb-app-script-js-extra">
1175var tfhb_app_booking = {"ajax_url":"https://peyanski.com/wp-admin/admin-ajax.php","site_url":"https://peyanski.com","nonce":"7610be68a7","general_settings":{"time_zone":"Europe/Sofia","time_format":"12","week_start_from":"Sunday","date_format":"","country":"BG","currency":"EUR","after_booking_completed":"10","booking_status":"1","reschedule_status":"","allowed_reschedule_before_meeting_start":"10"},"i18n":{"January":"January","February":"February","March":"March","April":"April","May":"May","June":"June","July":"July","August":"August","September":"September","October":"October","November":"November","December":"December","Sunday":"Sunday","Monday":"Monday","Tuesday":"Tuesday","Wednesday":"Wednesday","Thursday":"Thursday","Friday":"Friday","Saturday":"Saturday","Sun":"Sun","Mon":"Mon","Tue":"Tue","Wed":"Wed","Thu":"Thu","Fri":"Fri","Sat":"Sat","Today":"Today","seats left":"seats left","Previous":"Previous","Next":"Next","Name":"Name","Email":"Email","AM":"AM","PM":"PM","Bookings":"Bookings","Add New":"Add New","View Details":"View Details","0":"0","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","Use Global Email Notification Settings":"Use Global Email Notification Settings","Sync with Global Settings":"Sync with Global Settings","Payment Method Required.":"Payment Method Required."}};
1176//# sourceURL=tfhb-app-script-js-extra
1177</script>
vendor: 1 bytes, line 1177
1177
1178<script id="tfhb-app-script-js" src="https://peyanski.com/wp-content/plugins/hydra-booking/assets/app/js/main.js?ver=1.2.6"></script>
vendor: 1 bytes, line 1178
1178
1179<script id="sourcebuster-js-js" src="https://peyanski.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=11.1.2"></script>
vendor: 1 bytes, line 1179
1179
1180<script id="wc-order-attribution-js-extra">
1181var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://peyanski.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}};
1182//# sourceURL=wc-order-attribution-js-extra
1183</script>
vendor: 1 bytes, line 1183
1183
1184<script id="wc-order-attribution-js" src="https://peyanski.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=11.1.2"></script>
vendor: 1 bytes, line 1184
1184
1185<script id="wp-emoji-settings" type="application/json">
1186{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://peyanski.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}}
1187</script>
vendor: 1 bytes, line 1187
1187
1188<script type="module">
1189/*! This file is auto-generated */
1190var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
1191//# sourceURL=https://peyanski.com/wp-includes/js/wp-emoji-loader.min.js
1192</script>
vendor: 1 bytes, line 1192
1192
1193<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"73ca99e1303b4ef99c45de307c594757","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 1193
1193
1194<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a44f9f3faaf02964',t:'MTc5MTA2OTA0NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
1194</body>
1195
1196</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.