Hello from Agbey Tech
10 January 2025 — Agbey Team
Welcome
This is the first post in the Agbey Tech engineering blog. We're a software engineering studio based in Accra, Ghana — building digital products and infrastructure for clients across Africa and beyond.
"The best software is invisible to its users. They simply get things done."
We created this blog to share what we learn: hard-won lessons from production incidents, architecture trade-offs we've wrestled with, and opinions about how to build for the long term.
What You'll Find Here
We'll write about all layers of the stack. Here's a rough idea of the categories:
- Engineering deep-dives — detailed explorations of a technical decision, pattern, or tool
- Case studies — anonymised breakdowns of client projects: what the problem was, what we built, and what we'd do differently
- Principles & craft — our views on software design, team process, and code quality
- Tooling & infrastructure — reviews and guides for the tools we use day-to-day
Our Stack in 2025
Here's what we're currently shipping with:
| Layer | Technology |
|---|---|
| Frontend | Next.js 15 (App Router), React 19, Tailwind CSS v4 |
| Backend | Node.js, Prisma ORM, PostgreSQL |
| Queues | BullMQ on Redis |
| Infra | Vercel (frontend), Railway / Render (API) |
| Monitoring | OpenTelemetry, Datadog |
A Small Code Sample
Every engineering blog needs a code sample in the first post. Here's our preferred way to create a typed, validated API route in Next.js:
import { z } from "zod";
import { NextRequest, NextResponse } from "next/server";
const schema = z.object({
email: z.string().email(),
name: z.string().min(2),
});
export async function POST(req: NextRequest) {
const body = await req.json();
const parsed = schema.safeParse(body);
if (!parsed.success) {
return NextResponse.json(
{ error: parsed.error.flatten() },
{ status: 400 },
);
}
// ... do work
return NextResponse.json({ success: true });
}
Input validation at the boundary, typed response, no magic — this is how every route in our apps starts.
Stay in Touch
If you have questions, feedback, or want to work together, the contact page is the best place to start.