Commit graph

31 commits

Author SHA1 Message Date
roomote[bot]
dc243e4cf9
feat(web): add blog section with initial posts (#11127)
* feat(web): add blog section with 4 initial posts

Implements MKT-66 through MKT-74:

Content Layer (MKT-67):
- Markdown files in src/content/blog with Zod-validated frontmatter
- Pacific Time scheduling evaluated at request-time (no deploy needed)
- gray-matter for parsing, react-markdown + remark-gfm for rendering

Blog Pages (MKT-68, MKT-69):
- Index page at /blog with dynamic SSR
- Post page at /blog/[slug] with dynamic SSR
- Breadcrumb navigation and prev/next post navigation

SEO (MKT-70):
- Full OpenGraph and Twitter card metadata
- Schema.org JSON-LD (Article, BreadcrumbList, CollectionPage)
- Canonical URLs pointing to roocode.com/blog

Analytics (MKT-74):
- PostHog blog_post_viewed and blog_index_viewed events
- Referrer tracking for attribution

Navigation (MKT-72):
- Updated nav-bar and footer to link to internal /blog
- Blog link in Resources dropdown

Sitemap (MKT-71):
- Dynamic blog paths with PT scheduling check

Initial Posts:
- PRDs Are Becoming Artifacts of the Past (Jan 12)
- Code Review Got Faster, Not Easier (Jan 19)
- Vibe Coders Build and Rebuild (Jan 26)
- Async Agents Change the Speed vs Quality Calculus (Feb 2)

* fix(test): update HistoryPreview tests to match refactored component

The HistoryPreview component was refactored to use useGroupedTasks and
TaskGroupItem instead of rendering TaskItem directly. This updates the
test file to properly mock the new dependencies:
- Mock useGroupedTasks hook to provide grouped task data
- Mock TaskGroupItem instead of TaskItem
- Update assertions to test for task groups instead of individual tasks

* feat(blog): add Vercel-inspired patterns and Tone of Voice alignment

- Add reading time display to blog posts
- Create BlogPostCTA component with 4 variants (default, extension, cloud, enterprise)
- Add zebra striping to tables in blog posts
- Add CTA to blog landing and paginated pages
- Remove 'Posted' prefix from dates
- Update blog description: 'How teams use agents to iterate, review, and ship PRs with proof'
- Add BlogPostList and BlogPagination components
- Add 100+ new blog posts from content pipeline

* feat(blog): add source badges for podcast content (Office Hours, After Hours, Roo Cast)

- Add BlogSource type to types.ts
- Export BlogSource from blog index
- Add SourceBadge component to BlogPostList with colored badges
- Each podcast has distinct color: blue (Office Hours), purple (After Hours), emerald (Roo Cast)

* feat(blog): add source field to all blog posts (Roo Cast, Office Hours, After Hours)

- Add add-blog-sources.ts script to build title→source mapping
- Updated 122 blog posts with correct podcast sources
- Sources: Roo Cast (52), Office Hours (62), After Hours (8)

* feat(blog): add source badges with consistent styling

- Add source field to Zod validation schema
- Source badges use same styling as tag badges (rounded, greyscale)
- Badges display on /blog landing page for Office Hours, After Hours, Roo Cast

* feat(blog): improve schema.org structured data for SEO

- Change @type from Article to BlogPosting (more specific)
- Add image property using OG image URL
- Add wordCount for AEO optimization

* feat(blog): timestamped YouTube quotes + attribution polish

* chore(blog): update 'Series A team' to 'Series A - C team' and fix 'Tovin' to 'Tovan'

- Changed 22 instances of 'Series A team' to 'Series A - C team' across 20 blog posts
- Changed 12 instances of 'Tovin' to 'Tovan' across 4 blog posts

This broadens the messaging to better represent teams that Roo Code serves (Series A through C).

* ci: retry CI after timeout

* blog: featured posts + copy edits

* blog: remove draft posts from web content

* fix(blog): loop HTML tag stripping to prevent incomplete sanitization

The single-pass .replace(/<[^>]+>/g, "") in calculateReadingTime() was
flagged by CodeQL as vulnerable to incomplete multi-character sanitization.
Input like "<scr<script>ipt>" would still contain "<script" after one pass.

Added a stripHtmlTags() helper that loops the replacement until stable,
plus a final pass to remove any remaining angle brackets.

* fix(blog): replace iterative HTML tag stripping with single-pass angle bracket removal

The CodeQL scanner flagged the iterative stripHtmlTags function for
incomplete multi-character sanitization. The regex /<[^>]+>/g only
matches complete tags, so partial fragments like <script (without a
closing >) could survive intermediate loop iterations.

Since this function is only used for word counting in
calculateReadingTime, replace the multi-step approach with a simple
single-pass removal of all < and > characters. This eliminates the
incomplete sanitization pattern entirely.

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Michael Preuss <michael@roocode.com>
2026-02-16 20:37:54 -05:00
MP
9ab279ae42
Pr 10853 (#10854)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-21 00:15:17 -05:00
roomote[bot]
a148b0b7f3
feat: add Cloud Team page with comprehensive team features (#10267)
* feat: add Cloud Team page with features and pricing integration

* Copy tweaks

* Visual tweaks

* Content adjustments

* Update apps/web-roo-code/src/app/cloud/team/page.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-12-22 16:52:00 +00:00
Matt Rubens
d065b881e3
Fix the download count on the homepage (#9807) 2025-12-03 23:46:00 -05:00
Bruno Bergher
9975a41be4
web: Homepage changes (#9675)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-12-02 10:10:45 -05:00
roomote[bot]
c688a6466e
fix: display install count in millions instead of thousands (#9677)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-28 20:36:34 -05:00
roomote[bot]
aa2a17fce3
feat: update cloud agent CTA to point to setup page (#9338)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-18 01:29:32 -05:00
Bruno Bergher
7a06902dd8
web: Roo Code Cloud Provider pricing page and changes elsewhere (#9195)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-11-16 00:25:37 -05:00
roomote[bot]
62636add14
feat: add Google Tag Manager to marketing website (#9148)
* feat: add Google Tag Manager to marketing website using Next.js Script component

* refactor: remove Google Ads implementation in favor of Tag Manager

* fix: wrap GTM script in consent-checking client component for GDPR compliance

---------

Co-authored-by: Roo Code <roomote@roocode.com>
2025-11-10 01:51:53 -08:00
Bruno Bergher
eb68c65296
web: Attempt at compliant, cookie-less anonymous tracking for the website (#8957) 2025-10-31 15:19:35 -04:00
roomote[bot]
8870348bd3
feat: add Google Ads conversion tracking to reviewer page (#8831)
* feat: add Google Ads conversion tracking to reviewer page

* fix: add asChild prop to first button to prevent invalid HTML nesting

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
2025-10-25 21:23:05 -07:00
roomote[bot]
8187a8e189
fix: update X/Twitter username from roo_code to roocode (#8780)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-22 16:27:08 -04:00
Bruno Bergher
a97cda1da0
web: Updates CTA link in /reviewer to send people to /cloud-agents/welcome (#8774) 2025-10-22 11:02:55 -04:00
Bruno Bergher
c74e42bde4
web: Dynamic OpenGraph images (#8773)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-10-22 10:04:28 -04:00
Bruno Bergher
f3a505fd36
web: Landing page for the reviewerFirst pass (#8740)
* First pass

* SEO

* Update apps/web-roo-code/src/app/reviewer/page.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-10-20 23:24:17 -04:00
Matt Rubens
f8ed7a7931
Add structured data to the homepage (#8427)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
2025-09-30 23:53:20 -04:00
Bruno Bergher
7fd01ab2a0
wip: Website Improvements (#8303)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-25 16:31:04 -04:00
Bruno Bergher
205f3e4242
web: Opengraph image (#8285)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-24 09:18:55 -04:00
roomote[bot]
2819120216
feat: add GDPR-compliant cookie consent banner (#8022)
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <me@brunobergher.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-09-16 14:34:19 -04:00
Chris Estreich
247da38b02
Add model info to eval runs table (#7749) 2025-09-06 22:10:08 -07:00
roomote[bot]
9378a4e2ad
feat: show dash instead of zero for missing data on evals page (#7748)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-06 17:15:10 -04:00
roomote[bot]
079b37a85d
feat: replace cloud waitlist ad with direct Cloud link in navigation (#7742)
Co-authored-by: Roo Code <roomote@roocode.com>
2025-09-06 13:05:01 -04:00
Daniel
8e666078e4
feat: update OpenRouter API to support input/output modalities and filter image generation models (#7492) 2025-08-28 10:19:46 -04:00
Dicha Zelianivan Arkana
62d023d016
feat(web): fill missing SEO-related values (#7096)
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-08-14 12:51:13 -04:00
thill2323
c6e7ac41fc
Phase 1 website updates (#6085)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-07-31 19:08:06 -04:00
Murilo Pires
c47de36b05
Fix/website logo theme persistence (#6040)
* feat: add Issue Fixer Orchestrator mode

* fix: persist logo theme state on page navigation and refresh

- Add mounted state to prevent hydration mismatch
- Use theme as fallback when resolvedTheme is not available
- Ensure logo matches the persisted theme on initial page load

Fixes issue where logo would revert to dark version after page refresh
even when light theme was selected
2025-07-23 16:41:02 -04:00
thill2323
f6906f6e87
Added YouTube to website footer (#5929) 2025-07-18 20:02:35 -04:00
dleffel
a57b0b6dc4
feat: integrate security one-pager into website (#5234)
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-07-02 16:39:02 -04:00
Chris Estreich
ab01fb3bdb
Move to Postgres for evals on roocode.com (#4520) 2025-06-11 14:17:53 -07:00
Chris Estreich
857f80494e
New social icons (#4305)
* New social icons

* Update GitHub links
2025-06-03 16:13:37 -07:00
Chris Estreich
01eef2be99
Bring back #4128 (#4292) 2025-06-03 14:03:19 -07:00