TrustedRV is a marketplace MVP for buying and selling RVs. I helped improve the app across buyer onboarding, seller listing creation, Stripe payments, Clerk authentication, listing lifecycle rules, and dashboard workflows.
The goal was to make the platform feel more trustworthy, easier to use, and closer to a production-ready marketplace experience.
The Challenge
TrustedRV needed clear flows for both buyers and sellers.
Buyers needed a guided onboarding experience where they could verify their account, set location preferences, choose RV types, define budget ranges, and save search preferences.
Sellers needed a simple path from account creation to listing an RV, paying for that listing, and managing it from the dashboard.
A major product clarification came during the project: seller payments should not be tied to the seller account. Instead, each listing should have its own monthly Stripe subscription. If a seller creates another listing, they need to pay for that listing separately.
My Role
I worked across the full stack, including:
Frontend UX and dashboard flows
Backend API updates
PostgreSQL schema changes
Stripe checkout and webhook handling
Clerk authentication state
Listing lifecycle rules
Role-based navigation
What I Built
Buyer Onboarding
I implemented a buyer profile flow that captures:
ZIP code and multi-location preferences
Default search radius
RV type preferences
Price, length, and year ranges
Must-have features
RV ownership experience
Financing status and credit score range
The buyer flow also shows email and mobile verification progress using the app’s Clerk-backed local user state.
Verified Buyer Completion
After onboarding, buyers are taken to a completion screen that shows their verified buyer badge status, profile summary, recommended listing actions, and CTAs for search, favorites, buyer guide, comparison tools, and saved-search alerts.
Seller Listing Flow
I reworked the seller flow so the listing itself is the onboarding path.
The new seller flow is:
Create account and verify email/mobile
Enter full listing details
Upload photos and write a description
Set price and disclosure details
Pay for that specific listing
Listing goes live
VIN decode remains optional and is no longer a requirement for seller qualification.
Listing-Level Stripe Payments
I changed the payment model from seller-level subscription to listing-level subscription.
Each listing now has its own Stripe subscription. This means:
Every new listing requires its own checkout
Updating an existing paid listing does not require payment
One active listing subscription does not cover another listing
Stripe metadata includes the listing ID
Webhooks update only the related listing
Listing Lifecycle Rules
I tightened listing status behavior so:
Incomplete listings cannot be published
Draft listings can be saved without payment
Active listings require payment
Sold listings do not appear in search
Sold listings cannot be accidentally republished
Marking a listing as sold cancels its subscription
Deactivating a listing cancels its subscription
Dashboard & Navigation Improvements
I improved role-aware navigation and dashboard behavior:
Sellers go directly to create a listing
Buyers go to search and buyer tools
Buyers do not see seller pricing prompts unnecessarily
Favorites are accessible for buyers
Seller billing now shows listing-level subscriptions
Admin route behavior was improved to avoid redirect loops
Technical Stack
React
TypeScript
Express
PostgreSQL
Drizzle ORM
Clerk Auth
Stripe Checkout
Stripe Webhooks
TanStack Query
Tailwind CSS
shadcn-style UI components
Impact
The app now has a clearer and safer marketplace flow:
Buyers can complete onboarding and become verified
Sellers can create full listings before payment
Each listing has its own recurring Stripe subscription
Sold and deactivated listings stop renewing
Search only shows active listings
Dashboard actions better match real marketplace behavior
The payment model now matches the client’s business rules
Project Highlights
Built buyer onboarding and verified buyer flow
Reworked seller onboarding into listing creation
Implemented listing-level Stripe subscriptions
Added safer Stripe webhook processing
Improved seller listing lifecycle management
Added role-aware navigation and dashboard behavior
Tightened publish validation for required listing details