Skip to content

Content admin dashboard specification #72

@Lezek123

Description

@Lezek123

App specification

Access

  • Everyone is allowed to use the dashboard to explore data that's already publicly available on Gleev (in read-only mode)
  • Providing YouTube Sync operator key enables access to YPP-related actions (see list of supported actions below)
  • Providing Gleev operator key grants read access to hidden/non-public channels/videos and enables Gleev operator actions (see list of supported actions below)
  • (optional) Connecting CWG lead/worker key enables some on-chain actions (see list of supported actions below)

Pages

Channels listing

Channel's data

  • ID
  • Title
  • Avatar photo
  • Creation date (createdAt)
  • Owner member:
    • ID
    • Handle
    • (opt) Avatar
  • Flags:
    • isPublic
    • isCensored
    • isExcluded
  • Language
  • Number of:
    • Followers
    • Total video views (videoViewsNum)
    • Total videos created (totalVideoCreated)
  • CRT (if exists):
    • ID
    • Symbol
    • Is featured?
    • (opt) Liquidity
  • Cumulative revenue (cumulativeRevenue)
  • Weight (channelWeight)
  • YPP status / tier
  • Is YouTube sync enabled?
  • Number of reports
  • (opt) Last video upload date

Filtering options

By:

  • ID
  • Title fragment
  • (opt) Desc fragment
  • Creation date (from - to)
  • Owner member:
    • ID
    • (opt) Handle
  • Flags:
    • isPublic
    • isCensored
    • isExcluded
  • Language
  • Has CRT?
  • Is CRT featured?
  • YPP status
  • Is YouTube sync enabled?
  • Number of reports > 0?
  • (opt) CRT Transactional status

Sorting options

By:

  • Creation date
  • Number of follows
  • Total number of video views
  • Total number of videos created
  • Cumulative channel revenue
  • Weight
  • (opt) Last video upload date
  • (opt) CRT Liquidity?

Available actions

YPP API

  • Verify (supports multi-selection)
  • Change default video category (supports multi-selection)
  • Suspend

Orion:

  • Set channel weight
  • Exclude/Restore channel (supports multi-selection)

(opt) On-chain:

  • Censor (supports multi-selection)
  • Remove channel assets

Channel details

Channel's data

  • All data from channels listing + ...
  • Description
  • List of associated reports
  • List of all associated assets (cover photo, avatar etc.) along with:
    • IDs
    • Sizes
    • Links to retrieve them from available distributors (resolvedUrls)
  • (opt) Breakdown of payouts
  • CRT:
    • (opt) Transactional status

Available actions

(opt) On-chain:

  • Remove channel assets

Videos listing

Video's data

  • ID
  • Joystream creation date
  • If synced from YT:
    • YT creation date
    • YT video ID and/or Link
  • Channel's:
    • ID
    • Title
    • isExcluded status
    • (opt) avatar
    • (opt) weight
  • Has NFT?
  • Language
  • Orion language
  • Featuring:
    • Pinned status (includeInHomeFeed)
    • Featured in category (if it is):
      • ID
      • Name
    • Is NFT featured?
  • Relevance
  • Flags:
    • isPublic
    • isCensored
    • isExcluded
    • isExplicit
    • isShort
    • isShortDerived
  • Is it visible on Gleev? (depends on multiple conditions)
  • Number of:
    • Views
    • Comments
    • Reactions
  • (opt) Gleev feed position? (estimated)
  • License:
    • Type
  • Number of reports

Filtering

By:

  • ID
  • Joystream creation date (from - to)
  • Title fragment
  • (opt) Desc fragment
  • Channel's:
    • ID
    • (opt) Channel title fragment
    • YPP tier
  • Is synced from YouTube?
  • Language
  • Orion language
  • Flags:
    • isPublic
    • isCensored
    • isExcluded
    • isExplicit
    • isShort
    • isShortDerived
  • Video category
  • Pinned status (includeInHomeFeed)
  • Gleev visibility status
  • Has nft?
  • Featured in Category
  • (opt) Number of reports > 0
  • (opt) NFT transactional status

Sorting

By:

  • Joystream creation date
  • (opt) YouTube creation date
  • Relevance
  • Number of views
  • Number of comments
  • Number of reactions
  • (opt) Gleev feed position? (estimated)

Actions

Orion API:
All of those should support multi-selection:

  • Exclude/Restore video(s)
  • Pin/Unpin video(s) (includeInHomeFeed)
  • Set video NFT featuring status
  • Set/Unset category the video is featured in

Video details

Video's data

  • All data from videos listing + ...
  • Details about license (ie. attribution, custom text if exists)
  • List of all associated assets (media, thumb, subtitles etc.) along with:
    • IDs
    • Links to retrieve them from available distributors (resolvedUrls)
  • List of associated reports
  • Video relevance w/ detailed explanation about how each factor affects it (see: Relevance formula), ie.:
    • Newness / Age and its weight
      • Joystream age (based on createdAt) and its weight
      • YouTube age (based on publishedBeforeJoystream) and its weight
    • Views and their weight
    • Comments and their weight
    • Reactions and their weight
    • Channel weight
  • (opt) List of comments
  • NFT
    • (opt) last price
    • (opt) transactional status

Relevance formula

(
	365 * newnessWeight
	- min((joystreamNewsnessWeight/totalWeight * joystreamAgeDays + ytNewsnessWeight/totalWeight * ytAgeDays))
	+ viewsNum * viewsWeight
	+ commentsCount * commentsWeight
	+ reactionsCount * reactionsWeight
) * channelWeight

Available actions

Chain API:

  • Remove video assets

Configuration

Data

  • Video relevance weights

Actions

Orion API

  • Setting video relevance weights

Required changes in existing projects

Youtube Sync

  • To allow filtering channels / videos by channel's YPP status/tier and isYouTubeSyncEnabled flag we'd need to:
    • Create a script to sync this data from yt-sync database to Orion
    • Add triggers to update status in Orion once it's updated in yt-sync

Orion

  • To allow filtering channels by YPP status/tier and isYouTubeSyncEnabled flag we'd need to:
    • Expand the YppStatus enum to include channel tier information (Bronze, Silver, Gold, Diamond)
    • Add isYouTubeSyncEnabled field
    • Add mutation to set isYouTubeSyncEnabled value
    • (opt) Add index on Channel's yppStatus and isYouTubeSyncEnabled fields in Postgres (for optimization purposes)
  • To optimize sorting and filtering, adding following PostgreSQL indices can also be considered:
    • Channel/Video:
      • createdAt
      • isPublic
      • isExcluded
      • isCensored
    • Channel:
      • language
      • followsNum
      • videoViewsNum
      • totalVideosCreated
      • cumulativeRevenue
      • channelWeight
    • Video:
      • relevance
      • isShort
      • isShortDerived
      • isExplicit
      • language
      • orionLanguage
      • ytVideoId
      • viewsNum
      • reactionsCount
      • commentsCount

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions