<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Waren Gonzaga | Tech Blog for Engineers]]></title><description><![CDATA[Personal tech blog focusing on software engineering, open-source development, technopreneurship, privacy, and cybersecurity.]]></description><link>https://blog.warengonzaga.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1710602383538/fFE5b5Vkf.png</url><title>Waren Gonzaga | Tech Blog for Engineers</title><link>https://blog.warengonzaga.com</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 15:53:51 GMT</lastBuildDate><atom:link href="https://blog.warengonzaga.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to Set Up thirdweb Engine Quickly On Your Local Machine]]></title><description><![CDATA[Previously, we learned how to deploy the thirdweb Engine in less than 3 minutes on the Railway platform using the template we created for the community.
In this blog, you'll learn how to deploy it on your local machine so you can explore and experime...]]></description><link>https://blog.warengonzaga.com/how-to-set-up-thirdweb-engine-quickly-on-your-local-machine</link><guid isPermaLink="true">https://blog.warengonzaga.com/how-to-set-up-thirdweb-engine-quickly-on-your-local-machine</guid><category><![CDATA[Web3]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[REST API]]></category><category><![CDATA[APIs]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Docker]]></category><category><![CDATA[thirdweb]]></category><category><![CDATA[localhost]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Fri, 19 Apr 2024 17:34:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713547858233/0ce4cce2-3f6e-444a-9252-aec8ac2e904c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Previously, we learned <a target="_blank" href="https://blog.warengonzaga.com/how-to-deploy-a-self-hosted-thirdweb-engine-on-railway-in-less-than-3-minutes">how to deploy the thirdweb Engine in less than 3 minutes on the Railway</a> platform using the template we created for the community.</p>
<p>In this blog, you'll learn how to deploy it on your local machine so you can explore and experiment with the <a target="_blank" href="https://thirdweb.com/engine">thirdweb Engine</a> for your next or current Web3 project.</p>
<h2 id="heading-requirements">Requirements</h2>
<ul>
<li><p><a target="_blank" href="https://docs.docker.com/get-docker/">Docker</a></p>
</li>
<li><p><a target="_blank" href="https://git-scm.com/downloads">Git</a></p>
</li>
<li><p><a target="_blank" href="https://nodejs.org/en/download/">NodeJS</a></p>
</li>
<li><p>Any code or text editor. (<a target="_blank" href="https://code.visualstudio.com/">VS Code</a>, <a target="_blank" href="https://vim.org">Vim</a>, or <a target="_blank" href="https://nano-editor.org">Nano</a>)</p>
</li>
<li><p><a target="_blank" href="https://portal.thirdweb.com/account/api-keys#:~:text=Secret%20Key%2D%20Used%20to%20access%20the%20enabled%20thirdweb%20infrastructure%20services%20by%20identifying%20and%20authenticating%20your%20application%20from%20a%20backend.%20Sharing%20or%20exposing%20this%20key%20to%20others%20is%20unsafe%20because%20it%20grants%20access%20to%20all%20services."><strong>thirdweb API secret key</strong>.</a></p>
</li>
<li><p><a target="_blank" href="https://portal.thirdweb.com/account/api-keys#:~:text=Secret%20Key%2D%20Used%20to%20access%20the%20enabled%20thirdweb%20infrastructure%20services%20by%20identifying%20and%20authenticating%20your%20application%20from%20a%20backend.%20Sharing%20or%20exposing%20this%20key%20to%20others%20is%20unsafe%20because%20it%20grants%20access%20to%20all%20services."><strong>Wallet addr</strong></a><a target="_blank" href="https://portal.thirdweb.com/glossary/wallet"><strong>ess</strong>.</a> (any EVM-compatible wallet address)</p>
</li>
</ul>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Are you looking for a managed thirdweb Engine? <a target="_blank" href="https://thirdweb.com/dashboard/engine?requestCloudHosted">Try Cloud-Hosted</a>!</div>
</div>

<h2 id="heading-steps">Steps</h2>
<ol>
<li><p>Open your terminal on your local machine and execute the command below. It will clone my scripts into a new folder called <code>engine</code>.</p>
<pre><code class="lang-bash"> git <span class="hljs-built_in">clone</span> https://github.com/warengonzaga/thirdweb-engine-deploy-locally engine
</code></pre>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713534926781/faf1e53f-6866-424e-9a40-1fa90c194f86.png" alt="A screenshot of a command line interface where a user clones a GitHub repository named &quot;thirdweb-engine-deploy-locally&quot; into a local directory, lists files in a directory, and navigates between directories." class="image--center mx-auto" /></p>
</li>
<li><p>Navigate to the <code>engine</code> folder and open the file named <code>.env.example</code>. Fill out the required information. I prefer to use the Nano text editor in this guide because it is straightforward.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713536129747/7ee60a3a-39d6-4477-8741-039332f200ea.png" alt="A screenshot of a computer terminal showing the GNU nano text editor open with a file named &quot;.env.example&quot; containing environment variable settings for thirdweb engine." class="image--center mx-auto" /></p>
<p> <code>ADMIN_WALLET_ADDRESS</code> → The wallet address that can manage your engine.<br /> <code>THIRDWEB_API_SECRET_KEY</code> → The thirdweb API secret key; <a target="_blank" href="https://thirdweb.com/dashboard/settings/api-keys">get yours here</a>.<br /> <code>ENCRYPTION_PASSWORD</code> → The string to encrypt sensitive data stored in DB.</p>
 <div data-node-type="callout">
 <div data-node-type="callout-emoji">💡</div>
 <div data-node-type="callout-text">To save your changes in the Nano text editor, press <code>CTRL+X</code>. It will then ask you to confirm the save. Simply press <code>Y</code> and then hit <code>ENTER</code> to complete the process.</div>
 </div>
</li>
<li><p>After that, start Docker on your local machine and ensure it is running.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713540842021/05db84e4-f35f-4cb3-b0a4-51d513dad942.png" alt="Screenshot of Docker Desktop interface showing an empty state for running containers with informational tooltips about containers and how to run them." class="image--center mx-auto" /></p>
</li>
<li><p>Now, return to your terminal and run <code>npm run start</code>, and it will handle everything for you. Watch your terminal pull the thirdweb engine docker image and set up your container. If you see the message below, your engine has been successfully deployed and is ready to use.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713541903702/911d1a4f-b176-4518-b1e7-a5aa0f87701f.png" alt="A screenshot of a computer terminal displaying logs and warnings from a Node.js application, including messages about starting a PostgreSQL connection and listening on port 3005." class="image--center mx-auto" /></p>
</li>
<li><p>Lastly, visit your endpoint URL at <code>http://localhost:3005</code> , and you should see something like the example below. That's it! ✨</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713543528514/5a751183-0030-4715-b3f0-662ae28efd5f.png" alt="A screenshot of a computer screen displaying a JSON response message that reads &quot;Engine is set up successfully. Manage your Engine from https://thirdweb.com/dashboard/engine.&quot; in a code editor with a dark background." class="image--center mx-auto" /></p>
</li>
</ol>
<p>Now that you have the endpoint URL, let's import your instance to the thirdweb Engine dashboard. <a target="_blank" href="https://blog.warengonzaga.com/how-to-deploy-a-self-hosted-thirdweb-engine-on-railway-in-less-than-3-minutes#heading-manage-ending-from-the-dashboard">Follow the steps here</a>.</p>
<h2 id="heading-try-engine-examples">Try Engine Examples</h2>
<p>To explore and experience the capabilities of thirdweb Engine, try some of our <a target="_blank" href="https://thirdweb.com/templates">templates</a>. Here are some of the best templates we have today for building with thirdweb Engine.</p>
<h3 id="heading-mintcasterhttpsthirdwebcomtemplatemintcaster"><a target="_blank" href="https://thirdweb.com/template/mintcaster">Mintcaster</a></h3>
<p><img src="https://thirdweb.com/assets/templates/mintcaster.png" alt="Screenshot of Mintcaster template" /></p>
<p>Bootstrap your own client on Farcaster, complete with a feed, cast functionality, and Sign-in with Farcaster auth, and add NFT minting functionality using the thirdweb Engine.</p>
<h3 id="heading-phygital-experiencehttpsthirdwebcomtemplatephygital-experience"><a target="_blank" href="https://thirdweb.com/template/phygital-experience">Phygital Experience</a></h3>
<p><img src="https://thirdweb.com/assets/templates/phygital-experience.png" alt="Screenshot of Phygital Experience template" /></p>
<p>Users can scan a QR code on a physical product to mint an NFT using the thirdweb engine. Perfect for buying and selling digital items physically.</p>
<h3 id="heading-speed-racerhttpsthirdwebcomtemplateunrealdemo"><a target="_blank" href="https://thirdweb.com/template/unreal_demo">Speed Racer</a></h3>
<p><img src="https://thirdweb.com/assets/templates/speed-racer.png" alt="Screenshot of Speed Racers template" /></p>
<p>Try this template with the thirdweb Engine and Unreal game engine to build your own racing game powered by the blockchain.</p>
<p>That's all! Enjoy, and keep building! 🫶</p>
]]></content:encoded></item><item><title><![CDATA[How to Deploy a Self-hosted thirdweb Engine On Railway In Less Than 3 Minutes]]></title><description><![CDATA[Are you looking for a production-grade HTTP server to interact with any smart contract on any EVM? That's the thirdweb Engine!
Engine is a backend HTTP server that reads, writes, and deploys contracts on a large scale. It allows you to create and int...]]></description><link>https://blog.warengonzaga.com/how-to-deploy-a-self-hosted-thirdweb-engine-on-railway-in-less-than-3-minutes</link><guid isPermaLink="true">https://blog.warengonzaga.com/how-to-deploy-a-self-hosted-thirdweb-engine-on-railway-in-less-than-3-minutes</guid><category><![CDATA[Web3]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[REST API]]></category><category><![CDATA[APIs]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[thirdweb]]></category><category><![CDATA[railway]]></category><category><![CDATA[railway-app]]></category><category><![CDATA[self-hosted]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Wed, 17 Apr 2024 10:55:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713548146982/4c6d458c-641e-45a0-9f5f-e18498e645e1.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you looking for a production-grade HTTP server to interact with any smart contract on any EVM? That's the thirdweb Engine!</p>
<p><a target="_blank" href="https://thirdweb.com/engine/">Engine</a> is a backend HTTP server that reads, writes, and deploys contracts on a large scale. It allows you to create and interact with backend developer wallets, supporting high throughput with automatic nonce and gas management. Think of this as your rail transport vehicle or train <strong>Engine</strong> for your <strong>Railway</strong>. 🚂</p>
<p><a target="_blank" href="https://railway.app/">Railway</a> is a deployment platform created to simplify the software development lifecycle. It starts with instant deployments and easy scaling and includes CI/CD integrations and built-in observability. Let's say this is the <strong>Railway</strong> track for your train <strong>Engine</strong>. 🛤️</p>
<p>In this tutorial blog, you'll learn how to deploy your self-hosted thirdweb Engine on the Railway platform in less than 3 minutes using our <a target="_blank" href="https://railway.app/template/fcEVay">community-contributed Railway template</a>. This is the official community Railway template maintained by the thirdweb community team.</p>
<p>Without further ado, let's deploy your <strong>Engine</strong> to its <strong>Railway</strong>. 🚂🛤️ (you get it?)</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Are you looking for a managed thirdweb Engine? <a target="_blank" href="https://thirdweb.com/dashboard/engine?requestCloudHosted">Try Cloud-Hosted</a>!</div>
</div>

<h2 id="heading-requirements">Requirements</h2>
<ul>
<li><p><a target="_blank" href="https://portal.thirdweb.com/account/api-keys#:~:text=Secret%20Key%2D%20Used%20to%20access%20the%20enabled%20thirdweb%20infrastructure%20services%20by%20identifying%20and%20authenticating%20your%20application%20from%20a%20backend.%20Sharing%20or%20exposing%20this%20key%20to%20others%20is%20unsafe%20because%20it%20grants%20access%20to%20all%20services.">thirdweb API secret key</a>.</p>
</li>
<li><p><a target="_blank" href="https://portal.thirdweb.com/glossary/wallet">Wallet address</a>. (any EVM-compatible wallet address)</p>
</li>
</ul>
<h2 id="heading-steps">Steps</h2>
<ol>
<li><p>Go to your Railway dashboard and create a "New Project."</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713272787740/636b8689-6594-47b4-848b-33ea57c25764.png" alt="Railway platform showing options to create a new project, with a highlighted button for &quot;New Project&quot; on the top right. The Railway interface includes a sidebar with user information and a central area displaying project creation options such as deploying a GitHub repository or provisioning a database." class="image--center mx-auto" /></p>
</li>
<li><p>On the new project page, search for "thirdweb" or "thirdweb Engine," and you will find the template we created.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713272932738/d0ae83f5-de52-45ab-bb3d-a531210ddee0.png" alt="Railway deployment interface displaying a &quot;New Project&quot; screen with an option to deploy a web3 app using the &quot;thirdweb Engine,&quot; described as an open-source server for scalable web3 apps. The background is dark with a subtle starry pattern." class="image--center mx-auto" /></p>
</li>
<li><p>You will be redirected to the deploy page. First, click the "Configure" button for the Postgres service. Lastly, save the configuration and return to this page.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713341464873/2a451398-f164-445f-ad1f-160a86faee21.png" alt="A screenshot of Railway deployment interface titled &quot;Deploy Thirdweb Engine,&quot; featuring options to configure Postgres and Engine services, set against a dark background with a starry pattern." class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713341688018/43f480be-f8e8-41aa-90cf-5e0b979e5912.png" alt="Screenshot of Railway deployment interface titled &quot;Deploy Thirdweb Engine,&quot; showing configuration options for a Postgres service including Docker image details, volume, and environment variables with a &quot;Save Config&quot; button at the bottom." class="image--center mx-auto" /></p>
</li>
<li><p>Let's set up the thirdweb Engine service. Enter your wallet address into the <code>ADMIN_WALLET_ADDRESS</code> field, and then enter your "thirdweb API secret key" into the <code>THIRDWEB_API_SECRET_KEY</code> key input field. After that, save the configuration and return to the template deployment page.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713341935145/aa0322fa-0235-4734-a475-e294fd187a5f.png" alt="A screenshot of Railway interface for the thirdweb Engine, showing options to configure PostgreSQL and the Thirdweb Engine, with a dark background and a &quot;Deploy&quot; button at the bottom." class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713342418431/b974c06a-3ce2-4d86-b9ff-1b66e445d125.png" alt="A screenshot of Railway configuration interface for deploying a Docker image, specifically &quot;thirdweb/engine:latest&quot;. The interface displays fields for Docker image details, environment variables including 'ADMIN_WALLET_ADDRESS' and 'THIRDWEB_API_SECRET_KEY', and a 'Save Config' button." class="image--center mx-auto" /></p>
</li>
<li><p>All you have to do is click the "Deploy" button and wait.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713342795793/b65e32eb-59eb-4fe4-8c9c-3539d4509d7c.png" alt="Screenshot of Railway deployment interface for &quot;Thirdweb Engine&quot; with options to configure and deploy services including &quot;Postgres&quot; and &quot;Engine,&quot; both marked as &quot;Ready to be deployed.&quot; The background is dark with a subtle star pattern." class="image--center mx-auto" /></p>
</li>
<li><p>In less than 3 minutes, your thirdweb Engine will be ready for use. Go to your Engine service &gt; Settings &gt; Networking &gt; Public Networking to find your endpoint URL.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713343606568/2d1e63a8-6cb4-4855-80cc-625624219585.png" alt="Screenshot of Railway web application interface showing settings for networking in a deployment environment, highlighting the public endpoint URL for an application named &quot;engine-production&quot;." class="image--center mx-auto" /></p>
</li>
<li><p>Open this endpoint URL in your browser, and you'll receive an API message response. This indicates a successful Engine installation. Be sure to save this; you will need it to import into your thirdweb Engine dashboard.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713343998368/5d6acc5f-ae45-44c9-883c-e6128b0e3594.png" alt="A screenshot of a Railway interface showing a JSON response message stating &quot;Engine is set up successfully. Manage your Engine from https://thirdweb.com/dashboard/engine.&quot; in a web browser." class="image--center mx-auto" /></p>
</li>
</ol>
<h3 id="heading-manage-ending-from-the-dashboard">Manage Ending from the Dashboard</h3>
<ol>
<li><p>Now, let's import your endpoint URL to your thirdweb dashboard. Navigate to your <a target="_blank" href="https://thirdweb.com/dashboard/engine">Engine dashboard</a> and select the "Import" button.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713344362888/169c12c9-c95f-411c-bb5e-454c79b90223.png" alt="A screenshot of a thirdweb user interface for a blockchain-related service called &quot;Engine,&quot; featuring navigation tabs, account information, and sections for managing backend wallets and transactions. The interface includes options to import or create an instance of an Engine." class="image--center mx-auto" /></p>
</li>
<li><p>Name your self-hosted thirdweb Engine, enter the endpoint URL from your Railway project, and click the import button. Follow the example provided below.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713344509842/2c6d53d1-e130-4abf-a59f-b30dfc347e41.png" alt="A screenshot of thirdweb interface for importing an engine instance, featuring fields for name and URL, and buttons for &quot;Cancel&quot; and &quot;Import&quot;." class="image--center mx-auto" /></p>
</li>
<li><p>After you import it, it should look like this. Go ahead and view and manage your self-hosted thirdweb Engine from your account dashboard.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713344826533/fcdb8c51-1caa-4de0-a731-e0f6cb1b1f9a.png" alt="Screenshot of thirdweb web interface titled &quot;Engine,&quot; describing it as an HTTP server for smart contracts, with options to manage instances and a link to an instance named &quot;Engine on Railway.&quot;" class="image--center mx-auto" /></p>
</li>
<li><p>Don't forget to create your <strong>backend wallet</strong> to execute write transactions and generate your <strong>access token</strong>. This will allow you to interact with your Engine API.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713345091101/fdf637fc-060d-4da6-9b16-f9a9cccf47a3.png" alt="Screenshot of thirdweb user interface for &quot;Engine on Railway&quot; showing sections for backend wallets and transactions with no data found, and tabs for Overview, Explorer, Relayers, Admins, Access Tokens, Webhooks, and Configuration." class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713345122537/8b9e406c-f512-4b60-8c84-0fe4c1f90ad6.png" alt="Screenshot of thirdweb web interface for &quot;Engine on Railway&quot; showing a section for creating and managing API access tokens, with a button highlighted for creating a new access token." class="image--center mx-auto" /></p>
</li>
</ol>
<h2 id="heading-testing">Testing</h2>
<p>In this section, let's test your engine to see if it works. The simplest method is to make a direct request using curl in your terminal. Just replace the <code>&lt;xxxx&gt;</code> with your Railway endpoint URL and provide your access token from your thirdweb Engine dashboard.</p>
<p>We will send a GET request to read the contract information for <code>name</code> on the <code>base-sepolia-testnet</code> chain. Let's use <code>0xD1042CC90244beeE8E30e1655f1935C3e8BFB86a</code> as our test contract address.</p>
<pre><code class="lang-plaintext">curl -X 'GET' \
  'https://engine-production-&lt;xxxx&gt;.up.railway.app/contract/base-sepolia-testnet/0xD1042CC90244beeE8E30e1655f1935C3e8BFB86a/read?functionName=name' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer &lt;your access token here&gt;'
</code></pre>
<p>Copy and paste this command into your terminal and press enter. It should return a response with the name of our test contract. The name should be <a target="_blank" href="https://thirdweb.com/base-sepolia-testnet/0xD1042CC90244beeE8E30e1655f1935C3e8BFB86a">Mata NFT</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713346930114/c961ecdd-1bff-4ec3-8e92-eeded64b9279.png" alt="A screenshot of a terminal window displaying a command line interface where a curl command is executed to fetch data from an API, with the output showing JSON formatted response containing the result &quot;Mata NFT&quot;." class="image--center mx-auto" /></p>
<p>You can also use the <a target="_blank" href="https://insomnia.rest/">Insomnia</a> software to test your Engine. We performed a similar request using its graphical user interface (GUI). Enter your access token in the Bearer field as your authentication method, and then input your GET request URL. After that, click "Send." You should receive a 200 response code and the test contract's name.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713346646308/2ca884fa-1717-44c4-a993-0cbfb510469f.png" alt="A screenshot of the Insomnia API client interface showing a GET request to a URL and the response displayed on the right side with the result &quot;Mata NFT&quot;." class="image--center mx-auto" /></p>
<p>This is it. If you see a similar result, you're good to go! 🚂🛤️</p>
<h2 id="heading-update">Update</h2>
<p>You need to update the version manually from the Railway dashboard. To do this, navigate to your Engine service and redeploy the source.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713350921150/f5811d28-71c5-4c53-a7cc-efcad332d753.png" alt="Screenshot of Railway deployment interface showing options for managing a Docker image deployment, including logs, restart, redeploy, and remove actions." class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Are you looking for an effortless version update? <a target="_blank" href="https://thirdweb.com/dashboard/engine?requestCloudHosted">Try Cloud-Hosted</a>!</div>
</div>

<p>Enjoy, and keep building! 🫶</p>
]]></content:encoded></item><item><title><![CDATA[Enable Buy Me a Coffee to your Github Open Source Project]]></title><description><![CDATA[Just recently, Buy Me a Coffee announced support for GitHub sponsors. This is really BIG news for open-source maintainers like me, as we have been fighting for it for years.
This means that Buy Me a Coffee now supports its own syntax for the FUNDING....]]></description><link>https://blog.warengonzaga.com/how-to-enable-buy-me-a-coffee-to-your-open-source-project-on-github</link><guid isPermaLink="true">https://blog.warengonzaga.com/how-to-enable-buy-me-a-coffee-to-your-open-source-project-on-github</guid><category><![CDATA[Open Source]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[buymeacoffee]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Tue, 19 Mar 2024 07:25:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713605487793/3d6f40d4-7d3b-4fe8-81db-5d17baf75009.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Just recently, Buy Me a Coffee <a target="_blank" href="https://twitter.com/buymeacoffee/status/1769746574215930295">announced</a> support for GitHub sponsors. This is really BIG news for open-source maintainers like me, as <a target="_blank" href="https://building.buymeacoffee.com/feature-requests/p/github-sponsorship">we have been fighting for it for years</a>.</p>
<p>This means that Buy Me a Coffee now supports its own syntax for the <code>FUNDING.yml</code> file, which is <code>buy_me_a_coffee</code> followed by your username. It displays like this.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710831661462/ae8f8209-100d-494f-9f59-b249e232b974.png" alt class="image--center mx-auto" /></p>
<p>Beautiful right? This is like a dream come true for me as compare before it displays like this as we use <code>custom</code> syntax just to support Buy Me a Coffee platform.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710831846589/5d720d21-0b65-479a-916c-d5b7fda42b61.png" alt class="image--center mx-auto" /></p>
<p>This is a significant improvement after years of waiting! If you're curious about which platforms are supported, you can learn more about the GitHub sponsors button <a target="_blank" href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository">here</a>.</p>
<p>Alright, now that we understand what this is all about, I'll show you how to enable this feature on your open-source project. This way, your users can support your project by actually buying you a coffee. ☕</p>
<p>Without further ado, let's get started! 🚀</p>
<h2 id="heading-steps">Steps</h2>
<ol>
<li><p>Clone your GitHub project repository.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710825225915/33501287-21a1-46ab-b8ef-3680fad106fa.png" alt="Clone GitHub repository using GitHub CLI" class="image--center mx-auto" /></p>
<p> In my case, I prefer to use GitHub CLI as it is convenient for me to clone projects easily in my local machine. You can use whatever you prefer to clone your project.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710825439611/502bf100-4f93-42d3-a2c6-a2a39c85b4c8.png" alt="Example of cloning GitHub repository locally using GitHub CLI." class="image--center mx-auto" /></p>
<p> Here's how I clone my project, as you can see cloned directly to my local machine. I'm using WSL on Windows 11. 😅</p>
</li>
<li><p>If you haven't already, Create a <code>.github</code> folder at the root of your project.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710825568876/4fecaac9-5367-457f-bdac-196c38bee796.png" alt="Example of navigating to project folder and showing the .github folder." class="image--center mx-auto" /></p>
<p> After cloning the project, you'll need to navigate to the project folder. In my case, I use the terminal and <code>cd</code> command to do this. I have already a <code>.github</code> folder due to the fact that I'm using Buy Me a Coffee URL before using <code>custom</code> syntax to add my Buy Me a Coffee profile.</p>
</li>
<li><p>Inside your <code>.github</code> folder, you have to create another file called <code>funding.yml</code>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710826185948/25a6a956-5629-41dc-ac18-1093be50e1e2.png" alt class="image--center mx-auto" /></p>
<p> Navigate inside the <code>.github</code> folder and create a file name <code>funding.yml</code>. In my example, I have already a file name so I will not create another one.  </p>
<p> You might be wondering why I don't name it as <code>FUNDING.yml</code>? This is because it is my preference if the file is not so important inside my project I don't use uppercase. Both lowercase and uppercase works when setting up your funding file for GitHub.</p>
</li>
<li><p>Open <code>funding.yml</code> file in your favorite code editor in my case I'll use VS Code.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710829717353/3e2ca87b-c0c7-4e5b-b62b-58631ddf7919.png" alt class="image--center mx-auto" /></p>
<p> It will open a VS code in my local machine so I can modify the file and enable Buy Me a Coffee button to my opensource project.</p>
</li>
<li><p>Use the following syntax below to specify Buy Me a Coffee platform as your GitHub sponsors button.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710829652573/8639b708-7ffb-4166-be1a-42561d3dab8b.png" alt class="image--center mx-auto" /></p>
<p> You can use comment syntax for your YAML file like in my example. If your account has GitHub sponsors enabled you can add it to your funding tile too. In my case, I have both. You can <a target="_blank" href="https://github.com/sponsors">apply here</a> if you want!</p>
</li>
<li><p>Commit your changes, and push it!</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710830143528/4f053810-c5d1-45aa-974e-127229e3da88.png" alt class="image--center mx-auto" /></p>
<p> Once, you update your <code>funding.yml</code> file you need to commit your changes and push your updates. In my case, I'm using an AI-powered commit message tool called "<a target="_blank" href="https://github.com/warengonzaga/magic-commit">Magic Commit</a>" or "<a target="_blank" href="https://npmjs.com/package/magicc">magicc</a>" in short. If you like doing manual then follow the Git flow below.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710830443184/f1c6c923-4fa6-42b6-81f5-9ea5a299dbed.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>That's it, you should be able to see the <strong>Buy Me a Coffee</strong> button from your GitHub project's repository homepage.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710830645059/fc39a6f3-977e-4573-b1f7-7951e0848c58.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p>Enjoy your coffee and happy building! ☕</p>
<p>See you in my next blog... 💖</p>
<div class="hn-embed-widget" id="sponsor"></div>]]></content:encoded></item><item><title><![CDATA[How to Recover the Ownership of Your thirdweb Pre-built Contract]]></title><description><![CDATA[This is useful if the admin of your contract is compromised. For example, if you add a balance to your admin wallet address and it unexpectedly gets transferred to a random address, changing it becomes challenging without gas to assign a new one.
In ...]]></description><link>https://blog.warengonzaga.com/how-to-recover-the-ownership-of-your-thirdweb-pre-built-contract</link><guid isPermaLink="true">https://blog.warengonzaga.com/how-to-recover-the-ownership-of-your-thirdweb-pre-built-contract</guid><category><![CDATA[Web3]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[thirdweb]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Mon, 18 Mar 2024 13:54:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713606320522/1f8f8a76-0018-486a-ac9d-56c6c9c8191e.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is useful if the admin of your contract is compromised. For example, if you add a balance to your admin wallet address and it unexpectedly gets transferred to a random address, changing it becomes challenging without gas to assign a new one.</p>
<p>In this guide, you'll learn how to change your admin wallet to a new one without needing to spend gas from your compromised wallet address, using the thirdweb gasless method. Without further ado let's get started! 😎</p>
<h2 id="heading-setup">Setup</h2>
<ol>
<li><p>Do <code>npx thirdweb create app --node --javascript --evm</code></p>
</li>
<li><p>Rename the <code>.env.example</code> to <code>.env</code></p>
</li>
<li><p>Copy and paste this to your <code>.env</code></p>
</li>
</ol>
<pre><code class="lang-plaintext">WALLET_PRIVATE_KEY=
THIRDWEB_SECRET_KEY=
RELAYER_URL=
</code></pre>
<ol start="4">
<li><p>After that, fill out the information needed.</p>
</li>
<li><p>Get the private key of the compromised wallet and paste it as a value to <code>WALLET_PRIVATE_KEY=</code></p>
</li>
<li><p>Get the <code>secret key</code> from this https://thirdweb.com/create-api-key</p>
</li>
<li><p>Get the <code>relayer_url</code> from this tutorial https://blog.thirdweb.com/guides/setup-gasless-transactions</p>
</li>
<li><p>Copy and paste the code below to your local <code>index.js</code></p>
</li>
</ol>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { config } <span class="hljs-keyword">from</span> <span class="hljs-string">"dotenv"</span>;
<span class="hljs-keyword">import</span> { ThirdwebSDK } <span class="hljs-keyword">from</span> <span class="hljs-string">"@thirdweb-dev/sdk"</span>;

config();

<span class="hljs-keyword">const</span> newAdmin = <span class="hljs-string">"0x..."</span>;
<span class="hljs-keyword">const</span> contractAddress = <span class="hljs-string">"0x..."</span>;

<span class="hljs-keyword">const</span> main = <span class="hljs-keyword">async</span> () =&gt; {
  <span class="hljs-keyword">if</span> (!process.env.WALLET_PRIVATE_KEY) {
    <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"No private key found!"</span>);
  }

  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> sdk = ThirdwebSDK.fromPrivateKey(process.env.WALLET_PRIVATE_KEY, <span class="hljs-string">'polygon'</span>, {
      <span class="hljs-attr">gasless</span>: {
        <span class="hljs-attr">openzeppelin</span>: {
          <span class="hljs-attr">relayerUrl</span>: process.env.RELAYER_URL, <span class="hljs-comment">// Learn more: https://blog.thirdweb.com/guides/setup-gasless-transactions/</span>
        },
      },
      <span class="hljs-attr">secretKey</span>: process.env.THIRDWEB_SECRET_KEY,
    });

    <span class="hljs-keyword">const</span> contract = <span class="hljs-keyword">await</span> sdk.getContract(contractAddress);
    <span class="hljs-comment">// run this first so you can set it as owner.</span>
    <span class="hljs-keyword">const</span> tx = <span class="hljs-keyword">await</span> contract.roles.grant(<span class="hljs-string">"admin"</span>, newAdmin);
    <span class="hljs-comment">// Uncomment this, and comment the code above ^ after you set the newAdmin as admin.</span>
    <span class="hljs-comment">// const tx = await contract.owner.set(newAdmin);</span>

    <span class="hljs-built_in">console</span>.log(tx);

  } <span class="hljs-keyword">catch</span>(error) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">"Something went wrong: "</span>, error);
  }
};

main();
</code></pre>
<ol start="4">
<li>Fill in the information for the variables.</li>
</ol>
<pre><code class="lang-plaintext">const newAdmin = "0x...";
const contractAddress = "0x...";
</code></pre>
<ol start="9">
<li>Run the code by doing <code>node index.js</code></li>
</ol>
<h2 id="heading-usage">Usage</h2>
<ol>
<li><p>After the setup, run the script straight. <code>node index.js</code></p>
</li>
<li><p>Comment on this part by adding <code>//</code> in front of it.</p>
</li>
</ol>
<pre><code class="lang-plaintext">const tx = await contract.roles.grant("admin", newAdmin);
</code></pre>
<ol start="3">
<li>Then, uncomment this part. By removing the <code>//</code> in front of it.</li>
</ol>
<pre><code class="lang-plaintext">const tx = await contract.owner.set(newAdmin);
</code></pre>
<ol start="4">
<li>Run again the script. <code>node index.js</code></li>
</ol>
<hr />
<p>That's it! ✨ See you on my next blog... 💖</p>
<div class="hn-embed-widget" id="sponsor"></div>]]></content:encoded></item><item><title><![CDATA[Deploy Next.js App to GitHub Pages with new GitHub Actions]]></title><description><![CDATA[Hey there, GitHub just recently posted a tweet about deploying any static site generator to GitHub pages using their new GitHub actions. Let me show you below. 👇
https://twitter.com/github/status/1556340744989859840
For your reference here's the exa...]]></description><link>https://blog.warengonzaga.com/deploy-nextjs-app-to-github-pages-with-new-github-actions</link><guid isPermaLink="true">https://blog.warengonzaga.com/deploy-nextjs-app-to-github-pages-with-new-github-actions</guid><category><![CDATA[GitHub]]></category><category><![CDATA[GitHub Actions]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Next.js]]></category><category><![CDATA[github pages]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Sun, 14 Aug 2022 12:21:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1660479361831/xNo9KEvzg.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there, GitHub just recently posted a tweet about deploying any static site generator to GitHub pages using their new GitHub actions. Let me show you below. 👇</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/github/status/1556340744989859840">https://twitter.com/github/status/1556340744989859840</a></div>
<p>For your reference here's the example setup I made with this tutorial. 😁</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/warengonzaga/sample-nextjs-app">https://github.com/warengonzaga/sample-nextjs-app</a></div>
<h2 id="heading-intro">🤝 Intro</h2>
<p><img src="https://media.giphy.com/media/h3u7w8BR07IHDsnzQw/giphy.gif" alt="Intro GIF" /></p>
<p>Today we are going to deploy a sample next.js app to GitHub pages using new GitHub actions to package your sample next.js app. The old way of doing this is that you need to use something like <a target="_blank" href="https://www.npmjs.com/package/gh-pages">gh-pages</a> package just to make it work.</p>
<p>Basically, it creates a separate branch just for your exported static site and it works like a magic. Let's learn the new way! Sounds good? Let's go! 💪🔥</p>
<h2 id="heading-requirements">📃 Requirements</h2>
<p>Here are the basic requirements for today's tutorial.</p>
<ol>
<li>GitHub account. (obviously 😅)</li>
<li>Code editor. (VS Code 👀)</li>
<li><a target="_blank" href="https://github.com/warengonzaga/sample-nextjs-app">Sample Next.js app</a>.</li>
</ol>
<h2 id="heading-sample-nextjs-app">📦 Sample Next.js App</h2>
<p>Let's assume that you have the GitHub account and code editor ready. Now let's clone or fork my sample Next.js app to your local machine. I'm gonna use <a target="_blank" href="https://cli.github.com">GitHub CLI</a> for a quick repo clone. 👀</p>
<pre><code class="lang-bash">gh repo <span class="hljs-built_in">clone</span> warengonzaga/sample-nextjs-app
</code></pre>
<p>After that, do <code>yarn install</code> and <code>yarn dev</code> to start a server on <code>http://localhost:3000</code>.</p>
<p>Feel free to edit the sample next.js to your liking. This sample next.js app is based on <code>create-next-app</code> so nothing special here.</p>
<h2 id="heading-set-up-repository">🖥️ Set Up Repository</h2>
<p>If you fork the sample repo and clone locally, you are good to skip this part. 💪</p>
<p>If you clone the repo without forking it, <a target="_blank" href="https://docs.github.com/en/get-started/importing-your-projects-to-github/importing-source-code-to-github/adding-locally-hosted-code-to-github">follow these instructions</a> from GitHub! 🏋️</p>
<h2 id="heading-pages-and-actions">🧰 Pages and Actions</h2>
<p>Here's the exciting part, now navigate to the <strong>Settings</strong> of your repository and click <strong>Pages</strong>. You'll see it like this. 👇</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660472727090/pJx9bIwkj.png" alt="GitHub pages settings" /></p>
<p>Now change it to the new GitHub actions! 😊</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660472831537/a0GYT3nLI.png" alt="Choose new GitHub actions" /></p>
<p>You'll see a recommended workflow here, let's configure it! ☕</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660472954841/oizYAqxQW.png" alt="Configure the Next.js workflow" /></p>
<p>We don't need to configure this for now as we are deploying a sample next.js app therefore committing this workflow to your repository is a go signal. 🔥</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660473212071/IpBM4Gx69.png" alt="Commit the Next.js workflow" /></p>
<p>It is now building something similar to Vercel! 💪😊</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660473323842/YELEX5MtP.png" alt="Building" /></p>
<p>Now deploying directly to GitHub pages... 👀</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660473397061/FAYFADYBj.png" alt="Deploying to GitHub pages" /></p>
<p>and... it's done with a URL. 😅</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660473507754/rPrxuxsDz.png" alt="Done building and deployment" /></p>
<p>Here's what it looks like... <code>https://opensource.warengonzaga.com/sample-nextjs-app</code></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660473872081/kxX56MKHF.png" alt="Published and it works" /></p>
<p>Don't forget to <a target="_blank" href="https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site">configure your custom domain</a> via GitHub pages settings. 😊</p>
<h2 id="heading-conclusion">🤔 Conclusion</h2>
<p><img src="https://media.giphy.com/media/26xBI73gWquCBBCDe/giphy.gif" alt="Conclusion GIF" /></p>
<p>To end this, unlike the old method this one is much easier now, as you may notice there is no additional branch created from the process, and all the building and deployment process happens on GitHub actions with the help of Next.js workflow. 💪</p>
<p>This update is still in beta at the time of this writing and hopefully, it will improve more in the future. If you have feedback about this fantastic update you can participate by going to GitHub <a target="_blank" href="https://github.com/orgs/community/discussions/categories/actions-and-packages">feedback page</a>. 👍</p>
<p>To learn more about this update, <a target="_blank" href="https://github.blog/2022-08-10-github-pages-now-uses-actions-by-default">read this blog</a>. 📖</p>
<hr />
<p>Like this blog? 🤔 Please consider supporting me on <a target="_blank" href="https://github.com/sponsors/warengonzaga">GitHub Sponsors</a> or nominate me (<a target="_blank" href="https://github.com/warengonzaga">@warengonzaga</a>) as a <a target="_blank" href="https://stars.github.com/nominate">GitHub Star</a>. Your support means the world to me. 🥰</p>
<p>See you on my next blog... 👋</p>
]]></content:encoded></item><item><title><![CDATA[Maintenance Your Windows Machine Like a Pro]]></title><description><![CDATA[You are probably here because you have a Windows machine that is getting slower and slower. Doing maintenance and optimization on your own requires time, research, and knowledge to do it right and avoid having additional Windows issues. I know the pa...]]></description><link>https://blog.warengonzaga.com/maintenance-your-windows-machine-like-a-pro</link><guid isPermaLink="true">https://blog.warengonzaga.com/maintenance-your-windows-machine-like-a-pro</guid><category><![CDATA[Windows]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[IT]]></category><category><![CDATA[Performance Optimization]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Sat, 23 Apr 2022 15:50:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714660306713/5efc8bd6-5299-4e15-b9fa-c090f6b166db.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You are probably here because you have a Windows machine that is getting slower and slower. Doing maintenance and optimization on your own requires time, research, and knowledge to do it right and avoid having additional Windows issues. I know the pain of having a Windows machine and doing maintenance. 😅</p>
<p><img src="https://media.giphy.com/media/4VUiK7uleZ7BcP21Sx/giphy.gif" alt="pain" /></p>
<p>Let me share one story with you; one time, I tried to do basic cleaning to my Windows machine using Disk Cleanup, and I checked all the items there and deleted them so I could free up some space. Do you know what happened? --- <strong>Blue Screen of Death</strong> shows! 🤦‍♂️</p>
<p><img src="https://c.tenor.com/-aZGk99QVM8AAAAC/space-force-microsoft.gif" alt="microsoft" /></p>
<p>With this wonderful experience using Windows, I motivated myself to learn how to effectively do maintenance and optimization without breaking my computer. I know that's a funny reason, but that's my inspiration; that's why I created a tool that automates the optimization and maintenance of a Windows computer. 🤘</p>
<h2 id="heading-cleaning-tool">🧹 Cleaning Tool</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1650394860088/103cEax2i.png" alt="wrn-cleaner" /></p>
<p>Introducing the WRN Cleaner! 🎉🎉🎉</p>
<p>It is a maintenance tool that can automatically or manually clean up your Windows machine and reliably. It is designed specifically for Windows machines only. The motivation behind this project is to clean up Windows machines in an automated way with pre-configured optimization techniques. 😉💻🧹</p>
<h3 id="heading-features">⚡ Features</h3>
<p>I'm using the native approach in cleaning Windows machines compared to other tools out there. Check out the different native Windows utilities to automate the maintenance and optimization. 🔥</p>
<p>Here's the cleaning process in sequence. 🧹</p>
<ul>
<li><p>Disk Cleanup</p>
</li>
<li><p>Defragment (HDD)</p>
</li>
<li><p>Retrim (SSD)</p>
</li>
<li><p>Checks System File</p>
</li>
<li><p>Cleans Recycle Bin</p>
</li>
<li><p>Cleans Temp Folder</p>
</li>
<li><p>Cleans Prefetch Folder</p>
</li>
<li><p>Clears Windows Error Log</p>
</li>
<li><p>Auto or Manual Shutdown and Reboot When Done</p>
</li>
</ul>
<p><strong><em>Disk Cleanup</em></strong> - As you may have noticed, I placed the Disk Cleanup at the top of the cleaning process; why? My reason is that this is the only native maintenance utility in Windows that needs user interaction. Getting the user's attention to finish all the steps before leaving the program running is good. Placing the <strong>Disk Cleanup somewhere in the process will prevent the whole process from finishing if the user is away from the keyboard,</strong> causing the program to hang and unable to complete the cleaning process. Make sense? 😅</p>
<p><strong><em>Defrag / Retrim</em></strong> - Last year, I bought an SSD to upgrade my workstation, but here's the question: can I defrag my SSD? The answer is no! It has been a requested feature of the tool to support SSD-enabled Windows machines. I started to research this feature request and found out that Windows' Defrag utility software has an optimization feature that works with SSDs, which is the Retrim! The tool can safely detect and apply the necessary optimization for your storage device. 🤘</p>
<p><strong><em>System File Checker</em></strong> - Built-in utility for Windows machines for checking and restoring corrupted system files. That's it! 😅</p>
<p><strong><em>Recycle Bin / Temp Folder / Prefetch Folder</em></strong> - The tool cleans your recycle bin, temp folder and files, and prefetch folder to free up some storage. 👊</p>
<p><strong><em>Windows Error Log</em></strong> - This can help reduce the noise in your Windows logs by deleting old error logs. 🤝</p>
<blockquote>
<p>⚠ <strong>Reminder</strong>: It is recommended to use this tool once every month.</p>
</blockquote>
<h2 id="heading-maintenance">🧰 Maintenance</h2>
<p><img src="https://c.tenor.com/xuwfj5uz2B8AAAAC/gopi-bahu.gif" alt="maintenance" /></p>
<p>Now we have the tool, and we don't have to worry about making the same mistake I made. 🤣 It is so simple to use my cleaning tool. Follow the usage below... 👀</p>
<ol>
<li><p>Get the <a target="_blank" href="https://github.com/warengonzaga/wrn-cleaner/releases">latest stable version</a>.</p>
</li>
<li><p>Run the batch script file as an <strong>Administrator</strong>.</p>
</li>
<li><p>Follow the on-screen instructions.</p>
</li>
<li><p>Wait...</p>
</li>
<li><p>Done!</p>
</li>
</ol>
<blockquote>
<p>⚠ <strong>Reminder</strong>: When you start to run the program the first cleaning method would be <strong>DiskClean</strong> so be careful on this one, don't check or uncheck things here. It is set to the default configuration and all you have to do is to click ok or next.</p>
</blockquote>
<h2 id="heading-security">🔐 Security</h2>
<p><img src="https://c.tenor.com/YbmQHDSJvbkAAAAC/thumbs-up-hacker.gif" alt="security" /></p>
<p>Some of you may know that I'm a cybersecurity researcher by trade, and security is very important to me. The maintenance tool I made is safe to use as I'm also using it, I mean you can read the entire source code in the official GitHub repository. 😅</p>
<p>In addition, you can check the <a target="_blank" href="https://www.virustotal.com/gui/url/092c4998fbb4b0bb8ff569d81dd92dffdf61edd3d6c37e591f5411b0bd948ab0/detection">VirusTotal result here</a>. 😉</p>
<p>If, in any case, you find a potential security bug, then feel free to reach out to me.</p>
<h2 id="heading-last-words">☝️ Last Words</h2>
<p><img src="https://c.tenor.com/R4_XacJ__O8AAAAC/break-break-the-ice.gif" alt="last words" /></p>
<p>Having a Windows machine can be painful, but this is where I started, and this is all I have. I'm planning to install a new machine with Windows OS soon. Yeah, I'm very comfortable with Windows as my main personal computer. I would probably use an Apple machine for work as it is very reliable in that use case, but that's soon. 🤞</p>
<p>Cleaning your machine can be painful too if you don't know the basics, that's where the tools become useful. Don't rely too much on tools; still, you have to learn the basics. 👊</p>
<p>The tool I made uses the native cleaning process for Windows. I just automated these steps and applied my years of experience in maintaining and optimizing Windows machines as I worked before as technical support. ⚡</p>
<p>So yeah, I hope you learned a lot, and this blog helps!</p>
<p><strong>Docs</strong>: <a target="_blank" href="https://docs.warengonzaga.com/wrn-cleaner"><em>docs.warengonzaga.com/wrn-cleaner</em></a></p>
<p><strong>Repo</strong>: <a target="_blank" href="https://github.com/warengonzaga/wrn-cleaner"><em>github.com/warengonzaga/wrn-cleaner</em></a></p>
<hr />
<p>📢 Nominate me (<a target="_blank" href="https://warengonzaga.com">@warengonzaga</a>) as a <a target="_blank" href="https://stars.github.com/nominate"><strong>GitHub Star</strong></a>. If you appreciate my hard work, passion, and dedication to open-source projects like this.</p>
<p>Cheers! 🚀👌 See you on my next blog...</p>
]]></content:encoded></item><item><title><![CDATA[7 Awesome: Free Websites to Learn Web3]]></title><description><![CDATA[🤝 Introduction
7 awesome is my original blog series for everything awesome I found online. In this blog series, I'm gonna share with you the best places on the internet where you can learn about the future and next generation of the internet — Web 3...]]></description><link>https://blog.warengonzaga.com/7-awesome-free-websites-to-learn-web3</link><guid isPermaLink="true">https://blog.warengonzaga.com/7-awesome-free-websites-to-learn-web3</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Cryptocurrency]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Solidity]]></category><category><![CDATA[Rust]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Sun, 16 Jan 2022 20:57:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1642366457252/_9nXoS-8H.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">🤝 Introduction</h2>
<p><a target="_blank" href="https://blog.warengonzaga.com/series/7-awesome">7 awesome</a> is my original blog series for everything awesome I found online. In this blog series, I'm gonna share with you the best places on the internet where you can learn about the future and next generation of the internet — Web 3.0! ✨</p>
<p>I'm not gonna talk more about Web3 here in detail maybe on a separate blog so better to follow and subscribe to my newsletter so you won't miss out on any Web3 related content soon! 😎</p>
<p><strong>(</strong><a target="_blank" href="https://buymeacoffee.com/warengonzaga/e/237335"><strong>Get the PDF version here to support my publication</strong></a><strong>)</strong> 👈</p>
<p>Let's start! 🤘</p>
<h2 id="heading-the-7-awesome">✨ The 7 Awesome</h2>
<p><strong>GM</strong>, here are the top 7 awesome free websites, communities, and resources for you to learn everything about Web3. I'm sharing with you my personal Web3 favorites in top list style which I found when I was searching for Web3 knowledge. I ranked them based on my experience as a web3 student, advocate, and enthusiast. 🔥</p>
<p>Let's have some basic understanding of what Web3 is before we dive into the awesome list. Based on <a target="_blank" href="https://eshita.mirror.xyz/H5bNIXATsWUv_QbbEz6lckYcgAa2rhXEPDRkecOlCOI">Eshita's article</a> she describes it like this in a simple way.</p>
<ul>
<li><p>Web1 <em>(read)</em> 😬</p>
</li>
<li><p>Web2 <em>(read and write)</em> 😨</p>
</li>
<li><p>Web3 <em>(read, write, and own)</em> 😱</p>
</li>
</ul>
<p>Amazing right? We are currently in the middle of this transition from Web2 to Web3. For me, Web3 is not just hype and a bubble. Web3 is here a long time ago waiting for us to adapt, transition, and accept the future of the internet. You should start learning Web3 right now while it is early we have nothing to lose if you know both Web2 and Web3 which is better than nothing! 🤝🔥 <strong>WAGMI</strong>!!!</p>
<blockquote>
<p>Psst, new resources added! Check out <a class="post-section-overview" href="#heading-awesome-update">🔥 Awesome Update</a>!!!</p>
</blockquote>
<p>and... here's the list! enjoy! 🥰</p>
<h3 id="heading-buildspacehttpsbuildspaceso">📚 <a target="_blank" href="https://buildspace.so">BuildSpace</a></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1642064109139/mnY7xhumC.png" alt="buildspace.so" /></p>
<p>Let's start this awesome list with BuildSpace! This is indeed a top place to learn and build real-world Web3 projects by doing. Why on top? BuildSpace offers different projects for you to start hacking. 🐱‍👤</p>
<p>Here's the motivation, you'll earn free exclusive and unique NFT when you're able to complete a project tutorial. On top of that, you'll get a special Discord role in their official Discord community to represent what you've learned and where you enroll. 🔥</p>
<p>For every project you completed you'll earn enough experience that leads you to get full-time work remotely on popular Web3 companies with the help of BuildSpace. 🦄</p>
<blockquote>
<p><em>I can say BuildSpace nailed it, learn Web3, build Web3, and get a Web3 job</em>. 💡</p>
</blockquote>
<p>I have a great experience inside the community that leads me to meet different popular people in the Web3 space. Thank you <a target="_blank" href="https://twitter.com/FarzaTV">@Farza</a> for building this wonderful community!</p>
<h3 id="heading-odyssey-dao">📚 Odyssey DAO</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1642064259126/MKo2oDX00.png" alt="odysseydao.com" /></p>
<p>Another personal favorite! 🔥 Not gonna lie, this is a good alternative to BuildSpace the only difference is that this is a learning DAO community. DAO means a decentralized autonomous organization, Odyssey has a pretty good definition of this.</p>
<p><a target="_blank" href="https://www.odysseydao.com/articles/what-is-dao">A DAO is a community that’s owned and managed by its members</a>.</p>
<p>Here's a good thing about Odyssey, they made it possible to provide 100% free Web3 education with the help of the community around it by offering NFTs and tokens. For me, this is a great use of NFTs and tokens because you're getting NFTs and tokens for a cause, not just you want to have an NFT and tokens. 🔥</p>
<p>As much as I love to support their work, their NFTs and tokens are all sold out. 😥 That's not gonna stop me from contributing, so I decided to volunteer by translating their tutorials to my first language — Filipino (Tagalog). 💡💖🚀</p>
<p>Odyssey has an active Discord community so better to join and start learning! 💖</p>
<p>Good job <a target="_blank" href="https://twitter.com/petergyang">@petergyang</a> for making this possible! 🚀</p>
<p>UPDATE: Sadly, the community is no longer active.</p>
<h3 id="heading-cryptozombieshttpscryptozombiesio">📚 <a target="_blank" href="https://cryptozombies.io">CryptoZombies</a></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1642064367825/R243uNfC1.png" alt="cryptozombies.io" /></p>
<p>Honestly, unlike BuildSpace and Odyssey, this one is a pretty good place to learn Web3 in a fun and interactive way for free. I can describe CryptoZombies as a Web3 version of Code School (Pluralsight), freeCodeCamp, or Sololearn. Plus, it is opensource! ✨</p>
<p>For me, It is recommended and helpful to have at least a technical background in programming, but that's not necessary or required for you to start learning blockchain development. Just go with the flow and take their courses and learn as much as possible. Huge respect to the creators (<a target="_blank" href="https://loomx.io/">Loom Network</a>) of CryptoZombies for their efforts in creating an interactive code school just for Web3 and Blockchain developers. 💖🤝🎉</p>
<p>Currently, they offer 4 paths — Solidity, Advance Solidity, Chainlink, and Beyond Ethereum. Which is enough for you to be considered as a blockchain developer. With the help of these paths, you will be able to develop your smart contracts, launch NFTs, and build NFT games. Sounds cool? 😎🤘</p>
<p>Fun fact, the creator of CryptoZombies is also the creator of popular <a target="_blank" href="https://ethfiddle.com/">EthFiddle</a> it is like a JSFiddle but for super cool Solidity. 🤯</p>
<h3 id="heading-hashnodes-web3">📚 Hashnode's Web3</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1640097015238/uNj5ck0wZ.png" alt="web3.hashnode.com" /></p>
<p>Surprise! 😅🎉 Yes, I added to the list the very own Web3 blogs of Hashnode. Not gonna lie, the Web3 blogs are high quality and you can learn from them. Do you know what I love about Hashnode? The ability to listen to this blog! 😱 Yes, that makes it fun and convenient to learn from a Web3 audio blog like Hashnode.</p>
<p>This blog can be part of the Web3 blog topics under Hashnode but this is an independent blog. 😅 I want to... but you know, I need to publish something like this to be qualified. 😅</p>
<p>Speaking of that, Hashnode is currently looking for Web3 <a target="_blank" href="https://web3.hashnode.com/contribute/">bloggers</a>! (tell them that I refer you 🤫)</p>
<p>In addition, Hashnode is currently hosting a <a target="_blank" href="https://townhall.hashnode.com/thirdweb-hackathon">Web3 hackathon event</a> together with <a target="_blank" href="https://thirdweb.com">thirdweb</a> at the time of this writing. So it is better to check that out and win some cool prizes. Thank me later! 🤝😀</p>
<h3 id="heading-useweb3httpswwwuseweb3xyz">📚 <a target="_blank" href="https://www.useweb3.xyz/">UseWeb3</a></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1642076684260/OGsry5iz5.png" alt="useweb3.xyz" /></p>
<p>A great opensource community-contributed resource for Web3 enthusiasts like you. Better to check this out and bookmark it to your favorite browser because you're gonna use it on your entire Web3 journey. 🔥</p>
<p>It is like a simple website that has a list of very useful information related to Web3 space. Even CryptoZombies is included in their resource list! 😅 I hope I can include this blog too? 😂</p>
<p>No more to say, very useful Web3 resource!</p>
<h3 id="heading-cryptodevhub">📚 CryptoDevHub</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1642076751874/XzMQ0pXz2.png" alt="cryptodevhub.io" /></p>
<p>If you like the wiki-style of learning about Web3 then this is the right place for you. CryptoDevHub is a wiki-type website where you can find tons of information about Web3. It also offers some guides for you to get started with Web3 development. Plus there is a community around it where Web3 peeps hang out by helping each other to build Web3 apps. Which is cool! 🤩</p>
<p>I would like to thank the webmaster <a target="_blank" href="https://twitter.com/pmmuens">@pmmuens</a> for adding a dark mode to the website. 😂 It helps! (seriously).</p>
<h3 id="heading-nft-school">📚 NFT School</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1642076831473/2QsyYk9BG.png" alt="nftschool.dev" /></p>
<p>Here we are to the last item on our list! Please welcome, the NFT School! NFT is one of the features of Web3 so why not add it to the list. I can define NFT School as the Web3 version of W3 School but for NFTs. 🙈</p>
<p>Wait, what is NFT? Well, NFT stands for <a target="_blank" href="https://nftschool.dev/concepts/non-fungible-tokens/#a-bit-of-history">Non-Fungible Tokens</a>. I'm not gonna discuss this here, this deserves a separate blog. To keep it simple, NFTs are just like a ticket to a concert where you can buy it and keep it forever and you might sell it to collectors in the future since it has value, the same idea with paintings and artworks. Buy the digital copy of it and keep it for yourself or sell it to collectors. 😎</p>
<p>Bookmark this website as a resource if you're into the NFT journey! 😉</p>
<h2 id="heading-last-words">🐱‍👤 Last Words</h2>
<p>That's pretty much everything about free Web3 resources. I compiled the best free resources possible so you can start learning right away. 😎🤝 I would suggest, start your journey with the hashtag #100DayOfWeb3 on Twitter, joining Web3 communities, or get a job at a Web3 company. 🦄</p>
<p>The time of this writing is the exact day 30 of my #100DaysOfWeb3 journey (yey 🎉). It is surprising that I learned so fast for the past 30 days. How do I do that? Well, I'm gonna write a separate blog for that! 😅</p>
<p>If you have any Web3 resources that we should know, kindly comment below! 🤝</p>
<p>Before you leave, why not check the bonus content below? 😅</p>
<h3 id="heading-bonus-content">🚀 Bonus Content</h3>
<p>What if I tell you, that you can build Web3 applications without coding? (I know you're laughing right now, that's fine, no worries 😅)</p>
<p>That's actually possible with the help of the <a target="_blank" href="https://thirdweb.com">thirdweb</a>! 🤫✨</p>
<p><a target="_blank" href="https://www.instagram.com/p/CXbmb06gGhP"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1652712937110/Im0UuU6Bg.jpg" alt="Check out the thirdweb launch video here!" class="image--center mx-auto" /></a></p>
<p>I'm a general community manager at thirdweb and I would like to include this in this blog as it helps a traditional Web2 developer like me to transition to Web3 space. It is actually awesome because it enables no-code developers to participate in Web3 space without knowing Solidity or Rust to interact with smart contracts. Aside from being a no-code platform, you can actually use the programming language you already know such as JavaScript, Python, and much more... just to build some Web3 cool stuff! 🔥</p>
<p>Check out <a target="_blank" href="https://thirdweb.com/portal/guides/release-an-nft-drop-with-no-code">this awesome guide</a> to get started! Don't forget to bookmark our <a target="_blank" href="https://thirdweb.com/portal/">developers portal</a> for you to learn and start creating Web3 apps without writing any solidity or rust. 🤝</p>
<p>At this moment, we're currently giving away <a target="_blank" href="https://thirdweb.com/early">free NFT (Silver Early Access Cards)</a> to the first 100,000 users to mint it. Hurry!!! Don't forget to join our <a target="_blank" href="https://discord.gg/thirdweb">community</a> too! 🤯✨</p>
<h4 id="heading-awesome-update">🔥 Awesome Update</h4>
<p>Hey, it turns out, there are new free Web3 learning websites, communities, and resources out there! 😱 I'm gonna quick list them here and I might create volume 2 of this blog for new resources. It's gonna be another 7 awesome new resources for learning Web3. Check out my additional links below! 😉</p>
<blockquote>
<ul>
<li><a target="_blank" href="https://www.pointer.gg/"><strong>Pointer</strong></a> - Learn web3 dev skills with fun interactive tutorials. Earn crypto rewards along the way!</li>
</ul>
</blockquote>
<ul>
<li><a target="_blank" href="https://www.web3.university/"><strong>Web3 University</strong></a> - The open university covering the fundamentals of web3 development: from writing Solidity to minting NFTs, to building full-stack dApps. Bringing you resources from the best in the blockchain.</li>
</ul>
<p>Shout out to <a target="_blank" href="https://twitter.com/KennethCassel">Kenneth Cassel</a> for building Pointer and <a target="_blank" href="https://twitter.com/VittoStack">Vitto Rivabella</a> for building Web3 University. I'm proud, I'm part of their community too. 🔥</p>
<p>Thanks for reading, good luck with your Web3 journey! 💖 <strong>GM</strong>, <strong>WAGMI!</strong></p>
<h2 id="heading-support-me">💖 Support Me</h2>
<p>📢 Nominate me (<a target="_blank" href="https://github.com/warengonzaga">@warengonzaga</a>) as a <a target="_blank" href="https://stars.github.com/nominate">GitHub Star</a>. If you appreciate my hard work, passion, and dedication to open-source projects.</p>
<p>Cheers, see you on my next 7 awesome blogs... 💻💖☕</p>
]]></content:encoded></item><item><title><![CDATA[7 Awesome: Web Animation Libraries and Frameworks]]></title><description><![CDATA[Welcome to my first 7 Awesome Series! 🎉 Enjoy! (PDF Version Available).
🤝 Introduction
7 awesome is my latest tech blog series where I'm gonna share the top list of anything related to software engineering. Have a list in mind let me know in the co...]]></description><link>https://blog.warengonzaga.com/7-awesome-web-animation-libraries-and-frameworks</link><guid isPermaLink="true">https://blog.warengonzaga.com/7-awesome-web-animation-libraries-and-frameworks</guid><category><![CDATA[Web Development]]></category><category><![CDATA[CSS Animation]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Story]]></category><category><![CDATA[2Articles1Week]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Sun, 12 Dec 2021 16:02:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1639324847612/mzKDUrjrU.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to my first <strong>7 Awesome Series</strong>! 🎉 Enjoy! (<a target="_blank" href="https://www.buymeacoffee.com/warengonzaga/e/230959">PDF Version Available</a>).</p>
<h2 id="heading-introduction">🤝 Introduction</h2>
<p><a target="_blank" href="https://blog.warengonzaga.com/series/7-awesome">7 awesome</a> is my latest tech blog series where I'm gonna share the top list of anything related to software engineering. Have a list in mind let me know in the comments below! 😉 Let's start!</p>
<p>Today I'm gonna share with you the top 7 awesome web animation libraries and frameworks you should know as a software developer. 🤯 These are the web animation that might help you in your current and future projects. Let's go straight to the content right away! 😅</p>
<h2 id="heading-the-7-awesome">✨ The 7 Awesome</h2>
<p>Here are the top 7 awesome web animation libraries and frameworks. I ranked them based on my usage experience and how popular the project is. The decision I made is based on this <a target="_blank" href="https://www.githubcompare.com/animate-css/animate.css+juliangarnier/anime+julianshapiro/velocity+mrdoob/three.js+maxwellito/vivus+mojs/mojs+greensock/gsap">tool to compare them easily</a>.</p>
<h3 id="heading-threejs">📦 ThreeJS</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/mrdoob/three.js">https://github.com/mrdoob/three.js</a></div>
<p> </p>
<p>Obviously the top on the list! Can't deny it... 😅</p>
<p>This is one of the best web animation libraries out there and you can create crazy amazing web animation with it. I have one example below of what it can do... 🤯</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1639320035175/oHpx2Thw7.png" alt="threejs_example_01" /></p>
<blockquote>
<p>GitHub's landing page, the interactive and animated globe...</p>
</blockquote>
<h3 id="heading-animatecss">📦 AnimateCSS</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/animate-css/animate.css">https://github.com/animate-css/animate.css</a></div>
<p> </p>
<p>Let's admit it, this is one of the most useful CSS animation libraries out there. 😅</p>
<p>I'm part of the core team and made some significant improvements to the web animation library. You are not a developer if you don't ever use animate.css before. 😂 Don't take it seriously, what I'm trying to say is that every developer knows about it. 😎</p>
<p>AnimateCSS has an active community and I'm still working on upcoming updates. It has clear and reliable documentation for you to start using on your web projects. 😎</p>
<h3 id="heading-animejs">📦 AnimeJS</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/juliangarnier/anime">https://github.com/juliangarnier/anime</a></div>
<p> </p>
<p>If you want to make your web animation to the next level then AnimeJS is for you! 🤘 I can say that this is an all-in-one solution for web animation as it says "It works with CSS properties, SVG, DOM attributes and JavaScript Objects." Have a try! 👌</p>
<h3 id="heading-velocity">📦 Velocity</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/julianshapiro/velocity">https://github.com/julianshapiro/velocity</a></div>
<p> </p>
<p>A fast and reliable web animation replacement for jQuery's animate. I can say it is easy to use since it has the same usage as jQuery's animate. 😉 Velocity has great documentation and has an active community and is being used by big companies. Check it out!</p>
<h3 id="heading-mojs">📦 MoJS</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/mojs/mojs">https://github.com/mojs/mojs</a></div>
<p> </p>
<p>MoJS stands for Motion Graphics for the Web powered by JavaScript. It has a complete list of advanced tools to create advanced web animation for your projects. It has an active community and has comprehensive documentation for you to start using <a target="_blank" href="mojs.github.io">MoJS</a>. 😎</p>
<h3 id="heading-vivus">📦 Vivus</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/maxwellito/vivus">https://github.com/maxwellito/vivus</a></div>
<p> </p>
<p>Do want to animate web things like crazy? Then start using Vivus lol. 😅</p>
<p>This is so powerful when you want to play with SVG elements on your web projects. It blows my mind when I first discovered this simple and lightweight (with no dependencies) animation library. Check out the <a target="_blank" href="http://maxwellito.github.io/vivus/">official homepage</a> for you to see it in action.</p>
<h3 id="heading-greensockjs-or-gsap">📦 GreensockJS or GSAP</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/greensock/GSAP">https://github.com/greensock/GSAP</a></div>
<p> </p>
<p>The final in the list, the amazing GSAP! 👌😉</p>
<p>GSAP by <a target="_blank" href="https://greensock.com/">GreenSock</a> is the most amazing and reliable animation library and framework. They are the standard for modern web animation. I agree with that... 😁 When I start working on web animation this is the first library and framework I use to create advanced web animation for making HTML5 banner ads when I was a junior front-end developer. This is the advanced web animation tool in my time. 😃</p>
<p>I'm one of the active community members back then and I help others how to use the library and framework. Until today I know how to use GSAP for rapid web animation. 😉</p>
<p>I recommend checking out the <a target="_blank" href="https://greensock.com/showcase/">website</a> for more information.</p>
<h2 id="heading-last-words">🐱‍👤 Last Words</h2>
<p>I want to point out that it is not required to use libraries and frameworks when it comes to web animations. I learned the hard way back then when I start working as a junior developer. I animated the web without using any libraries and frameworks and it was like hell. 😅</p>
<p>To lessen the tasks, I started using these libraries and frameworks to get the job done as fast as I can. In the corporate world, they don't care what you know and what you use as long as you complete your job in the right way. 😁 I know you know what I mean... 😅</p>
<p>My recommendation, learn the fundamentals and start learning them with libraries or frameworks because along the way you'll pick up it. Just explore! Learn by doing... 🥰</p>
<h3 id="heading-bonus-content">🚀 Bonus Content</h3>
<p>As a bonus, check out my <a target="_blank" href="https://github.com/stars/WarenGonzaga/lists/7a-web-animation">GitHub list</a> for this series and also you might want to <a target="_blank" href="https://www.buymeacoffee.com/warengonzaga/e/230959">grab the PDF version</a> to support my publication. 😉</p>
<h2 id="heading-support-me">💖 Support Me</h2>
<p>📢 Nominate me (<a target="_blank" href="https://github.com/warengonzaga">@WarenGonzaga</a>) as a <a target="_blank" href="https://stars.github.com/nominate">GitHub Star</a>. If you appreciate my hard work, passion, and dedication to open source projects.</p>
<p>Cheers, see you on my next 7 awesome blogs... 💻💖☕</p>
]]></content:encoded></item><item><title><![CDATA[Organize Your Starred GitHub Repositories Like a Pro]]></title><description><![CDATA[GitHub recently  released a new feature called Lists  to the public as beta. 😎 I'm excited to share with you how you can organize your starred GitHub repositories like a pro. 🤘
🤝 Introduction
GitHub list is a feature for grouping your starred repo...]]></description><link>https://blog.warengonzaga.com/organize-your-starred-github-repositories-like-a-pro</link><guid isPermaLink="true">https://blog.warengonzaga.com/organize-your-starred-github-repositories-like-a-pro</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Experience ]]></category><category><![CDATA[2Articles1Week]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Fri, 10 Dec 2021 09:40:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1639129096994/HYKDT5ldW.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>GitHub recently  <a target="_blank" href="https://github.blog/changelog/2021-12-09-lists-are-now-available-as-a-public-beta/">released a new feature called Lists</a>  to the public as beta. 😎 I'm excited to share with you how you can organize your starred GitHub repositories like a pro. 🤘</p>
<h2 id="heading-introduction">🤝 Introduction</h2>
<p>GitHub list is a feature for grouping your starred repositories into a list. 🤯 With the help of GitHub List we can organize your favorite repositories and share them with your followers or friends. Sounds useful? 😉 This feature is currently in public beta at the time of writing so you might want to  <a target="_blank" href="https://github.com/github/feedback/discussions/categories/lists-feedback">share your feedback and suggestion</a>  to help improve it. 😃</p>
<h2 id="heading-usage">🕹 Usage</h2>
<p>I'm not going to teach you how to use the GitHub list since it is very easy to understand. Just navigate to your GitHub profile and click stars and you should see like this...</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1639123392243/L59H254YW.png" alt="image.png" /></p>
<p>If not, then you might not have yet access to the public beta. 🤔 Let me know if you don't have access I might help you. 😅</p>
<p>Anyway, to create a new list all you have to do is to click the green button that says "create list" and click that. A pop-up will show for you to input the necessary details for your list. When you are done providing list details then save it.</p>
<p>Now you have created your own list then obviously it is empty. 😁</p>
<p>To add a starred repository to your list you only need to click the drop-down button besides stars in a repository, something like this...</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1639124000194/Fn2fr4gFc.png" alt="image.png" /></p>
<p>I told you it is easy... 😂</p>
<h2 id="heading-organize-like-a-pro">✨ Organize Like a Pro</h2>
<p>Here's the fun part! Did you see how I manage my lists? 😅 I'm gonna share with you how I manage my starred repositories so you can create your own maybe get an idea from my setup. 😉</p>
<p>As you notice my style has some emojis. 😂 It's up to you what style you prefer but here are the ideas and setup that can help you to organize your starred repositories.</p>
<h3 id="heading-my-list-idea-and-setup">💡 My List Idea and Setup</h3>
<blockquote>
<p>📌Interested - You Have My Attention 😎🤝</p>
</blockquote>
<p>This is my list of public repositories I really like and am interested in. These are the repositories that might be extremely useful to you or anything that got your attention. 😁 Special shout out to my mentor  <a target="_blank" href="https://github.com/eddiejaoude">Eddie Jaoude</a> for sharing the update and getting this idea from him, I'll share the video created by him at the end of this tech blog. ✌</p>
<blockquote>
<p>💾Saved - My Saved Repositories 😎👌</p>
</blockquote>
<p>This is the list for my saved repositories meaning repositories I found while searching or surfing the internet and need to check later. 😉</p>
<blockquote>
<p>🛠Tools - Productivity Tools 😎👊</p>
</blockquote>
<p>This is the list of tools I use for productivity. You might add your favorite open source tools too. The only limit is your imagination. 😎</p>
<hr />
<p>The rest of the list setup might include your personal repositories and group them accordingly. For example, I published 6 NodeJS API clients and I grouped them into one list. Another example is a list of WordPress plugins I made and finally a list of OSS tools I made. It is extremely useful when you are working on multiple open source projects.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1639125730780/M0yWBsO9_.png" alt="image.png" /></p>
<blockquote>
<p>My current list setup 😉 Like it? let me know in the comments!</p>
</blockquote>
<h2 id="heading-bonus">💖 Bonus</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=_RzLtnEWncs">https://www.youtube.com/watch?v=_RzLtnEWncs</a></div>
<p>As mentioned above, here's the video created by my mentor <a target="_blank" href="https://github.com/eddiejaoude">Eddie Jaoude</a> about GitHub's list. Don't forget to subscribe and support his channel! 😎</p>
<h2 id="heading-share-yours">🐱‍👤 Share Yours!</h2>
<p>Now it is time to share yours! If you have access to the beta then let me know what setup you prefer and why you like it? I'm waiting on the comments below. A screenshot of your list would be a good showcase. 😉</p>
<hr />
<p>📢 Nominate me (<a target="_blank" href="https://github.com/warengonzaga">@WarenGonzaga</a>) as a <a target="_blank" href="https://stars.github.com/nominate">GitHub Star</a>. If you appreciate my hard work, passion, and dedication to open source projects.</p>
<p>Cheers! 🚀👌 See you on my next blog...</p>
]]></content:encoded></item><item><title><![CDATA[The Perfect Domain Name for your JavaScript Library or Framework]]></title><description><![CDATA[Let's say you've published your first open-source JavaScript library or framework, now what? That's it? 🤔 Having an open-source project is like having a child. 👶 You need to take care of it and love your project. Let everyone know about your projec...]]></description><link>https://blog.warengonzaga.com/the-perfect-domain-name-for-your-javascript-library-or-framework</link><guid isPermaLink="true">https://blog.warengonzaga.com/the-perfect-domain-name-for-your-javascript-library-or-framework</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Story]]></category><category><![CDATA[2Articles1Week]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Sat, 04 Dec 2021 19:31:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1639133324330/WtJIsU8it.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Let's say you've published your first open-source JavaScript library or framework, now what? That's it? 🤔 Having an open-source project is like having a child. 👶 You need to take care of it and love your project. Let everyone know about your project, it might help them to make their life easier. 👌</p>
<p>Now, your open-source project should have at least a basic homepage then improve it from time to time as you have free time to work on it. Here's the question, what is the best domain name for a JavaScript library or framework? 🤔</p>
<h2 id="heading-jsorg-subdomain-name"><code>js.org</code> Subdomain Name</h2>
<p><a target="_blank" href="https://js.org"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638626791662/pIjbxJxyx.png" alt="image.png" /></a></p>
<p>Here's the answer to the question above, <code>js.org</code> for me is the best and perfect domain name for every open-source JavaScript library or framework. I made several open-source projects under this domain and it looks professional and making your project stand out among the rest.</p>
<p>My projects are under the <code>js.org</code> domain name.</p>
<ul>
<li><a target="_blank" href="https://buymeacoffee.js.org">buymeacoffee.js.org</a> - A simple and lightweight but powerful Node.js client for Buy Me a Coffee API.</li>
<li><a target="_blank" href="https://gathertown.js.org">gathertown.js.org</a> - A simple and lightweight but powerful Node.js client for Gather Town API.</li>
</ul>
<blockquote>
<p>More projects coming soon...</p>
</blockquote>
<p>As you can see, you'll probably think that these are the official libraries for the services right? Well, the buymeacoffee.js.org is considered official recently and the gathertown.js.org is currently under consideration. Your project will stand out if you put effort into it. ✨</p>
<p>Popular projects under <code>js.org</code> domain name.</p>
<ul>
<li><a target="_blank" href="http://webpack.js.org">webpack.js.org</a> - A static module bundler for modern JavaScript applications.</li>
<li><a target="_blank" href="http://discord.js.org">discord.js.org</a> - A powerful Node.js module that allows you to interact with the Discord API very easily.</li>
</ul>
<h3 id="heading-jsorg-is-free"><code>js.org</code> is FREE</h3>
<p>You'll probably think that having a <code>js.org</code> domain name requires any payment? 😅 </p>
<p>The answer is <strong>NO!</strong> You can enjoy your domain name for FREE forever. 🚀🥰💖 But, you might want to  <a target="_blank" href="https://opencollective.com/js-org">consider donating</a>  to the organization? 🤔🙏</p>
<blockquote>
<p>I'm not affiliated with <code>js.org</code> I just love what they are doing to help others. Why not write a simple blog for them? 😁</p>
</blockquote>
<h2 id="heading-get-your-jsorg-domain-name">Get Your <code>js.org</code> Domain Name</h2>
<p>I'm not going to teach you the step-by-step process because it is <a target="_blank" href="https://github.com/js-org/js.org#step-1">already indicated here</a>. What I'm gonna do is to share my experience of how I got my first <code>js.org</code> domain name (buymeacoffee.js.org) instead. 👌</p>
<p>The first thing you need to do is to think about what name you are going to use under <code>js.org</code>? Figure out this one first before applying to avoid duplicates. Try to visit the site if it is existing or not. If not, then you are good to go! 😎</p>
<p>Don't forget to read their <a target="_blank" href="https://js.org/terms.html">terms of service</a> before applying for a subdomain name under <code>js.org</code>.</p>
<p>If you agree with the terms then read the <a target="_blank" href="https://github.com/js-org/js.org/wiki">official documentation</a>.</p>
<p>Now, once you have the basic information about <code>js.org</code> then I'm gonna share with you how I got my <code>js.org</code> subdomain name.</p>
<h3 id="heading-name-your-jsorg">Name Your <code>js.org</code></h3>
<p>Think the best possible subdomain under <code>js.org</code>, that time I was thinking of <code>buymeacoffee.js.org</code> which is for me a professional domain name for an open-source project. It makes me happy when reading it or says it word by word. 🥰</p>
<blockquote>
<p>To clarify things, before I apply for the subdomain the project is already existed for about 1 year. I'm not saying that don't apply if your project is too young or new. What I'm saying is to apply for a subdomain if your project is for long-term purposes and you want to make it public.</p>
</blockquote>
<h3 id="heading-fork-jsorg-repository">Fork <code>js.org</code> Repository</h3>
<p>Make sure you have a GitHub account to get started. Let's assume you have an account and you know  <a target="_blank" href="https://docs.github.com/en/get-started/quickstart/fork-a-repo">how to fork repository</a>, now let's fork the <a target="_blank" href="https://github.com/js-org/js.org">official repository</a> to your account. 🚀</p>
<p>In my case,  <a target="_blank" href="https://github.com/warengonzaga/js.org">I forked it into my account</a>. ✌</p>
<h3 id="heading-add-your-jsorg-to-the-list">Add Your <code>js.org</code> to the List</h3>
<p>Now let's add your preferred <code>js.org</code> subdomain or my <code>buymeacoffee.js.org</code> subdomain to the official list. Open the file <code>cnames_active.js</code> and add yours!</p>
<p>I add <code>buymeacoffee.js.org</code> based on alphabetical order for example below.</p>
<pre><code class="lang-js"><span class="hljs-keyword">var</span> cnames_active = {
  <span class="hljs-comment">// more subdomains above...</span>
  <span class="hljs-string">"butterfly"</span>: <span class="hljs-string">"cname.vercel-dns.com"</span>, <span class="hljs-comment">// noCF</span>
  <span class="hljs-string">"buttermilk"</span>: <span class="hljs-string">"buttermilk.netlify.com"</span>,
  <span class="hljs-string">"buymeacoffee"</span>: <span class="hljs-string">"warengonzaga.github.io/buymeacoffee.js"</span>, <span class="hljs-comment">// here!</span>
  <span class="hljs-string">"bwb"</span>: <span class="hljs-string">"shbwb.github.io/bwb"</span>,
  <span class="hljs-string">"bwb-docs"</span>: <span class="hljs-string">"shbwb.github.io/bwb-docs"</span>,
  <span class="hljs-comment">// more subdomains below...</span>
}
</code></pre>
<p>After the changes, prepare the PR! Don't PR immediately! Just ready for the PR! 👌</p>
<h3 id="heading-your-reason-for-jsorg">Your Reason for <code>js.org</code></h3>
<p>The <code>js.org</code> is free for everyone, but consider applying if you have a valid reason. Honestly, before applying I published a  <a target="_blank" href="https://github.com/warengonzaga/buymeacoffee.js/discussions/30">discussion about the plan</a>  of applying to <code>js.org</code> for the project <a target="_blank" href="https://buymeacoffee.js.org">BuyMeaCoffeeJS</a>. I guess following what I do is the best way to get your <code>js.org</code> subdomain. 👌😎</p>
<h3 id="heading-lets-ask-for-pull-request">Let's ask for Pull Request</h3>
<p>Here's my <a target="_blank" href="https://github.com/js-org/js.org/pull/6513">pull request</a> for the <code>buymeacoffee.js.org</code> you can follow the format I did and see the conversation with the maintainer. That time, I was using Vercel for the deployments but we are having some weird issues so I switched to GitHub pages instead. I didn't remove the Vercel since I am using a separate domain for a reason. I love to keep this domain name <code>buymeacoffeejs.warengonzaga.com</code> since this is the default and first homepage URL of the project. 😅</p>
<h3 id="heading-enjoy-your-jsorg">Enjoy Your <code>js.org</code></h3>
<p>As you review my recent pull request it is successful with mild issues due to weird issues in Vercel. That's why this is my perfect example to share with you how I got my first js.org subdomain. 🎉</p>
<p>Your <code>js.org</code> subdomain should be available in no time. Please consider <a target="_blank" href="https://opencollective.com/js-org">donating</a>  to the organization as they are helping thousands of open-source projects. 💖</p>
<p>Congrats on your first <code>js.org</code> subdomain! 🎉
Don't forget to share it with me in the comments below.</p>
<h2 id="heading-pros-and-cons-of-jsorg">Pros and Cons of <code>js.org</code></h2>
<p>Almost everything has its pros and cons. Let's get straight to the pros and cons right away!</p>
<h3 id="heading-jsorg-pros"><code>js.org</code> Pros</h3>
<ul>
<li>It's FREE! Forever.<blockquote>
<p>Yes, free forever! You don't need to pay yearly for your domain name.</p>
</blockquote>
</li>
<li>Easy to Apply.<blockquote>
<p>As you can see, it is easy to apply if you have a valid reason!</p>
</blockquote>
</li>
<li>Active Community.<blockquote>
<p>So active that you can get a response within 24 hours. </p>
</blockquote>
</li>
<li>Helpful Maintainers.<blockquote>
<p>The maintainers are so helpful and understanding, very responsive!</p>
</blockquote>
</li>
</ul>
<h3 id="heading-jsorg-cons"><code>js.org</code> Cons</h3>
<ul>
<li>No control to DNS settings.</li>
</ul>
<blockquote>
<p>Honestly, you can't manage the <code>js.org</code> domain. They are providing subdomain access only. Every time you have changes to your subdomain you need to contact them.</p>
</blockquote>
<ul>
<li>Public use only.</li>
</ul>
<blockquote>
<p>If you are planning to use your project for commercial use then I would suggest buying a dedicated domain instead of using <code>js.org</code> subdomains.</p>
</blockquote>
<ul>
<li>Vendor-specific hosting.</li>
</ul>
<blockquote>
<p>In my case, I have an issue with Vercel while adding the subdomain. Don't worry you can still add Vercel hosted page, I'm just not lucky I guess lol. To make it work you need to host your page under GitHub or GitLab pages.</p>
</blockquote>
<p>For me, that's all the pros and cons of using the <code>js.org</code> domain. Overall, I love what they do! 🥰</p>
<h2 id="heading-jsorgjscom-domain-name"><code>js.org</code>/<code>js.com</code> Domain Name</h2>
<p>Wait, what? 🤔</p>
<p>Pay attention! We are talking recently is <code>your.js.org</code> which is a subdomain! This time, we are talking about a root domain name or <code>yourjs.org</code> / <code>yourjs.com</code>.</p>
<p>Let's get to the point, this is a perfect domain name for your JavaScript library or framework if you want to have complete control of your domain name if you are planning to make it commercial sooner or have personal reasons. I don't have any <code>yourjs.org</code>/<code>yourjs.com</code> domain names. 😁</p>
<p>Here are some of the popular JavaScript projects with their own <code>js.org</code>/<code>js.com</code> domain names.</p>
<ul>
<li><a target="_blank" href="https://nodejs.org">nodejs.org</a> - Node.js is an open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside a web browser.</li>
<li><a target="_blank" href="https://parceljs.org">parceljs.org</a> - Parcel combines a great out-of-the-box development experience with a scalable architecture that can take your project from just getting started to a massive production application.</li>
<li><a target="_blank" href="https://gulpjs.com">gulpjs.com</a> - A toolkit to automate &amp; enhance your workflow.</li>
</ul>
<h3 id="heading-register-your-jsorgjscom">Register Your <code>js.org</code>/<code>js.com</code></h3>
<p>Register your <code>js.org</code> or js.com domain name to a domain name registrar. I recommended registering your domain to <a target="_blank" href="https://www.namecheap.com/">Namecheap</a> or <a target="_blank" href="https://www.cloudflare.com/products/registrar/">Cloudflare</a>.</p>
<blockquote>
<p>Please keep in mind that this is not free. You'll have to pay yearly for registering your domain. If you don't have funds or working on free software then I would recommend you to stick to the <code>js.org</code> subdomain name instead.</p>
</blockquote>
<p>Next move?  <a target="_blank" href="https://bfy.tw/S8Ki">Point your domain name to your hosting</a>. 😅😂</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>As you notice, the same pattern right? 😅 </p>
<p>Most of the JS libraries and frameworks should have a JS suffix to their name to indicate that they are libraries or frameworks. In my opinion, this is part of the tradition or culture. When we are working with JavaScript we intend to name it <code>script.js</code> and for making it short we call it <code>scriptjs</code> and eventually when we add styling to it we can say <code>ScriptJS</code> then if we want to register a dedicated domain name based on that name, we'll end up using <code>scriptjs.org</code> or <code>scriptjs.com</code> or <code>script.js.org</code> are you with me? 😎</p>
<p>For me, that's the reason why I call perfect domain name for your JavaScript library or framework.</p>
<hr />
<p>📢 Nominate me (<a target="_blank" href="https://warengonzaga.com">@WarenGonzaga</a>) as a <strong><a target="_blank" href="https://stars.github.com/nominate">GitHub Star</a></strong>. If you appreciate my hard work, passion, and dedication to open source projects.</p>
<p>☕ Please consider <a target="_blank" href="https://warengonzaga.com/donate">sending me some coffees</a> if you love my tech blogs like this.</p>
<p>Cheers! 🚀👌
See you on my next blog...</p>
]]></content:encoded></item><item><title><![CDATA[Create CSS Text Portrait In Less Than 3 Minutes]]></title><description><![CDATA[A CSS text portrait is one of the sweetest gifts for your loved one as a programmer or developer. You can add your personal message to it or just use lyrics from a song to show your love. I made an example below for the context of this tech blog.


T...]]></description><link>https://blog.warengonzaga.com/create-css-text-portrait-in-less-than-3-minutes</link><guid isPermaLink="true">https://blog.warengonzaga.com/create-css-text-portrait-in-less-than-3-minutes</guid><category><![CDATA[Tutorial]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[CSS3]]></category><category><![CDATA[Sass]]></category><category><![CDATA[2Articles1Week]]></category><dc:creator><![CDATA[Waren Gonzaga]]></dc:creator><pubDate>Sun, 28 Nov 2021 18:26:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1639132961890/1wVYBGY5G.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A CSS text portrait is one of the sweetest gifts for your loved one as a programmer or developer. You can add your personal message to it or just use lyrics from a song to show your love. I made an example below for the context of this tech blog.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638053715581/7qbikfjIV.png" alt="emily css text portrait" /></p>
<blockquote>
<p>This is my girlfriend Emily, and I use lyrics from Beautiful in White by Shane Filan.</p>
</blockquote>
<p>It is easy to create your own CSS text portrait from scratch, but how about others willing to create their own but have no knowledge in coding? That's where my builder comes for! 👊</p>
<p>Let's create your own CSS text portrait in less than 3 minutes using my builder!</p>
<h2 id="heading-the-builder">🛠 The Builder</h2>
<p><a target="_blank" href="https://github.com/warengonzaga/css-text-portrait-builder"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638054587456/UZ5LPh7Qi.png" alt="banner repo" /></a></p>
<p>The CSS text portrait builder is a popular pure CSS text portrait builder for your loved ones. You don't need to waste your time just to create it from scratch and spend time working on its CSS sorcery.</p>
<p>I created this builder for the reason of adding space for freedom. That's why I created a builder instead of a plain web application or a drag and drop generator. I know it is more convenient but it is more fun if you allow yourself to get your hands dirty while building a text portrait specifically for your loved ones.</p>
<p>GitHub: <a target="_blank" href="https://github.com/warengonzaga/css-text-portrait-builder">github.com/warengonzaga/css-text-portrait-builder</a></p>
<h2 id="heading-instant-setup">⚡ Instant Setup</h2>
<p>To get started, all you have to do is to go to the <a target="_blank" href="https://github.com/warengonzaga/css-text-portrait-builder">official GitHub repository</a>.</p>
<p>Make sure you meet the following requirements. 👌</p>
<ul>
<li>GitHub Account</li>
<li>Gitpod Account</li>
<li>High-resolution image in JPG/JPEG format.</li>
</ul>
<p>Now, here's the fun part. We are going to use Gitpod as our cloud-based development environment so that it can eliminate inconsistency in our building process due to differences in the operating system we are using. Why not use the same system under Gitpod? 😁</p>
<p>Open the builder using the link below.</p>
<p><a target="_blank" href="https://gitpod.io/#github.com/warengonzaga/css-text-portrait-builder">gitpod.io/#github.com/warengonzaga/css-text-portrait-builder</a></p>
<p>A new Gitpod workspace will be created. Now proceed to the build steps below.</p>
<h2 id="heading-building-steps">📋 Building Steps</h2>
<ol>
<li>Rename your image into <code>bg.jpg</code> and make sure it is in JPG/JPEG format.</li>
<li>Navigate to <code>src/img</code> and upload your image, just replace the existing image.</li>
<li>Next, open the <code>config.json</code> file by just clicking it, an editor will open.</li>
<li>Edit the contents of the <code>config.json</code> file to match your needs. <ul>
<li>For the object <code>name</code>, this is the name of your portrait, it can be the name of your subject.</li>
<li>For the object <code>text</code>, this is the text you want to see in the portrait. It can be lyrics, a passage from a book, or a sweet message to your subject or loved one.</li>
</ul>
</li>
<li>Navigate to <code>src/scss</code> and open the file <code>_vars.scss</code> to edit the settings.</li>
<li>Lastly, look in the command-line interface and hover your mouse to the <code>https://localhost:1234</code> and press <code>ctrl</code> + <code>left click</code> to open it to a new tab. You'll see your builds in real-time.</li>
</ol>
<h2 id="heading-customization">✨ Customization</h2>
<p>You can customize the output of the build by editing the <code>src/scss/_vars.scss</code> file.</p>
<p>This is the default configuration for the colored version.</p>
<pre><code class="lang-scss"><span class="hljs-variable">$brigthness</span>: <span class="hljs-number">1</span>;
<span class="hljs-variable">$grayscale</span>: <span class="hljs-number">0</span>;
<span class="hljs-variable">$invert</span>: <span class="hljs-number">0</span>;
</code></pre>
<p>If you want to use the classic version of text portrait then use the following configuration.</p>
<pre><code class="lang-scss"><span class="hljs-variable">$brigthness</span>: <span class="hljs-number">0.8</span>;
<span class="hljs-variable">$grayscale</span>: <span class="hljs-number">1</span>;
<span class="hljs-variable">$invert</span>: <span class="hljs-number">0</span>;
</code></pre>
<p>Then these are the variables inside the <code>_vars.scss</code> file.</p>
<pre><code class="lang-scss"><span class="hljs-comment">/**
 * builder settings
 */</span>
<span class="hljs-variable">$subject-image</span>: url(<span class="hljs-string">'../img/bg.jpg'</span>); <span class="hljs-comment">// image to potrait</span>
<span class="hljs-variable">$black</span>: <span class="hljs-number">#222</span>; <span class="hljs-comment">// background color</span>
<span class="hljs-variable">$regular</span>: <span class="hljs-number">12px</span>; <span class="hljs-comment">// font size</span>

<span class="hljs-comment">/**
 * image filter settings
 * defaults: brightness = 1, grayscale = 0, invert = 0 (colored result)
 * classic: brightness = 0.8, grayscale = 1, invert = 0 (black and white result)
 */</span>
<span class="hljs-variable">$brigthness</span>: <span class="hljs-number">1</span>;
<span class="hljs-variable">$grayscale</span>: <span class="hljs-number">0</span>;
<span class="hljs-variable">$invert</span>: <span class="hljs-number">0</span>; <span class="hljs-comment">// it will convert the color of the image</span>
</code></pre>
<p>It is always up to you what you want with your builds. Every time you made changes to the code it will automatically update and save your changes.</p>
<h2 id="heading-discussions">💬 Discussions</h2>
<p>To learn more about the builder or you just want to showcase your builds then you are welcome to hop in on our <a target="_blank" href="https://github.com/warengonzaga/css-text-portrait-builder/discussions">official GitHub discussions</a>.</p>
<p>I want to share this build with one of the builders in the community! 🥰</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1638122978738/jhIbAuA1F.png" alt="the almighty loaf" /></p>
<blockquote>
<p>I featured this build since it is very unique, the author of this portrait uses a special character to achieve this meme look.</p>
</blockquote>
<h2 id="heading-last-words">🐱‍👤 Last Words</h2>
<p>Alright, looks like that's fast enough to create your own CSS text portrait using my builder. The builder is currently under development and I will add more features sooner! I created this project in just 4 hours including the publishing of the project. I will leave some useful links below for you to take a look at and learn more about the project.</p>
<p><strong>Official Documentation</strong>: <a target="_blank" href="https://docs.warengonzaga.com/css-text-portrait-builder">docs.warengonzaga.com/css-text-portrait-builder</a></p>
<p><strong>GitHub Repository</strong>: <a target="_blank" href="https://github.com/warengonzaga/css-text-portrait-builder">github.com/warengonzaga/css-text-portrait-builder</a></p>
<hr />
<p>📢 Nominate me (<a target="_blank" href="https://warengonzaga.com">@warengonzaga</a>) as a <strong><a target="_blank" href="https://stars.github.com/nominate">GitHub Star</a></strong>. If you appreciate my hard work, passion, and dedication to open source projects like this.</p>
<p>Cheers! 🚀👌
See you on my next blog...</p>
]]></content:encoded></item></channel></rss>