<?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: Goodluck Igbokwe</title>
    <description>The latest articles on DEV Community by Goodluck Igbokwe (@mantle_bearer).</description>
    <link>https://dev.to/mantle_bearer</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2642863%2F50b83b5a-6828-433f-81a8-4c371ba35a6a.jpg</url>
      <title>DEV Community: Goodluck Igbokwe</title>
      <link>https://dev.to/mantle_bearer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mantle_bearer"/>
    <language>en</language>
    <item>
      <title>Landing My First Commit in Django Core.</title>
      <dc:creator>Goodluck Igbokwe</dc:creator>
      <pubDate>Wed, 11 Nov 2026 14:39:35 +0000</pubDate>
      <link>https://dev.to/mantle_bearer/landing-my-first-commit-in-django-core-3boo</link>
      <guid>https://dev.to/mantle_bearer/landing-my-first-commit-in-django-core-3boo</guid>
      <description>&lt;p&gt;Every developer’s open-source origin story usually starts with the same comforting delusion: “I’ll just pick up a quick documentation ticket, fix a typo, and collect my shiny contributor badge before lunch.”&lt;/p&gt;

&lt;p&gt;But when I joined Session 7 of Djangonaut Space and got placed in Team Carina, I quickly realised that contributing to a framework as battle-tested as Django doesn’t work like that, and honestly, I’m glad it doesn’t.&lt;/p&gt;

&lt;p&gt;In Djangonaut Space, you aren’t just thrown into the deep end of Trac and told to swim. Having our Navigator, Lilian, and our Captain, Maryam, guiding Team Carina gave me a real framework for how to approach open source like an engineer rather than a drive-by code committer: understand the problem at its root before you even think about claiming a ticket.&lt;/p&gt;

&lt;p&gt;Reproducing a 14-Year-Old Misconception.&lt;/p&gt;

&lt;p&gt;While hunting through Django’s Trac issue tracker, I came across Ticket #18543 (a ticket opened 14 years ago) regarding ImageField validation.&lt;/p&gt;

&lt;p&gt;Spoiler alert: it was among the tickets curated by my Navigator.&lt;/p&gt;

&lt;p&gt;The core complaint on the ticket was deceptively simple: the documentation for django.db.models.ImageField originally claimed that the field "validates that the uploaded object is a valid image." At some point over the years, someone tried to address the confusion by adding a note to the documentation:&lt;/p&gt;

&lt;p&gt;Django does not validate whether an uploaded file is an image.&lt;br&gt;
We recommend to validate image file correctness in forms, or serializers.&lt;/p&gt;

&lt;p&gt;Wait, does it validate images, or doesn’t it?&lt;/p&gt;

&lt;p&gt;Instead of blindly clicking “Assign to me” on Trac and editing text, I wanted to see what Django was actually doing under the hood. If a ticket has survived for 14 years, there is a reason people are confused by it.&lt;/p&gt;

&lt;p&gt;I updated my forked Django repository, spun up the local test environment, and wrote a small regression test to reproduce the behaviour firsthand. I created a model with an ImageField, passed it a corrupted non-image byte stream (essentially a text file pretending to be an image), and ran full_clean() directly on the model instance.&lt;/p&gt;

&lt;p&gt;It passed without raising a ValidationError.&lt;/p&gt;

&lt;p&gt;Only after seeing that test confirm the exact behaviour described in the ticket did I go back to Trac, officially claim #18543, and start digging into django/db/models/fields/files.py to understand why.&lt;/p&gt;

&lt;p&gt;Where Django Actually Validates Files.&lt;/p&gt;

&lt;p&gt;Tracing the source code revealed why that documentation paragraph had been tripping developers up for over a decade. Django splits ImageField across two completely different architectural layers that happen to share the same name:&lt;/p&gt;

&lt;p&gt;django.db.models.ImageField (The Model Layer): This class inherits directly from models.FileField. If you inspect its methods in django/db/models/fields/files.py, it never overrides validate() or clean(). In fact, the model layer only ever touches Pillow lazily inside update_dimension_fields()—and only if you explicitly set width_field or height_field on your model. Otherwise, calling model.full_clean() performs zero image verification beyond basic FileField checks (like max_length or nullability).&lt;/p&gt;

&lt;p&gt;django.forms.ImageField (The Form Layer): When a ModelForm or the Django Admin renders a model with an ImageField, the model field’s formfield() method swaps in django.forms.ImageField as the default form class. That class hooks into Pillow inside to_python() to verify that the uploaded file is a genuine, non-corrupted image.&lt;/p&gt;

&lt;p&gt;The existing documentation tried to warn developers about the model layer’s limitation, but by broadly declaring “Django does not validate whether an uploaded file is an image. We recommend to validate image file correctness in forms or serializers,” it accidentally misled developers into thinking they had to write custom validation logic from scratch, even when using standard Django forms!&lt;/p&gt;

&lt;p&gt;Opening PR #22210 and the Lesson of EAFP.&lt;br&gt;
With the reproduction confirmed and the codebase traced, I opened PR #22210. When you are making your very first pull request to Django Core, your natural instinct is LBYL (Look Before You Leap): you hesitate in the comments, overthink every word, and want to ask permission before making a move so you don’t get it wrong in front of seasoned maintainers.&lt;/p&gt;

&lt;p&gt;Early in the review process, Johannes Maron dropped a piece of Python wisdom that completely changed how I view open-source collaboration: EAFP (Easier to Ask for Forgiveness than Permission). Instead of waiting around asking if an approach is okay in theory, push the commit. Give reviewers a concrete diff to react to, and trust the review pipeline to refine it.&lt;/p&gt;

&lt;p&gt;Architectural Boundary in Technical Documentation.&lt;br&gt;
What followed on PR #22210 was a masterclass in technical writing and software architecture. In Django, PRs go through rigorous community review before being merged by one of the Django Fellows. Watching Johannes Maron, Tim Schilling, and Django Merger Sarah Boyce weigh in on my diff taught me that good technical documentation is never “just text”, but instead it is a strict reflection of architectural boundaries.&lt;/p&gt;

&lt;p&gt;Takeaways for New Contributors.&lt;br&gt;
Landing my first commit in Django core left me with a few practical principles for future tickets:&lt;/p&gt;

&lt;p&gt;Read the implementation, not just the docs: Even on a documentation ticket, accurate technical writing comes from tracing the underlying Python code (validate(), clean(), and formfield()).&lt;br&gt;
Practice EAFP on pull requests: Push your best attempt early. Reviewers can refine a concrete diff much faster than a theoretical question.&lt;br&gt;
Respect architectural boundaries in documentation: Good reference docs mirror the separation of concerns in the codebase itself. Keeping model-layer docs focused on model behavior prevents confusion down the line.&lt;br&gt;
Give reviewers room to align: When multiple reviewers are weighing trade-offs on your PR, pay close attention to the codebase conventions they cite, and be ready to synthesize their feedback when asked.&lt;br&gt;
Thanks to Maryam(Captain), Lilian(Navigator), Tim Schilling, Johannes Maron, and Sarah Boyce for the thoughtful reviews on PR #22210, and to the Djangonaut Space organizers and my Team Carina peers for the constant support. On to the next ticket!&lt;/p&gt;

</description>
      <category>python</category>
      <category>django</category>
    </item>
    <item>
      <title>I Finally Got pgAdmin 4 Working in FlyEnv on Windows — Here’s What Actually Went Wrong</title>
      <dc:creator>Goodluck Igbokwe</dc:creator>
      <pubDate>Thu, 13 Aug 2026 11:02:04 +0000</pubDate>
      <link>https://dev.to/mantle_bearer/i-finally-got-pgadmin-4-working-in-flyenv-on-windows-heres-what-actually-went-wrong-n57</link>
      <guid>https://dev.to/mantle_bearer/i-finally-got-pgadmin-4-working-in-flyenv-on-windows-heres-what-actually-went-wrong-n57</guid>
      <description>&lt;p&gt;If you are installing pgAdmin through FlyEnv on Windows and the installation fails while building &lt;em&gt;pywinpty&lt;/em&gt;, you may see an error similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error: the configured Python interpreter version (3.14)
is newer than PyO3's maximum supported version (3.13)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may also see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERROR: Failed building wheel for pywinpty
Failed to build installable wheels for some pyproject.toml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;based projects&lt;/p&gt;

&lt;p&gt;The important part of the error is not actually pip itself. In this case, &lt;em&gt;pywinpty&lt;/em&gt; is being built from source and uses PyO3/Rust. The version of PyO3 involved in the build does not support Python 3.14, so the build fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;The simplest workaround is to make sure FlyEnv uses Python 3.13 for the pgAdmin installation instead of Python 3.14.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Select Python 3.13 in FlyEnv
&lt;/h2&gt;

&lt;p&gt;In FlyEnv, open the Python section and make sure a Python 3.13 installation is available and selected.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Python 3.13.x&lt;/p&gt;

&lt;p&gt;Do not use Python 3.14 for this installation while the affected dependency still has this compatibility limitation.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Remove the failed pgAdmin virtual environment
&lt;/h2&gt;

&lt;p&gt;If FlyEnv already created a pgAdmin virtual environment using Python 3.14, simply changing the global Python version may not be enough because the existing venv still points to the old interpreter.&lt;/p&gt;

&lt;p&gt;From the pgAdmin directory:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd "C:\Program Files\FlyEnv-Data\server\postgresql\pgadmin4"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Remove the existing virtual environment:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rmdir /s /q venv&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then reinstall pgAdmin through FlyEnv so that the virtual environment is recreated using Python 3.13.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Verify the interpreter
&lt;/h2&gt;

&lt;p&gt;After installation:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;venv\Scripts\python.exe --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You should see something similar to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Python 3.13.x&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can also verify that pgAdmin was installed correctly:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;venv\Scripts\python.exe -m pip show pgadmin4&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Launch pgAdmin
&lt;/h2&gt;

&lt;p&gt;The executable should be available at:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;venv\Scripts\pgadmin4.exe&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can launch it with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;venv\Scripts\pgadmin4.exe&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;FlyEnv should then open pgAdmin in your browser, usually at:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://127.0.0.1:5050" rel="noopener noreferrer"&gt;http://127.0.0.1:5050&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What about Python 3.14?
&lt;/h2&gt;

&lt;p&gt;This workaround does not mean Python 3.14 itself is broken.&lt;/p&gt;

&lt;p&gt;The problem is the dependency chain used during the pgAdmin installation. In particular, the &lt;em&gt;pywinpty&lt;/em&gt; build in the affected setup uses a version of PyO3 that does not yet recognize Python 3.14.&lt;/p&gt;

&lt;p&gt;This may no longer be necessary in a future FlyEnv/pgAdmin release if the affected dependencies are updated to support Python 3.14.&lt;/p&gt;

&lt;p&gt;So if you encounter this error, try Python 3.13 first rather than fighting the Rust/build-toolchain errors.&lt;/p&gt;

</description>
      <category>debugging</category>
      <category>postgres</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>NDPR, GDPR, and CCPA — What Every Nigerian Techie Should Know About Data Compliance</title>
      <dc:creator>Goodluck Igbokwe</dc:creator>
      <pubDate>Fri, 18 Apr 2025 00:03:14 +0000</pubDate>
      <link>https://dev.to/mantle_bearer/ndpr-gdpr-and-ccpa-what-every-nigerian-techie-should-know-about-data-compliance-26j6</link>
      <guid>https://dev.to/mantle_bearer/ndpr-gdpr-and-ccpa-what-every-nigerian-techie-should-know-about-data-compliance-26j6</guid>
      <description>&lt;p&gt;So today’s focus in my legal learning sprint was digital compliance—the rules that tell us how we can (and can’t) collect, store, and use people’s data.&lt;/p&gt;

&lt;p&gt;If you’re building websites, apps, or working with client data, this is non-negotiable. Let’s break down what I learned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Is Digital Compliance?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Digital compliance refers to following laws and regulations that govern how data is handled online. This matters for:&lt;br&gt;
    • Websites that collect emails&lt;br&gt;
    • Apps with user accounts&lt;br&gt;
    • Payment or tracking systems&lt;br&gt;
    • Freelancers managing client/customer data&lt;/p&gt;

&lt;p&gt;If you’re touching anyone’s data, you’re playing in this space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nigeria’s NDPR: Our Local Data Protection Law&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Nigeria Data Protection Regulation (NDPR) came into effect in 2019 and is enforced by the Nigeria Data Protection Commission (NDPC).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key points:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• You must inform users when collecting data
• You need clear consent
• You must keep data secure
• You’re required to limit data collection to what’s necessary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you run a business or handle any user data in Nigeria, compliance is your responsibility—even if you’re just one person.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How NDPR Compares to GDPR &amp;amp; CCPA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s a simple breakdown of how Nigeria’s &lt;strong&gt;NDPR&lt;/strong&gt; holds up against international data laws like the EU’s &lt;strong&gt;GDPR&lt;/strong&gt; and California’s &lt;strong&gt;CCPA&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• Consent Requirements: All three laws (NDPR, GDPR, and CCPA) require user consent before collecting personal data. NDPR and GDPR focus on opt-in consent, while CCPA allows opt-out in some cases.


• Right to Be Forgotten: NDPR and GDPR both grant users the right to have their data deleted. CCPA offers more limited deletion rights but still gives users control over their information.


• Penalties: Under the NDPR, non-compliance can cost up to 2% of your annual gross revenue. GDPR has even steeper fines—up to €20 million or 4% of global turnover. CCPA fines can reach $7,500 per violation.


• Does It Affect Small Businesses? Yes. All three laws apply to businesses of all sizes, as long as personal data is involved—even if you’re a solo freelancer or developer.


• Transparency &amp;amp; Notice: Each law requires that users be clearly informed about what data you’re collecting, why, and how it will be used.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters for Devs &amp;amp; Freelancers&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• Writing a Privacy Policy is not optional—it’s a legal requirement.


• If you use cookies or trackers, you need a cookie notice and opt-in.


• Collecting emails for newsletters? NDPR requires explicit consent.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Even if your audience is mostly Nigerian, odds are someone from the EU or US will interact with your project at some point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; Know the Rules. Respect the Data.&lt;/p&gt;

&lt;p&gt;The more we move into global work and SaaS, the more important data laws become. Ignorance isn’t an excuse anymore—especially when compliance is easier than ever with templates and no-code tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’m already planning to add:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• A proper privacy policy to my website


• A cookie banner


• Better data storage hygiene on client projects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Tools &amp;amp; Resources I Checked&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• [Nigeria NDPR Summary – TechCabal](https://techcabal.com/2019/03/05/nigeria-data-protection-regulation/)


• [GDPR Overview – EU Website](https://gdpr.eu/)


• [CCPA Basics – State of California](https://oag.ca.gov/privacy/ccpa)


• [Termly Privacy Policy Generator](https://termly.io/products/privacy-policy-generator/)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>gdpr</category>
      <category>techie</category>
      <category>data</category>
    </item>
    <item>
      <title>Contracts 101: What Every Nigerian Freelancer and Developer Needs to Know</title>
      <dc:creator>Goodluck Igbokwe</dc:creator>
      <pubDate>Wed, 16 Apr 2025 09:09:02 +0000</pubDate>
      <link>https://dev.to/mantle_bearer/contracts-101-what-every-nigerian-freelancer-and-developer-needs-to-know-44me</link>
      <guid>https://dev.to/mantle_bearer/contracts-101-what-every-nigerian-freelancer-and-developer-needs-to-know-44me</guid>
      <description>&lt;p&gt;Day 2 of my legal literacy journey focused on one of the most misunderstood but crucial topics in tech: contracts.&lt;/p&gt;

&lt;p&gt;Whether you’re freelancing on Upwork, working with local clients, or building a product with friends, contracts are your first line of defense. Let’s break it down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a Contract (and Why Should I Care)?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A contract is simply a legally binding agreement between two or more parties.&lt;br&gt;
But in tech, it’s so much more than that. It defines:&lt;br&gt;
    • What you’re doing&lt;br&gt;
    • When and how you’ll get paid&lt;br&gt;
    • Who owns the work you create&lt;br&gt;
    • What happens if things go wrong&lt;/p&gt;

&lt;p&gt;If you’re working without a contract, you’re basically running on trust and that’s not scalable.&lt;/p&gt;

&lt;p&gt;Key Elements of a Valid Contract (Under Nigerian Law)&lt;/p&gt;

&lt;p&gt;To be enforceable, a contract generally needs:&lt;br&gt;
    1.  Offer &amp;amp; Acceptance – One person proposes, the other agrees&lt;br&gt;
    2.  Consideration – Something of value is exchanged (e.g. your time, their money)&lt;br&gt;
    3.  Intention to Create Legal Relations&lt;br&gt;
    4.  Capacity – Both parties must be legally capable&lt;br&gt;
    5.  Legal Purpose – It must not be for something illegal&lt;/p&gt;

&lt;p&gt;Types of Contracts You Might Encounter as a Techie&lt;br&gt;
    • Freelance Work Agreements – Outlining deliverables, milestones, and payment&lt;br&gt;
    • Employment Contracts – With terms around hours, benefits, IP, and termination&lt;br&gt;
    • Non-Disclosure Agreements (NDAs) – To protect sensitive information&lt;br&gt;
    • Partnership or Co-founder Agreements – When building something with others&lt;/p&gt;

&lt;p&gt;What to Watch Out For&lt;/p&gt;

&lt;p&gt;Here are a few things that stood out to me today:&lt;br&gt;
    • If the contract doesn’t say when you’ll get paid, that’s a red flag.&lt;br&gt;
    • Avoid “Work for Hire” clauses unless you truly want to give up IP rights.&lt;br&gt;
    • Make sure scope creep (extra features) is addressed. This is a common dispute source.&lt;/p&gt;

&lt;p&gt;My Personal Takeaway&lt;/p&gt;

&lt;p&gt;As a developer, I used to think contracts were just corporate fluff. But now I realize they are protective tools—especially for freelancers. They help avoid scope disputes, late payments, and ownership confusion.&lt;/p&gt;

&lt;p&gt;I’m working on drafting a simplified freelance contract later this week, and I’ll make it open-source.&lt;/p&gt;

&lt;p&gt;Resources I Checked Out&lt;br&gt;
    • &lt;a href="https://www.nolo.com/legal-encyclopedia/contracts-basics-36190.html" rel="noopener noreferrer"&gt;Contracts 101 – Nolo Legal Basics&lt;/a&gt;&lt;br&gt;
    • &lt;a href="https://lawpadi.com/contract-law-nigeria/" rel="noopener noreferrer"&gt;LawPadi: Nigerian Contract Law Overview&lt;/a&gt;&lt;br&gt;
    •&lt;a href="//upwork.com"&gt;Upwork’s Contract Terms Summary &lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tech</category>
      <category>law</category>
    </item>
    <item>
      <title>What Every Nigerian Techie Should Know About Business Law and IP</title>
      <dc:creator>Goodluck Igbokwe</dc:creator>
      <pubDate>Mon, 14 Apr 2025 23:01:38 +0000</pubDate>
      <link>https://dev.to/mantle_bearer/what-every-nigerian-techie-should-know-about-business-law-and-ip-25if</link>
      <guid>https://dev.to/mantle_bearer/what-every-nigerian-techie-should-know-about-business-law-and-ip-25if</guid>
      <description>&lt;p&gt;Hello world, Devs and Freelancers!&lt;br&gt;
Today marks Day 1 of my 4-week journey into legal literacy for tech professionals. I’m sharing this series not as a lawyer, but as a developer who wants to stop being “legally blind” when it comes to contracts, IP rights, and platform policies.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So, What’s the Big Deal About Legal Literacy?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you’re freelancing, building your own software, or launching a startup, you’re automatically playing in the legal arena—whether you know the rules or not. And in Nigeria, it’s especially important to understand how our local laws intersect with global expectations.&lt;/p&gt;

&lt;p&gt;Today’s Focus: Business Law + IP Basics (Nigeria)&lt;/p&gt;

&lt;p&gt;I focused on two main areas:&lt;br&gt;
    • Foundations of Nigerian Business Law&lt;br&gt;
    • The ABCs of Intellectual Property (IP)&lt;/p&gt;

&lt;p&gt;Let’s break that down.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is Nigerian Business Law?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nigerian business law governs how individuals and organizations can form and operate businesses legally in the country. It covers everything from:&lt;br&gt;
    • Business Registration (via CAC – Corporate Affairs Commission)&lt;br&gt;
    • Types of Business Structures (sole proprietorship, partnership, LLC, etc.)&lt;br&gt;
    • Obligations under Contracts and Statutes&lt;br&gt;
    • Regulatory Compliance (e.g., tax, NDPR)&lt;/p&gt;

&lt;p&gt;If you’re offering tech services and haven’t legally registered your business, you’re taking risks—both financially and legally.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Intellectual Property 101&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here’s what I learned about the three big categories of IP that affect tech folks:&lt;/p&gt;

&lt;p&gt;a. Copyright&lt;br&gt;
    • Protects creative works: code, designs, articles, music, etc.&lt;br&gt;
    • In Nigeria, copyright is automatic once a work is created and fixed in a tangible form (e.g., your codebase).&lt;br&gt;
    • You can register with the Nigerian Copyright Commission, but it’s not compulsory.&lt;/p&gt;

&lt;p&gt;b. Trademarks&lt;br&gt;
    • Protects brands and logos (think your startup name or app icon).&lt;br&gt;
    • Must be registered through the Trademarks, Patents and Designs Registry under the Federal Ministry of Industry, Trade, and Investment.&lt;/p&gt;

&lt;p&gt;c. Patents&lt;br&gt;
    • Protect inventions and technical solutions.&lt;br&gt;
    • If you’ve built a novel algorithm, machine, or process, patenting might be the right move—but it’s complex and costly.&lt;/p&gt;

&lt;p&gt;Quick Tips I Took Away&lt;br&gt;
    • Always read the fine print—from NDAs to platform terms.&lt;br&gt;
    • Register your brand as a trademark if you’re planning to scale.&lt;br&gt;
    • If you’re writing code for clients, clarify who owns the IP after delivery.&lt;br&gt;
    • When in doubt, Google isn’t a lawyer—but awareness is a start.&lt;/p&gt;

&lt;p&gt;Tools &amp;amp; Resources I Found Useful&lt;br&gt;
    • Nigerian Copyright Commission&lt;br&gt;
    • Trademarks, Patents and Designs Registry&lt;br&gt;
    • Nigerian Law School Notes on Business Law&lt;/p&gt;

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

&lt;p&gt;Tomorrow, I’ll be diving into Contracts 101—the parts of a valid contract, common pitfalls, and what every freelancer should look out for.&lt;/p&gt;

&lt;p&gt;Have you ever had an IP or legal issue in your freelance journey? Let’s talk in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>ai</category>
    </item>
    <item>
      <title>Hello Dev.to, I’m Here to Build &amp; Learn!</title>
      <dc:creator>Goodluck Igbokwe</dc:creator>
      <pubDate>Wed, 05 Feb 2025 07:54:44 +0000</pubDate>
      <link>https://dev.to/mantle_bearer/hello-devto-im-here-to-build-learn-3gg8</link>
      <guid>https://dev.to/mantle_bearer/hello-devto-im-here-to-build-learn-3gg8</guid>
      <description>&lt;p&gt;👋 &lt;strong&gt;Hey Dev.to Community!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m super excited to finally join this amazing space where developers share, learn, and grow together. My name is &lt;strong&gt;Goodluck Igbokwe&lt;/strong&gt;, and I’m a backend-focused full-stack developer with a passion for building scalable applications, APIs, and solving real-world problems with code.&lt;/p&gt;

&lt;p&gt;🚀 My Tech Journey&lt;/p&gt;

&lt;p&gt;Like many self-taught developers, my journey started with &lt;a class="mentioned-user" href="https://dev.to/cs50_harvard_"&gt;@cs50_harvard_&lt;/a&gt;, where I got my first deep dive into programming. From that moment, I knew tech was where I belonged. I gradually transitioned into backend development, working with:&lt;/p&gt;

&lt;p&gt;✅ Python (Django, Flask, FastAPI)&lt;br&gt;
✅ PHP (Laravel &amp;amp; WordPress)&lt;br&gt;
✅ RESTful APIs &amp;amp; Database Management&lt;br&gt;
✅ Git, CI/CD, and Deployment Strategies&lt;/p&gt;

&lt;p&gt;Over time, I’ve worked on projects ranging from web apps to API integrations, and I’m constantly learning and improving.&lt;/p&gt;

&lt;p&gt;💡 What You Can Expect from My Blog&lt;/p&gt;

&lt;p&gt;I’ll be sharing:&lt;br&gt;
    • Insights &amp;amp; Lessons from my journey as a backend developer.&lt;br&gt;
    • Hands-on tutorials on Django, Fask, FastAPI, and Laravel.&lt;br&gt;
    • Debugging &amp;amp; problem-solving strategies (aka the things I wish I knew earlier).&lt;br&gt;
    • Real-world backend development experiences from internships &amp;amp; projects.&lt;br&gt;
    • Tips on freelancing &amp;amp; career growth in tech.&lt;/p&gt;

&lt;p&gt;🌍 Let’s Connect!&lt;/p&gt;

&lt;p&gt;I’d love to engage with fellow devs, exchange ideas, and learn from you all. Feel free to drop a comment, connect with me, or suggest topics you’d love to see! 🚀&lt;/p&gt;

&lt;p&gt;🔗 Follow me on Twitter: &lt;a href="https://x.com/demantlebearer?s=21" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
🔗 GitHub: (&lt;a href="https://github.com/mantle-bearer/" rel="noopener noreferrer"&gt;https://github.com/mantle-bearer/&lt;/a&gt;)&lt;br&gt;
🔗 LinkedIn: (&lt;a href="https://www.linkedin.com/in/mantle-bearer" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/mantle-bearer&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Let’s build, debug, and grow together! 💻🔥 #dev #learn #unlearn #relearn&lt;/p&gt;

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