From d87abe8efc6e3fa5328fb355459f091dcd3a6912 Mon Sep 17 00:00:00 2001 From: MP Date: Wed, 21 Jan 2026 19:47:42 -0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20redesign=20Slack=20page=20Featured?= =?UTF-8?q?=20Workflow=20section=20with=20YouTube=E2=80=A6=20(#10880)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Matt Rubens Co-authored-by: Roo Code --- apps/web-roo-code/src/app/slack/page.tsx | 151 ++--- .../components/slack/slack-thread-demo.tsx | 548 ++++++++++++++++++ .../__tests__/ShadowCheckpointService.spec.ts | 2 +- 3 files changed, 633 insertions(+), 68 deletions(-) create mode 100644 apps/web-roo-code/src/components/slack/slack-thread-demo.tsx diff --git a/apps/web-roo-code/src/app/slack/page.tsx b/apps/web-roo-code/src/app/slack/page.tsx index 60aad468ab..c1fb39cb3e 100644 --- a/apps/web-roo-code/src/app/slack/page.tsx +++ b/apps/web-roo-code/src/app/slack/page.tsx @@ -5,7 +5,6 @@ import { GitBranch, GraduationCap, Link2, - LucideIcon, MessageSquare, Settings, Shield, @@ -13,13 +12,15 @@ import { Users, Zap, } from "lucide-react" +import type { LucideIcon } from "lucide-react" import type { Metadata } from "next" -import { Button } from "@/components/ui" import { AnimatedBackground } from "@/components/homepage" +import { SlackThreadDemo } from "@/components/slack/slack-thread-demo" +import { Button } from "@/components/ui" +import { EXTERNAL_LINKS } from "@/lib/constants" import { SEO } from "@/lib/seo" import { ogImageUrl } from "@/lib/og" -import { EXTERNAL_LINKS } from "@/lib/constants" const TITLE = "Roo Code for Slack" const DESCRIPTION = @@ -69,7 +70,7 @@ export const metadata: Metadata = { // Invalidate cache when a request comes in, at most once every hour. export const revalidate = 3600 -interface ValueProp { +type ValueProp = { icon: LucideIcon title: string description: string @@ -112,11 +113,10 @@ const VALUE_PROPS: ValueProp[] = [ }, ] -interface WorkflowStep { +type WorkflowStep = { step: number title: string description: string - code?: string } const WORKFLOW_STEPS: WorkflowStep[] = [ @@ -124,7 +124,6 @@ const WORKFLOW_STEPS: WorkflowStep[] = [ step: 1, title: "Turn the discussion into a plan", description: "Your team discusses a feature. When it gets complex, summon the Planner agent.", - code: "@Roomote plan out a dark mode feature based on our discussion. Include the toggle, persistence, and system preference detection.", }, { step: 2, @@ -136,7 +135,6 @@ const WORKFLOW_STEPS: WorkflowStep[] = [ step: 3, title: "Build the plan", description: "Once the plan looks good, hand it off to the Coder agent to implement.", - code: "@Roomote implement this plan in the frontend-web repo.", }, { step: 4, @@ -145,7 +143,7 @@ const WORKFLOW_STEPS: WorkflowStep[] = [ }, ] -interface OnboardingStep { +type OnboardingStep = { icon: LucideIcon title: string description: string @@ -182,48 +180,54 @@ const ONBOARDING_STEPS: OnboardingStep[] = [ }, ] -export default function SlackPage() { +export default function SlackPage(): JSX.Element { return ( <> {/* Hero Section */}
-
-
- - Powered by Roo Code Cloud +
+
+
+ + Powered by Roo Code Cloud +
+

+ @Roomote: Your AI Team in Slack +

+

+ Mention @Roomote in any channel to explain code, plan features, or ship a PR, all + without leaving the conversation. +

+
-

- @Roomote: Your AI Team in Slack -

-

- Mention @Roomote in any channel to explain code, plan features, or ship a PR, all without - leaving the conversation. -

-
@@ -264,13 +268,13 @@ export default function SlackPage() {
{/* Featured Workflow Section */} -
+
-
+
Featured Workflow @@ -283,29 +287,42 @@ export default function SlackPage() {

-
- {/* Workflow Steps */} -
- {WORKFLOW_STEPS.map((step) => ( -
-
-
- {step.step} +
+
+ {/* YouTube Video Embed */} +
+