Hi, I'm Kenneth Bassey
I help businesses scale with robust fullstack solutions, from e-commerce platforms handling high traffic to logistics systems that streamline operations.
Stack: Python, TypeScript, Django, React/Next.js
Worked across E-commerce, Logistics, and EdTech. Currently exploring opportunities in Fintech.
DM for project inquiries.
I am a British, Nigerian yes but Iโve always cared about Nigeria and anybody that has followed my career can vouch for that. I have houses in Nigeria, I want to take my kids home to a safe country just like we travel the rest of the world. Why should I not speak up about what is happening in my homeland?
I remember when I started building StackShift and was using SES for emails.
When I got closer to launch, I applied for SES production access so StackShift could send real emails to users, not just the one verified email I was using in sandbox.
AWS kept rejecting it.
They were asking for so many things I didnโt have yet: clearer use case, sending patterns, bounce handling, complaint handling, suppression strategy, opt-in details, domain setup, abuse prevention, and all the things youโre expected to already understand before you can even send email properly.
At that point, I moved to Resend so I could keep shipping.
But the thought stayed in my head:
Why is this not a StackShift feature?
If StackShift is supposed to help developers deploy and run real applications, then transactional email is part of that story.
Apps need to send emails for several things.
So instead of depending on yet another external service, I decided to build StackShift Mail.
Not as a wrapper around SES.
Not as a wrapper around Resend.
Not as a wrapper around Mailgun.
Actual StackShift-owned mail infrastructure.
The flow now is:
App calls StackShift Mail
โ message is stored
โ send job is queued
โ worker composes the email
โ DKIM/signing path is handled
โ Postfix hands it off
โ attempts/logs/status are tracked
โ failures can be retried
โ bounces can be processed
โ bad recipients can be suppressed
And the most interesting part is that StackShift Mail is powered by another StackShift primitive I already built: StackShift Jobs.
StackShift Jobs is the durable background execution system I built for work that should not die when the request ends.
Instead of doing everything inside an HTTP request, you can offload work to StackShift Jobs and let it handle retries, attempts, logs, delayed execution, failures, and recovery.
That means Mail does not have to block the userโs request.
When you call mail.send, StackShift can accept the message, queue the work, process it safely, retry temporary failures, and keep a full trail of what happened.
That same Jobs system also powers things like OTP expiry, webhook delivery retries, bounce processing, scheduled sends, batch sending, and reputation evaluation.
This is why building platform primitives matters.
One primitive unlocks another.
So far, StackShift Mail now has:
transactional email sending
API-key scoped usage
message persistence
send attempts
logs
Postfix handoff
DKIM/signing integration path
customer domain verification
SPF/DKIM/DMARC/return-path checks
sender domain enforcement
bounce handling
hard/soft bounce classification
suppression lists
automatic blocking of bad recipients
OTP send and verify
OTP expiry
max attempts
resend cooldowns
hashed OTP storage
templates
template versions
backend template rendering
template preview
test sends
sendTemplate API
mail lifecycle events
webhooks
webhook signing
webhook retries
message timeline
reputation checks
sending limits
warmup stages
domain reputation
scheduled emails
transactional batches
attachments
inbound mail foundation
analytics, etc.
This started because I got blocked trying to send emails for StackShift.
Now itโs becoming a full StackShift product.
Deploy the app.
Run the jobs.
Send the emails.
Track what happened.
I remember when I started building StackShift and was using SES for emails.
When I got closer to launch, I applied for SES production access so StackShift could send real emails to users, not just the one verified email I was using in sandbox.
AWS kept rejecting it.
They were asking for so many things I didnโt have yet: clearer use case, sending patterns, bounce handling, complaint handling, suppression strategy, opt-in details, domain setup, abuse prevention, and all the things youโre expected to already understand before you can even send email properly.
At that point, I moved to Resend so I could keep shipping.
But the thought stayed in my head:
Why is this not a StackShift feature?
If StackShift is supposed to help developers deploy and run real applications, then transactional email is part of that story.
Apps need to send emails for several things.
So instead of depending on yet another external service, I decided to build StackShift Mail.
Not as a wrapper around SES.
Not as a wrapper around Resend.
Not as a wrapper around Mailgun.
Actual StackShift-owned mail infrastructure.
The flow now is:
App calls StackShift Mail
โ message is stored
โ send job is queued
โ worker composes the email
โ DKIM/signing path is handled
โ Postfix hands it off
โ attempts/logs/status are tracked
โ failures can be retried
โ bounces can be processed
โ bad recipients can be suppressed
And the most interesting part is that StackShift Mail is powered by another StackShift primitive I already built: StackShift Jobs.
StackShift Jobs is the durable background execution system I built for work that should not die when the request ends.
Instead of doing everything inside an HTTP request, you can offload work to StackShift Jobs and let it handle retries, attempts, logs, delayed execution, failures, and recovery.
That means Mail does not have to block the userโs request.
When you call mail.send, StackShift can accept the message, queue the work, process it safely, retry temporary failures, and keep a full trail of what happened.
That same Jobs system also powers things like OTP expiry, webhook delivery retries, bounce processing, scheduled sends, batch sending, and reputation evaluation.
This is why building platform primitives matters.
One primitive unlocks another.
So far, StackShift Mail now has:
transactional email sending
API-key scoped usage
message persistence
send attempts
logs
Postfix handoff
DKIM/signing integration path
customer domain verification
SPF/DKIM/DMARC/return-path checks
sender domain enforcement
bounce handling
hard/soft bounce classification
suppression lists
automatic blocking of bad recipients
OTP send and verify
OTP expiry
max attempts
resend cooldowns
hashed OTP storage
templates
template versions
backend template rendering
template preview
test sends
sendTemplate API
mail lifecycle events
webhooks
webhook signing
webhook retries
message timeline
reputation checks
sending limits
warmup stages
domain reputation
scheduled emails
transactional batches
attachments
inbound mail foundation
analytics, etc.
This started because I got blocked trying to send emails for StackShift.
Now itโs becoming a full StackShift product.
Deploy the app.
Run the jobs.
Send the emails.
Track what happened.
Pushed WordPress much further on StackShift.
It's not just a template. (Legacy)
Now you can:
- Create WordPress directly
- Launch multisite networks
- Import existing installs
- See WordPress/PHP/runtime/storage/DB health at a glance
- Install themes
- Run safe actions like core updates, maintenance mode, permalinks flush, and admin reset
- Deploy on StackShift managed server, your VPS, or Cloud account, etc.
If youโre a WordPress designer, builder, or agency, Iโd love to show you what weโre building.
I deployed my portfolio on @StackshiftCloud, build time was 00.23s and I deployed the same project on another platform, build time was 00.54 seconds. I tried with 3 different projects and Stackshift still built and deployed faster.
Deploy on Stackshift today, you can even bring your cloud account (Hertzner, AWS, Azure, Digital Ocean) or VPS, plug it on Stackshift and deploy from your GitHub straight to your own server if you donโt want to deploy to Stackshift servers.
Today I'm launching StackShift.
StackShift is an infrastructure ownership platform for deploying, operating, and managing modern software from one control plane.
It supports Node.js, Python, Go, Rust, PHP, Laravel, Ruby, static sites, Docker-based apps, Svelte/SvelteKit, worker services, multi-container stacks, and web3-style build workflows like Hardhat, Truffle, Foundry, and Anchor.
But StackShift is not just about deployment.
It brings together hosted infrastructure, bring-your-own server, bring-your-own cloud, bring-your-own SMTP or outbound email provider, database provisioning, domain purchases, DNS management, email hosting, WordPress and other deployable templates, logs, metrics, backups, billing, teams, and AI-assisted failure diagnosis.
The thesis is simple:
Modern teams should not have to choose between convenience and ownership.
StackShift gives teams one place to run their software infrastructure, whether it lives on StackShift, their own server, their own cloud account, or their own providers.
I wrote more about the product direction, the ownership model, and what Iโm building here:
https://t.co/AWoboSSFrk
You can also checkout StackShift here:
https://t.co/zLrztszIDt
Today I'm launching StackShift.
StackShift is an infrastructure ownership platform for deploying, operating, and managing modern software from one control plane.
It supports Node.js, Python, Go, Rust, PHP, Laravel, Ruby, static sites, Docker-based apps, Svelte/SvelteKit, worker services, multi-container stacks, and web3-style build workflows like Hardhat, Truffle, Foundry, and Anchor.
But StackShift is not just about deployment.
It brings together hosted infrastructure, bring-your-own server, bring-your-own cloud, bring-your-own SMTP or outbound email provider, database provisioning, domain purchases, DNS management, email hosting, WordPress and other deployable templates, logs, metrics, backups, billing, teams, and AI-assisted failure diagnosis.
The thesis is simple:
Modern teams should not have to choose between convenience and ownership.
StackShift gives teams one place to run their software infrastructure, whether it lives on StackShift, their own server, their own cloud account, or their own providers.
I wrote more about the product direction, the ownership model, and what Iโm building here:
https://t.co/AWoboSSFrk
You can also checkout StackShift here:
https://t.co/zLrztszIDt
Hi, I'm Kenneth Bassey
I help businesses scale with robust fullstack solutions, from e-commerce platforms handling high traffic to logistics systems that streamline operations.
Stack: Python, TypeScript, Django, React/Next.js
Worked across E-commerce, Logistics, and EdTech. Currently exploring opportunities in Fintech.
DM for project inquiries.
Recently I have noticed that you donโt see errors about network connectivity on your feeds anymore instead you get your last cached results when thereโs connectivity issues
This is the beauty of modern design resilience pattern where your system degrades instead of a complete cascade breakdown
Day 16 of learning system design
I learnt about Sharding and how it connects to Database Replication.
Sharding basically means splitting a large database into smaller, more manageable pieces called shards. Each shard holds a portion of the data, which helps distribute the load and improve performance, especially when your app scales.
Replication, on the other hand, means making copies of your database across multiple servers. It ensures data availability, fault tolerance, and quick recovery if one server goes down.
Hereโs how they connect:
Replication keeps copies of each shard across multiple servers, so even if one shard fails, the system still runs smoothly using the replicated copy.
Sharding handles scale, replication handles reliability, together, they keep large systems fast and resilient.
Still using the System Design Primer on GitHub for this journey, and itโs been eye-opening
Hold me accountableโค๏ธ
๐ ๐ฃ๐ฟ๐ฎ๐ฐ๐๐ถ๐ฐ๐ฎ๐น ๐๐ฟ๐ฎ๐บ๐ฒ๐๐ผ๐ฟ๐ธ ๐ณ๐ผ๐ฟ ๐๐ต๐ผ๐ผ๐๐ถ๐ป๐ด ๐ฌ๐ผ๐๐ฟ ๐ฆ๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ
We have monoliths, microservices, event-driven, and serverless. The architectural options are endless. The real skill isn't defining them, it's knowing when and why to choose one over another.
Here are the 5 critical constraints I use to evaluate any architectural decision:
- ๐ฆ๐๐๐๐ฒ๐บ ๐๐ผ๐บ๐ฝ๐น๐ฒ๐ ๐ถ๐๐: Simple CRUD vs. multiple business domains? (Complexity often dictates distribution).
- ๐๐ ๐ฝ๐ฒ๐ฐ๐๐ฒ๐ฑ ๐ฆ๐ฐ๐ฎ๐น๐ฒ: Hundreds of users? Stick to simplicity. Thousands? Scalability is your 1 constraint.
- ๐ง๐ฒ๐ฎ๐บ ๐ฆ๐๐ฟ๐๐ฐ๐๐๐ฟ๐ฒ: A small team will be crushed by microservices overhead. Large teams are perfectly structured for distributed systems.
- ๐ง๐ถ๐บ๐ฒ ๐๐ผ ๐ ๐ฎ๐ฟ๐ธ๐ฒ๐ (๐ง๐ง๐ ): Need to ship fast? Simplicity wins. (Think monoliths or serverless early on).
- ๐ฅ๐ฒ๐ด๐๐น๐ฎ๐๐ผ๐ฟ๐/๐ฆ๐ฒ๐ฐ๐๐ฟ๐ถ๐๐: Domains like FinTech or Healthcare demand strict data separation, which can force your architectural hand.
๐ง๐ต๐ฒ ๐ฐ-๐ฆ๐๐ฒ๐ฝ ๐ฆ๐ฒ๐น๐ฒ๐ฐ๐๐ถ๐ผ๐ป ๐ฃ๐ฟ๐ผ๐ฐ๐ฒ๐๐:
- ๐๐ฒ๐ณ๐ถ๐ป๐ฒ ๐๐ต๐ฒ ๐ก๐ผ๐ฟ๐๐ต ๐ฆ๐๐ฎ๐ฟ: What are your business/technical Goals? (Cost, speed, fault tolerance).
- ๐๐ถ๐๐ ๐๐ผ๐ป๐๐๐ฟ๐ฎ๐ถ๐ป๐๐: Document all limitations (Latency, team size, compliance).
- ๐๐ฑ๐ฒ๐ป๐๐ถ๐ณ๐ ๐๐ฎ๐ป๐ฑ๐ถ๐ฑ๐ฎ๐๐ฒ๐: Brainstorm 2-3 patterns that fit the goals.
- ๐๐๐ฎ๐น๐๐ฎ๐๐ฒ ๐ง๐ฟ๐ฎ๐ฑ๐ฒ-๐ผ๐ณ๐ณ๐: Check the pros/cons. Which option mitigates the greatest long-term risk?
Architecture is a deliberate decision, not a default.