Skip to content

Lumina Debates System

Albert Marashi edited this page Oct 18, 2023 · 2 revisions

This system is designed to foster structured, insightful, and impactful discussions among our citizens in Lumina, allowing them to propose, debate, and rank ideas or concepts in a well-organized manner, thereby nurturing a constructive and participative democratic environment within our autonomous city-state.

image

High Level Overview


Comment Trees


The core function of the comment trees is to structure discussions around ideas or concepts, ensuring clarity in debates and easy tracking of responses.

  1. Structured Discussions:
    • Every comment must choose a side in relation to the idea or concept presented in the parent comment, ensuring clarity in discussion threads.
    • Comments are organized in a tree-like structure, with each comment branching into two groupings for sub-discussions: in support and in opposition.
  2. Clear Debates:
    • Sub-discussions under each parent comment are designated to arguments either in support or in opposition, offering clear, organized debates on specific points.
    • This promotes focused, topic-specific discussions and prevents the convolution of multiple points in a single thread.
  3. Tracking of Responses:
    • The hierarchical structure allows users to easily track responses and understand the flow of arguments, enabling them to participate more effectively in discussions.
    • Users can navigate through different branches of the discussion tree to explore various perspectives and viewpoints on the central idea or concept.

Impact Rating System


Impact rating is designed to indicate the perceived importance, relevance, or influence of a comment on the idea or concept, as rated by the participants in the discussion.

Details about Rating Scale, Comment Ranking, and Encouraging Quality Contributions remain as before.

  1. Rating Scale:
    • Comments can be rated by participants on a scale of 0 to 4, with 4 being the most impactful.
    • The impact rating reflects the collective opinion of the participants regarding the significance of the comment to the central idea or concept.
  2. Comment Ranking:
    • Within the comment trees, comments are ranked based on their impactfulness rating.
    • Higher-rated comments are prominently displayed at the top, ensuring they receive more visibility and consideration.
    • Lower quality or less impactful responses are moved to the bottom, maintaining the focus on more relevant discussions.
  3. Encouraging Quality Contributions:
    • The impact rating system incentivizes quality contributions by giving more visibility and influence to higher-rated comments.
    • It promotes thoughtful, well-articulated arguments and discourages unproductive or irrelevant comments, fostering a constructive discussion environment.

Creating Comment Threads


  1. Thread Initiation:
    • Any registered user can initiate a thread by proposing an idea or concept they wish to discuss. The original post serves as the root of the comment tree.
  2. Thread Titles and Descriptions:
    • Users must provide a clear and concise title for their idea/concept thread, along with an optional detailed description to elaborate further.
  3. Thread Categories:
    • To aid navigation and discoverability, users can assign their thread to a specific category or tag, such as "Technology," "Environment," "Philosophy," etc.
  4. Thread Popularity and Trending:
    • Threads that gather significant activity or high impact ratings may appear in a "trending" or "popular" section, enhancing their visibility on the platform.

Notification System


  1. Types of Notifications:
    • Thread Notifications: Alert users when a new comment or sub-thread is added to a thread they initiated or participated in.
    • Impact Rating Notifications: Notify users when their comment receives a new rating or reaches a significant impact threshold.
    • User Engagement Notifications: Alert when someone replies directly to a user's comment or mentions them within a thread.
    • General System Updates: Keep users informed about platform updates, enhancements, and other announcements.
  2. Customizable Notification Preferences:
    • Users can choose which types of notifications they want to receive and through which channels (email, in-app notifications, mobile app notifications, etc.).
    • Options for immediate, daily, or weekly digests can be provided, depending on user preferences.

Technical Plan

GraphQL Schema

This schema defines the types, inputs & outputs that the system will use as an interface to allow communication between the front-end of the website and the back-end server

type Thread {
    id: ID!
    title: String!
    description: String
    category: Category!
    comments: [Comment!]!
    trendingScore: Float # Calculated based on activity and ratings. Higher values indicate trending threads.
    createdAt: String!
    createdBy: User!
}

type Comment {
    id: ID!
    content: String!
    side: Side! # Either "SUPPORT" or "OPPOSITION"
    parent: Comment # If null, it's a top-level comment under the thread. Otherwise, it's a response to another comment.
    responses: [Comment!]!
    impactRating: Float! # Average of all ratings given to this comment
    createdAt: String!
    createdBy: User!
}

enum Side {
    SUPPORT
    OPPOSITION
}

enum Category {
    TECHNOLOGY
    ENVIRONMENT
    PHILOSOPHY
    # ... other categories
}

type Rating {
    id: ID!
    value: Int! # 0 to 4 scale
    ratedBy: User!
    comment: Comment!
}

type Notification {
    id: ID!
    type: NotificationType!
    content: String!
    relatedThread: Thread
    relatedComment: Comment
    createdAt: String!
    receivedBy: User!
}

enum NotificationType {
    THREAD_NOTIFICATION
    IMPACT_RATING_NOTIFICATION
    USER_ENGAGEMENT_NOTIFICATION
    SYSTEM_UPDATE
}

# Assuming the User type is defined elsewhere:
# type User {
#     id: ID!
#     name: String!
#     email: String!
#     # ... other user fields
# }

# Query and Mutation Definitions:

type Query {
    getThread(id: ID!): Thread
    getComments(threadId: ID!): [Comment!]
    getNotification(userId: ID!): [Notification!]
    # ... other queries
}

type Mutation {
    createThread(title: String!, description: String, category: Category!): Thread!
    addComment(threadId: ID!, content: String!, side: Side!, parentId: ID): Comment!
    rateComment(commentId: ID!, value: Int!): Rating!
    # ... other mutations
}