

<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://billyokeyo.dev/</id>
  <title>Billy Okeyo</title>
  <subtitle>I am a software engineer with a burning passion to want and help others with code that I create. I enjoy the limitless potential of impact that I can have with what I build, it is what pushes me every day to become a better developer.</subtitle>
  <updated>2026-04-13T05:42:24+00:00</updated>
  <author>
    <name>Billy Okeyo</name>
    <uri>https://billyokeyo.dev/</uri>
  </author>
  <link rel="self" type="application/atom+xml" href="https://billyokeyo.dev/feed.xml"/>
  <link rel="alternate" type="text/html" hreflang="en"
    href="https://billyokeyo.dev/"/>
  <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator>
  <rights> © 2026 Billy Okeyo </rights>
  <icon>/assets/img/favicons/favicon.ico</icon>
  <logo>/assets/img/favicons/favicon-96x96.png</logo>



  
  <entry>
    <title>Stripe Connect on Accounts v2 — Standard, Express, and Custom, Rebuilt Around Configurations (with HTTP, Python, C#, and PHP)</title>
    <link href="https://billyokeyo.dev/posts/stripe-connect-accounts-v2/" rel="alternate" type="text/html" title="Stripe Connect on Accounts v2 — Standard, Express, and Custom, Rebuilt Around Configurations (with HTTP, Python, C#, and PHP)" />
    <published>2026-04-06T00:00:00+00:00</published>
  
    <updated>2026-04-10T10:49:16+00:00</updated>
  
    <id>https://billyokeyo.dev/posts/stripe-connect-accounts-v2/</id>
    <content src="https://billyokeyo.dev/posts/stripe-connect-accounts-v2/" />
    <author>
      <name>Billy Okeyo</name>
    </author>

  
    
    <category term="Payment Processing" />
    
    <category term="Software Development" />
    
  

  
    <summary>
      





      This is the Accounts v2 companion to the original Connect guide (Accounts v1). Same platform concepts—Standard, Express, Custom, money flow, compliance—but the API shape is the one Stripe describes in Connect and the Accounts v2 API. Use the older post when you must stay on v1 (Account.create with type=express, OAuth-only Standard flows, etc.). Use this post when you are designing around one Ac...
    </summary>
  

  </entry>

  
  <entry>
    <title>Contract Testing: Prevent Breaking Changes Before Production</title>
    <link href="https://billyokeyo.dev/posts/contract-testing/" rel="alternate" type="text/html" title="Contract Testing: Prevent Breaking Changes Before Production" />
    <published>2026-03-19T00:00:00+00:00</published>
  
    <updated>2026-03-20T15:23:58+00:00</updated>
  
    <id>https://billyokeyo.dev/posts/contract-testing/</id>
    <content src="https://billyokeyo.dev/posts/contract-testing/" />
    <author>
      <name>Billy Okeyo</name>
    </author>

  
    
    <category term="Contract Testing" />
    
    <category term="API Testing" />
    
    <category term="Software Architecture" />
    
  

  
    <summary>
      





      
  “It worked locally. Tests passed. But production still broke.”


If you’re building distributed systems with multiple services and frontends, you’ve likely encountered this (whether using .NET + Angular, Node.js + React, Python + Vue, or any combination):


  A backend change gets deployed
  The frontend suddenly breaks
  No tests warned you


The issue isn’t always logic.

It’s often a brok...
    </summary>
  

  </entry>

  
  <entry>
    <title>Why Your Django App Needs Redis and Celery in Production</title>
    <link href="https://billyokeyo.dev/posts/why-your-django-app-needs-redis/" rel="alternate" type="text/html" title="Why Your Django App Needs Redis and Celery in Production" />
    <published>2026-03-16T00:00:00+00:00</published>
  
    <updated>2026-03-16T00:00:00+00:00</updated>
  
    <id>https://billyokeyo.dev/posts/why-your-django-app-needs-redis/</id>
    <content src="https://billyokeyo.dev/posts/why-your-django-app-needs-redis/" />
    <author>
      <name>Billy Okeyo</name>
    </author>

  
    
    <category term="Django" />
    
    <category term="Redis" />
    
    <category term="Celery" />
    
    <category term="Background Tasks" />
    
  

  
    <summary>
      





      Django is an incredibly powerful framework for building web applications quickly. However, as your application grows, certain tasks begin to slow down request-response cycles.

Examples include:


  Sending emails
  Generating reports
  Processing uploaded files
  Running background analytics
  Sending notifications


Running these tasks during an HTTP request can make your application slow and...
    </summary>
  

  </entry>

  
  <entry>
    <title>A Practical Guide to File Uploads (Images, Excel, CSV) in Angular + Django</title>
    <link href="https://billyokeyo.dev/posts/image-uploads/" rel="alternate" type="text/html" title="A Practical Guide to File Uploads (Images, Excel, CSV) in Angular + Django" />
    <published>2026-02-23T00:00:00+00:00</published>
  
    <updated>2026-02-23T00:00:00+00:00</updated>
  
    <id>https://billyokeyo.dev/posts/image-uploads/</id>
    <content src="https://billyokeyo.dev/posts/image-uploads/" />
    <author>
      <name>Billy Okeyo</name>
    </author>

  
    
    <category term="Web Development" />
    
    <category term="Full Stack" />
    
    <category term="Django" />
    
    <category term="Angular" />
    
  

  
    <summary>
      





      File uploads are one of those features that look simple… until they aren’t.

Images need previewing. CSV files need parsing. Excel files need validation. Large files need handling. And suddenly your “simple upload” becomes a full feature.

In this guide, we’ll build a practical and production-ready file upload system using:


  Angular (Frontend)
  Django + Django REST Framework (Backend)


We’...
    </summary>
  

  </entry>

  
  <entry>
    <title>The Diderot Effect: A Subtle System Bug in How We Consume Technology</title>
    <link href="https://billyokeyo.dev/posts/diderot-effect/" rel="alternate" type="text/html" title="The Diderot Effect: A Subtle System Bug in How We Consume Technology" />
    <published>2026-01-09T00:00:00+00:00</published>
  
    <updated>2026-01-09T00:00:00+00:00</updated>
  
    <id>https://billyokeyo.dev/posts/diderot-effect/</id>
    <content src="https://billyokeyo.dev/posts/diderot-effect/" />
    <author>
      <name>Billy Okeyo</name>
    </author>

  
    
    <category term="Personal Development" />
    
    <category term="Technology" />
    
    <category term="Behavioral Economics" />
    
  

  
    <summary>
      





      At the beginning of year (2026), I took some time to reflect on my past behavior, not in terms of code quality, architectural decisions, or career milestones, but something far more mundane and quietly expensive: how I consume technology.

One pattern stood out immediately.

I bought a MacBook, and at the time, it felt sufficient. It solved the problem I had: performance, portability, and a sol...
    </summary>
  

  </entry>

</feed>


