<?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: Brian Oginga</title>
    <description>The latest articles on DEV Community by Brian Oginga (@brian_oginga).</description>
    <link>https://dev.to/brian_oginga</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%2F1078245%2F2f1794fa-3640-4645-80cf-5fe244bd64d8.jpeg</url>
      <title>DEV Community: Brian Oginga</title>
      <link>https://dev.to/brian_oginga</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/brian_oginga"/>
    <language>en</language>
    <item>
      <title>Beginner's Guide to Open Source Contribution | Djangonaut Space 2026</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Sat, 14 Mar 2026 19:57:00 +0000</pubDate>
      <link>https://dev.to/brian_oginga/beginners-guide-to-open-source-contribution-djangonaut-space-2026-22e0</link>
      <guid>https://dev.to/brian_oginga/beginners-guide-to-open-source-contribution-djangonaut-space-2026-22e0</guid>
      <description>&lt;p&gt;I just fixed a bug on the official Django website. Not a personal project. Not a tutorial app. The actual website that millions of developers visit every day at djangoproject.com.&lt;br&gt;
I am not a senior developer. And it only took me one week.&lt;br&gt;
Here is exactly how it happened — and how you can do the same.&lt;/p&gt;

&lt;p&gt;What is Open Source?&lt;br&gt;
Open source software is software whose source code is publicly available. Anyone can read it, learn from it, report bugs, suggest improvements, and contribute fixes. The tools you use every day — Python, Django, VS Code, Firefox, Linux — are all open source. They exist because thousands of developers around the world volunteered their time to build and maintain them.&lt;br&gt;
When you contribute to open source you are not just helping a project. You are joining a global community of developers who believe software should be transparent, collaborative and free.&lt;br&gt;
There are two types of contributions most beginners overlook:&lt;br&gt;
Code contributions — fixing bugs, adding features, improving performance. This is what most people think of when they hear "open source contribution."&lt;br&gt;
Non-code contributions — improving documentation, reporting bugs, reviewing pull requests, improving accessibility. These are just as valuable and often more beginner-friendly.&lt;br&gt;
My first contribution was a CSS accessibility fix. One line of code. It was a non-intimidating entry point into a massive codebase — and that is exactly the kind of issue you should look for as a beginner.&lt;/p&gt;

&lt;p&gt;The Benefits of Contributing&lt;br&gt;
Before I joined Djangonaut Space I asked myself: why would I spend my free time working on someone else's code for free?&lt;br&gt;
Here is what I discovered after actually doing it:&lt;br&gt;
A real portfolio piece. Not a todo app. Not a clone project. A merged pull request on a production codebase used by millions of developers, permanently linked to your GitHub profile with your name on it.&lt;br&gt;
Mentorship from experienced developers. When a maintainer reviews your PR and leaves comments, that is free code review from someone who has been writing production code for years. You cannot buy that.&lt;br&gt;
Understanding how professional teams work. Branches, pull requests, code reviews, CI pipelines, issue trackers — these are the tools every software job uses. Open source gives you hands-on experience with all of them before you ever set foot in a company.&lt;br&gt;
Confidence. Nothing proves you can write real code like code that actually ships.&lt;/p&gt;

&lt;p&gt;The Fears That Stop Beginners&lt;br&gt;
I had all of these thoughts before I made my first contribution:&lt;br&gt;
"My code is not good enough." "I will break something." "Senior developers will judge my PR." "I need to understand the entire codebase first."&lt;br&gt;
Every single one of these is wrong.&lt;br&gt;
My entire fix was one line of CSS. Finding that line took longer than writing it. The maintainers were welcoming, not intimidating. And I understood maybe 5% of the codebase — just enough to fix my specific issue.&lt;br&gt;
The open source community has spent years building programs specifically to help beginners get started because they need new contributors to survive. You are wanted, not tolerated.&lt;/p&gt;

&lt;p&gt;Programs That Will Help You Get Started&lt;br&gt;
You do not have to find your way into open source alone. These programs exist specifically to guide beginners:&lt;br&gt;
Google Summer of Code (GSoC)&lt;br&gt;
Google's paid open source program. You apply to work on a specific project for three months and Google pays you a stipend. Applications open once a year and are competitive, but being a first-time contributor to a project before applying significantly improves your chances. Visit summerofcode.withgoogle.com.&lt;br&gt;
Outreachy&lt;br&gt;
Paid remote internships specifically for people underrepresented in tech. Runs twice a year, three months each. Visit outreachy.org.&lt;br&gt;
Djangonaut Space&lt;br&gt;
The program I joined. A free mentorship program specifically for Django contributions. No experience required. You are placed in a small team with a navigator — an experienced Django contributor who guides your work. You meet regularly, get assigned beginner-friendly issues and work alongside other first-time contributors. Applications open every few months. Visit djangonaut.space.&lt;br&gt;
If you are a Django developer at any level, Djangonaut Space is where I would tell you to start.&lt;/p&gt;

&lt;p&gt;Inside Djangonaut Space — What It Actually Looks Like&lt;br&gt;
When you join Djangonaut Space you are placed in a named team. I am in Team Mars for Session 6. Each team has a navigator — mine is Eliana — who acts as a mentor throughout the program.&lt;br&gt;
The first thing my navigator told me: comment on an issue before you start working on it. This is open source etiquette. You leave a comment saying you would like to work on the issue, and a maintainer officially assigns it to you. It prevents two people fixing the same bug simultaneously and wasting each other's time.&lt;br&gt;
Issues labeled Djangonaut Space on the djangoproject.com repository are hand-picked for beginners. They are scoped small enough to be solved by someone new to the codebase. That is exactly the kind of issue you want for your first contribution.&lt;br&gt;
The team communicates through Discord. Seeing other people at the same level working through the same confusion made a huge difference. Open source does not have to be a solo journey.&lt;/p&gt;

&lt;p&gt;Django vs djangoproject.com — The Difference That Confused Me&lt;br&gt;
This is the thing that almost derailed my first week and will probably confuse you too.&lt;br&gt;
Django has two completely separate repositories:&lt;br&gt;
github.com/django/django — This is the Python web framework. The code that runs when you type pip install django. Contributing here requires deep Python knowledge, tests and a strong understanding of the framework internals.&lt;br&gt;
github.com/django/djangoproject.com — This is the website you are looking at right now. HTML, SCSS, Python views. Much more accessible for beginners. This is where my issue lived.&lt;br&gt;
I cloned the wrong one first. I spent time confused about why the file structure looked nothing like what I expected. The moment I realised I was in the wrong repo everything made sense.&lt;br&gt;
Before you clone anything, read the issue carefully and check which repo it belongs to.&lt;/p&gt;

&lt;p&gt;Three Things I Learned&lt;br&gt;
The code change is never the hard part. Understanding a new codebase — its file structure, its conventions, its build tools — that is where time goes. The actual fix is usually small once you know where to look.&lt;br&gt;
Open source maintainers are welcoming. The issue was labeled for beginners. My navigator guided me when I got stuck. The community wants you to succeed.&lt;br&gt;
You do not need to understand everything. I understood enough to fix one issue. That is all that was required. Start small, ship something real and build from there.&lt;/p&gt;

&lt;p&gt;How to Start Today&lt;br&gt;
If you are a Django developer — at any level — apply to Djangonaut Space at djangonaut.space. Applications open every few months.&lt;br&gt;
If you want to start right now, go to github.com/django/djangoproject.com/issues and filter by the good first issue or Djangonaut Space labels. Leave a comment. Get assigned. Make your fix.&lt;br&gt;
Your first PR is the hardest one. After that you know the workflow, you know the codebase a little better and every contribution after that comes faster.&lt;/p&gt;

&lt;p&gt;I am documenting my entire Djangonaut Space Session 6 journey — the issues, the mistakes, the PRs and the lessons. Follow along on GitHub and subscribe to the YouTube channel for the video version of this post.&lt;br&gt;
&lt;a href="https://brianoginga.com/beginners-guide-to-open-source-contribution-djangonaut-space-2026/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Links&lt;br&gt;
• Djangonaut Space — djangonaut.space&lt;br&gt;
• Google Summer of Code — summerofcode.withgoogle.com&lt;br&gt;
• Outreachy — outreachy.org&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>django</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>USSD: The Silent Revolution in Communication &amp; Finance</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Sun, 09 Feb 2025 21:16:43 +0000</pubDate>
      <link>https://dev.to/brian_oginga/ussd-the-silent-revolution-in-communication-finance-19np</link>
      <guid>https://dev.to/brian_oginga/ussd-the-silent-revolution-in-communication-finance-19np</guid>
      <description>&lt;p&gt;Think USSD is outdated? Think again! It’s a communication powerhouse that’s quietly shaping the world of finance, especially in places with limited internet access.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is USSD?
&lt;/h2&gt;

&lt;p&gt;USSD (Unstructured Supplementary Service Data) is a session-based protocol that allows real-time communication between GSM devices. Unlike SMS, USSD keeps an active connection during communication, making it faster and more reliable. Plus, it doesn’t require internet—just your basic network.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Brief History of USSD: From Telcos to Finance
&lt;/h2&gt;

&lt;p&gt;USSD started in the early 1990s as a simple tool for GSM telcos, letting users check balances, airtime, and basic services. By the late 2000s, it became essential for mobile money services like M-Pesa, enabling users to send money, pay bills, and apply for loans—all without needing a smartphone or internet.&lt;/p&gt;

&lt;p&gt;USSD also expanded into sectors like healthcare. In Kenya, the SHA system (Social Health Insurance) used USSD to help people check insurance status and access services, driving digital inclusion for all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Django and USSD are Best Friends
&lt;/h2&gt;

&lt;p&gt;Django is perfect for building USSD-backed services. Its robust backend handles APIs and databases seamlessly, helping you manage transactions and scale easily. With Django, you can effortlessly track user data, handle payments, and keep everything organized—whether you’re serving hundreds or millions of users.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future: USSD + AI = Magic
&lt;/h2&gt;

&lt;p&gt;AI is enhancing USSD by predicting user needs, automating processes, and offering proactive services. As AI and machine learning continue to evolve, USSD will get even smarter and more efficient, taking service delivery to the next level. A good example is &lt;a href="https://helloduty.com/" rel="noopener noreferrer"&gt;HelloDuty&lt;/a&gt;: which is AI-powered, no-code platform helps businesses build USSD, SMS, voice, and payment solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking to Get Started with USSD?
&lt;/h2&gt;

&lt;p&gt;Want to learn how to build USSD systems? Check out my&lt;a href="https://www.youtube.com/watch?v=-k1ZTA8qKHI&amp;lt;br&amp;gt;%0A![Image%20description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o78ucwskq6nd86j5k6fu.jpg)" rel="noopener noreferrer"&gt; step-by-step tutorial&lt;/a&gt; on YouTube. For more tech insights, listen to my The &lt;a href="https://open.spotify.com/show/1k03G6zmjdytcGazLXn4Qd" rel="noopener noreferrer"&gt;Dev Circle podcast&lt;/a&gt; and visit my &lt;a href="https://www.brianoginga.com/" rel="noopener noreferrer"&gt;website &lt;/a&gt;for resources!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: A Silent Revolution
&lt;/h2&gt;

&lt;p&gt;USSD’s simplicity, low data needs, and ability to work on any device make it a game-changer, especially for underserved communities. With Django on the backend and AI powering the future, USSD is only getting started.&lt;/p&gt;

&lt;p&gt;So, the next time someone tells you USSD is “old school,” just remind them—it’s a silent revolution that’s here to stay, and it’s only going to get smarter.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>Django on a Budget: The Best Affordable Hosting Options for Your App</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Mon, 03 Feb 2025 21:38:34 +0000</pubDate>
      <link>https://dev.to/brian_oginga/django-on-a-budget-the-best-affordable-hosting-options-for-your-app-309o</link>
      <guid>https://dev.to/brian_oginga/django-on-a-budget-the-best-affordable-hosting-options-for-your-app-309o</guid>
      <description>&lt;p&gt;If you’ve built a Django app and you're itching to share it with the world, there’s just one roadblock—hosting costs! Let’s be real, not everyone has AWS-level cash to burn, and dropping a fortune just to deploy your side project? Yeah, that’s a hard pass.&lt;br&gt;
But don’t sweat it—I got you! In this guide, I’ll walk you through the best budget-friendly hosting options, so you can finally break free from the localhost only misery! and get your Django app live without emptying your wallet. Plus, I’ll introduce you to the industry’s top players, and if you stick around, I’ll hook you up with a &lt;a href="https://www.linode.com/lp/refer/?r=2fbab6874333241bec81f0d60a22f99193cc5448" rel="noopener noreferrer"&gt;free $100 Linode credit&lt;/a&gt; to kickstart your deployment. Let’s go! &lt;/p&gt;

&lt;p&gt;🎙️ Prefer listening instead of reading? Check out the podcast version of this blog on the Dev Circle Podcast! Tune in for a more conversational take on Django hosting and budget-friendly deployment tips.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/3eBSg4GcwCSRgRzFKee0Oq" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Budget Hosting Matters
&lt;/h2&gt;

&lt;p&gt;Picture this: You’ve poured hours (maybe days) into building your Django app. Everything’s perfect—until you check hosting prices. Suddenly, your excitement vanishes faster than a missing semicolon in production.&lt;br&gt;
That’s why budget-friendly hosting is a must. You need a place to deploy your app without selling a kidney.&lt;/p&gt;

&lt;h2&gt;
  
  
  To keep things simple, here are your options:
&lt;/h2&gt;

&lt;p&gt;Budget Hosting – Cheap, reliable, and beginner-friendly.&lt;br&gt;
Industry Giants – Powerful, scalable, but with a learning curve.&lt;br&gt;
Let’s break it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Budget-Friendly Hosting Options
&lt;/h2&gt;

&lt;p&gt;If your wallet’s on life support, these platforms give you solid performance without the hefty price tag:&lt;br&gt;
&lt;a href="https://render.com/" rel="noopener noreferrer"&gt;Render&lt;/a&gt; – Free static hosting + affordable backend plans. A smooth Heroku alternative.&lt;br&gt;
&lt;a href="https://fly.io/" rel="noopener noreferrer"&gt;Fly.io &lt;/a&gt;– Deploy globally with a generous free tier. Great for performance.&lt;br&gt;
&lt;a href="https://railway.com/" rel="noopener noreferrer"&gt;Railway &lt;/a&gt;– Think of it as DIY Heroku with smooth GitHub integration.&lt;br&gt;
Great for side projects and testing, but if you need serious power, check out the next tier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Industry Top Dogs: Premium Hosting Options
&lt;/h2&gt;

&lt;p&gt;Want more control, better performance, and scalability? These are for you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.digitalocean.com/" rel="noopener noreferrer"&gt;DigitalOcean &lt;/a&gt;– Affordable ($4–5/month) but requires server setup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/?nc2=h_lg" rel="noopener noreferrer"&gt;AWS &lt;/a&gt;– Free EC2 tier available, but can feel like learning rocket science.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.linode.com/" rel="noopener noreferrer"&gt;Linode &lt;/a&gt;– My go-to! Easy to set up, powerful, and beginner-friendly.&lt;br&gt;
Heads-up: These require some server knowledge. If commands like sudo apt-get update make you nervous, stick to managed platforms like Render.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why I Recommend Linode (Plus a $100 Credit!)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.linode.com/" rel="noopener noreferrer"&gt;Linode &lt;/a&gt;hits the sweet spot—affordable, high-performance, and easy to set up. And guess what? They’re giving away $100 in free credits to get you started! &lt;a href="https://www.linode.com/lp/refer/?r=2fbab6874333241bec81f0d60a22f99193cc5448" rel="noopener noreferrer"&gt; Claim your $100 free Linode credit here&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;Want more Django hosting tips, deep dives, and live coding? Check out my &lt;a href="https://www.youtube.com/@brian_oginga/videos" rel="noopener noreferrer"&gt;YouTube channel&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Next up: 
Free vs. Paid Databases—Is SQLite holding you back? Stay tuned!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Hosting your Django app doesn’t have to drain your wallet. Whether you go budget-friendly or premium, choose what fits your skills and needs.&lt;br&gt;
Found this helpful? Share it with a fellow dev and drop your thoughts in the comments! Let’s free Django apps from localhost jail—together!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>django</category>
      <category>devops</category>
    </item>
    <item>
      <title>AI Meets Django: A Developer’s Guide to Smarter Web Apps</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Sat, 25 Jan 2025 13:18:40 +0000</pubDate>
      <link>https://dev.to/brian_oginga/ai-meets-django-a-developers-guide-to-smarter-web-apps-l9l</link>
      <guid>https://dev.to/brian_oginga/ai-meets-django-a-developers-guide-to-smarter-web-apps-l9l</guid>
      <description>&lt;p&gt;In today’s fast-paced tech landscape, we as developers always strive to create apps that are not only functional but also intuitive and adaptive to user needs. There’s no better way for developers to match the fast-evolving tech world and user expectations than to embrace Artificial Intelligence. And for Django developers, these two—AI and Django—are the perfect combo. &lt;/p&gt;

&lt;p&gt;In this article, we’ll explore how Django and AI complement each other and how to  get your feet wet in building smarter apps. So, grab your notepad and let’s dive in!&lt;/p&gt;

&lt;p&gt;And just a side note : If you prefer an audio version of this blog post, I've got you covered! You can listen to the full podcast version below. &lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/show/1k03G6zmjdytcGazLXn4Qd" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Combine AI with Django?
&lt;/h2&gt;

&lt;p&gt;AI enables applications to learn from data and make intelligent decisions, transforming them from static tools into dynamic problem-solvers. And here’s the kicker—it’s almost becoming a requirement to slap AI into your projects. According to recent studies, over 75% of companies are adopting AI technologies to stay competitive. Without AI, apps risk feeling outdated—even "dumb"—in a world where users expect smarter and more intuitive experiences. &lt;/p&gt;

&lt;p&gt;By embedding AI into your Django projects, you’re not just enhancing functionality; you’re future-proofing your work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Your Feet Wet with AI in Django
&lt;/h2&gt;

&lt;p&gt;I know it might feel scary at first—it certainly was for me when I was first tasked with embedding AI into a project. The good news is, you don’t need to build everything from scratch. Here’s how you can start:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Pre-Trained AI Models&lt;/strong&gt;: Platforms like OpenAI or Google Cloud offer APIs for tasks like text analysis, chatbots, and recommendations. These are perfect for beginners who want to experiment without diving into model training.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build Custom Models&lt;/strong&gt;: Once you’ve muscled up and gained confidence with pre-trained models, you can explore Python libraries like TensorFlow, PyTorch, and scikit-learn. These tools let you train and fine-tune your own AI models. When ready, integrate these models into your Django app using Django REST Framework to expose them as APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start Simple&lt;/strong&gt;: Begin with straightforward AI features—like a chatbot to answer user queries or a recommendation engine to suggest products. As you grow more comfortable, you can dive into more complex functionalities.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Real-World Application: FlexiCash Microfinance App
&lt;/h2&gt;

&lt;p&gt;Just to give you a glimpse of the power of AI in Django, let me share an example from my journey. I’m building an app called FlexiCash, a microfinance platform that allows members to access credit facilities. The goal is to empower users with the right financial tools while keeping the experience personalized.&lt;/p&gt;

&lt;p&gt;Here’s where AI steps in. By understanding user behavior and financial patterns, the app crafts personalized credit options, empowering users to make smarter financial choices while feeling supported throughout their journey. Django serves as the robust backend framework, while AI models handle the heavy lifting of data analysis and recommendation generation.&lt;/p&gt;

&lt;p&gt;The combination of Django’s scalability and AI’s intelligence has transformed FlexiCash into a smarter, more user-focused platform. Feel free to check it out on my YouTube channel, &lt;a href="https://www.youtube.com/@brian_oginga/" rel="noopener noreferrer"&gt;Brian Oginga&lt;/a&gt;, where I showcase the project in detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Integrating AI into your Django projects isn’t just about staying trendy; it’s about delivering more value to your users. Combining Django’s robust framework with the intelligence of AI is like putting your projects on steroids. &lt;/p&gt;

&lt;p&gt;Whether you’re starting small with pre-trained models or diving deep into custom AI development, the key is to experiment, learn, and iterate. &lt;/p&gt;

&lt;p&gt;For more tutorials, insights, and deep dives into Django and AI, check out my &lt;a href="https://www.youtube.com/@brian_oginga/videos" rel="noopener noreferrer"&gt;YouTube channel&lt;/a&gt;, and my Spotify podcast, &lt;a href="https://open.spotify.com/show/1k03G6zmjdytcGazLXn4Qd" rel="noopener noreferrer"&gt;The Dev Circle Podcast&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s build smarter—together!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Consistency Is Key: Kicking Off 2025 with a 30-Day Coding Challenge</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Wed, 01 Jan 2025 20:59:06 +0000</pubDate>
      <link>https://dev.to/brian_oginga/consistency-is-key-kicking-off-2025-with-a-30-day-coding-challenge-526c</link>
      <guid>https://dev.to/brian_oginga/consistency-is-key-kicking-off-2025-with-a-30-day-coding-challenge-526c</guid>
      <description>&lt;p&gt;Happy New Year, fellow devs! 🎉&lt;/p&gt;

&lt;p&gt;As we usher in the year 2025, let’s take a moment to reflect on our coding journey. What are your plans/goals for this year? Did you scribble down some notes about the developer you want to become, the tools you want to master, or that dream project you have always dreamt of building?&lt;/p&gt;

&lt;p&gt;No matter how brilliant and definite your plans are, let me tell you a secret: strategy without consistency is like writing code without saving—nothing gets built.&lt;/p&gt;

&lt;p&gt;Consistency is every developer’s biggest nemesis. I bet many of you have faced this battle at some stage in your career. It’s easy to dream big but its harder to show up every day, grind, and stay the course. And let’s face it—procrastination is a sneaky little bug that creeps into even the best-laid plans. So how do we debug it? In this blog I share with you some simple yet powerful strategies to help you not only stay consistent but also avoid burnout, so grab your cup of coffee and take some notes.&lt;/p&gt;

&lt;p&gt;Simple: Have a definite plan and challenge yourself.&lt;/p&gt;

&lt;p&gt;Whether it’s a 10-day sprint, a 30-day marathon, or a 90-day immersion, a coding challenge gives you structure, accountability, and a sense of progress. Pick any language or tool you want to conquer and dive in.&lt;/p&gt;

&lt;p&gt;For me, it’s going to be a 30-day Python challenge. Not because I’m new to it, but because I want to gain deeper mastery and bridge some gaps in my understanding.&lt;/p&gt;

&lt;p&gt;The Pomodoro Technique: The Developer’s Secret Weapon 🍅&lt;br&gt;
During this challenge, I’ll rely on the Pomodoro Technique—a tried-and-true method for staying focused. Here’s how it works:&lt;/p&gt;

&lt;p&gt;Set a timer for 25 minutes (one "Pomodoro").&lt;br&gt;
Work on your task with laser focus—no distractions!&lt;br&gt;
Take a 5-minute break.&lt;br&gt;
Repeat four times, then reward yourself with a longer 15-30 minute break.&lt;br&gt;
It’s simple but powerful, especially when you combine it with a coding challenge. Just think of it as mini code sprints that keep you sharp without burning out.&lt;/p&gt;

&lt;p&gt;Your Challenge, Your Rules&lt;br&gt;
I encourage you to join me! Pick any language, framework, or tool—whether it’s JavaScript, React, Rust, or Kubernetes. The goal isn’t perfection; it’s progress. Share your journey, your wins, and even your bugs (we all have those, don’t worry!).&lt;/p&gt;

&lt;p&gt;A Quote to Code By:&lt;br&gt;
“Success is the sum of small efforts, repeated day in and day out.” – Robert Collier&lt;/p&gt;

&lt;p&gt;Let’s make this year about small, consistent wins that lead to big breakthroughs. And hey, consistency doesn’t mean boring. Have fun, make mistakes, laugh at your errors, and celebrate your wins.&lt;/p&gt;

&lt;p&gt;Follow my progress and join the conversation on &lt;a href="http://brianoginga.com/" rel="noopener noreferrer"&gt;My Blog&lt;/a&gt;, &lt;a href="https://www.youtube.com/@brian_oginga/videos" rel="noopener noreferrer"&gt;YouTube &lt;/a&gt;, and &lt;a href="https://open.spotify.com/show/1k03G6zmjdytcGazLXn4Qd" rel="noopener noreferrer"&gt;Spotify &lt;/a&gt;. Let’s code, laugh, and grow together in 2025.&lt;/p&gt;

&lt;p&gt;PS: If coding every day sounds intense, don’t worry—just keep showing up. Remember, even a single line of code a day is better than none!&lt;/p&gt;

&lt;p&gt;Let’s do this! 💻🍕&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Create a Random Quote Generator Using Django, ZenQuotes API, Tailwind CSS, and Deploy on Heroku</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Sun, 03 Nov 2024 16:29:41 +0000</pubDate>
      <link>https://dev.to/brian_oginga/how-to-create-a-random-quote-generator-using-django-zenquotes-api-tailwind-css-and-deploy-on-heroku-46cc</link>
      <guid>https://dev.to/brian_oginga/how-to-create-a-random-quote-generator-using-django-zenquotes-api-tailwind-css-and-deploy-on-heroku-46cc</guid>
      <description>&lt;p&gt;In this tutorial, we’ll walk through building a random quote generator using Django. We’ll integrate the ZenQuotes API for fetching quotes, use Tailwind CSS for responsive styling, and deploy the project on Heroku using Gunicorn. This guide will also include saving quotes in a PostgreSQL database for persistence and future analysis.&lt;/p&gt;

&lt;p&gt;📺 For a video tutorial: Check out my &lt;a href="https://www.youtube.com/watch?v=Lx-lfgKtBFQ" rel="noopener noreferrer"&gt;YouTube video&lt;/a&gt; with a step-by-step walkthrough of this project.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Lx-lfgKtBFQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;📝 For more Django tutorials: Visit my &lt;a href="http://brianoginga.com/" rel="noopener noreferrer"&gt;blog &lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;Before you start, ensure you have a basic understanding of Django, Python, and web development. You’ll also need the following tools installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Python: Version 3.7+
Django: Version 3.0+
Heroku CLI: For deployment
Git: For version control
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Project Overview&lt;/p&gt;

&lt;p&gt;We’ll set up a Django project called quote with an app named home. The main functionality will be to fetch a random quote from the ZenQuotes API and display it on a page styled with Tailwind CSS.&lt;/p&gt;

&lt;p&gt;Step 1: Set Up Your Django Project and App&lt;br&gt;
Create a New Django Project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;django-admin startproject quote
cd quote
python manage.py startapp home

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

&lt;/div&gt;



&lt;p&gt;Add the home app to the INSTALLED_APPS in your settings.py:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# quote/settings.py
INSTALLED_APPS = [
    ...
    'home',
]

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

&lt;/div&gt;



&lt;p&gt;Configure the Quotes Model&lt;/p&gt;

&lt;p&gt;Define a model to store quotes in home/models.py:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# home/models.py
from django.db import models

class Quotes(models.Model):
    quote_text = models.TextField()
    author_name = models.CharField(max_length=255)
    image_url = models.URLField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.author_name}"

    class Meta:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    verbose_name_plural = 'Quotes'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Run migrations to set up the database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python manage.py makemigrations
python manage.py migrate

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

&lt;/div&gt;



&lt;p&gt;Step 2: Fetch a Random Quote from ZenQuotes API&lt;br&gt;
ZenQuotes offers a free API for random quotes. We’ll create a view to fetch a quote from ZenQuotes and an image from Picsum, then save and display the data.&lt;/p&gt;

&lt;p&gt;Create the View&lt;/p&gt;

&lt;p&gt;In home/views.py, create a function to fetch a random quote and image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# home/views.py
import requests
from django.shortcuts import render
from .models import Quotes

def random_quotes(request):
    quote_api_url = 'https://zenquotes.io/api/random'
    picsum_api_url = 'https://picsum.photos/800/600'

    quote_response = requests.get(quote_api_url)
    picsum_response = requests.get(picsum_api_url)

    quote = "No quote available"
    author = "Unknown"
    image_url = None 

    if quote_response.status_code == 200 and picsum_response.status_code == 200:
        quote_data = quote_response.json()
        image_url = picsum_response.url
        if isinstance(quote_data, list) and len(quote_data) &amp;gt; 0:
            quote = quote_data[0].get('q', "No quote available")
            author = quote_data[0].get('a', "Unknown")

    Quotes.objects.create(quote_text=quote, author_name=author, image_url=image_url)

    context = {
        'quote': quote,
        'author': author,
        'image_url': image_url,
    }
    return render(request, 'random_quotes.html', context)

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

&lt;/div&gt;



&lt;p&gt;Configure URLs&lt;/p&gt;

&lt;p&gt;Link the view in the urls.py of the home app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
# home/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.random_quotes, name='random_quotes'),
]

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

&lt;/div&gt;



&lt;p&gt;Include the home app’s URLs in the main quote/urls.py file:&lt;/p&gt;

&lt;h1&gt;
  
  
  quote/urls.py
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('home.urls')),
]

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

&lt;/div&gt;



&lt;p&gt;Step 3: Create the HTML Template with Tailwind CSS&lt;/p&gt;

&lt;p&gt;In the home/templates directory, create random_quotes.html for displaying the random quote:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;lt;!-- home/templates/random_quotes.html --&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Random Quote&amp;lt;/title&amp;gt;
    &amp;lt;link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.0.1/dist/tailwind.min.css" rel="stylesheet"&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body class="bg-gray-200 flex items-center justify-center min-h-screen"&amp;gt;
    &amp;lt;div class="bg-white p-8 rounded-lg shadow-lg w-full max-w-md text-center"&amp;gt;
        &amp;lt;p class="text-gray-800 text-lg font-semibold mb-2"&amp;gt;"{{ quote }}"&amp;lt;/p&amp;gt;
        &amp;lt;p class="text-gray-600 text-sm mb-4"&amp;gt;— {{ author }}&amp;lt;/p&amp;gt;
        &amp;lt;img src="{{ image_url }}" alt="Random Image" class="w-full rounded mt-4"&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Step 4: Deploy to Heroku with Gunicorn&lt;br&gt;
Install Gunicorn and Update requirements.txt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pip install gunicorn django-heroku
pip freeze &amp;gt; requirements.txt
Configure the Procfile for Heroku
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a Procfile at the project root to define the web process:&lt;/p&gt;

&lt;p&gt;text&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: gunicorn quote.wsgi --log-file -
Set Up Heroku Settings in settings.py

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

&lt;/div&gt;



&lt;p&gt;Add Heroku settings:&lt;/p&gt;

&lt;h1&gt;
  
  
  quote/settings.py
&lt;/h1&gt;

&lt;p&gt;Deploy to Heroku&lt;/p&gt;

&lt;p&gt;Initialize Git, commit your code, and log in to Heroku:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
git init
git add .
git commit -m "Initial commit"
heroku login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a new Heroku app and push your code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku create
git push heroku main
Finally, open your app:

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

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku open

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

&lt;/div&gt;



&lt;p&gt;Conclusion&lt;br&gt;
Congratulations! You've built and deployed a Django-powered random quote generator that fetches quotes from the ZenQuotes API, displays them with a Tailwind-styled interface, and saves them in the database.&lt;/p&gt;

&lt;p&gt;📺 For a visual guide: Watch my &lt;a href="https://www.youtube.com/watch?v=Lx-lfgKtBFQ" rel="noopener noreferrer"&gt;YouTube video&lt;/a&gt; for step-by-step instructions.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Lx-lfgKtBFQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;📝 For more tutorials like this: Check out my &lt;a href="http://brianoginga.com/" rel="noopener noreferrer"&gt;blog &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let me know in the comments if you have any questions or suggestions! Happy coding!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Add a New App to a Django Project: A Step-by-Step Guide</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Sun, 20 Oct 2024 22:49:54 +0000</pubDate>
      <link>https://dev.to/brian_oginga/how-to-add-a-new-app-to-a-django-project-a-step-by-step-guide-4ed5</link>
      <guid>https://dev.to/brian_oginga/how-to-add-a-new-app-to-a-django-project-a-step-by-step-guide-4ed5</guid>
      <description>&lt;p&gt;In this blog post, we’ll walk through how to create and configure a Django app in an existing Django project. If you’ve been following along with my &lt;a href="https://youtu.be/Il6jKgI1n9A" rel="noopener noreferrer"&gt;YouTube video&lt;/a&gt;, you’ll know we’re using the Pycouse project and creating a simple app called Home. This guide will show you how to set up a basic function-based view that renders a dynamic title and author to a template.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;Step 1: Create a New App in Your Django Project&lt;br&gt;
First, navigate to the root of your Django project and create a new app. In this case, we are calling the app "home."&lt;/p&gt;

&lt;p&gt;Run the following command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python manage.py startapp home

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



&lt;p&gt;This command will generate the necessary folder structure for your new app.&lt;/p&gt;

&lt;p&gt;Next, add the app to your INSTALLED_APPS list in the settings.py file located in the Pycouse project directory. Open settings.py and add 'home', to the list of installed apps like so:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
# pycouse/settings.py

INSTALLED_APPS = [
    ...
    'home',
]
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Step 2: Define a Simple View&lt;br&gt;
For this tutorial, we’ll use a function-based view to render a dynamic title and author. In Django, views act as the bridge between your application and the web, and they help you control what content to send to the user's browser.&lt;/p&gt;

&lt;p&gt;Open the views.py file inside your home app and define the following view:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`
# home/views.py

from django.shortcuts import render

def index(request):
    context = {
        'title': 'Welcome to Pycouse!',
        'author': 'Brian',
    }
    return render(request, 'home/index.html', context)`
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Here, the index view function takes a request object and returns an HTML template called index.html with some dynamic content (title and author) passed via the context dictionary.&lt;/p&gt;

&lt;p&gt;Step 3: Create the URL Configuration&lt;br&gt;
Next, we need to map the view to a URL so it can be accessed in the browser. Create a new file called urls.py inside your home app directory, and add the following code:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`
# home/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='home-index'),
]`
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;This sets up a URL pattern that maps the root URL of the home app (i.e., /) to the index view.&lt;/p&gt;

&lt;p&gt;Now, we need to include the home app’s URLs in the main project’s urls.py file. Open the urls.py file located in the Pycouse project directory and modify it as follows:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
`# pycouse/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('home.urls')),  # Include the home app's URLs
]
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;`&lt;br&gt;
This ensures that when you navigate to the root URL of the project, the index view from the home app is called.&lt;/p&gt;

&lt;p&gt;Step 4: Create the Template&lt;br&gt;
Now it’s time to create the HTML template that will display the dynamic content. Inside the home app, create a directory called templates, and inside that, create another directory called home. Your file structure should look like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
home/&lt;br&gt;
    templates/&lt;br&gt;
        home/&lt;br&gt;
            index.htm&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the index.html file, add the following simple HTML code:&lt;/p&gt;

&lt;p&gt;`html&lt;br&gt;
Copy code&lt;/p&gt;

&lt;p&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;br&gt;
    &lt;br&gt;
    &lt;br&gt;
    {{ title }}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
    &lt;h1&gt;{{ title }}&lt;/h1&gt;
&lt;br&gt;
    &lt;p&gt;Author: {{ author }}&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
`

&lt;p&gt;Here, the template uses Django’s templating language to inject the values for title and author into the HTML.&lt;/p&gt;

&lt;p&gt;Step 5: Test It Out!&lt;br&gt;
Now that everything is set up, start the Django development server by running the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python manage.py runserver&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
In your browser, navigate to &lt;a href="http://127.0.0.1:8000/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/&lt;/a&gt;. You should see the dynamic content rendered on the page:&lt;/p&gt;

&lt;p&gt;The title “Welcome to Pycouse!”&lt;br&gt;
The author “Brian”&lt;br&gt;
Conclusion&lt;br&gt;
In this tutorial, we covered how to create and configure a new Django app within an existing project, set up a basic function-based view, map it to a URL, and render dynamic content to an HTML template.&lt;/p&gt;

&lt;p&gt;If you want to see this process in action, make sure to check out the full walkthrough on my &lt;a href="https://youtu.be/Il6jKgI1n9A" rel="noopener noreferrer"&gt;YouTube video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Feel free to leave any comments or questions below, and I’ll be happy to help. Happy coding!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Step-by-Step Guide to WordPress Theme Development for Beginner</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Sun, 21 Jul 2024 18:55:00 +0000</pubDate>
      <link>https://dev.to/brian_oginga/step-by-step-guide-to-wordpress-theme-development-for-beginner-86p</link>
      <guid>https://dev.to/brian_oginga/step-by-step-guide-to-wordpress-theme-development-for-beginner-86p</guid>
      <description>&lt;p&gt;Ever found yourself building a WordPress site and you find yourself tied on the limited functionalities and features available in the prebuilt themes and page builders? well, that was  me a few years ago,untill I decided to explore the vast realm of WordPress theme development.&lt;br&gt;
Creating your own theme can be a rewarding experience that allows you to fully customize the look and have full grain control of your website. This step-by-step guide will walk you through the basics of developing a WordPress theme from scratch.&lt;/p&gt;

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

&lt;p&gt;I would also like to mention that to fully maximize the endless flexibility of custom theme development you need to have experience in HTML, CSS, Javascript and PHP. A solid grasp of these technologies is non-negotiable for aspiring WordPress developers, providing the toolkit needed to customize and enhance WordPress sites effectively. With that said, get into it.&lt;/p&gt;

&lt;p&gt;Step 1: Setup Your Development Environment&lt;/p&gt;

&lt;p&gt;Before you start coding, you need to set up your development environment, where you play around with your code before you push it for production. Luckily for developers, there are a number open-source tools like XAMMP,MAMP,but the one that I recommend is Local because of its user friendliness, ease of installation and robust features. &lt;/p&gt;

&lt;p&gt;Set Up a Code Editor:&lt;br&gt;
Choose a code editor like Visual Studio Code, Sublime Text, or Atom and setup the necessary extensions to increase your development productivity. Go ahead and launch the local and create a new project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fctyp3db87iuo4ju2cmri.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fctyp3db87iuo4ju2cmri.PNG" alt="Image description" width="692" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go ahead and create new project, you can give it any name you want, once that is done, go ahead setup  WordPress by proving a username, password and a valid email address&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fiox8ronp89ld2jtyu8ng.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fiox8ronp89ld2jtyu8ng.PNG" alt="Image description" width="767" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once that is setup, go ahead and click “open site” to view your WordPress database and username&lt;br&gt;
You should be able to login to login to your WordPress admin if everything was installed correctly&lt;/p&gt;

&lt;p&gt;Understand the WordPress File Structure:&lt;br&gt;
Once you have your development environment and text editor geared up, it’s now time to familiarize yourself with the core WordPress files and directory structure, and template hierarchy especially the wp-content/themes directory where your theme will reside. To do so, navigate to your project folder and open the wp-content folder using visual studio code&lt;/p&gt;

&lt;p&gt;Step 2: Create a New Theme Directory&lt;br&gt;
Navigate to wp-content/themes in your WordPress installation and create a new folder to house your theme. &lt;/p&gt;

&lt;p&gt;Add Basic Theme Files:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fmueqr19etbfzj6iwo31e.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fmueqr19etbfzj6iwo31e.PNG" alt="Image description" width="800" height="472"&gt;&lt;/a&gt;&lt;br&gt;
A theme can have hundreds of files and directories, but a minimum, your theme needs three files:&lt;br&gt;
index.php: The main template file.&lt;br&gt;
style.css: The main stylesheet.&lt;br&gt;
functions.php: The theme functions file used for adding custom functionalities&lt;br&gt;
screenshot.png : A display image for the theme&lt;/p&gt;

&lt;p&gt;Step 3: Set Up style.css&lt;br&gt;
Add Theme Information:&lt;br&gt;
Open style.css and add the theme header information at the top. This is necessary for WordPress to recognize your theme.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/*&lt;br&gt;
Theme Name: My Theme&lt;br&gt;
Theme URI: http://example.com/mytheme&lt;br&gt;
Author: Your Name&lt;br&gt;
Author URI: http://example.com&lt;br&gt;
Description: A brief description of your theme.&lt;br&gt;
Version: 1.0&lt;br&gt;
License: GNU General Public License v2 or later&lt;br&gt;
License URI: http://www.gnu.org/licenses/gpl-2.0.html&lt;br&gt;
Tags: custom-theme, responsive, clean&lt;br&gt;
Text Domain: mytheme&lt;br&gt;
*/&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 4 : The fourth step is create the theme structure&lt;br&gt;
By default, this is the main template file that will display your theme's content to the end user&lt;br&gt;
&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br&gt;
&amp;lt;html &amp;lt;?php language_attributes(); ?&amp;gt;&amp;gt;&lt;br&gt;
&amp;lt;head&amp;gt;&lt;br&gt;
    &amp;lt;meta charset="&amp;lt;?php bloginfo( 'charset' ); ?&amp;gt;"&amp;gt;&lt;br&gt;
    &amp;lt;title&amp;gt;&amp;lt;?php wp_title(); ?&amp;gt;&amp;lt;/title&amp;gt;&lt;br&gt;
    &amp;lt;link rel="stylesheet" href="&amp;lt;?php bloginfo('stylesheet_url'); ?&amp;gt;"&amp;gt;&lt;br&gt;
    &amp;lt;?php wp_head(); ?&amp;gt;&lt;br&gt;
&amp;lt;/head&amp;gt;&lt;br&gt;
&amp;lt;body &amp;lt;?php body_class(); ?&amp;gt;&amp;gt;&lt;br&gt;
    &amp;lt;header&amp;gt;&lt;br&gt;
        &amp;lt;h1&amp;gt;&amp;lt;?php bloginfo('name'); ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br&gt;
        &amp;lt;p&amp;gt;&amp;lt;?php bloginfo('description'); ?&amp;gt;&amp;lt;/p&amp;gt;&lt;br&gt;
    &amp;lt;/header&amp;gt;&lt;br&gt;
    &amp;lt;main&amp;gt;&lt;br&gt;
        &amp;lt;?php&lt;br&gt;
        if ( have_posts() ) :&lt;br&gt;
            while ( have_posts() ) : the_post();&lt;br&gt;
                the_title('&amp;lt;h2&amp;gt;', '&amp;lt;/h2&amp;gt;');&lt;br&gt;
                the_content();&lt;br&gt;
            endwhile;&lt;br&gt;
        else :&lt;br&gt;
            echo '&amp;lt;p&amp;gt;No content found&amp;lt;/p&amp;gt;';&lt;br&gt;
        endif;&lt;br&gt;
        ?&amp;gt;&lt;br&gt;
    &amp;lt;/main&amp;gt;&lt;br&gt;
    &amp;lt;?php wp_footer(); ?&amp;gt;&lt;br&gt;
&amp;lt;/body&amp;gt;&lt;br&gt;
&amp;lt;/html&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 5 : Add functions.php file&lt;br&gt;
The functions.php file is to add theme support for features like menus, post thumbnails, custom post types and allows for more fine grain control of the themes functionality.&lt;/p&gt;

&lt;p&gt;`&amp;lt;?php&lt;br&gt;
function mytheme_setup() {&lt;br&gt;
    // Add theme support for document title tag&lt;br&gt;
    add_theme_support( 'title-tag' );&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Add theme support for post thumbnails
add_theme_support( 'post-thumbnails' );

// Register a primary menu location
register_nav_menus( array(
    'primary' =&amp;gt; __( 'Primary Menu', 'mytheme' ),
) );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;br&gt;
add_action( 'after_setup_theme', 'mytheme_setup' );`&lt;/p&gt;

&lt;p&gt;Step 6: Create Additional Template Files&lt;br&gt;
For purposes of clean and readable code ,always split your index.php into header.php and footer.php for better organization.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html &amp;lt;?php language_attributes(); ?&amp;gt;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="&amp;lt;?php bloginfo( 'charset' ); ?&amp;gt;"&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;?php wp_title(); ?&amp;gt;&amp;lt;/title&amp;gt;
    &amp;lt;link rel="stylesheet" href="&amp;lt;?php bloginfo('stylesheet_url'); ?&amp;gt;"&amp;gt;
    &amp;lt;?php wp_head(); ?&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body &amp;lt;?php body_class(); ?&amp;gt;&amp;gt;
    &amp;lt;header&amp;gt;
        &amp;lt;h1&amp;gt;&amp;lt;?php bloginfo('name'); ?&amp;gt;&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;?php bloginfo('description'); ?&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;/header&amp;gt;
    &amp;lt;main&amp;gt;
        &amp;lt;?php
        if ( have_posts() ) :
            while ( have_posts() ) : the_post();
                the_title('&amp;lt;h2&amp;gt;', '&amp;lt;/h2&amp;gt;');
                the_content();
            endwhile;
        else :
            echo '&amp;lt;p&amp;gt;No content found&amp;lt;/p&amp;gt;';
        endif;
        ?&amp;gt;
    &amp;lt;/main&amp;gt;
    &amp;lt;?php wp_footer(); ?&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Step : Prepare for Distribution&lt;br&gt;
Create a Screenshot:&lt;/p&gt;

&lt;p&gt;Take a screenshot of your theme and save it as screenshot.png in your theme folder.&lt;br&gt;
Add a README File:&lt;/p&gt;

&lt;p&gt;Include a README.txt file with instructions and information about your theme.&lt;br&gt;
Zip Your Theme:&lt;/p&gt;

&lt;p&gt;Compress your theme folder into a .zip file for distribution.&lt;br&gt;
Congratulations! You've created your first WordPress theme. Continue exploring and adding features to make your theme unique and fully functional. Happy coding!&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>My Journey into Theme Development: A Beginner's Guide</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Wed, 03 Jul 2024 11:16:58 +0000</pubDate>
      <link>https://dev.to/brian_oginga/my-journey-into-theme-development-a-beginners-guide-26mj</link>
      <guid>https://dev.to/brian_oginga/my-journey-into-theme-development-a-beginners-guide-26mj</guid>
      <description>&lt;p&gt;Ever wondered how the stunning and eye-catching designs you see on WordPress websites come to life? Well, that was me just a few years ago, curious and eager to explore deeper in the world of WordPress custom theme development.&lt;/p&gt;

&lt;p&gt;Overview&lt;/p&gt;

&lt;p&gt;In this article, I'll walk  you through my journey of learning theme development, the resources that were instrumental during the journey, the initial challenges I faced along. I also share some tips on how you can properly overcome these challenges, so if you want to do learn more about my theme development journey and some of the projects I have shipped, grab a cup of coffee and let’s dive in.&lt;/p&gt;

&lt;p&gt;Table of contents&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Introduction&lt;/li&gt;
&lt;li&gt; Learning resources&lt;/li&gt;
&lt;li&gt; Learning curve&lt;/li&gt;
&lt;li&gt; Learning tips&lt;/li&gt;
&lt;li&gt; Conclusion&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;If you've been using WordPress to build websites for yourself or clients, you've probably reached a point where you need to add some custom features. My fascination with WordPress theme development started when I first customized a website for a client. I wanted to create a unique look but soon realized the limitations of pre-made themes available in the marketplaces.&lt;br&gt;
Determined and ready to face the challenge to create something stunning on my own, I began researching theme development. My first stop was the famous WordPress Codex website, a comprehensive resource for all things WordPress.&lt;/p&gt;

&lt;p&gt;Learning Resources&lt;/p&gt;

&lt;p&gt;During my learning journey, I stumbled upon some fantastic YouTube channels like Traversy Media and freecodecamp.org that offered in-depth  guides on building WordPress themes from scratch. I also took a Udemy course by Brad Schiff which turned out to be the best resource.&lt;br&gt;
Joining forums like the WordPress Support Forum and communities like Reddit’s r/WordPress helped me connect with experienced developers who were always ready to help. I also attended local tech events like Close the Gap ,Sote Hub, and Swahili pot Hub where I was able to engage and share ideas with fellow WordPress developers who were in the same journey.&lt;/p&gt;

&lt;p&gt;Learning Curve&lt;/p&gt;

&lt;p&gt;Just like any other skill, the learning curve was steep since I was more of python developer, so wrapping my head around the WordPress template hierarchy and PHP language was a pain on the back in the early stages. I often felt overwhelmed and burned out, but breaking down the learning process into manageable chunks made it easier. &lt;br&gt;
The active online communities and the small victories along the way are some of the things that kept me going ,each time I solved a problem or added a new feature, it fueled my motivation to keep learning more.&lt;/p&gt;

&lt;p&gt;Learning tips&lt;/p&gt;

&lt;p&gt;My advice to anyone who wants to get started is to start simple. Begin with a basic theme and gradually add complexity as you become more comfortable with the code.&lt;br&gt;
I also encourage the use of well-structured learning approach. Take time and prepare and roadmap of all the learning areas, you want to cove and work your way through that. You can also go for premium courses in Udemy or Coursera.&lt;br&gt;
I also strongly recommend that a combination of tutorials, books, and community advice to get a well-rounded understanding&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Learning theme development has been a rewarding and fulfilling journey filled with ups and downs. With a little knowledge of HTML and CSS, you can kiss goodbye to third-party themes and start building your own. And before I forget, this is one of the themes I designed and developed from scratch, you can check it out here  &lt;a href="https://eduhubcenter.com/" rel="noopener noreferrer"&gt;https://eduhubcenter.com/&lt;/a&gt;&lt;br&gt;
The key is to stay persistent, leverage available resources, and not be afraid to seek help when needed.&lt;br&gt;
Ready to start your own theme development journey? Share your experiences in the comments below, and let's learn together! Cheers&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>themedevelopment</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to register a domain name on Safaricom</title>
      <dc:creator>Brian Oginga</dc:creator>
      <pubDate>Wed, 24 Apr 2024 19:54:40 +0000</pubDate>
      <link>https://dev.to/brian_oginga/how-to-register-a-domain-name-on-safaricom-470f</link>
      <guid>https://dev.to/brian_oginga/how-to-register-a-domain-name-on-safaricom-470f</guid>
      <description>&lt;p&gt;Today, we are looking at Safaricom domain registration. See, every business intending to have an online presence should have a domain name.&lt;br&gt;&lt;br&gt;
If you are planning to start your website, you first need to understand what domain names are.&lt;br&gt;
What is a domain name?&lt;br&gt;
A domain name is the address of your website that visitors type in the browser to check your website. It is the identity and location of a website.&lt;br&gt;
You need a domain to make a website.&lt;br&gt;
Why do you need a Domain name?&lt;br&gt;
We said that every online store needs to have a domain, below are some of the reasons you need to invest in a domain name.&lt;br&gt;
Helps in building your brand&lt;br&gt;
A domain name can increase the awareness of your brand. If your domain name aligns with your company name or your products or services, it is very easy for your customers to remember it. They can always return or refer other people to visit your site. A good domain name can bring traffic to your site and this result in more sales.&lt;br&gt;
A domain name gives your business a more professional look&lt;br&gt;
If you want your customers to trust your business you need to invest in a good name. a business with a good name looks legit and professional and customers are not confident of purchasing goods from you.&lt;br&gt;
A domain name gives users a place to find more information about your business before contacting you.&lt;br&gt;
A domain name gives your business a search engine positioning.&lt;br&gt;
Using the right keywords in your domain name can help your SEO ranking.&lt;br&gt;
A domain name gives you a competitive edge&lt;br&gt;
Many customers first search for something online before purchasing. If you have the products the customers are looking at then they won’t search for it from your competitors. If you don’t invest in a good domain that your competitors have then your customers will connect with them. With a good domain, you have the chance of beating even bigger companies through SEO.&lt;br&gt;
Market your business online with your website. &lt;br&gt;
Every website needs a domain name. You can always promote your products and services online and make people visit your website easily.&lt;br&gt;
A domain name handles some of your customer service for your business&lt;br&gt;
When people search your domain name in any browser, they will get more information such as your contact, product, and service information. People who visit your site can find some of the frequently asked questions which will answer them.&lt;br&gt;
A domain name allows you to change your email to a professional email address.&lt;br&gt;
 How to choose a perfect domain name&lt;br&gt;
A domain name can make or break you and therefore, it is very important to the perfect domain name for your business.&lt;br&gt;
You need to do your research first. You might like and settle for a name that is already registered. This ensures that you get off to a safe start with your site.&lt;br&gt;
Select a domain name that will rank you higher in SEO. Use the right keywords that relate to your business or website.&lt;br&gt;
Make sure the domain name is simple to pronounce and spell&lt;br&gt;
Make it short. Shorter domain names are easy to remember and type.&lt;br&gt;
Avoid hyphens and numbers. These make the domain name more difficult.&lt;br&gt;
Once you choose the domain name which fits your brand, the next thing is to choose a domain name suffix.&lt;br&gt;
A domain suffix is an extension that follows the domain name after the dot.  There are different types of domain names. &lt;br&gt;
Types of domain name&lt;br&gt;
Top-level domain&lt;br&gt;
These are the domain extensions that are listed at the highest level.&lt;br&gt;
They include .com,.org,.net&lt;br&gt;
Country Code Top-level domain&lt;br&gt;
These are country-specific domain names that end with the country-code extension.&lt;br&gt;
For example .ke for Kenya&lt;br&gt;
Sponsored Top-level domain&lt;br&gt;
This is a special category of the top-level domains which has a sponsor representing a specific community &lt;br&gt;
For instance .edu for education&lt;br&gt;
How to choose a domain name suffix&lt;br&gt;
Think about the audience you want to attract to your website. Do you want a global audience or those from your region?&lt;br&gt;
Think about the purpose of your site&lt;br&gt;
Domain Registration&lt;br&gt;
Now that you have settled for a domain name you need to register it to prevent other people from using it. Registering a domain name gives you the ability to use it for your website.&lt;br&gt;
You register a domain name for a specific period after which it expires. You can always renew it to retain ownership of it.&lt;br&gt;
You can register a domain name from any authorized domain registrar. There are many of them and you must choose the right one. &lt;br&gt;
Some domain registrars offer services or benefits that others don’t. Find out which firm has the best domain registration services based on your needs.&lt;/p&gt;

&lt;p&gt;Safaricom Domain Registration&lt;br&gt;
Most of you know that Safaricom is the leading telecommunication service provider in Kenya. Their services include creating a website for your business using a free website builder and domain registration.&lt;br&gt;
Why you need to register a domain name on Safaricom&lt;br&gt;
Registering a domain name with Safaricom comes with some features and benefits such as;&lt;br&gt;
Free website builder&lt;br&gt;
Allow use of self-provisioning of service&lt;br&gt;
Free email security&lt;br&gt;
Customers can choose the auto-renewal of a service option from the self-service portal&lt;br&gt;
Free setup&lt;br&gt;
Guaranteed 24/7 user support&lt;br&gt;
Easy to use and affordable&lt;br&gt;
No hardware or software purchase is required&lt;br&gt;
How to register a domain name on Safaricom (Tutorial)&lt;/p&gt;

&lt;h1&gt;
  
  
  1 Go to &lt;a href="https://domains.safaricom.co.ke" rel="noopener noreferrer"&gt;https://domains.safaricom.co.ke&lt;/a&gt;
&lt;/h1&gt;

&lt;h1&gt;
  
  
  2: Click on domains and then register a new domain
&lt;/h1&gt;

&lt;p&gt;Click on the search tab to check the availability of the domain name&lt;br&gt;
Choose an extension and add it to the shopping cart&lt;br&gt;
Some Domains name extensions that are available:&lt;br&gt;
.ke – Ksh.7,000&lt;br&gt;
.com – Ksh.999&lt;br&gt;
.net – Ksh.999&lt;br&gt;
.org – Ksh.999&lt;br&gt;
.biz – Ksh.999&lt;br&gt;
.info – Ksh.999&lt;br&gt;
.co.ke – Ksh.1,300&lt;br&gt;
Each domain extension is charged differently starting from Kshs.999&lt;/p&gt;

&lt;h1&gt;
  
  
  3: Select a web hosting package (if you want)
&lt;/h1&gt;

&lt;p&gt;There are seven plans;&lt;br&gt;
 Lite &lt;br&gt;
This is the cheapest package which offers 50MB space,5 Email accounts, and unlimited bandwidth&lt;br&gt;
Bronze&lt;br&gt;
This package comes with 500 MB space, 10 Email accounts, 5 sub-domains, and unlimited bandwidth&lt;br&gt;
Silver&lt;br&gt;
Has 2GB Space, 50 Email accounts, 50 subdomains &lt;br&gt;
Gold &lt;br&gt;
This comes with 10 GB space, 100 email accounts, 20 FTP accounts&lt;br&gt;
Premium&lt;br&gt;
The premium plan offers 20 GB space,200 email accounts,200 sub-domains&lt;br&gt;
Enterprise&lt;br&gt;
Comes with 50 GB space,500 email accounts,400 sub-domains and 40 FTP accounts&lt;br&gt;
Enterprise Plus&lt;br&gt;
This is the most expensive plan which comes with 100 GB space,1000 email accounts, 600 sub-domains, and 60 FTP accounts&lt;br&gt;
All the seven packages offer free email security, free website builder, and unlimited bandwidth&lt;br&gt;
Each web hosting package has a cost depending on the storage space, the number of email accounts, and other package features.&lt;br&gt;
Remember, only pick the hosting package if you don’t have one yet.&lt;br&gt;
After selecting your perfect plan add it to the cart and click on continue&lt;br&gt;
Input your details, billing information, and password&lt;/p&gt;

&lt;p&gt;Your password must be strong enough to continue&lt;br&gt;
Click on the Accept the terms of service box to accept the terms and conditions.&lt;br&gt;
Click on Complete order&lt;br&gt;
You will receive an email notification with details of your new active account.&lt;br&gt;
If you purchase a domain name at Safaricom it comes with the following;&lt;/p&gt;

&lt;p&gt;Business domain name&lt;br&gt;
Free website builder&lt;br&gt;
Storage disc space&lt;br&gt;
Unlimited bandwidth for your website&lt;br&gt;
From 5 business email addresses &lt;br&gt;
Free email security&lt;br&gt;
If you already have a domain account registered from a different provider you can easily transfer it to Safaricom.&lt;br&gt;
Share some Love&lt;/p&gt;

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