Work / Web App / Sound Bite Africa

Magazine · Full stack · 2026

Sound Bite.

A music magazine with a public site, an editorial desk, and an API behind both.

I built Sound Bite Africa end to end: the Next.js magazine, the admin CMS, and a Fastify API on Postgres. Spotlight, the latest drop, on stage, issues, hard-copy orders, and the newsletter all read and write through that API. Live site: sound-bite-africa.vercel.app

Sound Bite Africa cover story hero Spotlight
Latest drop with digital and hard-copy actions Latest drop
On Stage portrait grid On stage
Project
Digital magazine
Sites
Vercel
API
Railway
Year
2026
Spotlight
Latest drop
On stage
Issues
Hard copy
Newsletter
Editorial CMS
Fastify API
Spotlight
Latest drop
On stage
Issues
Hard copy
Newsletter
Editorial CMS
Fastify API

Product · sound-bite-africa.vercel.app

Stories, issues,
one desk.

The public site is the magazine. The CMS is how an editor ships the next drop without touching the database by hand.

Readers move through spotlight, get to know, on stage, backstage, issues, what’s on, and plug in. A drop can be read digitally or ordered as a hard copy. The footer takes a newsletter address straight to the API.

Editors sign into a separate Next.js admin. Stories, media, issues, events, sponsors, homepage, submissions, orders, and users all save through /admin routes. Auth is a bearer access token plus an httpOnly refresh cookie.

3
apps — public site, CMS, API
2
Vercel projects from one monorepo
Issue
digital read and hard-copy order
CMS
stories, media, orders, newsletter

The magazine

Four rooms.
One issue.

The reading experience is split the way the masthead is split — cover story, the drop, the stage, and the list that keeps people coming back.

01 / Spotlight

Cover
stories

A full-bleed portrait carries the headline, a deck, and a path into the piece. Category chips such as Spotlight and The Cover Story sit on the image, not in a sidebar.

Hero Story Sections
02 / The drop

Read or
order

Each issue drop pairs the cover portrait with two actions: read or download the digital edition, or order the hard copy. Partnership and browse-all sit under the price.

Issues PDF Orders
03 / On stage

Numbered
frames

Performance portraits run as a numbered strip — 01, 02, 03 — each with an On Stage tag and a headline. Latest Stories uses the same cream field and orange type.

On stage Backstage Portraits
04 / List

Newsletter
& map

The footer restates the masthead, then splits categories, magazine, and community. A single email field subscribes the reader. Privacy sits on the same baseline as the copyright.

Newsletter Nav Subscribe

Visual language

Navy word.
Orange ink.

01 — The Masthead

Hand-drawn
SOUND BITE.

The wordmark is Bahiana, tracked wide, with AFRICA set small beneath it. A striped band closes the header. The same lockup repeats in the footer on black.

Sound Bite Africa footer masthead
02 — The Palette

Cream page,
orange type.

Reading surfaces are warm paper. Orange is the action and the story title. Navy is the wordmark. Gold is the thin accent reserved for labels like Latest Stories.

#FF6B35
#004E89
#F7B32B
#F4EFE4
#0A0A0A
#111111
#F5F5F0
#6B7280
03 — Typography

Masthead &
headline.

Bahiana carries the logo. Story headlines on the public site run large and tight. Mono labels mark issue numbers and section names.

Sound Bite.
Masthead · Bahiana
Latest Drop · Issue 03
Headline · Sans
SPOTLIGHT · ON STAGE · PLUG IN
Nav · Mono

Shipped UI

In the
issue.

Screens from the public magazine — cover, drop, stories, and the stage.

Cover story hero on Sound Bite Africa
Spotlight Cover story
Latest drop with read and hard-copy order
Drop Issue 03
Latest stories row
Stories Fresh off the press
On Stage numbered portrait strip
On stage 01 · 02 · 03

Implementation

Three apps.
One repo.

An npm workspaces monorepo: public site and CMS on Vercel, API on Railway, shared types in one package.

01 / Web

Next.js 15
magazine

The public app is React 19 and Tailwind 4. Sections, story pages, issues, events, search, and the newsletter form all live under the App Router.

Next.jsVercelTailwind
02 / CMS

Admin
desk

A second Next.js app on its own Vercel project. Editors manage stories, media, issues, sponsors, homepage, submissions, orders, and newsletter. Ops and users stay role-gated.

AdminRolesCookie
03 / API

Fastify
Postgres

Drizzle models posts, issues, events, orders, subscribers, submissions, media, audit logs, and page views. Zod schemas are shared with both frontends.

FastifyDrizzleRailway
04 / Ops

Media
& mail

Uploads go to S3 with presigned requests. Newsletter mail goes out through Resend. Refresh tokens and an audit log keep the desk accountable.

S3ResendAudit

Read the
live issue.

The public magazine is on sound-bite-africa.vercel.app. The CMS and API stay behind the editorial login.