Hey, I’m Maina Brian Waweru!

A full-stack AI engineer based in Nakuru, Kenya. I see problems, envision how to solve them using the technological primitives in my mind, and execute strategically.

Contact

You can reach out to me at hello@mainabrianwaweru.com

Projects

My bag

I take pride in learning because it expands my bag. As a result, I notice more problems and how to solve them with what I know. I'm constantly planning or executing something, which continually introduces me to new concepts, so my bag is always growing.

Frontend

  • HTML5
  • CSS
  • JavaScript
  • TypeScript
  • React
  • Next.js
  • Tailwind CSS
  • Tauri v2

Backend & AI

  • Python
  • Django
  • Django REST Framework
  • Rust
  • Axum
  • LangChain
  • LlamaIndex
  • LangGraph
  • Ollama
  • vLLM

Data & real-time

  • HTTP / HTTPS
  • REST APIs
  • WebSockets
  • Server-Sent Events
  • Celery
  • Tokio
  • Valkey
  • Redis
  • PostgreSQL
  • SQLite

Delivery

  • Docker
  • docker-compose
  • Kubernetes
  • GitHub

Hardware

  • ESP32
  • Orange Pi

How I work

Client-Side

I use HTML, CSS, and JS/TS for frontends. Depending on whether Search Engine Optimization is needed, I go with Django templates or a Next.js frontend when SEO is crucial. For internal tools, I play with React. When those frontends need to run as mobile or desktop applications, I wrap the React frontends with Tauri v2 to leverage the system's native webview.

Server-Side & AI

On the server side, I use Python with Django and DRF for user management, and Rust with Axum where performance is vital, such as parsing through files. I use LangGraph to create graphs for human-in-the-loop agents, implementing their various tools with LangChain and LlamaIndex. For model orchestration, I use Ollama during testing, while vLLM handles the job in production.

Communication, Architecture & Data

To glue the client-side and server-side together, I mostly use regular HTTP/HTTPS with REST APIs, alongside WebSockets and Server-Sent Events (SSE) for real-time communication. Valkey, or Redis, serves as the message broker to power asynchronous execution with Celery and Tokio, facilitating the event-driven patterns I rely on. Depending on the data I'm handling, I store user-provisioned data in PostgreSQL for long-term storage, including vector embeddings. For caching, I rely on Valkey/Redis. On the mobile client side, I use SQLite3 for simplicity.

DevOps & Deployment

For deployment, I use Docker to create isolated sandboxes for agents to work in, as well as to package application files for smooth continuous integration and deployment (CI/CD). Depending on the size of the user base, a docker-compose file manages the deployed services when heavy traffic isn't expected. When scale and traffic become a factor, Kubernetes steps into the picture to make container orchestration across multiple servers effortless.

Hardware

When hardware calls, I answer. I mostly play with ESP32-family microcontrollers and Orange Pi boards.

Articles

Long form, written when there is something worth writing down.

No articles published yet.

Draft one in the admin and it lands right here, ready to share.

Go to articles