Back to projects

Case Study

PlayCV

Helping Nigerian graduates get noticed by employers through video CVs.

RoleSole Frontend Developer
Stack
TypescriptAxiosMUIPaystack APITiptap Rich EditorCloudflare IntegrationAPI IntegrationNXYarnZod
PlayCV screenshot

The Problem

Nigeria's graduate job market is noisy — thousands of text CVs per role, most unread. PlayCV's hypothesis was that a short video CV would surface personality and communication skills that paper can't. The challenge was building a monetised, admin-controlled platform that worked for both job seekers and employers.

Key Technical Decisions

1

Used NX monorepo to house the main platform and the admin dashboard; this let the two apps share component libraries and API types without publishing a private package.

2

Chose Tiptap Rich Editor for the profile bio field because it gave us a clean JSON output format that was easier to store and render than raw HTML from Quill.

3

Cloudflare integration was added for video delivery, storing video on Cloudflare R2 and streaming via Cloudflare Stream kept costs low compared to S3 + CloudFront for a startup budget.

PlayCV screenshot

Challenges & Solutions

Challenge

The paywall needed to work at multiple levels: profile access (per-employer pay-per-view) and job ad posting (subscription tier). These were two different payment flows.

Solution

Built a unified payment context that accepted a 'payment type' prop, routing to different Paystack configurations while sharing the same UI components and success/error handling.

Challenge

Admin approval of video CVs had to happen before they were visible to employers, requiring a pending/approved/rejected state machine.

Solution

Modelled this as a status field on the profile document and built an admin queue view using TanStack React Table with column filters by status.

Challenge

There was no design to follow — no Figma file, no wireframes, no mockups. Every screen was designed from scratch as I built it, which meant making UX decisions in real time without a reference point.

Solution

Developed a personal design-as-you-build workflow: sketching rough layouts on paper before touching code, using MUI's component library as a constraint to avoid decision fatigue on low-level UI, and iterating on live previews rather than static mocks. This forced me to think like a product designer, not just an implementer.

PlayCV screenshot

Outcome

Shipped a working dual-surface platform with real monetisation. The NX setup in particular was a new skill that opened up how I think about multi-app projects.

What I Learned

Designing payment flows is mostly UX work, not API work. Most of the complexity is in what happens after payment fails, not after it succeeds.