Oluwatosin Kazeem
PRODUCT DESIGNER
PORTFOLIO '26
Pamoja
Overview
Pamoja is an AI-powered career platform that helps job seekers land roles faster. It optimizes resumes for ATS, generates personalized cover letters, matches users to jobs using AI, preps them for interviews, and tracks every application in one dashboard.
I designed and built the entire product - from user research through production code.
The problem
Job searching is broken for candidates. 80% of resumes never reach a human because ATS filters reject them. Job seekers spend hours tailoring resumes for each role, writing cover letters from scratch, and preparing for interviews with no feedback.
The tools that exist are fragmented. Resume builders don't help with job matching. Job boards don't help with applications. Interview prep tools don't connect to what you actually applied for. And most of these tools are built for employers, not candidates.
The core insight: job seekers don't need more advice. They need better tools.
Research & discovery
I conducted competitive analysis across existing tools - LinkedIn, Indeed, Jobscan, Teal, Rezi - and identified the gap: most tools solve one piece of the puzzle. No single platform connected the full job search workflow.
User interviews with 15+ job seekers revealed three behavioral patterns: The spray-and-pray approach - 100 generic applications, zero callbacks. Users applied everywhere hoping something would stick, but never tailored their materials. The perfectionist trap - 2 hours per application, burnout after 10. Users knew tailoring mattered but couldn't sustain the effort across dozens of roles. The tracking chaos - spreadsheets, lost follow-ups, forgotten deadlines. Without a system, promising leads slipped through the cracks.
The opportunity: a single platform that connects every step of the job search into one coherent flow.
Information architecture
The platform needed to feel simple despite doing six distinct things. I structured the navigation around the user's natural workflow: Dashboard (home base) → Resume (your foundation) → Auto-pilot (job discovery) → Results (optimization outputs) → Applications (tracking) → Interview Prep → Profile (your data) → Settings.
The key decision was making the dashboard the orchestration layer. Quick actions surface the most common tasks - optimize resume, generate cover letter, add application - without navigating away. This reduced the most frequent flows from 3-4 clicks to 1.
Key design decisions
I designed a credit system instead of a subscription model. Job searching is episodic - people don't need a monthly plan when they're employed. Credits let users pay for what they use: Resume optimization - 2 credits. Cover letter - 2 credits. Resume + cover letter bundle - 3 credits. Interview prep session - 1 credit. Job discovery - free. This decision was driven by user empathy. People who are job searching are often financially stressed. A subscription they forget to cancel adds insult to injury.
The results page was the most complex design challenge. After an AI optimization, users need to see what changed, their ATS match score (before and after), keywords that were added, and the option to view output in different formats. I designed a toggle between Text and Preview views. Text lets users copy content quickly. Preview shows how the resume renders in their chosen template design. Both views feel instant - no loading between switches.
The auto-pilot page needed to communicate a complex concept simply: "AI is finding jobs for you." I designed a process indicator that shows the pipeline visually - scanning, matching, scoring, ranking - so users understand the system is working, not broken. Job matches display with a percentage score, company info, and one-click actions to generate application materials. The goal was to reduce the decision from "should I apply?" to "this is a 94% match - let's go."
Early users confused "Apply Now" with thinking the platform applied for them automatically. I changed the CTA to "Apply on Site" - mirroring LinkedIn's established pattern. Small copy change, large reduction in user confusion.
Mobile holding pattern
Rather than ship a broken mobile experience, I designed a friendly interstitial: "Pamoja works best on desktop right now. We're building something great for mobile - hop on your laptop to get started, and we'll meet you here soon." with a "Copy link" CTA so users can switch devices easily.
Design system
I built a design system that scored 8/10 in an independent architecture review. It uses consistent design tokens for colors, typography, spacing, and elevation. Components are reusable across the platform with clear naming conventions.
The token layer lives in the codebase as the source of truth - not in a Figma file that drifts from production. This was a deliberate choice to keep design and code in sync as a solo designer-engineer.
Key system components: input fields with inline validation, modal system for quick actions, slide-in panels for secondary flows (version history, credit usage, design picker), toast notifications, and responsive sidebar navigation.
Features designed & built
Resume Optimizer - Upload a resume, paste a job link. AI rewrites the resume to match the job description, adds missing keywords, and returns an ATS match score. Users see a before/after comparison.
Cover Letter Generator - AI reads the job posting and the user's experience to generate a cover letter that connects their story to the role. Not a template swap - a personalized letter every time.
AI Auto-pilot - Users set preferences once (role, location, salary, industry). The system scans job sources continuously, scores matches, and presents ranked results daily.
Interview Prep - AI generates questions based on the specific job the user applied for. Users practice and receive feedback on what's strong, what's missing, and how to improve.
Application Tracker - A dashboard showing every application's status: applied, interviewing, offered, rejected. Linked to the resume and cover letter used for each role.
Job Discovery - Free feature that surfaces relevant roles filtered by skills, location, and experience level.
Technical implementation
As the design engineer, I built what I designed. Frontend: Next.js with App Router, React contexts for state management (auth, resume, preferences, agent status), a resilient API client with retry logic, token refresh, and request deduping. A prefetch system provides instant page loads by pre-fetching data on hover.
Backend: NestJS with modular architecture - controller/service/repository pattern. Prisma ORM with PostgreSQL. BullMQ for background job processing (discovery, kit generation). Multi-provider AI with automatic fallback.
An independent architecture review scored the backend modularity at 8/10, the design system at 8/10, and the API client layer at 8/10.
Metrics
97% gross margins on AI operations at $0.012 per combined operation via Gemini 2.5 Flash. 91% net margin per user at $0.27 cost per user. Credit-based pricing keeps unit economics sustainable at any scale.
The platform replaces a workflow that previously required 5-6 separate tools: resume builder, cover letter writer, job board, interview prep app, and a spreadsheet for tracking.
What I learned
Designing and building the same product teaches you things that pure design or pure engineering roles don't surface. Every component I designed, I had to implement. Every technical constraint I hit, I had to design around. That feedback loop made both the design and the code better.
The biggest lesson: when you're the designer and the engineer, you stop designing things you can't build well, and you stop building things that aren't designed well. The waste disappears.