Skip to content

Conversation

@emlimlf
Copy link
Collaborator

@emlimlf emlimlf commented Nov 21, 2025

In this PR

  • Created a new section in the projects page called community voice
  • This new section is only available to logged in users and have the same permissions as the one used for the copilot feature

Ticket

IN-852

Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
@emlimlf emlimlf requested review from Copilot and gaspergrom and removed request for Copilot November 21, 2025 05:43
Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conventional Commits FTW!

Copilot finished reviewing on behalf of emlimlf November 21, 2025 05:44
Copilot AI review requested due to automatic review settings November 21, 2025 05:48
Copilot finished reviewing on behalf of emlimlf November 21, 2025 05:49
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces a new "Community Voice" section to the projects page that displays mentions and discussions about projects from various social media and community platforms (YouTube, X/Twitter, Reddit, HackerNews, etc.). The feature is only available to logged in users and uses the same permission model as the Copilot feature.

Key changes:

  • Added Community Voice pages for project, repository, and repository group levels
  • Integrated new community platform configurations (YouTube, X/Twitter, Reddit, HackerNews)
  • Enhanced dropdown and popover components with customizable z-index via popoverClass prop
  • Added sentiment filtering configuration (positive, neutral, negative)

Reviewed Changes

Copilot reviewed 49 out of 60 changed files in this pull request and generated no comments.

Show a summary per file
File Description
frontend/app/pages/project/[slug]/community-voice.vue New community voice page at project level with SEO noindex
frontend/app/pages/project/[slug]/repository/[name]/community-voice.vue New community voice page at repository level with SEO noindex
frontend/app/pages/project/[slug]/repository-group/[groupSlug]/community-voice.vue New community voice page at repository group level with SEO noindex
frontend/app/layouts/default.vue Added global community filter component to default layout
frontend/app/components/uikit/popover/popover.vue Enhanced popover with customizable CSS class for z-index control
frontend/app/components/uikit/dropdown/dropdown.vue Enhanced dropdown with popover class support
frontend/app/components/uikit/dropdown/dropdown.scss Added .dropdown-popover z-index styling
frontend/app/components/shared/types/tanstack.ts Added COMMUNITY_MENTIONS query key
frontend/app/components/shared/types/routes.ts Added route names for community voice pages
frontend/app/components/modules/widget/types/widget-area.ts Added COMMUNITY widget area
frontend/app/components/modules/widget/config/widget-area.config.ts Added configuration for community widget area
frontend/app/components/modules/project/config/sentiments.ts New sentiment configuration for filtering (positive, neutral, negative)
frontend/app/components/modules/project/config/links.ts Added community voice navigation link configuration
frontend/app/components/modules/project/config/youtube.config.ts YouTube platform configuration for community mentions
frontend/app/components/modules/project/views/community-voice.vue Main view component for community voice with infinite scroll
frontend/public/images/platforms/youtube.png YouTube platform logo (binary image)
frontend/public/images/platforms/x.png X/Twitter platform logo (binary image)
frontend/public/images/platforms/reddit.svg Reddit platform icon (SVG)
frontend/public/images/platforms/hackernews.svg HackerNews platform icon (SVG)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@emlimlf emlimlf changed the title Feat/community voice UI feat: community voice UI Nov 21, 2025
/>
<p
class="text-base leading-6 text-black whitespace-pre-wrap md:hidden block"
v-html="truncateText(mention.body, 150)"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have function for sanitizing html
Example:
v-html="sanitize(config.description(project))"

v-if="mention.imageUrl && isValidUrl(mention.imageUrl)"
:src="mention.imageUrl"
alt=""
class="w-full lg:w-[200px] lg:h-[100px] h-[120px] object-cover rounded-lg shrink-0"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dont use 200px etc put values into tailwind config and then use them

v-if="item.image"
:src="item.image"
:alt="item.label"
class="w-[15px] h-[15px] object-contain"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

round to 16px and use w-4 h-4

<div
v-for="item in displayedItems"
:key="item.value"
class="bg-neutral-100 rounded-full px-1.5 py-0.5 flex items-center gap-1 min-w-0 max-w-[200px]"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dont use static values

:class="sentimentTextColor"
/>
<div
class="flex-1 w-0.5 min-h-[20px]"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

min-h-5

v-model="isCommunityFilterOpen"
class="p-6"
>
<section class="flex flex-col h-[calc(100vh-160px)]">
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think we have type of modal which does that height and makes it full screen with paddings check type attribute on modal

-->
<template>
<div
class="flex flex-col gap-5 sticky lg:top-[15rem] top-[13rem]"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

put values into tailwind config

}

.dropdown-popover.c-popover__content {
@apply z-[9];
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can just do z-index: 9
no need for tailwind if you use fixed value

Comment on lines +13 to +14
useSeoMeta({
robots: 'noindex, nofollow',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Community voice is project only so i dont think its needed to be there for repository groups and repositories. Check with jonathan if we hide it when users are filtering

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok thanks!

@gaspergrom
Copy link
Collaborator

For sentiments filter you are sending wrong values they should be capitalized like we have in the database. Check data you get returned to match the valuse

@emlimlf emlimlf requested a review from gaspergrom November 21, 2025 09:11
@emlimlf emlimlf merged commit b3968be into main Nov 27, 2025
9 checks passed
@emlimlf emlimlf deleted the feat/community-voice-ui branch November 27, 2025 09:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants