Platform Architecture
π» Frontend
π₯οΈ Backend
ποΈ Database
βοΈ Chain
Purpose
Path
π Related Pages
π»OverviewArchitectureAPI ReferenceSmart ContractsLast updated
Last updated
members (hub)
βββ member_contact (1:1) - Name, email, phone
βββ member_location (1:1) - Address, timezone
βββ member_availability (1:1) - Hours, work modes
βββ member_gating (1:1) - Rank, permissions
βββ member_admin (1:1) - Role level
βββ member_skills (1:many) - Skill proficiencies
βββ member_equipment (1:many) - Equipment listings
βββ member_credentials (1:many) - Certifications
βββ member_onboarding (1:1) - Onboarding statusprojects
βββ title, description, status
βββ leader_id β members
βββ division_id β divisions
βββ guild_id β guilds
βββ property_id β properties
βββ budget, spent, dates
β
βββ tasks (1:many)
βββ title, description, status, priority
βββ assignee_id β members
βββ reward_eqtblt, reward_bltby
βββ estimated_hours, actual_hours
β
βββ subtasks (1:many)
βββ task_dependencies (many:many)
βββ task_comments (1:many)
βββ submissions (1:many)
βββ time_logs (1:many)/api/members
βββ GET /api/members - List all
βββ GET /api/members/:id - Get single
βββ GET /api/members/:id/skills - Get skills
βββ POST /api/members/:id/skills - Add skill
βββ PATCH /api/members/:id/profile - Update
βββ DELETE /api/members/:id/skills/:skillId
/api/projects
βββ GET /api/projects - List all
βββ GET /api/projects/:id - Get with tasks
βββ POST /api/projects - Create
βββ PATCH /api/projects/:id - Update
βββ DELETE /api/projects/:id - Delete
/api/tasks
βββ GET /api/tasks - List all
βββ GET /api/tasks/:id - Get single
βββ POST /api/tasks - Create
βββ PATCH /api/tasks/:id - Update
βββ DELETE /api/tasks/:id - Delete// Session-based auth
requireAuth() // Check session exists
requireRole(role) // Check admin role level
loadMember() // Attach member data to request// Fetch data
const { data, isLoading } = useQuery({
queryKey: ["/api/projects", projectId],
enabled: !!projectId,
});
// Mutations
const mutation = useMutation({
mutationFn: (data) => apiRequest("POST", "/api/projects", data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/projects"] });
},
});// PermissionGate component
<PermissionGate requiredRole="admin">
<AdminContent />
</PermissionGate>
// useUserRole hook
const { role, isAdmin, isLeader } = useUserRole();1. Google OAuth β Create session
2. Wallet Connect β Sign message (SIWE)
3. Verify signature β Link to profile
4. Session contains memberId