Frontend Data Field Inventory
This document lists all data fields used across the ChainAlign frontend components, categorized by component and their implied database/API source.
1. Organization Management
frontend/src/components/pages/OrganizationAdminPage.jsx
organizations(Array of Objects): Fetched fromGET /api/organizationsid(maps totenants.tenant_id)name(maps totenants.tenant_name)full_name(maps totenants.full_name)address(maps totenants.address)admin_name(maps totenants.admin_name)admin_email(maps totenants.admin_email)duns_number(maps totenants.duns_number)industry(maps totenants.industry)status(maps totenants.status)license_level(maps totenants.license_level)max_users(maps totenants.max_users)allowed_domains(maps totenants.allowed_domains)created_at(maps totenants.created_at)
selectedOrg(Object): Selected item fromorganizationsarray. All fields are same asorganizationsitem.
frontend/src/components/ui/CreateOrganizationForm.jsx
orgName(String): Input field, maps totenants.tenant_namefullName(String): Input field, maps totenants.full_nameaddress(String): Input field, maps totenants.addressadminName(String): Input field, maps totenants.admin_nameadminEmail(String): Input field, maps totenants.admin_emaildunsNumber(String): Input field, maps totenants.duns_numberindustry(String): Input field, maps totenants.industryuser(Object): Prop, fromAuthContext(used forcreatorUserId,creatorEmail,creatorDisplayNamein POST request to/api/organizations)uid(maps totenants.creator_user_id)email(maps totenants.creator_email)displayName(maps totenants.creator_display_name)
frontend/src/components/ui/UserManagementTable.jsx
orgId(String): Prop, fromOrganizationAdminPage.jsx(selectedOrg.id), maps totenants.tenant_idorgName(String): Prop, fromOrganizationAdminPage.jsx(selectedOrg.name), maps totenants.tenant_nameusers(Array of Objects): Mock data currently, will be fetched from backend (e.g.,GET /api/users?orgId=...)id(maps tousers.user_id)name(maps tousers.display_name)email(maps tousers.email)role(maps tousers.role)
frontend/src/components/ui/DataLinksManager.jsx
orgId(String): Prop, fromOrganizationAdminPage.jsx(selectedOrg.id), maps totenants.tenant_idorgName(String): Prop, fromOrganizationAdminPage.jsx(selectedOrg.name), maps totenants.tenant_namelinkedCustomers(Array of Objects): Fetched fromGET /api/datalinks/${orgId}/linked-customerscustomer_id(maps tocustomers.customer_id)customer_name(maps tocustomers.customer_name)region(maps tocustomers.region)
unlinkedCustomers(Array of Objects): Fetched fromGET /api/datalinks/unlinked-customerscustomer_id(maps tocustomers.customer_id)customer_name(maps tocustomers.customer_name)region(maps tocustomers.region)
2. Dashboard Views
frontend/src/components/pages/PlannerDashboard.jsx
dashboardContent(Object): Fetched fromGET /api/planner-dashboardcontextualNav(Array of Objects)texthref
urgentTask(Object)labeltitlesubtitlebuttonText
insights(Object)titleitems(Array of Objects)headerdescription
dataReview(Object)titlestatussections(Array of Objects)namehealthhealthStatus
buttonText
myNotes(Object)titlebuttonTextnotes(Array)
teamUpdates(Object)titleupdates(Array)
frontend/src/components/pages/FinancePartnerDashboard.jsx
dashboardContent(Object): Fetched fromGET /api/finance-dashboardcriticalInsight(Object)labeltitlesubtitleprimaryActionsecondaryAction
meetingControl(Object)titledueDateteams(Array of Objects)namestatus
buttonTextbuttonDisabled
intelligenceFeed(Object)titleitems(Array of Objects)timecontent
performanceSummary(Object)titlemetrics(Array of Objects)namevaluestatus
frontend/src/components/pages/HRPartnerDashboard.jsx
dashboardContent(Object): Fetched fromGET /api/hr-dashboardcriticalInsight(Object)labeltitlesubtitleprimaryActionsecondaryAction
meetingControl(Object)titledueDateteams(Array of Objects)namestatus
buttonTextbuttonDisabled
intelligenceFeed(Object)titleitems(Array of Objects)timecontent
performanceSummary(Object)titlemetrics(Array of Objects)namevaluestatus
frontend/src/components/pages/OrchestratorDashboard.jsx
dashboardContent(Object): Fetched fromGET /api/orchestrator-dashboardcriticalInsight(Object)labeltitlesubtitleprimaryActionsecondaryAction
meetingControl(Object)titledueDateteams(Array of Objects)namestatus
buttonTextbuttonDisabled
intelligenceFeed(Object)titleitems(Array of Objects)timecontent
plan(Object): FromPlanContext(live simulation data)grossMarginserviceLevelinventoryValueworkingCapital
frontend/src/components/pages/SupplyPlannerDashboard.jsx
dashboardContent(Object): Fetched fromGET /api/supply-dashboardcontextualNav(Array of Objects)texthref
urgentTask(Object)labeltitlesubtitlebuttonText
insights(Object)titleitems(Array of Objects)headerdescription
dataReview(Object)titlestatussections(Array of Objects)namehealthhealthStatus
buttonText
myNotes(Object)titlebuttonText
teamUpdates(Object)title
3. Curation Queue
frontend/src/components/pages/CurationQueuePage.jsx
queueItems(Array of Objects): Fetched fromGET /curation/queueitem_id(maps tocuration_queue.item_id)content(maps tocuration_queue.content)ai_summary(maps tocuration_queue.ai_summary)ai_tags(maps tocuration_queue.ai_tags)source_url(maps tocuration_queue.source_url)
4. Global User Data
frontend/src/components/layout/Header.js (and AuthContext)
user(Object): FromAuthContextisChainAlignAdmin(derived from user profile roles)profile(Object, from backendGET /user/user-profile)photo_urldisplay_nameemailrole(maps tousers.roleor similar)
firebase(Object, from Firebase Auth)displayNameemailuid(maps tousers.uidor similar)
5. Database Schema Details
tenants table
CREATE TABLE tenants (
tenant_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_name VARCHAR(255) NOT NULL,
full_name VARCHAR(255),
address VARCHAR(255),
admin_name VARCHAR(255),
admin_email VARCHAR(255),
duns_number VARCHAR(255),
industry VARCHAR(255),
status VARCHAR(50) NOT NULL DEFAULT 'active',
license_level VARCHAR(50) NOT NULL DEFAULT 'standard',
max_users INT DEFAULT 10,
allowed_domains TEXT[],
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
creator_user_id VARCHAR(255),
creator_email VARCHAR(255),
creator_display_name VARCHAR(255)
);
curation_queue table
CREATE TABLE curation_queue (
item_id SERIAL PRIMARY KEY,
content TEXT NOT NULL,
ai_summary TEXT,
ai_tags JSONB DEFAULT '{}',
status VARCHAR(50) NOT NULL DEFAULT 'pending',
source_url VARCHAR(2048),
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
users table
CREATE TABLE users (
user_id VARCHAR(255) PRIMARY KEY,
tenant_id UUID REFERENCES tenants(tenant_id),
email VARCHAR(100) UNIQUE NOT NULL,
display_name VARCHAR(100),
photo_url TEXT,
role VARCHAR(50) NOT NULL DEFAULT 'user',
preferences JSONB DEFAULT '{}',
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
last_login_at TIMESTAMP WITH TIME ZONE
);
customers table
CREATE TABLE customers (
customer_id VARCHAR(50) PRIMARY KEY,
customer_name VARCHAR(100),
region VARCHAR(50)
);