Skip to content

Conversation

@AnthonyFinney
Copy link
Contributor

@AnthonyFinney AnthonyFinney commented Oct 27, 2025

Issue Reference

[Feature] Add “About Us / Community” Page #48


What Was Changed

added a about us page and add the link to it in the nav.

Summary by CodeRabbit

  • New Features
    • Added an "About" page with hero, themed visuals, informational cards, and CTAs for GitHub and Slack.
    • Added an "About" navigation item to the desktop navbar.
    • Added a people section showcasing Founders, Community Leaders, Contributors & members with responsive person cards (avatar or placeholder, name, role, country, optional quote and social links) and improved accessibility for screen readers.

@vercel
Copy link

vercel bot commented Oct 27, 2025

@AnthonyFinney is attempting to deploy a commit to the idan lodzki's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai
Copy link

coderabbitai bot commented Oct 27, 2025

Warning

Rate limit exceeded

@AnthonyFinney has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 0 minutes and 55 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between f2f04a3 and 595d25c.

📒 Files selected for processing (2)
  • components/PersonCard.tsx (1 hunks)
  • pages/about.tsx (1 hunks)

Walkthrough

Adds an About page and a new "About" navigation link. The About page implements hero content, informational cards, contributor lists rendered via a new PersonCard component, responsive grid logic, and Slack/GitHub call-to-action sections.

Changes

Cohort / File(s) Summary
Navigation Update
components/Navbar.tsx
Adds a new "About" navigation item with href="/about" to the desktop navigation array.
About Page
pages/about.tsx
Adds AboutPage (default export) that renders: hero with image, informational cards, datasets for founders/community leaders/contributors, responsive grid logic (gridColsFor), person lists, and Slack/GitHub CTA sections.
Person Card Component
components/PersonCard.tsx
Adds PersonCard component and Contributor/PersonCardProps types to render individual contributor profiles (avatar, name, role, country, quote, social links) and exports the component as default.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (3)
pages/about.tsx (3)

23-278: Consider personalizing contributor data.

All contributors share the identical quote "Automation frees minds for creative work," and all use the white flag emoji (🏳️) instead of country flags. While functional, this reduces the authenticity and personal touch of the About page.

Consider:

  • Gathering unique quotes from contributors
  • Using actual country flag emojis (🇺🇸, 🇮🇳, 🇬🇧, etc.) or removing the field if unavailable

321-354: Consider clarifying card titles to avoid confusion.

The "Made in the Open" card (line 333) and "Built in the Open" card (line 342) have very similar titles, which may confuse users about their distinct purposes. Consider renaming one for clarity, such as "Open Source" or "Transparency" for better differentiation.


312-316: Add lazy loading to images for better performance.

The dashboard image and all contributor avatars (32+ images total) load immediately without lazy loading. This impacts initial page load performance, especially on slower connections.

Add loading="lazy" to image elements:

               <img
                 src="/images/opsimate-dashboard.png"
                 alt="OpsiMate dashboard placeholder"
                 className="w-full h-auto rounded-2xl border border-surface-200 dark:border-surface-800 shadow"
+                loading="lazy"
               />

Similarly, add loading="lazy" to all avatar images (lines 377, 428, 479).

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b4bf9b2 and 7e97b34.

📒 Files selected for processing (2)
  • components/Navbar.tsx (1 hunks)
  • pages/about.tsx (1 hunks)
🔇 Additional comments (4)
components/Navbar.tsx (1)

30-30: LGTM! Navigation item added correctly.

The About page navigation link follows the existing pattern and correctly points to the internal /about route.

pages/about.tsx (3)

1-14: LGTM! Clean imports and type definition.

The Contributor type is well-structured with appropriate optional fields.


16-21: LGTM! Responsive grid helper is well-designed.

The function correctly computes grid column classes for responsive layouts.


524-551: LGTM! CTA section is well-implemented.

The join section has proper external link security attributes and clear calls-to-action.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
pages/about.tsx (2)

16-58: Remove unused keyPrefix parameter.

The keyPrefix parameter in PersonCardProps is defined but never used within the PersonCard component. While it appears in the parent's key generation (lines 415, 425, 435), the component itself doesn't need this prop.

Apply this diff to remove the unused parameter:

 type PersonCardProps = {
   contributor: Contributor;
-  keyPrefix: string;
 };
-const PersonCard: React.FC<PersonCardProps> = ({ contributor: c, keyPrefix }) => (
+const PersonCard: React.FC<PersonCardProps> = ({ contributor: c }) => (
   <div className="rounded-2xl p-6 bg-white dark:bg-surface-900 border border-surface-200 dark:border-surface-800 flex flex-col w-full max-w-[360px]">

Then update the calls at lines 415, 425, and 435:

-<PersonCard key={`founder-${c.name}-${idx}`} contributor={c} keyPrefix="founder" />
+<PersonCard key={`founder-${c.name}-${idx}`} contributor={c} />

67-322: Consider personalizing quotes and country flags.

All founders share the identical quote "Shaping the vision for OpsiMate." and all contributors share "Automation frees minds for creative work." Additionally, all contributors use the white flag emoji (🏳️) as a placeholder for country.

While this works for an initial launch, personalizing these fields would make the page more authentic and engaging.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7e97b34 and a82373e.

📒 Files selected for processing (1)
  • pages/about.tsx (1 hunks)
🔇 Additional comments (4)
pages/about.tsx (4)

1-14: LGTM!

The imports and type definitions are clean and well-structured. The Contributor type appropriately marks optional fields.


60-65: LGTM!

The gridColsFor helper provides appropriate responsive grid classes based on the contributor count.


337-355: aria-hidden attribute properly implemented.

The previous review flagged the boolean aria-hidden attribute. This has been correctly updated to aria-hidden="true" for proper accessibility compliance.


324-476: Well-structured page implementation.

The AboutPage component is well-organized with clear sections: hero, informational cards, contributor listings, and CTA. The layout uses appropriate responsive design patterns and accessibility attributes.

Comment on lines 410 to 437
{/* Founders */}
<div className="mb-10">
<h3 className="text-xl md:text-2xl font-semibold text-surface-900 dark:text-white mb-4 text-center">Founders 👋</h3>
<div className={`grid gap-6 ${gridColsFor(founders.length)} justify-items-center`}>
{founders.map((c, idx) => (
<PersonCard key={`founder-${c.name}-${idx}`} contributor={c} keyPrefix="founder" />
))}
</div>
</div>

{/* Community Leaders */}
<div className="mb-10">
<h3 className="text-xl md:text-2xl font-semibold text-surface-900 dark:text-white mb-4 text-center">Community Leaders 🌟</h3>
<div className={`grid gap-6 ${gridColsFor(communityLeaders.length)} justify-items-center`}>
{communityLeaders.map((c, idx) => (
<PersonCard key={`communityLeaders-${c.name}-${idx}`} contributor={c} keyPrefix="founder" />
))}
</div>
</div>

{/* Contributors / Slack Members */}
<div>
<h3 className="text-xl md:text-2xl font-semibold text-surface-900 dark:text-white mb-4 text-center">Contributors & Slack Members 💬</h3>
<div className={`grid gap-6 ${gridColsFor(contributors.length)} justify-items-center`}>
{contributors.map((c, idx) => (
<PersonCard key={`contributors-${c.name}-${idx}`} contributor={c} keyPrefix="founder" />
))}
</div>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix inconsistent keyPrefix values.

Lines 425 and 435 both pass keyPrefix="founder" when they should use "communityLeader" and "contributor" respectively for semantic correctness.

Apply this diff:

             <div className={`grid gap-6 ${gridColsFor(communityLeaders.length)} justify-items-center`}>
               {communityLeaders.map((c, idx) => (
-                <PersonCard key={`communityLeaders-${c.name}-${idx}`} contributor={c} keyPrefix="founder" />
+                <PersonCard key={`communityLeaders-${c.name}-${idx}`} contributor={c} keyPrefix="communityLeader" />
               ))}
             </div>
           </div>
 
           {/* Contributors / Slack Members */}
           <div>
             <h3 className="text-xl md:text-2xl font-semibold text-surface-900 dark:text-white mb-4 text-center">Contributors & Slack Members 💬</h3>
             <div className={`grid gap-6 ${gridColsFor(contributors.length)} justify-items-center`}>
               {contributors.map((c, idx) => (
-                <PersonCard key={`contributors-${c.name}-${idx}`} contributor={c} keyPrefix="founder" />
+                <PersonCard key={`contributors-${c.name}-${idx}`} contributor={c} keyPrefix="contributor" />
               ))}
             </div>
🤖 Prompt for AI Agents
In pages/about.tsx around lines 410 to 437, the PersonCard components for
Community Leaders and Contributors are incorrectly using keyPrefix="founder";
update the Community Leaders map to use keyPrefix="communityLeader" and update
the Contributors map to use keyPrefix="contributor" (leaving the Founders
section as keyPrefix="founder") so each list passes a semantically correct
keyPrefix.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
pages/about.tsx (1)

410-437: Past review comment partially addressed.

Based on past review comments, the keyPrefix values were updated but should use singular forms for semantic correctness. Currently using "communityLeaders" (line 425) and "contributors" (line 435), but should be "communityLeader" and "contributor".

However, since the keyPrefix prop is unused (see separate comment on lines 16-19), this issue will be resolved by removing the prop entirely.

🧹 Nitpick comments (4)
pages/about.tsx (4)

33-33: Improve accessibility for country flag.

The aria-label="country" is generic and doesn't convey meaningful information about which country the flag represents. Consider either removing the aria-label entirely (letting screen readers announce the emoji) or making it more descriptive.

If you want to keep the label descriptive, you could pass country name as a separate field:

 type Contributor = {
   name: string;
   role: string;
   country?: string;
+  countryName?: string;

Then update the rendering:

-{c.country && <span className="text-lg" aria-label="country">{c.country}</span>}
+{c.country && <span className="text-lg" aria-label={c.countryName || "Country flag"}>{c.country}</span>}

67-322: Consider diversifying contributor quotes.

All founders share the identical quote "Shaping the vision for OpsiMate." and all contributors share "Automation frees minds for creative work." While this creates visual consistency, personalized quotes would make profiles feel more authentic and engaging.

Consider either:

  1. Collecting unique quotes from each contributor
  2. Making quotes optional and removing them where personalized content isn't available
  3. Keeping generic quotes only for profiles that don't have personalized content yet

131-131: Fix name capitalization for consistency.

Some contributor names have inconsistent capitalization:

  • Line 131: "AsHim Shrestha" (unusual capitalization)
  • Line 171: "Vansh nagar" (surname should be capitalized)

Apply these corrections:

 {
-  name: "AsHim Shrestha",
+  name: "Ashim Shrestha",
   role: "Contributor",
 {
-  name: "Vansh nagar",
+  name: "Vansh Nagar",
   role: "Contributor",

Also applies to: 171-171


366-398: Clarify distinction between "Made in the Open" and "Built in the Open" cards.

The info cards section includes both "Made in the Open" (line 378) and "Built in the Open" (line 387), which have very similar titles and could confuse users. The first emphasizes transparency while the second emphasizes the MIT license, but the distinction isn't immediately clear.

Consider one of these approaches:

  1. Merge the two cards into a single "Open Source & Transparent" card
  2. Rename for clarity:
-<h3 className="font-semibold text-surface-900 dark:text-white mb-2">Made in the Open</h3>
+<h3 className="font-semibold text-surface-900 dark:text-white mb-2">Transparent Development</h3>
-<h3 className="font-semibold text-surface-900 dark:text-white mb-2">Built in the Open</h3>
+<h3 className="font-semibold text-surface-900 dark:text-white mb-2">Open Source License</h3>
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a82373e and 510a175.

📒 Files selected for processing (1)
  • pages/about.tsx (1 hunks)
🔇 Additional comments (3)
pages/about.tsx (3)

60-65: LGTM!

The gridColsFor helper provides a clean, reusable way to determine responsive grid classes based on item count.


327-365: LGTM!

The hero section is well-structured with proper accessibility (decorative SVG correctly hidden with aria-hidden="true"), semantic HTML, and theme-aware styling. The gradient background effect adds visual appeal without compromising accessibility.


446-473: LGTM!

The CTA section effectively encourages community participation with clear calls-to-action for both Slack and GitHub. The external links include proper security attributes (rel="noopener noreferrer"), and the styling provides good visual hierarchy.

Comment on lines +67 to +322
const founders: Contributor[] = [
{
name: "Yuval Michaeli",
role: "Founder",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/30408029?v=4",
github: "https://github.com/yuvalmich",
quote: "Shaping the vision for OpsiMate.",
},
{
name: "Idan Lodzki",
role: "Founder",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/37178156?v=4",
github: "https://github.com/idanlodzki",
quote: "Shaping the vision for OpsiMate.",
},
{
name: "Tamir Goldberg",
role: "Founder",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/6613551?v=4",
github: "https://github.com/tamirg",
quote: "Shaping the vision for OpsiMate.",
},
{
name: "Sahar Levy",
role: "Founder",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/43012075?v=4",
github: "https://github.com/Sahar541998",
quote: "Shaping the vision for OpsiMate.",
},
];

const communityLeaders: Contributor[] = [
{
name: "Anthony Finney",
role: "Community Lead",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/67946673?v=4",
github: "https://github.com/AnthonyFinney",
quote: "Helping the community grow and thrive.",
},
];

const contributors: Contributor[] = [
{
name: "Yash Rathod",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/178126084?v=4",
github: "https://github.com/yjrathod",
quote: "Automation frees minds for creative work.",
},
{
name: "Karan Negi",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/142792314?v=4",
github: "https://github.com/KaranNegi20Feb",
quote: "Automation frees minds for creative work.",
},
{
name: "AsHim Shrestha",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/130267320?v=4",
github: "https://github.com/shresthashim",
quote: "Automation frees minds for creative work.",
},
{
name: "Manishhh",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/80617841?v=4",
github: "https://github.com/Manishhhsys",
quote: "Automation frees minds for creative work.",
},
{
name: "HarK",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/171217644?v=4",
github: "https://github.com/HarK-github",
quote: "Automation frees minds for creative work.",
},
{
name: "Oleksii",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/184424508?v=4",
github: "https://github.com/Oleksii101",
quote: "Automation frees minds for creative work.",
},
{
name: "Shreeharsh Shinde",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/132091100?v=4",
github: "https://github.com/shreeharshshinde",
quote: "Automation frees minds for creative work.",
},
{
name: "Vansh nagar",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/189650812?v=4",
github: "https://github.com/vansh-nagar",
quote: "Automation frees minds for creative work.",
},
{
name: "Varun Mantri",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/39723815?v=4",
github: "https://github.com/varunrmantri23",
quote: "Automation frees minds for creative work.",
},
{
name: "Raphael Teixeira",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/34927505?v=4",
github: "https://github.com/raphaeltx",
quote: "Automation frees minds for creative work.",
},
{
name: "Bhavya Patel",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/100468926?v=4",
github: "https://github.com/BhavyaMPatel",
quote: "Automation frees minds for creative work.",
},
{
name: "Rex divakar",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/15235122?v=4",
github: "https://github.com/rexdivakar",
quote: "Automation frees minds for creative work.",
},
{
name: "SK Akram",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/179671552?v=4",
github: "https://github.com/akramcodez",
quote: "Automation frees minds for creative work.",
},
{
name: "Nizan Naor",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/90415256?v=4",
github: "https://github.com/NizCom",
quote: "Automation frees minds for creative work.",
},
{
name: "Mariam Saeed",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/69825646?v=4",
github: "https://github.com/Mariam-Saeed",
quote: "Automation frees minds for creative work.",
},
{
name: "hparihar-07",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/73985710?v=4",
github: "https://github.com/hparihar-07",
quote: "Automation frees minds for creative work.",
},
{
name: "sccalabr",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/4111230?v=4",
github: "https://github.com/sccalabr",
quote: "Automation frees minds for creative work.",
},
{
name: "KANISHKA",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/214576158?v=4",
github: "https://github.com/kanishka1804",
quote: "Automation frees minds for creative work.",
},
{
name: "JettX",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/150858423?v=4",
github: "https://github.com/JetGera",
quote: "Automation frees minds for creative work.",
},
{
name: "Harsh Santwani",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/96873014?v=4",
github: "https://github.com/HydrallHarsh",
quote: "Automation frees minds for creative work.",
},
{
name: "Gilad Iosef",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/101499028?v=4",
github: "https://github.com/Gidiy",
quote: "Automation frees minds for creative work.",
},
{
name: "Elshad Humbatli",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/216122679?v=4",
github: "https://github.com/ElshadHu",
quote: "Automation frees minds for creative work.",
},
{
name: "Denis Oliveira",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/8192274?v=4",
github: "https://github.com/denisolvr",
quote: "Automation frees minds for creative work.",
},
{
name: "Arghya Das",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/95538110?v=4",
github: "https://github.com/alfaarghya",
quote: "Automation frees minds for creative work.",
},
{
name: "Aman Gupta",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/100619913?v=4",
github: "https://github.com/Nexvyn",
quote: "Automation frees minds for creative work.",
},
{
name: "Aman Agrawal",
role: "Contributor",
country: "🏳️",
avatarUrl: "https://avatars.githubusercontent.com/u/119893462?v=4",
github: "https://github.com/Aman-agraw-35",
quote: "Automation frees minds for creative work.",
},
];
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Replace or remove the white flag emoji placeholder.

Every contributor entry uses the white flag emoji (🏳️), which typically represents surrender, truce, or neutrality—not a country. This appears to be a placeholder that should be replaced with actual country flag emojis (🇺🇸, 🇮🇳, 🇮🇱, etc.) or removed entirely if country information is not yet available.

Consider one of these approaches:

  1. Remove the country field entirely until actual data is available:
 {
   name: "Yuval Michaeli",
   role: "Founder",
-  country: "🏳️",
   avatarUrl: "https://avatars.githubusercontent.com/u/30408029?v=4",
   github: "https://github.com/yuvalmich",
   quote: "Shaping the vision for OpsiMate.",
 },
  1. Replace with actual country flags (requires researching each contributor's location):
 {
   name: "Yuval Michaeli",
   role: "Founder",
-  country: "🏳️",
+  country: "🇮🇱",
   avatarUrl: "https://avatars.githubusercontent.com/u/30408029?v=4",

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
pages/about.tsx lines 67-322: the contributor objects use a white flag emoji as
a placeholder for country; replace this placeholder by either removing the
country property from each contributor and updating the UI to conditionally
render country only when present, or populate each contributor with the correct
country flag emoji (or an empty string/null) and ensure the component checks for
a truthy country before rendering; update the Contributor type if necessary to
make country optional and change the rendering code to avoid showing the
placeholder.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (1)
pages/about.tsx (1)

67-322: Address the white flag emoji placeholder.

This issue was previously flagged: All contributor entries still use the white flag emoji (🏳️) as a placeholder for the country field. Since this was already raised in a previous review, please address it by either removing the country field entirely where data is unavailable, or replacing placeholders with actual country flag emojis.

🧹 Nitpick comments (4)
pages/about.tsx (4)

25-25: Consider using Next.js Image component for optimization.

The native <img> tag is used for avatars. Next.js provides an optimized Image component that automatically handles lazy loading, responsive images, and image optimization.

Apply this diff to use the Next.js Image component:

+import Image from "next/image";

Then update the avatar rendering:

-          <img src={c.avatarUrl} alt={`${c.name} avatar`} className="h-full w-full object-cover" loading="lazy" />
+          <Image src={c.avatarUrl} alt={`${c.name} avatar`} className="h-full w-full object-cover" width={56} height={56} />

67-322: Remove or diversify repetitive quotes.

The current data has significant quote repetition that diminishes their value:

  • All 4 founders share: "Shaping the vision for OpsiMate."
  • All 26 contributors share: "Automation frees minds for creative work."

Generic, repeated quotes add little value and make profiles feel template-driven rather than personal.

Consider one of these approaches:

  1. Remove quotes entirely until unique ones are collected:
 {
   name: "Yuval Michaeli",
   role: "Founder",
   country: "🏳️",
   avatarUrl: "https://avatars.githubusercontent.com/u/30408029?v=4",
   github: "https://github.com/yuvalmich",
-  quote: "Shaping the vision for OpsiMate.",
 },
  1. Collect unique quotes from each person to make profiles more personal and meaningful.

356-361: Consider using Next.js Image component for the dashboard image.

Similar to the avatar images, the dashboard image would benefit from Next.js's automatic optimization, lazy loading, and responsive image handling.

Apply this diff:

-              <img
-                src="/images/opsimate-dashboard.png"
-                alt="OpsiMate dashboard placeholder"
-                className="w-full h-auto rounded-2xl border border-surface-200 dark:border-surface-800 shadow"
-                loading="lazy"
-              />
+              <Image
+                src="/images/opsimate-dashboard.png"
+                alt="OpsiMate dashboard placeholder"
+                className="w-full h-auto rounded-2xl border border-surface-200 dark:border-surface-800 shadow"
+                width={896}
+                height={504}
+                priority
+              />

Note: Use priority for above-the-fold images to prevent layout shift.


425-425: Minor formatting: extra space before closing tag.

Line 425 has an extra space before the /> closing tag, which is inconsistent with the other PersonCard usages on lines 415 and 435.

Apply this diff for consistency:

-                <PersonCard key={`communityLeaders-${c.name}-${idx}`} contributor={c}  />
+                <PersonCard key={`communityLeaders-${c.name}-${idx}`} contributor={c} />
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 510a175 and 0dd10c2.

📒 Files selected for processing (1)
  • pages/about.tsx (1 hunks)
🔇 Additional comments (1)
pages/about.tsx (1)

446-473: LGTM: Well-structured CTA section.

The join section is inviting and provides clear paths for community engagement. The punctuation fix from the previous review has been applied, and the external links properly use target="_blank" with rel="noopener noreferrer" for security.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
pages/about.tsx (1)

24-279: Replace white flag emoji placeholders with actual country data or remove the field.

As flagged in previous review comments, all contributor entries use the white flag emoji (🏳️) for the country field. This emoji typically represents surrender, truce, or neutrality—not a country or nationality. This appears to be placeholder data that should be replaced with actual country flag emojis or removed entirely.

Recommended approach: Remove the country field from all contributor objects until actual data is available. The PersonCard component already handles optional country rendering, so this won't break functionality:

 {
   name: "Yuval Michaeli",
   role: "Founder",
-  country: "🏳️",
   avatarUrl: "https://avatars.githubusercontent.com/u/30408029?v=4",
   github: "https://github.com/yuvalmich",
   quote: "Shaping the vision for OpsiMate.",
 },

Apply this change to all 30 contributor entries (founders, communityLeaders, and contributors arrays).

🧹 Nitpick comments (3)
pages/about.tsx (3)

70-279: Consider diversifying or removing duplicate contributor quotes.

Most contributors (lines 77, 85, 93, 101, 109, 117, 125, 133, 141, 149, 157, 165, 173, 181, 189, 197, 205, 213, 221, 229, 237, 245, 253, 261, 269, 277) share the identical quote: "Automation frees minds for creative work." Similarly, all founders share "Shaping the vision for OpsiMate." While thematic consistency can be valuable, identical quotes reduce the personal touch of the About page.

Consider one of these approaches:

  1. Remove quotes temporarily until unique contributions can be collected:

     {
       name: "Yash Rathod",
       role: "Contributor",
       avatarUrl: "https://avatars.githubusercontent.com/u/178126084?v=4",
       github: "https://github.com/yjrathod",
    -  quote: "Automation frees minds for creative work.",
     },
  2. Gather unique quotes from each contributor about their motivation or experience with OpsiMate.

  3. Make quotes truly optional and only include them when you have personalized content.


24-279: Consider moving contributor data to a separate file.

The contributor data spans 255+ lines in the page component. For better maintainability and potential reusability, consider extracting this data into a dedicated file like data/contributors.ts or constants/contributors.ts.

Create data/contributors.ts:

import { Contributor } from "@/components/PersonCard";

export const founders: Contributor[] = [
  {
    name: "Yuval Michaeli",
    role: "Founder",
    avatarUrl: "https://avatars.githubusercontent.com/u/30408029?v=4",
    github: "https://github.com/yuvalmich",
    quote: "Shaping the vision for OpsiMate.",
  },
  // ... rest of founders
];

export const communityLeaders: Contributor[] = [
  // ...
];

export const contributors: Contributor[] = [
  // ...
];

Then in pages/about.tsx:

import { founders, communityLeaders, contributors } from "@/data/contributors";

This separation improves:

  • Code organization and readability
  • Testability of the data
  • Potential for future data management (e.g., fetching from an API or CMS)

382-382: Remove extra whitespace.

Line 382 has extra whitespace before the closing />.

-               <PersonCard key={`communityLeaders-${c.name}-${idx}`} contributor={c}  />
+               <PersonCard key={`communityLeaders-${c.name}-${idx}`} contributor={c} />
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0dd10c2 and f2f04a3.

📒 Files selected for processing (2)
  • components/PersonCard.tsx (1 hunks)
  • pages/about.tsx (1 hunks)
🔇 Additional comments (6)
components/PersonCard.tsx (1)

17-55: LGTM! Well-structured component with good accessibility practices.

The PersonCard component is well-implemented with:

  • Proper conditional rendering for optional fields
  • Lazy loading for images
  • Accessible attributes (alt, aria-label, aria-hidden)
  • Secure external links (rel="noopener noreferrer")
  • Responsive and theme-aware styling
pages/about.tsx (5)

17-22: LGTM! Clean responsive grid helper.

The gridColsFor function provides a sensible responsive grid layout based on item count.


281-320: LGTM! Well-structured hero section.

The hero section provides a clear introduction to OpsiMate with:

  • Descriptive heading and copy
  • Decorative SVG gradient (properly marked with aria-hidden="true")
  • Dashboard preview image with appropriate lazy loading
  • Responsive layout and theme-aware styling

323-357: LGTM! Clear informational cards.

The informational card section effectively communicates OpsiMate's values and provides actionable links. Good use of responsive grid layout and consistent styling.


359-401: LGTM! Well-organized contributor sections.

The contributor display sections are well-structured with:

  • Clear headings for each group
  • Responsive grid layout via gridColsFor
  • Proper React keys
  • Helpful call-to-action for new contributors

403-430: LGTM! Effective call-to-action section.

The final CTA section successfully invites community participation with clear messaging and prominent action buttons for Slack and GitHub.

@idanlodzki idanlodzki linked an issue Oct 27, 2025 that may be closed by this pull request
@idanlodzki idanlodzki merged commit 08e9ad0 into OpsiMate:main Oct 30, 2025
1 of 2 checks passed
@AnthonyFinney AnthonyFinney deleted the feat/about_us branch November 11, 2025 00:27
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.

[Feature] Add “About Us / Community” Page

2 participants