Case Study 02 / 03
Solo Founder · Patent Pending

Roughtake

Designing and vibe coding a social film platform

Role Founder & UX Designer
Status Ongoing / In Revival
Platform iOS · Android
Team 1 Designer, Contract Dev

The intersection nobody had built

"IMDB has the data. TikTok has the engagement. Nobody had combined them for the single most universal question in entertainment: what should we watch tonight?"

Roughtake is my solo-built iOS and Android app at the intersection of social media and cinematic discovery; swipe-based filtering meets short-form video reviews. After a real stall in development, I live-coded it back to life using Claude and Cursor, wearing every hat from project manager to UX designer to AI-assisted developer. This isn't a polished client case study. It's an honest, ongoing account of what it looks like to ship something you believe in, on your own dime.

The market signal that started everything

The "what should we watch" conversation is a nightly ritual in most every household

// The Design Problem
Two friction points kept surfacing: discovery was either algorithmic and impersonal (Netflix's opaque recommendations) or informational and dry (IMDB's utility-first UI). And when people wanted to share what they thought about something they'd just watched, there was no native, modern space for it. Opinions scattered across Letterboxd, Reddit, Twitter, and word of mouth.
2
Core user problems
Find something to watch in a fun, informed way. Share your take in a quick, personal, modern way. Both problems, zero satisfying solutions.
0
Direct competitors at launch
No product combined gamified discovery with creator-style video reviewing tied natively to content metadata. The gap was real.
1
Insight that unlocked the concept
Dating apps had cracked engagement through swipe mechanics. The question became: how do you gamify the act of choosing something to watch?

Where the gaps lived

Three existing players served parts of the need. None served the whole thing.

IMDB
Gap: Zero delight
The utility king. Unmatched data depth, but the discovery experience was a filter form. No social layer, no swiping, no personality. Designed for looking something up, not for finding your next obsession.
Letterboxd
Gap: Niche audience ceiling
Beloved by film obsessives, but its identity as a "serious cinephile" app created an invisible barrier for casual viewers. The UI skewed desktop-first and text-heavy. Reviews felt like essays, not takes.
DNGO
Gap: No review layer
Genre-first discovery with a clean mobile UI, but purely transactional. It helped you pick something, then had no answer for "I just watched it and have thoughts." Discovery and opinion were completely severed.

From bubbles to hi-fi in four iterations

Being the only designer meant the process was nonlinear, fast, and deeply personal. Every decision had to pull double duty: serving the user and convincing future collaborators.

Roughtake — UX overview
Mood Bubbles — "How Are You Feeling?"
A bubble-cluster UI asks how you're feeling before any genre ever appears.
Genre & Filter System
Toggleable pills for genre, decade, length, and streaming service, stackable, low-friction, and expandable into sub-genres inline.
The Card Swiping Game
Full-bleed poster cards with swipe right, left, or tap for info, framed as a game, not a search.
Hi-Fidelity "Pick a Vibe" + Social Profiles
"Pick a Vibe" filtering meets a social layer: reviewer profiles, follower counts, and in-feed video takes alongside the title poster.
Scroll to explore ↓

Before a pixel went to development, the visual language was locked. Every color, typeface, and component state was documented to keep the handoff unambiguous.

Roughtake style guide — colors, typography, components
Roughtake — reviewer feed
Roughtake — reviewer profile
Roughtake — TV show detail page
Roughtake — app screen

Being your own PM has real consequences

When you're the designer and the stakeholder and the product manager, the quality of your own documentation directly affects the output, and the bill.

// The Dev Handoff Reality
Working with contract developers taught me something I couldn't learn in an agency: inconsistencies in your design handoff documents have a direct, tangible effect on your bank account. A missing state, an undocumented edge case, or an ambiguous component variant all translate into hours billed to figure out what you meant, or to rebuild something after the fact.

I had to write and manage updates and changes meticulously. Each ticket: the expected behavior, edge cases, the definition of done, and Figma component links with annotated states.
// API Integration Constraints
The film database API (TMDB) provided the backbone: title metadata, poster images, cast, genres, and streaming availability by region. Designing around API constraints meant making product decisions early: streaming availability data had a 24-hour cache lag, which affected how I designed the "Where to Watch" layer. Real-time wasn't possible; the design had to accommodate stale data gracefully.

I had to learn enough about REST API responses to write accurate specs. Not to code, but to design with realistic data shapes and latency in mind.
01
Spec Before Figma
Learned to write a one-pager on what a feature needed to do before designing what it looked like. Saved multiple rework cycles.
02
Component Annotation
Every interactive component in Figma got a comment thread covering: default, hover, loading, empty, and error states. Non-negotiable.
03
Phased Build
Split into three phases: core game loop first, social profiles second, review creation third. Shipped each in isolation to validate before adding complexity.
04
Live QA Protocol
Maintained a rolling QA doc: real device testing across iOS versions, edge case logging, and a "won't fix" tier to protect scope from creep.

A bad handoff. A better tooling landscape.

The developer left me with a broken app. AI-assisted coding gave me a way to fix it and keep going.

The dev delivered source code locked to V1 most likely to prevent me from taking the project elsewhere.

Navigation was broken, the home screen had no functionality, and there was no admin panel. I rebuilt all of it: navigation architecture, home screen, and a full admin panel for content and security, then re-released three times to fix what was never delivered.

// Lesson Learned
Contracts need delivery criteria tied to working software. Functional acceptance testing and staged milestone payments are non-negotiable on any engagement I run.

When the original dev left me with a broken product, I picked it back up myself using Claude and Cursor. I recoded the Kotlin codebase from scratch, rebuilt the full navigation architecture, and built an admin control dashboard for content moderation and security. I've since shipped multiple new versions to the App Store through each round of that process. The bottleneck was never the design. It was the cost and friction of translating specs into code through a contract engagement. That problem is now solved.

// Speed
Swipe loop: 2 hours
Swipe physics, gestures, transitions, and API binding in a single session.
// Velocity
Iterations close same day
Edge cases get tested immediately, validated or discarded the same session.
// Constraint
AI needs clear UX thinking
Ambiguity doesn't get resolved. It gets implemented as assumptions. Strong upstream UX matters more, not less.
// What's Next
Closed beta, 40 users
TestFlight beta, heavy streaming consumers. Social review layer scoped for v1.1.

What this project taught me

01
// Stakeholder Management
The contract was the failure, not the design

The biggest failure wasn't design. It was not building accountability into the developer contract. No functional acceptance criteria, no phased payment tied to working software, no source code rights language. I learned every one of those lessons the hard way and won't repeat them. That knowledge transfers directly to how I structure vendor relationships and client engagements.

02
// Learning to Code
I shipped iOS, Android, and backend from scratch

I taught myself enough iOS, Android, and backend development to recode what the original developer left broken, implement features directly from my own Figma specs, and ship independently. I can now move from design to working feature without a handoff. That's not a replacement for engineering, but it fundamentally changed what I can communicate, validate, and deliver on my own.

03
// Designing What You Build
Building your own designs makes you a better designer

When you're implementing your own designs, you find the problems fast. Animations that looked right in Figma don't feel right in the app. Interaction states you forgot to document. API response shapes that break your layout assumptions. Closing the loop between design and implementation made me a sharper designer. The specs I write now are tighter because I know what it costs when they're not.

04
// Debugging and QA
No team, no staging, just a crash log and a deadline

No QA team. No staging environment. Just a device, a crash log, and a design that needs to work. Learning to debug across iOS and Android, trace backend errors, and maintain a rolling QA log built a discipline I wouldn't have developed any other way. I now write specs with error states and edge cases front-loaded, because I've personally had to fix every one of those after the fact.