This document defines ownership boundaries between CommDesk Desktop App and CommDesk Website.
Goal:
- avoid duplicate feature implementation across both frontends
- keep one primary write-owner per capability
- preserve a clear handoff between operations-side and participant/public-side workflows
This is the anti-duplication contract for product, design, frontend, backend, and QA teams.
Related system docs:
- CommDesk Overall System Master Guide
- CommDesk Website Public Platform System
- CommDesk Event System
- CommDesk RSVP System
- CommDesk Check-In and Badge System
- CommDesk Participant Platform System
- CommDesk Judging System
- CommDesk Sponsor and Partner System
- CommDesk Community Trust, Review, and AI Scoring System
Purpose:
- internal operations workspace for community owner/admin/organizer teams
Current codebase modules indicate desktop operations ownership:
src/features/AddMembersrc/features/Dashboardsrc/features/Eventssrc/features/Membersrc/features/Contact_And_Support
Purpose:
- public discovery and participant/sponsor/recruiter interaction surface
Website covers:
- discovery
- applications
- participation
- transparency
- public trust pages
Both frontends use the same backend contracts.
Rule:
- data is shared
- write authority is not shared
Use these rules before building any screen.
- Single write owner per capability.
- Other frontend can be read-only or deep-link to owner surface.
- No duplicate create/edit forms for the same entity lifecycle stage.
- Admin override is allowed only in desktop and must be audited.
- Publish and state transitions must happen from owner surface only.
Architecture shorthand:
Read-Many, Write-One
| Capability | Desktop App | Website | Primary Write Owner |
|---|---|---|---|
| Community registration | Review/approve/reject | Community signup form | Website (submit), Desktop/Admin (review) |
| Member onboarding and bulk import | Full create/invite/import | Activation completion only | Desktop |
| Event create/edit/publish/archive | Full control | View only | Desktop |
| RSVP configuration | Full control | Read config for forms | Desktop |
| RSVP submission/update/cancel | Monitor/report view | Full participant actions | Website |
| Registration review (approve/reject/waitlist/check-in/export) | Full control | Self-status view only | Desktop |
| Check-in desk and badge operations | Full control (config, scan, print, reprint, revoke) | Self status/pass view only | Desktop |
| Team discovery and join requests | Exception override only | Full participant flow | Website |
| Submission draft/finalize | Override/disqualify only | Full participant flow | Website |
| Judging criteria/settings/assignments | Full control | Read policy where needed | Desktop |
| Judge scoring workspace | No duplicate scoring UI | Full judge portal | Website |
| Leaderboard publishing/finalization | Finalization authority | Public display | Desktop (finalize), Website (display) |
| Sponsor/partner apply | Review + activation | Public apply form | Website (apply), Desktop/Admin (review) |
| Sponsor event assignment and benefit fulfillment | Full control | Read-only sponsor display | Desktop |
| Job posting moderation | Full control | No posting UI | Desktop |
| Job discovery and applications | View metrics | Full user-facing flow | Website |
| Certificate issuance | Generate and issue | View and verify | Desktop (issue), Website (consume) |
| Notification template/rule management | Full control | Preference controls + inbox | Desktop (rules), Website (consume) |
| Community trust scoring and review intelligence | Rule config, moderation, appeals, override governance | Review submission, trust display, AI summary cards | Website (collect/display), Desktop (governance/moderation) |
| Analytics and reports | Full operational analytics | Public funnel summaries | Desktop |
Desktop: Create Draft Event
-> Desktop: Configure RSVP rules and publish
-> Website: Show event listing and detail page
-> Website: Accept registrations
-> Desktop: Review and approve/waitlist/check-in
Desktop: Publish hackathon + rules
-> Website: RSVP, team formation, submission
-> Website: Judge scoring portal
-> Desktop: Finalize rounds and winner status
-> Website: Publish leaderboard, project showcase, certificates view
Website: Sponsor/Partner applies
-> Desktop/Admin: Verify and approve
-> Desktop: Assign sponsor to event + define benefits
-> Website: Public sponsor visibility + participant challenge access
Desktop: Create/moderate job opportunities
-> Website: List jobs and collect applications
-> Desktop: Review hiring funnel and outcomes
Website should not implement full duplicate UIs for these:
- event authoring wizard
- event publish/archive controls
- RSVP config editing
- registration admin queue actions
- judging criteria editing and judge assignment
- sponsor benefit fulfillment management
- job posting moderation panel
- certificate generation workflows
- platform-level analytics consoles
Website may expose read-only snapshots where useful.
Desktop should not implement full duplicate UIs for these:
- public discovery pages
- community join and RSVP public forms
- team formation UX
- submission builder UX
- public project gallery
- public judging visibility pages
- public leaderboard pages
- job seeker application flow
- sponsor/partner public onboarding forms
Desktop may show minimal monitoring views when operationally needed.
Common identifiers:
communityIduserIdmemberIdeventIdregistrationIdteamIdsubmissionIdjudgeIdorganizationId
Shared state machines must stay identical across frontends:
- event lifecycle
- RSVP lifecycle
- submission lifecycle
- judging score lifecycle
- sponsor negotiation and contract lifecycle
Rule:
- frontends can render status differently
- frontends cannot invent different statuses
Examples:
POST /api/v1/events
PATCH /api/v1/events/:eventId
POST /api/v1/events/:eventId/publish
PATCH /api/v1/events/:eventId/rsvp-config
PATCH /api/v1/events/:eventId/registrations/:registrationId/approve
PATCH /api/v1/events/:eventId/registrations/:registrationId/reject
POST /api/v1/events/:eventId/criteria
PATCH /api/v1/events/:eventId/judging-settings
POST /api/v1/events/:eventId/judging/finalize-round
Examples:
POST /api/v1/public/communities/:communityId/join-requests
POST /api/v1/events/:eventId/rsvp
POST /api/v1/events/:eventId/teams
POST /api/v1/events/:eventId/submissions
POST /api/v1/events/:eventId/submissions/:submissionId/finalize
POST /api/v1/public/jobs/:jobId/apply
POST /api/v1/sponsors/apply
If a write API is desktop-owned, website should not expose an equivalent full-edit UI for same transition.
If a write API is website-owned, desktop should not re-implement the same participant-first UX.
- operational throughput
- bulk actions
- governance and approvals
- auditability
- discoverability
- conversion
- clarity for first-time users
- progress/status visibility
Do not do these:
- duplicate RSVP form on desktop and website with separate validation logic
- allow event publishing from website while desktop has publish rules
- allow criteria edits in website judge pages
- implement two different submission finalize flows
- create parallel sponsor onboarding forms with different fields
For each feature, answer all questions before implementation.
- Which frontend is write-owner?
- Is the other frontend read-only or hidden?
- Which lifecycle state transitions are allowed here?
- Which roles can execute transitions?
- Which audit events must be logged?
- Which API contract is canonical?
- Does this conflict with existing owner surface?
If any answer is unclear, do not start UI implementation.
When a team wants to move ownership from one frontend to another:
- update this boundary doc first
- update module-level doc (event/rsvp/judging/sponsor/etc.)
- update API authorization and audit rules
- run migration plan for old UI deprecation
- communicate to design, QA, and support teams
No ownership transfer should happen by code change alone.
One-line rule:
Desktop runs operations; Website runs discovery and participation; backend state remains single-source and lifecycle-consistent.
This is the contract to keep CommDesk all-in-one without frontend duplication chaos.