The Partner Organization Signup System allows organizations to create custom signup flows that function as white-label versions of the main business valuation calculator. These flows automatically create business profiles from collected valuation data.
The system includes specialized components for collecting valuation data: - Business Type Selector: Industry classification with valuation multiples - Location Management: Multiple business locations with geocoding - Financial Data Entry: Multi-year revenue, cash flow, and net income - Risk Assessment: Business risk factors that affect valuation - Comparable Selection: Find and select similar businesses for market-based valuation
Located at:
alphabiz-ui/src/components/organization/SignupFlowEditor.tsx
- Drag-and-drop interface for building signup flows - Valuation field
library with pre-built components - Template selection (includes
“Business Valuation Flow”) - Real-time preview
Located at:
alphabiz-ui/src/components/questionnaire/adapters/ -
BusinessTypeAdapter: Wraps MultipleForm component -
LocationAdapter: Manages multiple business locations -
YearFormAdapter: Financial data with year management -
RiskFactorsAdapter: Risk assessment interface -
CompsAdapter: Comparable business selection with map
Located at:
alphabiz-ui/src/components/organization/SignupFlowManager.tsx
- Manage organization signup flows - View and process submissions -
Approval interface with profile creation status
# Questionnaire fields → Profile structure
business_type → multipleForm.businessTypeId
business_description → multipleForm.businessDescription
locations → locations array with place data
financials → allYears (Map converted to object)
risk_factors → multipleForm.flags
comparables → comps array
asking_price → askingPricevaluation_api/api_routes/organization_signup_routes.py:
Main signup API endpointsvaluation_api/api_route.py: Login hook for deferred
profile creationvaluation_api/models/uuid_models.py: Database
modelsGET /api/signup/{org_code}
Returns the active signup flow configuration for an organization.
POST /api/signup/{org_code}/submit
Content-Type: application/json
{
"email": "user@example.com",
"business_name": "My Business",
"business_type": {
"businessTypeId": "uuid",
"businessDescription": "Description"
},
"locations": [...],
"financials": {...},
"risk_factors": {...},
"comparables": [...]
}
GET /api/partner-org/{org_id}/signup-flows
Authorization: Bearer {token}
POST /api/partner-org/{org_id}/signup-flows
Authorization: Bearer {token}
Content-Type: application/json
{
"name": "Business Valuation Signup",
"description": "Complete valuation during signup",
"flow_config": {...},
"is_active": true
}
GET /api/partner-org/{org_id}/signup-submissions?status=PENDING
Authorization: Bearer {token}
POST /api/partner-org/{org_id}/signup-submissions/{submission_id}/approve
Authorization: Bearer {token}
Content-Type: application/json
{
"role": "member",
"notes": "Approved with complete valuation data"
}
Response:
{
"status": "approved",
"user_added": true,
"profile_created": true,
"profile_data_saved": false,
"message": null
}{
"signup_settings": {
"auto_approve": true,
"default_role": "member",
"require_email_verification": false
}
}import { defaultValuationFlow } from '@/components/organization/defaultValuationFlow';
// 7-step flow with all valuation components
const flow = {
...defaultValuationFlow,
name: "Custom Business Valuation",
settings: {
auto_approve: true
}
};// 1. Create organization
const org = await createOrganization({
name: "Tech Accelerator",
code: "tech-accel"
});
// 2. Enable signup
await updateSignupSettings(org.id, {
signup_enabled: true,
signup_settings: {
auto_approve: false,
default_role: "member"
}
});
// 3. Create valuation flow
const flow = await createSignupFlow(org.id, {
name: "Tech Startup Valuation",
flow_config: defaultValuationFlow,
is_active: true
});
// 4. Share signup URL
const signupUrl = `https://app.example.com/signup/tech-accel`;
// 5. Process submissions
const submissions = await getSubmissions(org.id, "PENDING");
for (const sub of submissions) {
if (hasValuationData(sub)) {
await approveSubmission(org.id, sub.id);
// Profile created automatically!
}
}