Skip to content

Vendor Portal

The vendor portal is DoCurious's supply-side interface where challenge providers create, manage, and analyze their challenge listings and hosted events.

Spec Source: Document 20 -- Vendor Portal | Last Updated: Feb 2026

STATUS: BUILT

The vendor portal, challenge management, challenge creation, and events are fully implemented. The dashboard displays real challenge data and vendor metrics. The analytics page shows engagement metrics (views, starts, completions). Orders and Settings are built. The vendor onboarding is a complete 4-step wizard with localStorage persistence and real API integration. Stripe Connect endpoints are implemented. Most features now use real data from the backend store.

Overview

A vendor (also called a "challenge provider") is any individual, business, nonprofit, or educator who creates challenge listings on DoCurious. Vendors are the supply side of the marketplace -- they design the real-world experiences that users discover, attempt, and document through Track Records.

Vendors can offer free or paid challenges. DoCurious is not the payment processor for most transactions; vendors handle their own payment collection through external links (website, booking platform, etc.). DoCurious tracks engagement metrics so vendors can understand the platform's impact on their business.

The vendor role is additive -- a user who becomes a vendor retains all their existing roles (personal user, parent, student, teacher, etc.). They access the vendor dashboard through the context switcher, which adds a "My Vendor Account" context alongside their other contexts.

Vendor Types

DoCurious does not enforce formal vendor categories, but vendors typically fall into these types:

TypeDescriptionExamples
Activity ProvidersBusinesses offering hands-on experiencesPottery studios, climbing gyms, cooking schools, nature guides
EducatorsTeachers or curriculum designersStructured learning challenges, classroom activity kits
IndividualsHobbyists, experts, or creators sharing skillsCraft tutorials, music lessons, photography walks
NonprofitsOrganizations promoting community engagementPark cleanups, environmental action, public service challenges
Event OrganizersGroups that run scheduled group activitiesWorkshops, camps, group outings, community events

All vendor types go through the same application, review, and onboarding process.

How It Works

Becoming a Vendor

STATUS: BUILT

The VendorApplication page is fully implemented with a form for company name, contact info, category, and description. The confirmation screen shows a "3-5 business days" review timeline. The real API has a signup endpoint. However, the application form is simplified compared to the spec -- it does not yet collect sample content, revenue sharing proposals, or website URL.

Any DoCurious user can apply to become a vendor. Registration is also open to new users who do not yet have an account.

For existing users:

  1. Navigate to "Become a Challenge Provider" (accessible from profile settings or the Vendor Program page).
  2. Complete the provider application form.
  3. Application enters the DoCurious staff review queue.
  4. Staff approves -- user gains the vendor role and access to the vendor dashboard via the context switcher. OR Staff rejects with feedback -- user can revise and resubmit.

For new users (no existing account):

  1. Navigate to the Vendor Program page and click "Apply."
  2. Complete the application form.
  3. Receive confirmation: "Thanks for applying! We'll review your application within 3-5 business days."
  4. On approval: receive email with link to create account (email pre-verified from application).
  5. Complete account setup (password, display name) and proceed to vendor onboarding.

Application form fields:

FieldRequiredNotes
Business name (or individual name)YesPre-populated for existing users
Business typeYesIndividual, Business, Nonprofit, Educational Institution
Website URLNoNot yet in the FE form
Contact person name and emailYesImplemented
Description of servicesYesImplemented as "Tell us about your organization"
How they would use DoCuriousNoNot yet in the FE form
Sample content or examplesNoNot yet in the FE form
Revenue sharing proposalNoNot yet in the FE form
Agreement to vendor termsYesShown as footer text on the FE form

Application review criteria:

  • Business legitimacy verification
  • Content quality assessment (from samples provided)
  • Alignment with DoCurious platform values and safety standards
  • Age-appropriateness of proposed challenges

Review outcomes: Approve, Reject (with reason and invitation to reapply), or Request More Info (follow-up email with specific questions).

Vendor Onboarding

STATUS: BUILT

The 4-step onboarding flow is fully implemented in useVendorStore with localStorage persistence so vendors can resume where they left off. Each step submits to a real API endpoint. The onboarding state tracks step number (1-4) and completion status. Step 1 collects profile, billing, and tax info. Step 2 collects commission terms. Step 3 collects venue information. Step 4 is review and submit.

After approval, new vendors complete a guided onboarding flow. The implementation uses a 4-step wizard:

Step 1 -- Profile & Billing:

  • Tagline and short description (public-facing)
  • Logo upload
  • Contact name and phone number
  • Social links (Instagram, YouTube, Facebook, LinkedIn, Twitter)
  • Billing address
  • Tax information (SSN for sole proprietors or EIN for business entities)

Step 2 -- Commission Terms:

  • Revenue type selection: Affiliate, Direct, or Subscription
  • Affiliate network name and platform ID (if affiliate)
  • Program URL and affiliate notes
  • Direct commission description (if direct)

Step 3 -- Venues:

  • Virtual venues: platform (Zoom, Google Meet, Teams, WebEx, Other), scheduling URL, timezone
  • Physical venues: name, full address, latitude/longitude, public notes (parking, accessibility)

Step 4 -- Review & Submit:

  • Review all entered information
  • Submit for final approval
  • Onboarding marked complete

Total onboarding time: approximately 5 minutes (excluding challenge content creation).

First Challenge Guided Creation

STATUS: BUILT

The vendor guided challenge creation is fully implemented in VendorChallengeCreate.tsx (1400+ lines) with a 6-tab form including Basic Info, Details, Media, Pricing, Scheduling, and Review. Each section includes FieldHint components with contextual guidance, and LockedFieldWrapper for post-approval field restrictions.

The spec describes a guided first-challenge experience during onboarding:

  1. Title & Description -- Tips on writing compelling descriptions, example shown alongside the form
  2. Category & Difficulty -- Explanation of difficulty levels with examples for each
  3. Milestones -- "Break your challenge into 3-5 steps" with examples of well-structured milestones
  4. Media -- Cover image guidance (recommended dimensions, quality tips, example of strong vs. weak images)
  5. Review & Submit -- Preview showing how users will see the challenge on Explore and detail pages

Dashboard Orientation

STATUS: BUILT

The spec describes a brief tour highlighting key areas of the vendor dashboard. This tour overlay is now implemented.

After onboarding, a brief tour highlights key areas of the vendor dashboard:

  • My Challenges (create, edit, track status)
  • Events (schedule and manage hosted events)
  • Analytics (understand engagement once users start interacting)

Vendor Dashboard

STATUS: BUILT

VendorDashboard is fully implemented with stat cards (total challenges, completions, avg rating, pending review), a challenges table with status badges, and a performance bar chart for top challenges. It is wired to useChallengeStore.fetchVendorChallenges() for live data from the store.

The vendor dashboard is the vendor's home base, accessed via the context switcher.

Summary cards:

  • Total Challenges (all time)
  • Completions (all time)
  • Average Rating
  • Pending Review count

Primary navigation sections:

  • My Challenges
  • Events
  • Orders
  • Analytics
  • Profile & Settings

Challenge Management (My Challenges)

STATUS: BUILT

VendorChallenges is fully implemented with a filterable table showing all challenges with status, category, views, starts, completions, rating, and creation date. Filter tabs (All, Active, Drafts, Pending, Archived) and action buttons (Edit, Duplicate, Archive) are present. Currently uses mock data alongside the store-integrated dashboard.

The My Challenges page lists all vendor's challenges with status and key metrics:

ColumnDescription
Challenge nameTitle of the challenge
StatusDraft, Pending Review, Live (approved), Rejected, Archived
CategoryPrimary category
ViewsTotal page views
StartsNumber of users who started the challenge
CompletionsNumber of verified completions
RatingAverage user rating
Created dateWhen the challenge was first created
ActionsEdit, Duplicate, Archive

Challenge status flow:

[Draft] --> [Pending Review] --> [Live]
                  |
             [Rejected] --> (Revise) --> [Pending Review]
                                                |
[Live] --> (Edit submitted) --> [Live with Pending Edit] --> [Live (updated)]
                                                |
                                           [Edit Rejected]
[Live] --> [Archived]
StatusDescription
DraftVendor is still working on the challenge. Not visible to users.
Pending ReviewSubmitted for DoCurious staff review. Vendor cannot edit while in review.
LiveApproved and visible to users on the Explore page.
RejectedStaff rejected with feedback. Vendor can revise and resubmit.
ArchivedVendor chose to remove from Explore. Existing users who started the challenge retain access to complete it.
Live with Pending EditVendor submitted an edit to a live challenge. The existing version stays live while the edit is reviewed.

Challenge Creation

STATUS: BUILT

VendorChallengeCreate is a comprehensive 6-tab form (Basics, Details, Media & Location, Purchase, Structure, Settings) wired to useChallengeStore.createChallenge() and submitForReview(). It supports all major field groups: title, description, categories, difficulty, milestones, fulfillment type, pricing (DoCurious or external/affiliate), venue address, verification requirements, resource/accessory links, and XP configuration. The purchase tab includes a pricing preview with 15% platform fee calculation.

Vendors create challenges through a tabbed form with these sections:

Basics tab: Title, description, short description, specific mission, categories (multi-select), difficulty level, solo/group

Details tab: Step-by-step instructions, learning objectives, estimated duration, prerequisites, materials needed, safety notes, teacher tips

Media & Location tab: Cover image URL, gallery images, video URL, PDF attachments, location type (Indoor, Outdoor, Specific Venue, Digital), venue address fields

Purchase & Fulfillment tab:

  • Purchase method: Through DoCurious (15% platform fee) or through vendor's website (affiliate/external)
  • Price, affiliate URL, button label, redirect preview
  • Fulfillment type: Kit, Hosted, or Digitally Guided
  • Materials included toggle
  • Resource links and accessory links

Structure tab: Milestone toggle with add/remove/reorder, verification requirements (up to 5), base XP, expiration date

Settings tab: Age requirement, maximum participants, review process information

After creation, the challenge enters the staff review queue. See Challenges for the full challenge creation rules and field list.

Challenge Editing

STATUS: BUILT

The edit button navigates to the creation form with ?edit=<id>. The form detects the edit param, fetches the challenge by ID, and pre-populates all fields. For approved (live) challenges, title, category, difficulty, and price fields are locked as read-only with lock icons. A banner informs vendors that edits will be submitted as pending revisions. The useChallengeStore.updateChallenge action stores edits as pendingEdit records for approved challenges.

After a challenge is live, vendors can submit edits. All edits to live challenges are reviewed by DoCurious admins before going live. The existing version remains live until the edit is approved or rejected.

Version control rules:

  • Cosmetic edits (description, images, instructions) -- allowed anytime, in-progress users see an "updated" banner
  • Structural edits (milestones, difficulty, materials, verification criteria) -- locked after the first user starts the challenge
  • If a locked field needs to change, the vendor must create a new challenge and the original can be marked "superseded"
  • Price changes trigger a notification to any user who has the challenge in their Bucket List

Event Management

STATUS: BUILT

VendorEvents is fully implemented with an events table showing upcoming events (name, date/time, location, registration count vs. capacity, status) and a past events section. Stat cards show upcoming count and total registrations. Edit and delete actions are present. Currently uses mock data.

Vendors offering hosted challenges can create and manage events:

Event fields:

  • Event name (defaults to challenge title)
  • Date and time
  • Duration
  • Location (address with map display)
  • Capacity (number of spots, or unlimited)
  • Registration deadline (optional)
  • What to bring
  • Cancellation policy
  • Price (inherits from challenge, can be overridden per event)
  • Recurrence rule (for series)

Event states:

StateDescription
ScheduledUpcoming, accepting registrations
FullCapacity reached, waitlist active
ClosedRegistration deadline passed
CancelledVendor cancelled the event (registered attendees notified automatically)
CompletedEvent date has passed

Event management tools (spec -- not yet built):

  • Bulk event creation (recurring series from a single form)
  • Duplicate existing events with date adjustment
  • Import events from CSV
  • Attendee communication (messages to all registered attendees)
  • Post-event follow-up messages
  • Waitlist management (view, reorder, manually approve)
  • Attendance tracking (mark who showed up)

Order Management

STATUS: BUILT

VendorOrders is fully implemented with a filterable orders table (order ID, challenge, customer name, date, amount, status) and stat cards (total orders, pending fulfillment, completed, revenue). Filter tabs for All, Pending, Fulfilled, and Refunded. Currently uses mock data.

Vendors can view and manage orders for paid challenges:

ColumnDescription
Order IDUnique order identifier
ChallengeChallenge title
CustomerUser who purchased
DateOrder date
AmountPurchase price
StatusPending, Processing, Fulfilled, Refunded
ActionsView details, Mark fulfilled, Process refund

Vendor Analytics

STATUS: BUILT

VendorAnalytics is a rich analytics dashboard with Recharts bar and line charts, 8 stat cards (views, completions, revenue, rating, active students, repeat rate, conversion rate, avg completion time), monthly trend data, and a ranked top-challenges list. Currently uses mock data.

Vendors see performance data about their own challenges. No individual user data is exposed -- all metrics are aggregates with minimum thresholds to protect user privacy.

Dashboard overview cards:

  • Total challenge views (all time / this month)
  • Total completions (all time / this month)
  • Total revenue (estimated)
  • Average rating
  • Active students
  • Repeat rate
  • Conversion rate (views to completions)
  • Average completion time

Challenge performance table: Sortable by views, starts, completions, rate, rating, and trend direction. Filterable by date range, category, and status.

Estimated revenue impact: DoCurious provides intent and engagement signals since it is not the payment processor:

Views --> Saves --> Starts --> Completions
1,000 -->  250  -->  100   -->    60

Audience insights (spec -- not yet built):

  • Age distribution (brackets, not individual ages)
  • Geographic distribution (state/region level)
  • New vs. returning users
  • Category affinity (what else do your users complete)

Exportable reports (spec -- not yet built):

  • Performance summary (PDF format)
  • Detailed data (CSV format)
  • Date range selection
  • Scheduled reports (weekly or monthly delivery via email)

Profile & Settings

STATUS: BUILT

VendorSettings has two tabs: Profile (company name, description, contact email, phone, website, address, logo upload) and Team (member list, invite by email, shareable invite links, activity log). Profile is wired to useVendorStore.updateProfile() and uploadLogo(). Team is wired to useVendorTeamStore.

Profile settings: Company name, logo, description, location(s) served, contact information, social links / website.

Team management:

  • Member list with role badges (Owner, Admin, Editor)
  • Invite by email with role selection
  • Shareable invite links with expiration
  • Role changes and member removal
  • Activity log tracking team actions

Team role hierarchy:

RolePermissions
OwnerFull access, can transfer ownership
AdminManage team members and all content
EditorEdit challenges and events only

Vendor Resource Hub

STATUS: BUILT

The Resource Hub has been implemented with content guidelines from the spec (Doc 20, Section 3.4 and Doc 2, Section 14).

Available to all vendors from the dashboard:

  • Challenge creation best practices (with examples of successful challenges)
  • Photography tips for challenge cover images
  • "Writing milestones that work" guide
  • Event creation guide
  • Understanding your analytics
  • Vendor community / forum (planned)

Stripe Connect Integration

STATUS: BUILT

The real API has getStripeConnectLink and getStripeStatus endpoints fully implemented. The Vendor type includes a stripeConnectId field that maps to the SQL vendors.payment_id column, which contains real Stripe account IDs in the production database. The frontend Stripe Connect UI flow is now wired to the page component.

Vendors connect their Stripe account for payment processing. The SQL vendors.payment_id column stores real Stripe Connect account IDs (e.g., acct_...). The adapter layer maps payment_id to the frontend's stripeConnectId field.

Planned flow:

  1. Vendor clicks "Connect Stripe Account" in settings
  2. Redirected to Stripe Connect onboarding
  3. On completion, Stripe account ID stored in vendors.payment_id
  4. Status endpoint checks connection health

Roles & Permissions

ActionGeneral UserVendorVendor Team (Admin)Vendor Team (Editor)Platform Admin
Apply to become a vendorYesN/AN/AN/AN/A
Access vendor dashboardNoYesYesYesYes
Create challengesNoYesYesYesNo (uses admin panel)
Edit own challengesNoYesYesYesN/A
Archive own challengesNoYesYesNoYes
Create and manage eventsNoYesYesYesYes
View own analyticsNoYesYesYes (read-only)Yes (all vendors)
Update vendor profileNoYesYesNoYes
Manage team membersNoYes (owner)YesNoYes
Access Vendor Resource HubNoYesYesYesYes
Communicate with event attendeesNoYesYesNoYes
View other vendors' analyticsNoNoNoNoYes
Access individual user dataNoNoNoNoNo
Review/verify Track RecordsNoNoNoNoYes (staff only)
Modify challenges while in reviewNoNoNoNoYes
Bypass challenge review processNoNoNoNoYes
Suspend vendor accountsNoNoNoNoYes
Feature vendor on Explore pageNoNoNoNoYes

Constraints & Limits

ConstraintValueNotes
Active challenge limit per vendorNo default limitAdjustable per vendor by DoCurious staff
Pending review items at onceConfigurableStaff can set a cap per vendor
Application review timeline3-5 business daysTarget SLA for vendor applications
Challenge review timeline3 business daysFirst 3 challenges from new vendors receive extra scrutiny
New vendor extra scrutinyFirst 3 challengesAdditional review attention for new vendors
Logo upload max size2MBPNG, JPG, or SVG. Recommended 400x400px
Cover image minimum resolution1200 x 800 pixelsLandscape orientation preferred (16:9 or 3:2)
Cover image requirementsNo text overlays, no watermarksPlatform adds its own title overlay
Milestones per challenge3-10 (for quality review)0 milestones allowed for simple challenges
Challenge description minimum100 charactersTo pass quality review
Milestone title lengthMax 100 characters10-200 characters recommended
Gallery imagesUp to 4 total (including cover)Keeps detail page focused
Verification requirementsMax 5 per challengeSet by vendor during creation
Challenge content refreshQuarterly review encouragedChallenges with no activity in 12 months flagged
Low completion flagBelow 10% completion rateFlagged for quality review
Privacy aggregate thresholdMinimum 10 usersNo analytics data shown if fewer than 10 users
Approval status flowpending -> awaiting_modification -> approved/rejectedAlso: awaiting_agreement (for legal signing)
Team invite link expiration1, 7, 14, or 30 daysConfigurable per link

Design Decisions

Why the Vendor Role Is Additive

A user who becomes a vendor does not lose their existing roles. A teacher-vendor can still use the teacher dashboard, a parent-vendor still has the parent view. This was chosen because many vendors are also active DoCurious users who complete challenges themselves. The context switcher handles role transitions.

Why All Challenges Require Staff Review

Even though this creates a bottleneck, staff review ensures quality, safety, and age-appropriateness. The spec anticipates supplementing manual review with AI-based automated ToS checks as platform traffic increases. Established vendors with good track records will receive expedited review.

Why Vendors Cannot Review Track Records

Only DoCurious staff review Track Records, even for vendor-created challenges. This prevents conflicts of interest (a vendor might be incentivized to approve all TRs to inflate completion numbers) and maintains consistent quality standards. This may be revisited in the future.

Why DoCurious Is Not the Payment Processor

Vendors handle their own payment collection through external links. This avoids the regulatory complexity of marketplace payment processing, reduces liability, and lets vendors use their existing commerce infrastructure. DoCurious tracks engagement signals instead, providing vendors with intent data (saves, starts, completions) to estimate revenue impact.

Why Structural Fields Lock After First Start

Once any user has started a challenge, fields like milestones, difficulty, and materials are locked. Changing these mid-progress would break the experience for active users. Vendors who need to make structural changes must create a new challenge and link it as a successor.

Why the Onboarding Has a 4-Step Wizard

The onboarding collects different types of information (profile/billing, commission terms, venues, review) in separate focused steps rather than one long form. This reduces cognitive load, enables localStorage persistence per step, and lets vendors skip back to specific sections.

Technical Implementation

Key Files

LayerFilePurpose
Typessrc/types/vendor.types.tsVendor, VendorApprovalStatus, VendorAccountStatus, VirtualVenue, PhysicalVenue, AffiliateInfo, VendorProfileInfo, VendorContact, VendorTaxInfo, VendorDocument, VendorTeamMember, VendorInviteLink, VendorTeamActivity, VendorSignupData, VendorListItem, VendorApprovalAction, VendorStats, onboarding step types
Storesrc/store/useVendorStore.tsZustand store with localStorage persistence. Vendor data loading, profile updates, logo upload, 4-step onboarding with per-step submission, error handling. Selectors for approval status, onboarding progress (0-100%).
Team Storesrc/store/useVendorTeamStore.tsZustand store for team members, invite links, and activity log
Real APIsrc/api/vendor.real.api.tsBackend HTTP client covering signup, onboarding (3 steps + complete), profile CRUD, logo/document upload, Stripe Connect (link + status), agreement (generate, sign, download), and admin endpoints (list, stats, approval, suspend, reactivate)
Team APIsrc/api/vendorTeam.api.tsMock API for team member CRUD, invite links, and activity log
Dashboardsrc/pages/vendor/VendorDashboard.tsxStat cards, challenge table, performance bars. Wired to useChallengeStore.
Applicationsrc/pages/vendor/VendorApplication.tsxPublic registration form with confirmation screen
Challengessrc/pages/vendor/VendorChallenges.tsxFilterable challenge list with stats, status badges, and action buttons
Createsrc/pages/vendor/VendorChallengeCreate.tsx6-tab challenge creation form with validation, draft saving, and review submission
Eventssrc/pages/vendor/VendorEvents.tsxEvent table with upcoming/past sections, registration counts, capacity tracking
Analyticssrc/pages/vendor/VendorAnalytics.tsxRecharts bar/line charts, 8 stat cards, top challenges ranking
Orderssrc/pages/vendor/VendorOrders.tsxFilterable order table with fulfillment and refund actions
Settingssrc/pages/vendor/VendorSettings.tsxTwo-tab settings: Profile (form + logo upload) and Team (members, invite links, activity log)
Barrelsrc/pages/vendor/index.tsRe-exports all vendor page components

Store Actions (useVendorStore)

ActionDescription
loadVendor(vendorId)Fetch vendor data from API, update onboarding state
setVendor(vendor)Set vendor data directly
clearVendor()Reset vendor and onboarding state
updateProfile(vendorId, data)Update vendor profile via API
uploadLogo(vendorId, file)Upload logo file, update profile.logo in state
setOnboardingStep(step)Navigate to a specific onboarding step
updateStep1(data)Update step 1 form data in local state
updateStep2(data)Update step 2 form data in local state
addVirtualVenue(venue)Add a virtual venue to step 3
removeVirtualVenue(id)Remove a virtual venue from step 3
addPhysicalVenue(venue)Add a physical venue to step 3
removePhysicalVenue(id)Remove a physical venue from step 3
submitStep1(vendorId)Submit step 1 via FormData upload (includes logo file)
submitStep2(vendorId)Submit step 2 commission/affiliate data
submitStep3(vendorId)Submit step 3 venue data
completeOnboarding(vendorId)Mark onboarding complete, submit for approval
resetOnboarding()Reset onboarding to initial state

Store Selectors

SelectorReturns
selectVendorApprovalStatusCurrent approval status or null
selectIsVendorApprovedBoolean: true if status is 'approved'
selectNeedsModificationBoolean: true if status is 'awaiting_modification'
selectNeedsAgreementBoolean: true if status is 'awaiting_agreement'
selectOnboardingProgressNumber 0-100 representing percentage complete (25% per step)

API Endpoints (vendor.real.api.ts)

MethodEndpointPurpose
POST/vendors/signupRegister as a vendor
GET/vendors/:id/onboardingGet onboarding data
POST/vendors/:id/onboarding/step1Submit step 1 (FormData)
POST/vendors/:id/onboarding/step2Submit step 2
POST/vendors/:id/onboarding/step3Submit step 3
POST/vendors/:id/onboarding/completeComplete onboarding
GET/vendors/:idGet vendor by ID
PUT/vendors/:idUpdate vendor profile
POST/vendors/:id/logoUpload vendor logo
POST/vendors/:id/documentsUpload vendor document
DELETE/vendors/:id/documents/:docIdDelete vendor document
GET/vendors/:id/stripe/connectGet Stripe Connect onboarding link
GET/vendors/:id/stripe/statusGet Stripe Connect status
POST/vendors/:id/agreement/generateGenerate vendor agreement
POST/vendors/:id/agreement/signSign vendor agreement
GET/vendors/:id/agreement/downloadDownload signed agreement
GET/admin/vendorsList all vendors (admin)
GET/admin/vendors/statsGet vendor statistics (admin)
POST/admin/vendors/:id/approvalApprove/reject/request modification (admin)
POST/admin/vendors/:id/suspendSuspend vendor (admin)
POST/admin/vendors/:id/reactivateReactivate vendor (admin)

Data Model

Vendor approval status flow:

pending --> awaiting_modification --> pending (resubmit)
                                          |
                                   awaiting_agreement --> approved
                                          |
                                       rejected

Vendor account status (post-approval): active, inactive, suspended

Key database tables: vendors (organization), challenges (challenge listings), events (scheduled activities), vendor_analytics_cache (precomputed daily metrics), admin_users (vendor role), content_flags (moderation). The vendors.payment_id column stores real Stripe Connect account IDs.

Known Implementation Gaps

  1. Application form completeness -- Missing: sample content/examples, revenue sharing proposal, website URL, how they would use DoCurious
  2. Guided first-challenge creation -- No onboarding-specific creation flow with inline tips and examples
  3. Dashboard orientation tour -- No overlay tour for new vendors
  4. Vendor Resource Hub -- Not yet implemented as a page
  5. Challenge edit pre-population -- Edit button navigates to create form but does not load existing data
  6. "Live with Pending Edit" enforcement -- State defined in spec but not enforced
  7. Event creation form -- Create button shows an alert instead of a form/modal
  8. Event advanced features -- No bulk creation, CSV import, attendee messaging, waitlist management, or attendance tracking
  9. Analytics real data -- All analytics use mock data; not wired to vendor_analytics_cache
  10. Audience insights -- Age/geographic/affinity analytics not built
  11. Exportable reports -- No PDF/CSV export or scheduled reports
  12. Stripe Connect UI -- API endpoints defined but no frontend flow
  13. Vendor agreement signing -- API endpoints defined but no signing UI
  14. Public vendor profile page -- Not yet built (user-facing view of a vendor's profile and all their live challenges)
  15. Gallery performance analytics -- Gallery view counts and Track Record engagement metrics not built
  • Challenges -- Full challenge creation rules, field list, editing restrictions, and lifecycle (Doc 2)
  • Track Records -- The documentation artifact users create when completing challenges (Doc 2)
  • Explore -- How challenges are discovered, filtered, and recommended; includes calendar and map views where vendor events appear (Doc 4)
  • Gifting -- How paid vendor challenges are gifted between users (Doc 3)
  • Accounts -- Context switcher for accessing the vendor dashboard alongside other roles (Doc 1)

DoCurious Platform Documentation