<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zako Mako</title>
    <description>The latest articles on DEV Community by Zako Mako (@zako_mako_9a4826822204c78).</description>
    <link>https://dev.to/zako_mako_9a4826822204c78</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3039487%2Fe48009de-6d6d-4c92-a9e5-34a4f78af4b1.jpeg</url>
      <title>DEV Community: Zako Mako</title>
      <link>https://dev.to/zako_mako_9a4826822204c78</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zako_mako_9a4826822204c78"/>
    <language>en</language>
    <item>
      <title>A template for browsers</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Tue, 01 Jul 2025 17:07:00 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/a-template-for-browsers-51p9</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/a-template-for-browsers-51p9</guid>
      <description>&lt;p&gt;Here is a perfect chromium alternative that is made by AI and fixed by human. It is called Superbuild: &lt;a href="https://gemini.google.com/app/1cf5fd4864213187?canvas-id=c_1cf5fd4864213187_superbuild-browser-template&amp;amp;full-screen=true" rel="noopener noreferrer"&gt;https://gemini.google.com/app/1cf5fd4864213187?canvas-id=c_1cf5fd4864213187_superbuild-browser-template&amp;amp;full-screen=true&lt;/a&gt; here is the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Superbuild Browser&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        /* Basic styling for the browser layout */
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            display: flex;
            flex-direction: column;
            height: 100vh;
            overflow: hidden;
            background-color: #f0f2f5; /* Light grey background */
        }

        .browser-header {
            display: flex;
            align-items: center;
            padding: 10px;
            background-color: #ffffff; /* White header background */
            border-bottom: 1px solid #e0e0e0;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }

        .browser-header button {
            padding: 8px 12px;
            margin-right: 5px;
            border: 1px solid #ccc;
            border-radius: 4px;
            background-color: #f0f0f0;
            cursor: pointer;
            font-size: 14px;
        }

        .browser-header button:hover {
            background-color: #e0e0e0;
        }

        .url-bar {
            flex-grow: 1;
            margin: 0 10px;
            padding: 8px 10px;
            border: 1px solid #ccc;
            border-radius: 4px;
            font-size: 14px;
        }

        .tabs-container {
            display: flex;
            background-color: #e8e8e8; /* Light grey for tabs */
            padding-left: 10px;
            border-bottom: 1px solid #d0d0d0;
        }

        .tab {
            padding: 8px 15px;
            border-top-left-radius: 6px;
            border-top-right-radius: 6px;
            background-color: #f0f0f0;
            margin-right: 2px;
            cursor: pointer;
            border: 1px solid #d0d0d0;
            border-bottom: none;
            font-size: 14px;
        }

        .tab.active {
            background-color: #ffffff;
            border-top: 2px solid #007bff; /* Highlight active tab */
            border-left: 1px solid #d0d0d0;
            border-right: 1px solid #d0d0d0;
            border-bottom: none;
        }

        .tab:hover:not(.active) {
            background-color: #e0e0e0;
        }

        .add-tab-button {
            padding: 8px 12px;
            background-color: #f0f0f0;
            border: 1px solid #d0d0d0;
            border-top-left-radius: 6px;
            border-top-right-radius: 6px;
            cursor: pointer;
            font-size: 14px;
            margin-left: auto; /* Push button to the right */
        }

        .add-tab-button:hover {
            background-color: #e0e0e0;
        }


        .browser-content {
            flex-grow: 1;
            border: none; /* iframe will handle its own borders if any */
            width: 100%;
            height: 100%;
            background-color: #ffffff;
        }

        /* Styling for the iframe itself */
        iframe {
            width: 100%;
            height: 100%;
            border: none;
        }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class="browser-header"&amp;gt;
        &amp;lt;button id="backButton"&amp;gt;Back&amp;lt;/button&amp;gt;
        &amp;lt;button id="forwardButton"&amp;gt;Forward&amp;lt;/button&amp;gt;
        &amp;lt;button id="reloadButton"&amp;gt;Reload&amp;lt;/button&amp;gt;
        &amp;lt;input type="text" class="url-bar" id="urlInput" value="https://www.google.com"&amp;gt;
        &amp;lt;button id="goButton"&amp;gt;Go&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="tabs-container" id="tabsContainer"&amp;gt;
        &amp;lt;div class="tab active" data-tab-id="tab-1"&amp;gt;Tab 1&amp;lt;/div&amp;gt;
        &amp;lt;button class="add-tab-button" id="addTabButton"&amp;gt;+&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="browser-content" id="browserContent"&amp;gt;
        &amp;lt;iframe id="browserFrame" src="https://www.google.com"&amp;gt;&amp;lt;/iframe&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;script&amp;gt;
        const urlInput = document.getElementById('urlInput');
        const goButton = document.getElementById('goButton');
        const browserFrame = document.getElementById('browserFrame');
        const backButton = document.getElementById('backButton');
        const forwardButton = document.getElementById('forwardButton');
        const reloadButton = document.getElementById('reloadButton');
        const tabsContainer = document.getElementById('tabsContainer');
        const addTabButton = document.getElementById('addTabButton');

        let tabCounter = 1;
        let activeTabId = 'tab-1'; // Keep track of the active tab

        // Function to load a URL into the iframe
        function loadUrl(url) {
            if (url) {
                // Ensure the URL has a protocol, otherwise, default to HTTPS
                if (!url.startsWith('http://') &amp;amp;&amp;amp; !url.startsWith('https://')) {
                    url = 'https://' + url;
                }
                browserFrame.src = url;
                urlInput.value = url; // Update the URL bar
            }
        }

        // Event listener for the Go button
        goButton.addEventListener('click', () =&amp;gt; {
            loadUrl(urlInput.value);
        });

        // Event listener for Enter key in the URL bar
        urlInput.addEventListener('keypress', (e) =&amp;gt; {
            if (e.key === 'Enter') {
                loadUrl(urlInput.value);
            }
        });

        // Navigation buttons
        backButton.addEventListener('click', () =&amp;gt; {
            browserFrame.contentWindow.history.back();
        });

        forwardButton.addEventListener('click', () =&amp;gt; {
            browserFrame.contentWindow.history.forward();
        });

        reloadButton.addEventListener('click', () =&amp;gt; {
            browserFrame.contentWindow.location.reload();
        });

        // Tab functionality (basic)
        addTabButton.addEventListener('click', () =&amp;gt; {
            tabCounter++;
            const newTabId = `tab-${tabCounter}`;
            const newTab = document.createElement('div');
            newTab.classList.add('tab');
            newTab.setAttribute('data-tab-id', newTabId);
            newTab.textContent = `Tab ${tabCounter}`;

            // Deactivate current active tab
            document.querySelector('.tab.active').classList.remove('active');
            newTab.classList.add('active');
            activeTabId = newTabId;

            // Insert new tab before the add button
            tabsContainer.insertBefore(newTab, addTabButton);

            // For now, new tabs will load the default Google page
            loadUrl('https://www.google.com');

            // Add click listener for new tab
            newTab.addEventListener('click', () =&amp;gt; {
                // In a real browser, clicking a tab would switch to that tab's content
                // For this template, we'll just activate the clicked tab visually
                document.querySelector('.tab.active').classList.remove('active');
                newTab.classList.add('active');
                activeTabId = newTabId;
                // You would typically restore the state (URL) associated with this tab here
            });
        });

        // Initial load for the first tab
        loadUrl(urlInput.value);
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Please use it. Thank you!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
      <category>http</category>
    </item>
    <item>
      <title>Zewpol cloud: your cloud server</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Tue, 01 Jul 2025 14:58:12 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/zewpol-cloud-your-cloud-server-2ioj</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/zewpol-cloud-your-cloud-server-2ioj</guid>
      <description>&lt;p&gt;The Zewpol cloud server is the best cloud server on playcode. Try it now! (It’s connected to a local account not a Zewpol account!) &lt;a href="https://zewpolcloud.playcode.io" rel="noopener noreferrer"&gt;https://zewpolcloud.playcode.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>html</category>
      <category>zakomakoproducts</category>
    </item>
    <item>
      <title>AimOS: enjoy ZewpolOS on mobile</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Tue, 01 Jul 2025 14:36:37 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/aimos-enjoy-zewpolos-on-mobile-2d4n</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/aimos-enjoy-zewpolos-on-mobile-2d4n</guid>
      <description>&lt;p&gt;Our new OS aimOS brings the joy of ZewpolOS at your mobile. We are still updating ZewpolOS to the max. Here is the link: &lt;a href="https://aimos.playcode.io" rel="noopener noreferrer"&gt;https://aimos.playcode.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>html</category>
      <category>zakomakoproducts</category>
    </item>
    <item>
      <title>New game!</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Mon, 30 Jun 2025 22:56:24 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/new-game-449b</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/new-game-449b</guid>
      <description>&lt;p&gt;My new game is awesome! you get to make a civilization in space! here is the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Space Boy - Build a Space Civilization&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        body {
            margin: 0;
            padding: 0;
            background-color: #0f0f1f;
            color: #fff;
            font-family: 'Courier New', monospace;
            overflow: hidden;
            touch-action: none;
        }

        #gameContainer {
            position: relative;
            width: 800px;
            height: 600px;
            margin: 20px auto;
            border: 4px solid #4466ff;
            box-shadow: 0 0 20px #4466ff;
            image-rendering: pixelated;
        }

        #gameCanvas {
            background-color: #000022;
        }

        #uiPanel {
            position: absolute;
            bottom: 0;
            left: 0;
            width: 100%;
            height: 120px;
            background-color: rgba(0, 0, 40, 0.8);
            border-top: 2px solid #4466ff;
            display: flex;
            flex-direction: column;
            padding: 10px;
            box-sizing: border-box;
        }

        #resources {
            display: flex;
            justify-content: space-around;
            margin-bottom: 10px;
        }

        .resource {
            display: flex;
            align-items: center;
        }

        .resource-icon {
            width: 16px;
            height: 16px;
            margin-right: 5px;
        }

        #buildMenu {
            display: flex;
            justify-content: space-around;
        }

        .buildButton {
            width: 64px;
            height: 64px;
            background-color: #112244;
            border: 2px solid #4466ff;
            color: white;
            cursor: pointer;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            font-size: 10px;
            image-rendering: pixelated;
        }

        .buildButton:hover {
            background-color: #224466;
        }

        #titleScreen {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 40, 0.9);
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            z-index: 100;
        }

        #title {
            font-size: 48px;
            color: #4466ff;
            margin-bottom: 30px;
            text-shadow: 0 0 10px #4466ff;
        }

        #startButton {
            padding: 10px 30px;
            background-color: #112244;
            border: 2px solid #4466ff;
            color: white;
            font-size: 20px;
            cursor: pointer;
        }

        #startButton:hover {
            background-color: #224466;
        }

        #message {
            position: absolute;
            top: 20px;
            left: 50%;
            transform: translateX(-50%);
            background-color: rgba(0, 0, 40, 0.8);
            border: 2px solid #4466ff;
            padding: 10px;
            display: none;
            z-index: 50;
        }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div id="gameContainer"&amp;gt;
        &amp;lt;canvas id="gameCanvas" width="800" height="600"&amp;gt;&amp;lt;/canvas&amp;gt;

        &amp;lt;div id="uiPanel"&amp;gt;
            &amp;lt;div id="resources"&amp;gt;
                &amp;lt;div class="resource"&amp;gt;
                    &amp;lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4y2NgGAXDFmzatMmKAQ38v3//PgMqRgWoYqgYFQwqC1A9gOoRRjQxRrQwYEQTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTYwQAjXQYw4QhXAAAAABJRU5ErkJggg==" class="resource-icon"&amp;gt;
                    &amp;lt;span id="metalCount"&amp;gt;100&amp;lt;/span&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="resource"&amp;gt;
                    &amp;lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAdklEQVQ4y2NgGAXDFmzatMmKAQ38v3//PgMqRgWoYqgYFQwqC1A9gOoRRjQxRrQwYEQTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTYwQANVYYw4QhXAAAAABJRU5ErkJggg==" class="resource-icon"&amp;gt;
                    &amp;lt;span id="energyCount"&amp;gt;50&amp;lt;/span&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="resource"&amp;gt;
                    &amp;lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4y2NgGAXDFmzatMmKAQ38v3//PgMqRgWoYqgYFQwqC1A9gOoRRjQxRrQwYEQTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTYwQAjXQYw4QhXAAAAABJRU5ErkJggg==" class="resource-icon"&amp;gt;
                    &amp;lt;span id="foodCount"&amp;gt;30&amp;lt;/span&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="resource"&amp;gt;
                    &amp;lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4y2NgGAXDFmzatMmKAQ38v3//PgMqRgWoYqgYFQwqC1A9gOoRRjQxRrQwYEQTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTYwQAjXQYw4QhXAAAAABJRU5ErkJggg==" class="resource-icon"&amp;gt;
                    &amp;lt;span id="populationCount"&amp;gt;5&amp;lt;/span&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;

            &amp;lt;div id="buildMenu"&amp;gt;
                &amp;lt;div class="buildButton" data-building="habitat"&amp;gt;
                    &amp;lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4y2NgGAXDFmzatMmKAQ38v3//PgMqRgWoYqgYFQwqC1A9gOoRRjQxRrQwYEQTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTYwQAjXQYw4QhXAAAAABJRU5ErkJggg==" width="32" height="32"&amp;gt;
                    Habitat
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="buildButton" data-building="solar"&amp;gt;
                    &amp;lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4y2NgGAXDFmzatMmKAQ38v3//PgMqRgWoYqgYFQwqC1A9gOoRRjQxRrQwYEQTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTYwQAjXQYw4QhXAAAAABJRU5ErkJggg==" width="32" height="32"&amp;gt;
                    Solar Panel
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="buildButton" data-building="mine"&amp;gt;
                    &amp;lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4y2NgGAXDFmzatMmKAQ38v3//PgMqRgWoYqgYFQwqC1A9gOoRRjQxRrQwYEQTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTYwQAjXQYw4QhXAAAAABJRU5ErkJggg==" width="32" height="32"&amp;gt;
                    Mine
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="buildButton" data-building="farm"&amp;gt;
                    &amp;lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4y2NgGAXDFmzatMmKAQ38v3//PgMqRgWoYqgYFQwqC1A9gOoRRjQxRrQwYEQTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTY0QTYwQAjXQYw4QhXAAAAABJRU5ErkJggg==" width="32" height="32"&amp;gt;
                    Farm
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;div id="titleScreen"&amp;gt;
            &amp;lt;h1 id="title"&amp;gt;SPACE BOY&amp;lt;/h1&amp;gt;
            &amp;lt;button id="startButton"&amp;gt;START GAME&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;div id="message"&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;script&amp;gt;
        // Game state
        const gameState = {
            resources: {
                metal: 100,
                energy: 50,
                food: 30,
                population: 5,
                maxPopulation: 10
            },
            buildings: [],
            selectedBuilding: null,
            gameStarted: false
        };

        // Building definitions
        const buildingTypes = {
            habitat: {
                name: "Habitat",
                cost: { metal: 50, energy: 20 },
                production: { population: 2 },
                color: "#4466ff",
                width: 40,
                height: 40
            },
            solar: {
                name: "Solar Panel",
                cost: { metal: 30 },
                production: { energy: 5 },
                color: "#ffff00",
                width: 30,
                height: 30
            },
            mine: {
                name: "Mine",
                cost: { energy: 10 },
                production: { metal: 3 },
                color: "#aaaaaa",
                width: 35,
                height: 35
            },
            farm: {
                name: "Farm",
                cost: { metal: 20, energy: 5 },
                production: { food: 4 },
                color: "#44ff44",
                width: 40,
                height: 30
            }
        };

        // DOM elements
        const canvas = document.getElementById('gameCanvas');
        const ctx = canvas.getContext('2d');
        const titleScreen = document.getElementById('titleScreen');
        const startButton = document.getElementById('startButton');
        const messageDiv = document.getElementById('message');
        const buildButtons = document.querySelectorAll('.buildButton');
        const resourceCounts = {
            metal: document.getElementById('metalCount'),
            energy: document.getElementById('energyCount'),
            food: document.getElementById('foodCount'),
            population: document.getElementById('populationCount')
        };

        // Event listeners
        startButton.addEventListener('click', startGame);
        canvas.addEventListener('click', handleCanvasClick);
        buildButtons.forEach(button =&amp;gt; {
            button.addEventListener('click', () =&amp;gt; {
                const buildingType = button.getAttribute('data-building');
                selectBuilding(buildingType);
            });
        });

        // Game functions
        function startGame() {
            titleScreen.style.display = 'none';
            gameState.gameStarted = true;
            updateResourceDisplay();

            // Start game loop
            setInterval(gameLoop, 1000);
            requestAnimationFrame(render);
        }

        function gameLoop() {
            // Update resources from buildings
            gameState.buildings.forEach(building =&amp;gt; {
                const type = buildingTypes[building.type];
                Object.keys(type.production).forEach(resource =&amp;gt; {
                    gameState.resources[resource] += type.production[resource];

                    // Handle population cap
                    if (resource === 'population') {
                        gameState.resources.population = Math.min(
                            gameState.resources.population,
                            gameState.resources.maxPopulation
                        );
                    }
                });
            });

            updateResourceDisplay();
        }

        function updateResourceDisplay() {
            Object.keys(resourceCounts).forEach(resource =&amp;gt; {
                resourceCounts[resource].textContent = gameState.resources[resource];
            });
        }

        function selectBuilding(buildingType) {
            gameState.selectedBuilding = buildingType;
            showMessage(`Selected: ${buildingTypes[buildingType].name}`);
        }

        function handleCanvasClick(e) {
            if (!gameState.gameStarted || !gameState.selectedBuilding) return;

            const rect = canvas.getBoundingClientRect();
            const x = e.clientX - rect.left;
            const y = e.clientY - rect.top;

            // Check if we can afford the building
            const buildingType = buildingTypes[gameState.selectedBuilding];
            let canAfford = true;

            Object.keys(buildingType.cost).forEach(resource =&amp;gt; {
                if (gameState.resources[resource] &amp;lt; buildingType.cost[resource]) {
                    canAfford = false;
                }
            });

            if (!canAfford) {
                showMessage("Not enough resources!");
                return;
            }

            // Pay for the building
            Object.keys(buildingType.cost).forEach(resource =&amp;gt; {
                gameState.resources[resource] -= buildingType.cost[resource];
            });

            // Add the building
            gameState.buildings.push({
                type: gameState.selectedBuilding,
                x: x - buildingType.width/2,
                y: y - buildingType.height/2
            });

            updateResourceDisplay();
            showMessage(`${buildingType.name} built!`);
        }

        function showMessage(text) {
            messageDiv.textContent = text;
            messageDiv.style.display = 'block';
            setTimeout(() =&amp;gt; {
                messageDiv.style.display = 'none';
            }, 2000);
        }

        function render() {
            // Clear canvas
            ctx.fillStyle = '#000022';
            ctx.fillRect(0, 0, canvas.width, canvas.height);

            // Draw stars
            for (let i = 0; i &amp;lt; 100; i++) {
                ctx.fillStyle = '#ffffff';
                ctx.fillRect(
                    Math.random() * canvas.width,
                    Math.random() * canvas.height,
                    1, 1
                );
            }

            // Draw buildings
            gameState.buildings.forEach(building =&amp;gt; {
                const type = buildingTypes[building.type];
                ctx.fillStyle = type.color;
                ctx.fillRect(building.x, building.y, type.width, type.height);

                // Draw building details
                ctx.fillStyle = '#000000';
                ctx.fillRect(building.x + 5, building.y + 5, type.width - 10, 3);
                ctx.fillRect(building.x + 5, building.y + 10, type.width - 10, 3);
            });

            // Draw selected building preview
            if (gameState.selectedBuilding) {
                const type = buildingTypes[gameState.selectedBuilding];
                ctx.strokeStyle = '#ffffff';
                ctx.setLineDash([5, 5]);
                ctx.strokeRect(
                    gameState.mouseX - type.width/2,
                    gameState.mouseY - type.height/2,
                    type.width,
                    type.height
                );
                ctx.setLineDash([]);
            }

            requestAnimationFrame(render);
        }

        // Track mouse position for building preview
        canvas.addEventListener('mousemove', (e) =&amp;gt; {
            const rect = canvas.getBoundingClientRect();
            gameState.mouseX = e.clientX - rect.left;
            gameState.mouseY = e.clientY - rect.top;
        });

        // Initialize
        updateResourceDisplay();
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;here is the link: &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://spacebuild.playcode.io" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;spacebuild.playcode.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;thank you!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>html</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Faceonescript with html tutorial</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Sun, 29 Jun 2025 12:16:01 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/faceonescript-with-html-tutorial-ecp</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/faceonescript-with-html-tutorial-ecp</guid>
      <description>&lt;p&gt;Faceonescript is much better when used with html. Here is some code for a html file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
  &amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
 &amp;lt;body&amp;gt;
&amp;lt;button&amp;gt; follow Zako mako &amp;lt;button&amp;gt;
 &amp;lt;body&amp;gt;
   &amp;lt;head&amp;gt;
     &amp;lt;/script&amp;gt; src= ‘function.fnes’&amp;lt;/script&amp;gt;
     &amp;lt;html&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;code&gt;&lt;br&gt;
Now add faceonescript in a new&lt;/code&gt;.fnes` or even&lt;br&gt;&lt;br&gt;
‘.txt’ file. &lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
//include funtion.n&lt;br&gt;
// line.5= ((DEBUG )).5&lt;br&gt;
// src(‘index.html’).4&lt;br&gt;
// [line.4] open(&lt;a href="https://dev.to"&gt;https://dev.to&lt;/a&gt;)&lt;br&gt;
// return.5 if [false]&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;br&gt;
This will add a function to your button. Use this instead of JS or TS.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>html</category>
      <category>faceonescript</category>
    </item>
    <item>
      <title>ZewpolOS 2.2 no Zewpol search</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Sun, 29 Jun 2025 11:55:53 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/zewpolos-22-no-zewpol-search-60m</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/zewpolos-22-no-zewpol-search-60m</guid>
      <description>&lt;p&gt;We are sorry, but there is no longer a intergrated search in ZewpolOS. You can ask to edit the files in the comments so I can give you access.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>apologies</category>
    </item>
    <item>
      <title>New dev discord</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Sat, 28 Jun 2025 14:44:08 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/new-dev-discord-4afo</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/new-dev-discord-4afo</guid>
      <description>&lt;p&gt;We have a discord! You can chat about new products of the company Zebra inc. Here it is: &lt;br&gt;
&lt;a href="https://discord.gg/s8qDWjZFSs" rel="noopener noreferrer"&gt;https://discord.gg/s8qDWjZFSs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>discuss</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Zewai: your better ai</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Sat, 28 Jun 2025 14:40:41 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/zewai-your-better-ai-230g</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/zewai-your-better-ai-230g</guid>
      <description>&lt;p&gt;ZewAI is better ai for you it is just good&lt;br&gt;
To get the link get it here: &lt;a href="https://zewai.playcode.io/" rel="noopener noreferrer"&gt;https://zewai.playcode.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>ZewpolOS 2.2: your windows 11 alternative</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Sat, 28 Jun 2025 14:30:18 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/zewpolos-22-your-windows-11-alternative-3eo4</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/zewpolos-22-your-windows-11-alternative-3eo4</guid>
      <description>&lt;p&gt;Windows 10 support ends soon. These are your options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows 11🤮&lt;/li&gt;
&lt;li&gt;ZewpolOS 😁&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Oh and ZorinOS, too laggy and pricy.&lt;br&gt;
So switch to ZewpolOS, your perfect alternative.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>security</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>ZewpolOS 2.2</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Sat, 28 Jun 2025 13:41:05 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/zewpolos-22-1i6k</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/zewpolos-22-1i6k</guid>
      <description>&lt;p&gt;ZewpolOS 2.2 is going to be a MASSIVE UPGRADE. We are introducing things like ZewpolOS apps&lt;br&gt;
And ZewpolOS chat. All new features will come in July 2025.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>discuss</category>
      <category>opensource</category>
    </item>
    <item>
      <title>New ZewpolOS mod</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Fri, 27 Jun 2025 23:14:33 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/new-zewpolos-mod-ei8</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/new-zewpolos-mod-ei8</guid>
      <description>&lt;p&gt;Here is DOSFY: the first ever ZewpolOS skin. The link: &lt;a href="https://dosfy.playcode.io" rel="noopener noreferrer"&gt;https://dosfy.playcode.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>devops</category>
    </item>
    <item>
      <title>Gaming on switch 2 🤮🤢🤢🤮🤮🤮🤮🤮🤑🤑🤑🤑🤑🤑</title>
      <dc:creator>Zako Mako</dc:creator>
      <pubDate>Fri, 27 Jun 2025 21:10:48 +0000</pubDate>
      <link>https://dev.to/zako_mako_9a4826822204c78/gaming-on-switch-2-h6j</link>
      <guid>https://dev.to/zako_mako_9a4826822204c78/gaming-on-switch-2-h6j</guid>
      <description>&lt;p&gt;Nintendo switch 2 is overpriced and bad. Solution? Game on switch oled.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>nintendo</category>
      <category>nintendoswitch</category>
      <category>bad</category>
    </item>
  </channel>
</rss>
