<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: danielfilemon</title>
    <description>The latest articles on DEV Community by danielfilemon (@danielfilemon).</description>
    <link>https://dev.to/danielfilemon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1049078%2F02a4d8ea-ec92-4cc1-ab8b-445ed079608b.jpg</url>
      <title>DEV Community: danielfilemon</title>
      <link>https://dev.to/danielfilemon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danielfilemon"/>
    <language>en</language>
    <item>
      <title>How to Create a Custom Gutenberg Blocks Plugin in WordPress (wp-custom-blocks)</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Wed, 25 Mar 2026 14:45:00 +0000</pubDate>
      <link>https://dev.to/danielfilemon/how-to-create-a-custom-gutenberg-blocks-plugin-in-wordpress-wp-custom-blocks-4nin</link>
      <guid>https://dev.to/danielfilemon/how-to-create-a-custom-gutenberg-blocks-plugin-in-wordpress-wp-custom-blocks-4nin</guid>
      <description>&lt;p&gt;Building custom Gutenberg blocks is one of the most valuable skills for modern WordPress developers. In this article, we’ll create a real plugin from scratch called &lt;strong&gt;wp-custom-blocks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Gutenberg editor has transformed how we build content in WordPress. Instead of relying on shortcodes or page builders, we can now create reusable, dynamic blocks using modern JavaScript (React) and WordPress APIs.&lt;/p&gt;

&lt;p&gt;In this tutorial, you’ll learn how to create your own custom block plugin and understand the core concepts behind it.&lt;/p&gt;

&lt;p&gt;Prerequisites:&lt;/p&gt;

&lt;p&gt;Before starting, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WordPress installed locally&lt;/li&gt;
&lt;li&gt;Node.js and npm installed&lt;/li&gt;
&lt;li&gt;Basic knowledge of JavaScript and React&lt;/li&gt;
&lt;li&gt;A code editor (VS Code recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 1: Create the Plugin&lt;/p&gt;

&lt;p&gt;Open your terminal and run:&lt;/p&gt;

&lt;p&gt;npx @wordpress/create-block wp-custom-blocks&lt;/p&gt;

&lt;p&gt;This command scaffolds a complete plugin with build tools, configuration, and a sample block.&lt;/p&gt;

&lt;p&gt;Step 2: Navigate to the Project&lt;/p&gt;

&lt;p&gt;cd wp-custom-blocks&lt;br&gt;
npm install&lt;br&gt;
npm start&lt;/p&gt;

&lt;p&gt;Now your development environment is running and watching for changes.&lt;/p&gt;

&lt;p&gt;Step 3: Understand the Project Structure&lt;/p&gt;

&lt;p&gt;The generated project includes:&lt;/p&gt;

&lt;p&gt;src/&lt;br&gt;
  index.js&lt;br&gt;
build/&lt;br&gt;
block.json&lt;br&gt;
package.json&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/&lt;/code&gt; → source code (React)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;build/&lt;/code&gt; → compiled files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;block.json&lt;/code&gt; → block configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 4: Create a Hero Block&lt;/p&gt;

&lt;p&gt;Let’s create a custom block with editable content.&lt;/p&gt;

&lt;p&gt;Create a folder:&lt;/p&gt;

&lt;p&gt;src/blocks/hero/&lt;/p&gt;

&lt;p&gt;Register the Block&lt;/p&gt;

&lt;p&gt;js&lt;br&gt;
import { registerBlockType } from '@wordpress/blocks';&lt;br&gt;
import Edit from './edit';&lt;br&gt;
import Save from './save';&lt;/p&gt;

&lt;p&gt;registerBlockType('wpcb/hero', {&lt;br&gt;
  title: 'Hero Block',&lt;br&gt;
  category: 'design',&lt;/p&gt;

&lt;p&gt;attributes: {&lt;br&gt;
    title: { type: 'string', default: 'Hero Title' },&lt;br&gt;
    text: { type: 'string', default: 'Hero description...' },&lt;br&gt;
    buttonText: { type: 'string', default: 'Click here' },&lt;br&gt;
  },&lt;/p&gt;

&lt;p&gt;edit: Edit,&lt;br&gt;
  save: Save,&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;Step 5: Block Editor (Edit)&lt;/p&gt;

&lt;p&gt;js&lt;br&gt;
import { RichText } from '@wordpress/block-editor';&lt;/p&gt;

&lt;p&gt;export default function Edit({ attributes, setAttributes }) {&lt;br&gt;
  return (&lt;br&gt;
    &lt;/p&gt;
&lt;br&gt;
      
        tagName="h1"&lt;br&gt;
        value={attributes.title}&lt;br&gt;
        onChange={(value) =&amp;gt; setAttributes({ title: value })}&lt;br&gt;
      /&amp;gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;RichText
    tagName="p"
    value={attributes.text}
    onChange={(value) =&amp;gt; setAttributes({ text: value })}
  /&amp;gt;

  &amp;lt;RichText
    tagName="button"
    value={attributes.buttonText}
    onChange={(value) =&amp;gt;
      setAttributes({ buttonText: value })
    }
  /&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Step 6: Save Component&lt;/p&gt;

&lt;p&gt;js&lt;br&gt;
import { RichText } from '@wordpress/block-editor';&lt;/p&gt;

&lt;p&gt;export default function Save({ attributes }) {&lt;br&gt;
  return (&lt;br&gt;
    &lt;/p&gt;
&lt;br&gt;
      &lt;h1&gt;
&lt;br&gt;
        &lt;br&gt;
      &lt;/h1&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;p&amp;gt;
    &amp;lt;RichText.Content value={attributes.text} /&amp;gt;
  &amp;lt;/p&amp;gt;

  &amp;lt;button&amp;gt;
    &amp;lt;RichText.Content value={attributes.buttonText} /&amp;gt;
  &amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Step 7: Import the Block&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;src/index.js&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;js&lt;br&gt;
import './blocks/hero';&lt;/p&gt;

&lt;p&gt;Step 8: Test in WordPress&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Move the plugin folder to:
wp-content/plugins/&lt;/li&gt;
&lt;li&gt;Activate the plugin&lt;/li&gt;
&lt;li&gt;Open the block editor&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;Hero Block&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Creating custom Gutenberg blocks is a powerful way to build modern WordPress experiences. With tools like &lt;code&gt;@wordpress/create-block&lt;/code&gt;, the setup is easier than ever.&lt;/p&gt;

&lt;p&gt;If you're serious about WordPress development, mastering block development is a must-have skill.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>tutorial</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>How to Use Shopify to Build Your Online Store</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Sun, 06 Jul 2025 13:27:35 +0000</pubDate>
      <link>https://dev.to/danielfilemon/how-to-use-shopify-to-build-your-online-store-1beb</link>
      <guid>https://dev.to/danielfilemon/how-to-use-shopify-to-build-your-online-store-1beb</guid>
      <description>&lt;p&gt;Nowadays, many people want to sell products on the internet, and Shopify is a platform that helps you create an online store in a simple way. I will explain, step by step, how to use Shopify to start your online business.&lt;/p&gt;

&lt;p&gt;First, you need to go to Shopify’s website and sign up. You can test the platform for free for a few days before paying for a plan. After creating your account, you choose the name of your store, add your business information, and set the currency and language you want to use.&lt;/p&gt;

&lt;p&gt;Next, you can customize how your store looks. Shopify has many ready-made themes, some free and some paid, to make your website look nice and organized. You can change the colors, fonts, and images to match your brand style.&lt;/p&gt;

&lt;p&gt;With the layout ready, it’s time to add your products. You should upload photos, set the prices, write a description, and add the stock quantity. Shopify lets you organize products into categories, which helps customers find what they are looking for. There are also apps you can use to improve your sales, marketing, and store management.&lt;/p&gt;

&lt;p&gt;Another important step is choosing payment and shipping options. Shopify accepts credit cards, PayPal, and other payment systems. You can also set up shipping rates and connect with delivery companies, so customers know exactly how much they will pay to receive the product.&lt;/p&gt;

&lt;p&gt;Finally, after checking all the details, you can publish your store and start selling. In the Shopify admin panel, you can see sales reports, visitor numbers, and other data that help you improve your business more and more.&lt;/p&gt;

&lt;p&gt;In summary, Shopify is a practical tool that lets you create and manage an online store quickly and safely. This way, anyone can start selling online and reach more customers.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>shopify</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I Built My First Portfolio with React and Vite</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Thu, 03 Jul 2025 17:32:15 +0000</pubDate>
      <link>https://dev.to/danielfilemon/how-i-built-my-first-portfolio-with-react-and-vite-147</link>
      <guid>https://dev.to/danielfilemon/how-i-built-my-first-portfolio-with-react-and-vite-147</guid>
      <description>&lt;p&gt;Hello, developers! In this article, I want to share how I built my first portfolio using &lt;strong&gt;React&lt;/strong&gt; and the &lt;strong&gt;Vite&lt;/strong&gt; bundler. I had always wanted a personal website to showcase my projects, tell a bit of my story, and make it easier for recruiters and clients to get in touch.&lt;/p&gt;

&lt;p&gt;I chose React for its popularity and flexibility, and used Vite to speed up development with a modern, fast, and practical environment. I’ll tell you how I planned, developed, and published my portfolio — and the lessons I learned along the way.&lt;/p&gt;

&lt;p&gt;Motivation&lt;/p&gt;

&lt;p&gt;Having an online portfolio today is essential for anyone working in tech. Besides being a business card, it’s a concrete way to demonstrate your skills and stand out.&lt;/p&gt;

&lt;p&gt;I chose React and Vite because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React gives me freedom and a powerful component-based architecture&lt;/li&gt;
&lt;li&gt;Vite has a super fast build and efficient hot reload&lt;/li&gt;
&lt;li&gt;The React community is huge, with tons of documentation&lt;/li&gt;
&lt;li&gt;Deployment is easy on platforms like Vercel or Netlify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Planning&lt;/p&gt;

&lt;p&gt;Before opening the code editor, I did a bit of planning:&lt;/p&gt;

&lt;p&gt;✅ Portfolio sections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Home&lt;/li&gt;
&lt;li&gt;About&lt;/li&gt;
&lt;li&gt;Projects&lt;/li&gt;
&lt;li&gt;Contact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Chosen technologies&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Design&lt;br&gt;
I got inspiration from Dribbble and Behance references to define the color palette, typography, and layout. I made a quick wireframe on paper to guide me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Development
&lt;/h2&gt;

&lt;p&gt;I started the project with:&lt;/p&gt;

&lt;p&gt;npm create vite@latest my-portfolio --template react&lt;/p&gt;

&lt;p&gt;Then I configured Tailwind CSS following the official documentation, which really sped up the styling process.&lt;/p&gt;

&lt;p&gt;I organized the project structure like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/src/components&lt;/code&gt; for reusable components (navbar, footer, project cards)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/src/pages&lt;/code&gt; for the main pages&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/public&lt;/code&gt; for images and favicons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of my initial challenges was keeping components clean and separated, since it’s easy to end up with giant files. Later I refactored and split them into smaller, easier-to-maintain components.&lt;/p&gt;

&lt;p&gt;I also added a JSON file to store the projects, so I can update them later without changing the layout code directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;For hosting, I used &lt;strong&gt;Vercel&lt;/strong&gt;, which works great with React projects. You just connect your GitHub repository, and Vercel takes care of the entire build and deployment process automatically.&lt;/p&gt;

&lt;p&gt;I also set up a custom domain to make my portfolio more professional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building my portfolio with React and Vite was a great experience. I learned how to better organize my code, practiced using modern tools, and launched my site in just a few days.&lt;/p&gt;

&lt;p&gt;If you’d like to take a look, check it out here:&lt;/p&gt;

&lt;p&gt;👉 (&lt;a href="https://danielfilemon)*" rel="noopener noreferrer"&gt;https://danielfilemon)*&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to leave a comment or question — I’d love to connect! &lt;/p&gt;

</description>
      <category>vercel</category>
      <category>vite</category>
      <category>react</category>
      <category>portfolio</category>
    </item>
    <item>
      <title># How to Optimize Images to Improve Your Website’s SEO 🚀</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Wed, 02 Jul 2025 13:51:07 +0000</pubDate>
      <link>https://dev.to/danielfilemon/-how-to-optimize-images-to-improve-your-websites-seo-5cag</link>
      <guid>https://dev.to/danielfilemon/-how-to-optimize-images-to-improve-your-websites-seo-5cag</guid>
      <description>&lt;p&gt;Images are essential to make a website attractive and engaging, but if they aren’t optimized, they can hurt your performance and impact your Google rankings. In this article, I’ll show you in a practical way how to optimize images to ensure a good user experience while improving your website’s SEO.  &lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Why does image optimization impact SEO?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Slow sites are penalized in search rankings
&lt;/li&gt;
&lt;li&gt;Heavy images increase loading time
&lt;/li&gt;
&lt;li&gt;Optimized images also rank better on Google Images, bringing extra organic traffic
&lt;/li&gt;
&lt;li&gt;Improved accessibility for users with screen readers
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words: **optimizing your images improves your website’s performance and visibility at the same time.&lt;/p&gt;




&lt;h2&gt;
  
  
  1️⃣ Choose the right format
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JPEG&lt;/strong&gt;: best for photographs
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PNG&lt;/strong&gt;: great for images with transparency
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebP&lt;/strong&gt;: modern format, high quality, smaller size
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SVG&lt;/strong&gt;: ideal for icons and vector graphics
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;em&gt;Tip&lt;/em&gt;: WebP can reduce image weight by up to 30% compared to JPEG without losing quality.&lt;/p&gt;




&lt;h2&gt;
  
  
  2️⃣ Reduce file size
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Set width and height to what is actually needed
&lt;/li&gt;
&lt;li&gt;Use compression tools like &lt;a href="https://tinypng.com/" rel="noopener noreferrer"&gt;TinyPNG&lt;/a&gt;, &lt;a href="https://imageoptim.com/" rel="noopener noreferrer"&gt;ImageOptim&lt;/a&gt;, or plugins such as &lt;strong&gt;Smush&lt;/strong&gt; (WordPress)
&lt;/li&gt;
&lt;li&gt;Avoid oversized images scaled down with CSS&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3️⃣ Write a proper ALT attribute
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;alt&lt;/code&gt; attribute describes the content of the image, helping Google understand it while improving accessibility.  &lt;/p&gt;

&lt;p&gt;Example:  &lt;/p&gt;

&lt;p&gt;html&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/carrot-cake.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/carrot-cake.jpg" alt="Easy and fluffy carrot cake" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>website</category>
      <category>seo</category>
    </item>
    <item>
      <title>🚀 Introducing MyStarterTheme: A Clean, Minimal WordPress Starter Theme for Developers</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Tue, 01 Jul 2025 19:54:21 +0000</pubDate>
      <link>https://dev.to/danielfilemon/introducing-mystartertheme-a-clean-minimal-wordpress-starter-theme-for-developers-4l7a</link>
      <guid>https://dev.to/danielfilemon/introducing-mystartertheme-a-clean-minimal-wordpress-starter-theme-for-developers-4l7a</guid>
      <description>&lt;p&gt;Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;If you’ve ever built a custom WordPress theme from scratch, you know how time-consuming it can be to set up the same base structure over and over again. That’s why I created MyStarterTheme, a clean and minimalist starter theme ready to accelerate your development.&lt;/p&gt;

&lt;p&gt;In this post, I’d love to walk you through what makes MyStarterTheme useful, what features it includes, and how you can try it out or even contribute.&lt;/p&gt;

&lt;p&gt;✨ Why MyStarterTheme?&lt;br&gt;
WordPress remains one of the world’s most popular CMS platforms, but the default themes or heavy frameworks can sometimes be bloated for a fully custom project. With MyStarterTheme, you get:&lt;/p&gt;

&lt;p&gt;✅ A clean foundation with minimal styling&lt;br&gt;
✅ Support for modern WordPress features (custom logos, featured images, etc.)&lt;br&gt;
✅ Ready-to-go template structure&lt;br&gt;
✅ A sidebar area for widgets&lt;br&gt;
✅ Easy-to-read, developer-friendly code&lt;/p&gt;

&lt;p&gt;It’s intentionally kept simple, so you can extend it however you like — whether with Gutenberg blocks, advanced Custom Post Types, or custom styles.&lt;/p&gt;

&lt;p&gt;🛠 Features Overview&lt;br&gt;
Here’s what’s included out of the box:&lt;/p&gt;

&lt;p&gt;Fully responsive, minimal HTML/CSS&lt;/p&gt;

&lt;p&gt;Custom logo support&lt;/p&gt;

&lt;p&gt;Navigation menu registered in functions.php&lt;/p&gt;

&lt;p&gt;Sidebar with widget support&lt;/p&gt;

&lt;p&gt;Featured image (post thumbnails) support&lt;/p&gt;

&lt;p&gt;Simple, commented code structure&lt;/p&gt;

&lt;p&gt;GPL v2+ license, so you’re free to build on top of it&lt;/p&gt;

&lt;p&gt;🚀 Getting Started&lt;br&gt;
You can get started right away:&lt;/p&gt;

&lt;p&gt;1️⃣ Clone the repository:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/danielfilemon/my-starter-theme.git" rel="noopener noreferrer"&gt;https://github.com/danielfilemon/my-starter-theme.git&lt;/a&gt;&lt;br&gt;
2️⃣ Place it inside your WordPress theme folder:&lt;br&gt;
wp-content/themes/my-starter-theme&lt;/p&gt;

&lt;p&gt;3️⃣ Activate the theme from the WordPress admin.&lt;/p&gt;

&lt;p&gt;That’s it! You can now begin customizing to your heart’s content.&lt;/p&gt;

&lt;p&gt;🙌 Contributing&lt;br&gt;
If you spot any issues or have ideas for improvement, feel free to open an issue or pull request on GitHub. Community contributions are more than welcome!&lt;/p&gt;

&lt;p&gt;👉 Check out the repository on GitHub&lt;/p&gt;

&lt;p&gt;❤️ Final Thoughts&lt;br&gt;
My goal with MyStarterTheme is to make the life of WordPress developers easier, speeding up your workflow so you can focus on what matters: building amazing websites.&lt;/p&gt;

&lt;p&gt;If you give it a try, let me know! I’d love to hear your feedback or see what you build with it.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>themes</category>
    </item>
    <item>
      <title>How I Built a Simple Contact Form Plugin for WordPress from Scratch</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Mon, 30 Jun 2025 18:30:07 +0000</pubDate>
      <link>https://dev.to/danielfilemon/how-i-built-a-simple-contact-form-plugin-for-wordpress-from-scratch-65l</link>
      <guid>https://dev.to/danielfilemon/how-i-built-a-simple-contact-form-plugin-for-wordpress-from-scratch-65l</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcmkw7af5evg417slmf84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcmkw7af5evg417slmf84.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;👋 Introduction&lt;br&gt;
Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;Today I’d like to share how I built a simple contact form plugin for WordPress from scratch. This is a perfect step-by-step guide for anyone who wants to get started developing plugins and understand how the magic behind WordPress really works.&lt;/p&gt;

&lt;p&gt;This project is designed both for those who want to learn and for those who want to customize their own websites.&lt;/p&gt;

&lt;p&gt;✨ What will we build?&lt;br&gt;
✅ A simple contact form plugin&lt;br&gt;
✅ Fields: name, email, message&lt;br&gt;
✅ Sends the message directly to the WordPress site administrator’s email&lt;br&gt;
✅ Easy to install and activate&lt;br&gt;
✅ You can place the form anywhere using a shortcode&lt;/p&gt;

&lt;p&gt;🗂️ Plugin structure&lt;br&gt;
The project structure looks like this:&lt;/p&gt;

&lt;p&gt;my-contact-form-plugin/&lt;br&gt;
  ├── my-contact-form-plugin.php&lt;br&gt;
  └── readme.md&lt;br&gt;
🧩 Plugin code&lt;br&gt;
Inside my-contact-form-plugin.php, add:&lt;/p&gt;

&lt;p&gt;&amp;lt;?php&lt;br&gt;
/*&lt;br&gt;
Plugin Name: My Contact Form&lt;br&gt;
Description: A simple contact form plugin with shortcode&lt;br&gt;
Version: 1.0&lt;br&gt;
Author: Your Name&lt;br&gt;
*/&lt;/p&gt;

&lt;p&gt;// Prevent direct access&lt;br&gt;
if ( ! defined( 'ABSPATH' ) ) exit;&lt;/p&gt;

&lt;p&gt;/**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Render the form
*/
function mcf_render_form() {
ob_start();
?&amp;gt;

    Name:
        
    
    Email:
        
    
    Message:
        
    
    Send

&amp;lt;?php
return ob_get_clean();
}&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;/**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Handle the form submission&lt;br&gt;
*/&lt;br&gt;
function mcf_handle_post() {&lt;br&gt;
if ( isset($_POST['mcf_submit']) ) {&lt;br&gt;
    $name     = sanitize_text_field($_POST['mcf_name']);&lt;br&gt;
    $email    = sanitize_email($_POST['mcf_email']);&lt;br&gt;
    $message  = sanitize_textarea_field($_POST['mcf_message']);&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$to      = get_option('admin_email');
$subject = "New contact message from $name";
$body    = "Name: $name\nEmail: $email\nMessage:\n$message";
$headers = ["From: $name &amp;lt;$email&amp;gt;"];

wp_mail($to, $subject, $body, $headers);

// Simple confirmation
add_action('wp_footer', function() {
    echo "&amp;lt;script&amp;gt;alert('Message sent successfully!');&amp;lt;/script&amp;gt;";
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;br&gt;
}&lt;br&gt;
add_action('init', 'mcf_handle_post');&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;// Register the shortcode&lt;br&gt;
add_shortcode('my_contact_form', 'mcf_render_form');&lt;br&gt;
🛠️ How to install&lt;br&gt;
1️⃣ Upload the plugin folder to wp-content/plugins/&lt;br&gt;
2️⃣ Activate it from the WordPress dashboard&lt;br&gt;
3️⃣ In any page or post, insert this shortcode:&lt;/p&gt;

&lt;p&gt;plaintext&lt;br&gt;
Copiar&lt;br&gt;
Editar&lt;br&gt;
[my_contact_form]&lt;br&gt;
✅ Done! The form will be working for your visitors.&lt;/p&gt;

&lt;p&gt;🚀 How could it be improved?&lt;br&gt;
This is a basic starter plugin, but you can expand it:&lt;/p&gt;

&lt;p&gt;Add prettier styles with CSS&lt;/p&gt;

&lt;p&gt;Improve validation (with regex, for example)&lt;/p&gt;

&lt;p&gt;Add anti-spam protection (like Google reCAPTCHA)&lt;/p&gt;

&lt;p&gt;Save messages to the WordPress database&lt;/p&gt;

&lt;p&gt;Display submitted messages in the WordPress admin panel&lt;/p&gt;

&lt;p&gt;👨‍💻 Code on GitHub&lt;br&gt;
If you want to check the repository, contribute, or make suggestions:&lt;/p&gt;

&lt;p&gt;👉 [danielfilemon]&lt;/p&gt;

&lt;p&gt;🤝 Conclusion&lt;br&gt;
Building plugins for WordPress may sound intimidating, but starting with something small — like a contact form — is an amazing way to understand the structure and the connection between WordPress and PHP.&lt;/p&gt;

&lt;p&gt;I hope this tutorial helps you take your first steps! If you’d like to share ideas or collaborate, feel free to reach out here or on GitHub. 🚀&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>php</category>
      <category>plugin</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Name Variables Clearly in JavaScript</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Fri, 21 Feb 2025 19:24:53 +0000</pubDate>
      <link>https://dev.to/danielfilemon/how-to-name-variables-clearly-in-javascript-3lfj</link>
      <guid>https://dev.to/danielfilemon/how-to-name-variables-clearly-in-javascript-3lfj</guid>
      <description>&lt;p&gt;Choosing good variable names makes code clearer and easier to maintain. Well-defined names help with understanding and reduce errors, making the code more readable for other developers. Avoid generic names and prefer descriptive terms that precisely represent the variable’s purpose, facilitating quick identification of its use.&lt;/p&gt;

&lt;p&gt;Use the camelCase format, maintaining a consistent pattern throughout the code, as this improves standardization and avoids confusion. Additionally, avoiding excessive abbreviations and overly long names is essential to balancing clarity and conciseness. Variables should indicate their function in the code, making it more organized and intuitive.&lt;/p&gt;

&lt;p&gt;Well-named code not only improves individual understanding but also facilitates collaboration among developers, reducing the need for excessive explanatory comments. Moreover, clear and standardized code enhances long-term maintenance by making future modifications and debugging easier.&lt;/p&gt;

&lt;p&gt;Following these practices improves development quality, prevents future confusion, and contributes to more professional and efficient code.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>vibecoding</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The Importance of Networking in a Developer's Career</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Wed, 12 Feb 2025 18:56:11 +0000</pubDate>
      <link>https://dev.to/danielfilemon/the-importance-of-networking-in-a-developers-career-2opg</link>
      <guid>https://dev.to/danielfilemon/the-importance-of-networking-in-a-developers-career-2opg</guid>
      <description>&lt;p&gt;Networking is essential for developers as it opens doors to job opportunities, learning, and collaborations. Many positions are filled through referrals, and staying in touch with other professionals can make it easier to access these opportunities. Additionally, exchanging experiences with other developers accelerates learning, helps solve problems with new approaches, and keeps you updated on emerging technologies.&lt;/p&gt;

&lt;p&gt;Building an active presence in online communities, events, and social networks such as LinkedIn and Twitter increases visibility and credibility in the field. Contributing to open-source projects is also a way to showcase skills, collaborate with other professionals, and expand connections in a practical and relevant way.&lt;/p&gt;

&lt;p&gt;Networking is not just about adding people but creating genuine relationships, maintaining contact, interacting regularly, and offering help whenever possible. Building valuable connections can lead not only to professional opportunities but also to continuous learning and personal growth. Investing in networking can be the key to career growth and building a strong support network. Share your experiences, expand your network, and take advantage of the opportunities that arise!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Docker for Beginners: Containerizing Your First Application</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Tue, 04 Feb 2025 18:35:25 +0000</pubDate>
      <link>https://dev.to/danielfilemon/docker-for-beginners-containerizing-your-first-application-2mpk</link>
      <guid>https://dev.to/danielfilemon/docker-for-beginners-containerizing-your-first-application-2mpk</guid>
      <description>&lt;p&gt;If you've heard about Docker but never used it, this guide is for you. Docker is a platform that allows you to create, distribute, and run applications in isolated containers. This means you can run your application in any environment without worrying about OS differences or dependencies.&lt;/p&gt;

&lt;p&gt;First, you need to install Docker. Visit the official website (&lt;a href="https://www.docker.com/get-started" rel="noopener noreferrer"&gt;https://www.docker.com/get-started&lt;/a&gt;), download, and install Docker Desktop for your operating system. After installation, check if everything is working by running the following command in your terminal:&lt;/p&gt;

&lt;p&gt;If everything is set up correctly, Docker will return the installed version.&lt;/p&gt;

&lt;p&gt;Creating Your First Application&lt;br&gt;
Let's create a simple web server using Node.js and Docker. First, create a project folder and a server.js file:&lt;/p&gt;

&lt;p&gt;mkdir my-docker-project &amp;amp;&amp;amp; cd my-docker-project&lt;br&gt;
Now, create the server.js file and add the following code:&lt;/p&gt;

&lt;p&gt;const http = require("http");&lt;/p&gt;

&lt;p&gt;const server = http.createServer((req, res) =&amp;gt; {&lt;br&gt;
    res.writeHead(200, { "Content-Type": "text/plain" });&lt;br&gt;
    res.end("Hello, Docker!\n");&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;const PORT = 3000;&lt;br&gt;
server.listen(PORT, () =&amp;gt; {&lt;br&gt;
    console.log(&lt;code&gt;Server running at http://localhost:${PORT}&lt;/code&gt;);&lt;br&gt;
});&lt;br&gt;
Next, create a Dockerfile in the same folder with the following content:&lt;/p&gt;

&lt;h1&gt;
  
  
  Use the official Node.js image
&lt;/h1&gt;

&lt;p&gt;FROM node:18&lt;/p&gt;

&lt;h1&gt;
  
  
  Set the working directory inside the container
&lt;/h1&gt;

&lt;p&gt;WORKDIR /app&lt;/p&gt;

&lt;h1&gt;
  
  
  Copy project files into the container
&lt;/h1&gt;

&lt;p&gt;COPY . .&lt;/p&gt;

&lt;h1&gt;
  
  
  Expose port 3000
&lt;/h1&gt;

&lt;p&gt;EXPOSE 3000&lt;/p&gt;

&lt;h1&gt;
  
  
  Command to run the server
&lt;/h1&gt;

&lt;p&gt;CMD ["node", "server.js"]&lt;br&gt;
Now, to build the Docker image, run the following command in your terminal:&lt;/p&gt;

&lt;p&gt;docker build -t my-server .&lt;br&gt;
This command creates an image called my-server. Now, let's run it inside a container:&lt;/p&gt;

&lt;p&gt;docker run -p 3000:3000 my-server&lt;br&gt;
This starts the container and maps port 3000 from the container to port 3000 on your computer. Now, open your browser and go to &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;, and you will see the message "Hello, Docker!".&lt;/p&gt;

</description>
      <category>docker</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Best Practices for Writing Clean Code in JavaScript</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Mon, 03 Feb 2025 12:37:51 +0000</pubDate>
      <link>https://dev.to/danielfilemon/best-practices-for-writing-clean-code-in-javascript-k6a</link>
      <guid>https://dev.to/danielfilemon/best-practices-for-writing-clean-code-in-javascript-k6a</guid>
      <description>&lt;p&gt;Writing clean code is essential to facilitate maintenance, improve readability, and ensure the scalability of a project. To achieve this, name variables and functions descriptively, choosing clear and meaningful names that express the purpose of the code. Avoid redundancies and unnecessary code, making it more direct and efficient. Use arrow functions whenever possible to improve conciseness and readability. Avoid excessive comments, as well-written code should be self-explanatory. Break large functions into smaller, reusable parts to facilitate maintenance and understanding. Use template literals to enhance the readability of concatenated strings and prefer named constants instead of magic numbers to make the code more comprehensible. Avoid mutability by opting for &lt;code&gt;const&lt;/code&gt; and &lt;code&gt;let&lt;/code&gt; instead of &lt;code&gt;var&lt;/code&gt;, and refrain from modifying objects directly, using the spread operator when necessary. Use destructuring to access object properties more efficiently and clearly. Maintain consistency in code style by using tools like ESLint and Prettier, ensuring standardization and preventing common errors. By applying these best practices, your code will become more organized, comprehensible, and less prone to failures. 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introduction to Full Stack Development for Beginners</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Tue, 28 Jan 2025 18:22:32 +0000</pubDate>
      <link>https://dev.to/danielfilemon/introduction-to-full-stack-development-for-beginners-1kma</link>
      <guid>https://dev.to/danielfilemon/introduction-to-full-stack-development-for-beginners-1kma</guid>
      <description>&lt;p&gt;Full Stack Development involves working on both the front-end, which is the visible part of a website or application, and the back-end, which includes the server and database. A Full Stack developer is responsible for building the entire system, ensuring that all components work seamlessly together. The main technologies used in Full Stack Development include HTML, which structures the content of the page; CSS, which styles the page to make it visually appealing; and JavaScript, which adds interactivity. On the back-end, Node.js allows developers to use JavaScript to create fast and scalable servers. For front-end development, React is a popular JavaScript library for building dynamic and reusable user interfaces.&lt;/p&gt;

&lt;p&gt;Databases play a crucial role in storing application data, with SQL databases like MySQL and PostgreSQL providing structured data management, while NoSQL databases like MongoDB offer more flexibility for handling unstructured data. To start in Full Stack Development, it is essential to first learn the basics of front-end technologies, including HTML, CSS, and JavaScript. Then, exploring back-end development with Node.js and databases will help build a solid foundation. Practice is key, so working on simple projects helps reinforce knowledge and develop problem-solving skills. As learning progresses, studying frameworks such as React for the front-end and Express.js for the back-end enhances development efficiency. With continuous practice, a Full Stack developer gains the ability to build complete applications, managing everything from user interfaces to server-side logic and database management.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Organize Your Code with SASS/SCSS</title>
      <dc:creator>danielfilemon</dc:creator>
      <pubDate>Mon, 11 Nov 2024 14:11:04 +0000</pubDate>
      <link>https://dev.to/danielfilemon/test-3cm6</link>
      <guid>https://dev.to/danielfilemon/test-3cm6</guid>
      <description>&lt;p&gt;ASS/SCSS are tools that significantly improve the organization and reusability of CSS code, making development more efficient and the code cleaner. One of their key features is the use of variables, which allow developers to store reusable values such as colors, sizes, and fonts. This makes design changes easier without the need to manually update multiple parts of the code. Additionally, mixins enable the creation of reusable code blocks, ensuring consistent styling across different elements while reducing redundancy and improving maintainability.&lt;/p&gt;

&lt;p&gt;Another essential feature is inheritance, which allows styles to be shared between different classes using @extend, eliminating the need to rewrite similar CSS rules. This results in cleaner and more maintainable code. Furthermore, SASS/SCSS supports breaking the code into smaller, well-organized files using partials and imports, improving project structure and making collaboration among developers easier.&lt;/p&gt;

&lt;p&gt;With these capabilities, SASS/SCSS brings greater flexibility, organization, and efficiency to front-end development, ensuring that code remains modular, reusable, and easy to manage. As a result, projects can scale more effectively while maintaining a consistent visual style and simplifying future design updates.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
