Full-Stack Engineer · AI Systems & Infrastructure · Accra, Ghana
Who's reading this? Jump to the part written for you:
bernard@accra:~$ neofetch
▄▄▄▄▄▄▄▄▄▄▄▄ bernard@accra
▄█▀▀ ▀▀█▄ ────────────────────────────────────────
▄█▀ ▄▄▄▄▄▄▄▄ ▀█▄ OS ....... Full-Stack Engineer (AI Systems)
█▀ ▄█▀ ▀█▄ ▀█ Host ..... Accra, Ghana · GMT · remote-ready
█ █▀ ▄▄ ▀█ █ Uptime ... 5 years commercial, since Jun 2021
█ █ █▀▀█ █ █ Shell .... bash · zsh · a great deal of ssh
█ █▄ ▀▀ ▄█ █ Packages . React · Next.js · NestJS · Postgres
█▄ ▀█▄ ▄█▀ ▄█ MongoDB · Redis · RabbitMQ · Docker
▀█▄ ▀▀▀▀▀▀▀▀ ▄█▀ Degree ... BTech Cybersecurity, applied
▀█▄▄ ▄▄█▀ Running .. 1 consulting engagement · Clanzero
▀▀▀▀▀▀▀▀▀▀▀▀ Status ... open to workThe 20-second version.
| What I am | A full-stack engineer who also owns production. Five years, six companies, nine systems still running. |
| What I'm best at | AI features that survive contact with real users — generation pipelines, queues, guardrails — and the infrastructure that keeps them up. |
| Stack | TypeScript · React/Next.js · Node/NestJS · Postgres/MongoDB/Redis · RabbitMQ/SQS · Docker · AWS/GCP/Azure |
| Unusual for my level | I've run production. Deploys, migrations, monitoring, incidents, security remediation — not just feature tickets. |
| Credential | BTech Cybersecurity — used for OWASP ZAP assessments and hardening on live systems, not framed on a wall. |
| Availability | Open to full-stack, AI engineering, and platform roles. Remote, or Accra-based. Same-day reply. |
The questions you were about to ask →
"Have you actually shipped AI, or just called an API?" Both, and the difference is the interesting part. I've built multi-stage generation pipelines with structured output and schema validation, RAG with citations traceable to source, and content-safety guardrails after diagnosing classifier false negatives in production. The API call is ten minutes of the work; the other 95% is making it fail safely.
"Can you own infrastructure, or do you need a DevOps engineer?" I run self-hosted client production today — Dokploy/Traefik, HTTPS, Postgres migrations via pg_dump/pg_restore, encrypted object storage, uptime and error monitoring, structured logging. I also deploy across AWS (EC2, ECS Fargate, ECR, Lambda, SQS, S3) and GCP Cloud Run.
"Frontend too, or backend-leaning?" Genuinely both. React/Next.js interfaces including a block-based content editor, alongside the NestJS services and data models behind them.
"Five years, but your degree finished in 2025?" I started contracting in 2021 and studied alongside it. The part-time contract and consulting engagements overlap the employed roles on purpose — see the commit log further down.
"Remote across timezones?" Accra is GMT. That's full overlap with the UK/EU and a workable morning overlap with US East. I've worked with US and German clients on that basis.
Here's how work actually moves through me:
a request arrives
│
▼
┌──────────────────┐
│ React / Next.js │ typed · server-rendered · accessible
└────────┬─────────┘
▼
┌──────────────────┐
│ NestJS API │ REST · CQRS · auth · validation
└────────┬─────────┘
│
├── fast? ─────────────────▶ respond ✔
│
└── slow or expensive?
│
▼
┌───────────────────┐
│ RabbitMQ / SQS │ retries · DLQ · per-tenant
└─────────┬─────────┘
▼
┌───────────────────┐
│ workers │ LLM · FFmpeg · cron
└─────────┬─────────┘ ECS Fargate · PM2
▼
┌───────────────────┐
│ persistence │ Postgres · Mongo · Redis · S3
└─────────┬─────────┘
▼
notify the user ✔
The one rule behind that whole diagram: a 90-second model call has no business in a request handler. Everything to the right of the branch exists so the user gets a response in 200ms and the truth arrives later.
And what happens after the merge, which is the half most profiles skip:
ship ──▶ deploy ──▶ observe ──▶ page ──▶ fix ──▶ redesign
▲ │
└───────────────────────────────────────────────────┘
The full stack, as a tree →
bernard@accra:~$ tree ~/stack -L 2 --dirsfirst
~/stack
├── daily/
│ ├── TypeScript · JavaScript
│ ├── React · Next.js
│ ├── Node.js · NestJS · Express
│ ├── PostgreSQL · MongoDB · Redis
│ ├── RabbitMQ · AWS SQS
│ └── Docker · Prisma
├── ai/
│ ├── OpenAI · Google Gemini/Vertex · Azure AI Foundry
│ ├── RAG · embeddings · Pinecone · vector search
│ ├── structured output · schema validation · guardrails
│ └── Whisper · FFmpeg pipelines · real-time voice over WebSocket
├── cloud/
│ ├── AWS ....... EC2 · S3 · SQS · Lambda · ECS Fargate · ECR · SES
│ ├── GCP ....... Cloud Run · Vertex AI · Secret Manager
│ ├── Azure ..... AI Foundry, region-pinned deployments
│ └── self-host . Dokploy · Traefik · Nginx · PM2 · DigitalOcean
├── security/
│ ├── OWASP ZAP assessments · XSS triage · auth flow review
│ └── CSP & header hardening · secrets & credential rotation
└── also-worked-with/
├── Python · C# · Unity · Vue · Flutter
└── GraphQL · FastAPI · MySQL · Supabase · Firebase · StripeThree opinions I'll defend in a code review →
Schema-validate every model response. An LLM in a pipeline with no human in the loop is an untrusted input source. Validate, threshold on confidence, and fall back — never write unverified output to someone's CRM.
The thing you didn't instrument is the thing that will page you. Structured logs and error tracking go in before launch, not after the first incident. I've added swap to a locked-out box at an unpleasant hour; it teaches you fast.
Boring deploys are a feature. One pipeline run, reproducible, reversible. If shipping is exciting, something is wrong.
You need someone who can take an idea to a live product without a platform team behind them. That's the job I've done five times.
Zero to production, repeatedly: MVP shipped in ~4 weeks at Bridge Labs, then owned for 15 months. A job portal from concept to launch and a year of operating it. A fintech co-founded as CTO. An AI authoring platform built and shipped inside an existing product.
What my first 30 days look like:
week 1 read the code, map the systems, find what's undocumented
week 2 fix something small and ship it — proves the whole pipeline works
week 3 close the security and reliability gaps nobody has had time for
week 4 first real feature, with monitoring attached before it goes live
What that gets you: one person covering frontend, backend, data model, queues, deploys, billing integration, and security review — with documentation left behind so you're not dependent on me forever. I've inherited an undocumented five-app platform and written the technical map of record for it.
Problem first, because the tech list is the least interesting part.
| Problem | What I built | Outcome |
|---|---|---|
| Five-app platform, one departing engineer, no map | Took engineering ownership: 5 Next.js apps on shared Atlas, an SQS→Lambda→Fargate media pipeline, a Cloud Run bridge for real-time voice AI | Platform documented and operable; consulting engagement, 2026 → now |
| Course creation took experts days per module | AI course authoring tool + the generation engine behind it — block library, command executor, authoring state machines, async generation on RabbitMQ | Structured, publishable courses from a single prompt |
| LLM outputs unsafe for a B2B education product | Region-pinned Azure AI Foundry deployments for GDPR, layered content filters with custom blocklists and prompt-level guardrails | Closed a classifier false-negative gap on image generation |
| Lead research ate most of a team's day | Prospecting pipeline: scraping, LLM qualification and enrichment, CRM write-back, schema-validated with confidence thresholds | MVP live in ~4 weeks; owned for 15 months |
| Client app with no production discipline | Dokploy/Traefik on DigitalOcean, HTTPS, pg_dump/pg_restore migrations, encrypted S3-compatible storage, monitoring, structured logging, Prisma pool tuning | Live, monitored, ZAP-assessed and remediated |
| Slow listing pages on a live job portal | Schema tuning and targeted indexes on the hottest queries; owned deploys, caching and incidents | Meaningful p95 reduction, jobsbyus.com |
| VR app broke after a 3D WebView upgrade | Traced multi-root-cause input bugs — event camera, coordinate clamping, caret, scroll — plus Quest/Windows builds and a containerised headless Linux server | Input restored; multiplayer testable in Docker |
Also: side builds and one wind-down →
RAG support agent — OpenAI + Pinecone, answers with citations back to source so every claim is traceable. Plus a multilingual retrieval assistant on Azure AI Foundry with cross-language quality validation.
AI Flashcard SaaS — AI-generated flashcards from text and documents, Stripe Checkout with webhook-driven entitlement enforced server-side.
8th Wonder (wound down) — co-founded a fintech for retail access to financial markets as CTO; led technical decisions, built a small team, shipped the initial product.
bernard@accra:~$ git log --graph --oneline --since="5 years ago"
* 2026-08 consulting: engineering ownership of a 5-app SaaS platform
| media pipeline · live-AI bridge · AWS + GCP
* 2026-08 code-raccoon: wrapped a 20-month tenure
| authoring tool + the AI generation engine behind it
* 2026-05 bridge-labs: closed a 15-month engagement
| MVP in 4 weeks, then hardening, integrations, incidents
* 2026-01 unity: production VR debugging + Quest build pipeline
|
* 2025-01 code-raccoon: joined — full-stack, AI systems
| block library · CQRS · RabbitMQ · Redis
* 2024-12 xcelsz: closed out a 3.5-year part-time contract
| REST APIs · e-commerce · first CI/CD pipelines
* 2024-10 brics-africa: handed over jobsbyus after a year live
| lead of three engineers · schema tuning · p95 work
* 2024-06 clanzero: registered the agency
|
* 2024-01 8th-wonder: co-founded, CTO — later wound down
|
* 2023-11 brics-africa: lead engineer, commercial job portal
|
* 2021-06 xcelsz: first commercial role — Node.js, MySQL, deploys
|
* 2021-06 (root) started countingThe overlaps are deliberate. Contracts ran alongside employed roles — that's where most of the infrastructure and ops experience actually came from.



