codefeedback.com - Marketing site (webflow)
{organization-slug}.codefeedback.com - Public site, where users can input and upvote feedback, see the public roadmap, and more⦠(Angular + FastAPI API)
{organization-slug}.codefeedback.com/admin - Where admins of the organization can change the settings and behaviors of the site as well as to work with feedback (Angular + FastAPI API)
erDiagram
Organization ||--o{ FeedbackBoard : has
FeedbackBoard ||--o{ Feedback : has
Feedback }o--o{ FeedbackTag : has
Feedback }o--|| FeedbackStatus : has
Feedback ||--o{ FeedbackComment : has
Feedback ||--o{ FeedbackVote : has
User ||--o{ Feedback : gives
User }o--o{ FeedbackComment : writes
User }o--o{ FeedbackVote : upvotes
User }o--o{ Organization : belongs
- Roles (not stored in DB)
- Member (default, no role assigned for the organization)
- Moderator (PMs, dev rel, etc. in the organization)
- Admin (can change everything for the organization)
- Priorization Methods (not stored in DB)
- Exponential (1, 2, 4, 8, 16)
- Fibonacci (1, 2, 3, 5, 8)
- Linear (1, 2, 3, 4, 5)
- T-Shirt Size (XM, SM, M, L, XL)
- Internal Status
- Reviewing
- Planned
- Active
- Completed
- Canceled
- Organization
- PK (ORG#<OrganizationId>)
- SK (ORG#<OrganizationId>)
- GI1PK (ORG) # list organizations
- GI1SK (ORG#<OrganizationId>)
- GI2PK (ORG_NAME#<OrganizationName>)
- GI2SK (ORG_NAME#<OrganizationName>)
- Name: str (e.g. auth0 for auth0.codefeedback.com)
- DisplayName: str
- Logo: str
- BrandColor: str
- PriorizationModel: Exponential | Fibonacci | Linear | Decimal
- CreatedDate: DateTime
- UpdatedDate: DateTime
- CreatedBy: str
- FeedbackBoard (Feature requests, bugs, ideas, anything admins want to create to capture feedback)
- PK (ORG#<OrganizationId>)
- SK (BOARD#<BoardId>) # list boards per organization
- GI1PK
- GI1SK
- GI2PK
- GI2SK
- Name: str
- ReadOnly: bool (no one can post)
- Internal: bool (only for organization moderators / admins)
- CommentsDisabled: bool
- CreatedDate: DateTime
- UpdatedDate: DateTime
- CreatedBy: str
- FeedbackTag
- PK (ORG#<OrganizationId>)
- SK (TAG#<TagID>)
- GI1PK
- GI1SK
- GI2PK
- GI2SK
- Name: str
- Color: str
- Active: bool
- FeedbackStatus
- PK (ORG#<OrganizationId>)
- SK (STATUS#<TagID>)
- GI1PK
- GI1SK
- GI2PK
- GI2SK
- Name: str
- Color: str
- Active
- CreatedDate: DateTime
- UpdatedDate: DateTime
- CreatedBy: str
- Feedback
- PK (ORG#<OrganizationId>)
- SK (FEEDBACK#<FeedbackId>) KSUIDs
- GI1PK (ORG#<OrganizationId>#<BoardId>)
- GI1SK (FEEDBACK#<FeedbackId>) # list feedback by board
- GI2PK
- GI2SK
- Title: str
- Body: str
- Tags: List[str]
- Value: number (Priorization Methods Index)
- Effort: number (Priorization Methods Index)
- InternalStatus: InternalStatus
- Status: str
- CommentsDisabled: bool
- Sentiment: number
- UpVotes: number
- DownVotes: number
- CommentsCount: number
- ETA: DateTime | None
- IsSpam: bool
- CreatedDate: DateTime
- UpdatedDate: DateTime
- CompletedDate: DateTime
- CanceledDate: DateTime
- CreatedBy: str
- FeedbackComment
- FeedbackVote