Force for Hire connects security professionals, defense contractors, training centers, and equipment suppliers on a single platform. I built everything from onboarding through admin verification and the RFP bidding system.
forceforhire.com - Homepage
What Made This Hard
Five different user types, five different onboarding flows. Security providers (companies), individual operators (freelancers), risk & intelligence firms, training centers, and gear suppliers. Each category requires different fields, credentials, and verification documents. One generic form wouldn't work.
Every provider needs to be vetted before going live. Given the sensitive nature of security services, unqualified or fraudulent listings create real risk. Superadmins needed to review credentials, approve or reject applications, and edit provider details after approval.
Admins needed to see what users see. For quality assurance and support, the team had to view any provider's dashboard without logging in as them. This meant scoped data access, not full database permissions.
How I Built It
The onboarding system uses Zod schemas that adapt based on the selected category. When a user picks their type, the form renders the right fields with type-safe validation. Multi-step progress saves at each stage. All submissions are placed in a pending state until approved.
For admin access, I built row-level security in Supabase with encrypted session tokens. Superadmins can view any provider's full dashboard through scoped queries that respect data boundaries.
The marketplace includes category-specific listings, advanced filtering (location, services, specializations, company size, verification status), and verified provider badges. The RFP system lets clients post security requirements and receive competitive bids from qualified providers. Protected messaging with end-to-end encryption handles confidential discussions.
What I'd Highlight
Dynamic onboarding handles five provider categories without code duplication
Admin approval workflow keeps unvetted providers off the platform
"View as user" feature uses encrypted tokens and scoped queries, not credential sharing
RFP system manages the full bidding process from posting to provider selection