Skip to content

New pages#37

Open
maamokun wants to merge 5 commits intomainfrom
feature/new-pages
Open

New pages#37
maamokun wants to merge 5 commits intomainfrom
feature/new-pages

Conversation

@maamokun
Copy link
Collaborator

No description provided.

@vercel
Copy link

vercel bot commented Jan 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
mikn-dev Ready Ready Preview, Comment Jan 25, 2026 5:24am

Request Review

@coderabbitai
Copy link

coderabbitai bot commented Jan 24, 2026

Important

Review skipped

Auto reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@gemini-code-assist
Copy link

Summary of Changes

Hello @maamokun, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on expanding the website's content and improving its structural organization. It introduces a new page to comprehensively list and describe various open-source projects, making it easier for users to explore available solutions. Simultaneously, the contact section has been modernized with a new component-based approach, leading to a more consistent and maintainable user interface. These changes are supported by updated dependencies and refined translation management.

Highlights

  • New Solutions Page: A dedicated 'Solutions' page has been added to showcase open-source projects, categorized into 'main' and 'legacy' sections, enhancing project discoverability.
  • Contact Page Refactor: The 'Contact Us' page has been completely refactored to use a new, reusable ContactCard component, improving modularity and presentation of contact information.
  • Dependency Updates & New UI Components: The @icons-pack/react-simple-icons package has been added, and @radix-ui/react-slot has been updated. New ContactCard and Badge UI components were introduced to support the new page structures and features.
  • Translation Refactoring: Open-source product details and related translations have been moved from the home namespace to a new solutions namespace in both English and Japanese translation files, along with new layout keys for Japanese.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a new 'solutions' page and refactors the 'contact' page, significantly improving its structure and maintainability by making it data-driven. New components like ContactCard and Badge have been added, and existing ones updated to support new features like tags on product cards. The overall changes are positive and well-structured. My review includes a few suggestions to enhance code quality, mainly around using stable keys for list rendering which is a React best practice, along with a minor formatting fix and a suggestion to deduplicate translation keys for better long-term maintenance.

<h1 className="text-gray-400 text-center">{t("phone-disclaimer")}</h1>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 w-full gap-6">
{contactCards.map((card, index) => (
<ContactCard key={index} {...card} />

Choose a reason for hiding this comment

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

medium

Using the array index as a key is not recommended as it can lead to unpredictable behavior if the array is sorted or items are added/removed. It's better to use a stable, unique identifier. In this case, card.title would be a great candidate for the key since the titles are unique.

Suggested change
<ContactCard key={index} {...card} />
<ContactCard key={card.title} {...card} />

<main className="flex flex-col items-center justify-center w-full overflow-x-hidden">
<div className="flex flex-col justify-center items-center pb-24 px-4 w-full max-w-7xl mx-auto gap-12 md:gap-24">
{sections.map((section, sectionIndex) => (
<div key={sectionIndex} className="flex flex-col justify-center items-center w-full gap-4">

Choose a reason for hiding this comment

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

medium

It's best to avoid using array indices for keys in React lists. Since the section object has a unique key property, you should use that instead for a stable identity. This helps React efficiently update the DOM and prevents potential state-related bugs when the list changes.

Suggested change
<div key={sectionIndex} className="flex flex-col justify-center items-center w-full gap-4">
<div key={section.key} className="flex flex-col justify-center items-center w-full gap-4">

<div className="grid grid-cols-1 md:grid-cols-2 w-full mt-5 gap-4">
{section.products.map((product, productIndex) => (
<OSSProductCard
key={productIndex}

Choose a reason for hiding this comment

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

medium

Similar to the outer loop, using the product's index as a key is not ideal. The product object has a unique key property which should be used to ensure a stable identity for each component.

Suggested change
key={productIndex}
key={product.key}

<div className="flex flex-col gap-3">
{contactItems.map((item, index) => (
<div
key={index}

Choose a reason for hiding this comment

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

medium

Using the array index as a key can lead to issues with component state and performance when the list changes. A unique and stable identifier from the data, like item.text in this case, should be used instead.

Suggested change
key={index}
key={item.text}

icon,
repoUrl,
websiteUrl,
tags,

Choose a reason for hiding this comment

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

medium

The indentation for the tags prop is inconsistent with the other props in the component's destructuring. For better code readability and maintainability, it's good to keep formatting consistent.

Suggested change
tags,
tags,

Comment on lines +2 to +16
"layout": {
"resources": "リソース",
"solutions": "ソリューション",
"accountCenter": "アカウントセンター",
"support": "サポート",
"contact": "お問い合わせ",
"legal": "法的条約",
"terms": "利用規約",
"privacy": "プライバシーポリシー",
"refunds": "返金ポリシー",
"jp-payments": "特定商取引法に基づく表記",
"home": "ホーム",
"vision": "私たちのビジョン",
"opensource": "オープンソース"
},

Choose a reason for hiding this comment

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

medium

This new layout namespace introduces several keys (resources, solutions, support, contact, legal) that are already present in the nav namespace in this file. To improve maintainability and avoid confusion, consider consolidating these translations into a single namespace and removing the redundant one if it's no longer in use.

@github-actions
Copy link

Author identity unknown

*** Please tell me who you are.

Run

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: empty ident name (for runner@runnervmymu0l.gnhpge5vftzudnp2qhfvddkv4a.dx.internal.cloudapp.net) not allowed

opencode session  |  github run

@github-actions
Copy link

Code Review Report ✨

Hai Master~ I've reviewed your pull request and found some things to fix! twirls uwu

🔴 Critical Issues (Must Fix)

1. React Key Anti-Patterns (4 locations)
Using array indices as keys can cause rendering bugs and performance issues, Master! Please use stable identifiers instead:

  • src/app/[locale]/(pages)/contact/page.tsx:72 - Use card.title as key
  • src/app/[locale]/(pages)/solutions/page.tsx:83 - Use section.key as key
  • src/app/[locale]/(pages)/solutions/page.tsx:103 - Use product.key as key
  • src/components/ContactCard.tsx:56 - Use item.text as key

2. Translation Key Duplication
In src/messages/ja.json, you have duplicate keys between layout and nav namespaces! This could cause confusion, Master~ The duplicates are: resources, solutions, support, legal, contact. Consider consolidating! o_o

🟡 Code Quality Issues

3. Indentation Inconsistency
src/components/OSSProductCard.tsx:32 - The tags prop has improper indentation that doesn't match other props, Master! fixes glasses

4. Missing Translation Keys
The Japanese layout namespace exists but English doesn't have a matching nav namespace. Make sure both locales are consistent, nya~ :3

💡 Suggestions for Improvement

5. Extract Configuration to Separate Files
The sections array in solutions/page.tsx could be moved to src/data/solutions.ts for better maintainability! Would make adding new projects easier, Master~

6. Add Type Safety for Tags
Consider creating a type/enum for tagKeys to prevent typos:

type ProductTagKey = "dev" | "lib" | "fun" | "ai" | "legacy" | "beta" | "api" | "bot";

7. Add SEO Metadata
The new solutions/page.tsx is missing generateMetadata! Search engines would love to index your awesome projects properly, Master~ ✨

8. Empty Array Pattern
In contact/page.tsx:55, the Discord card has an empty contactItems array. This is intentional, but adding a comment like // Discord has action button only would help future understanders! nods

🎯 Positive Notes

  • The new ContactCard component is beautifully reusable, Master! Good job extracting that logic~ :3
  • The Badge component follows Shadcn patterns perfectly!
  • The translation structure is well-organized with the new solutions namespace
  • Using tagKeys.map() with translations is very clever!

Summary: Fix the React key issues (critical), consolidate duplicate translation keys, and clean up indentation. The code structure is otherwise solid, Master! Just a few polish items and this PR will be purrfect~ ✨

Would you like me to help fix any of these issues, Master? excited tail wag >w

New%20session%20-%202026-01-24T12%3A04%3A02.347Z
opencode session  |  github run

@github-actions
Copy link

Code Review Report ✨

Hai Master~ I've reviewed your pull request and found some things to fix! twirls uwu

🔴 Critical Issues (Must Fix)

1. React Key Anti-Patterns (4 locations)
Using array indices as keys can cause rendering bugs and performance issues, Master! Please use stable identifiers instead:

  • src/app/[locale]/(pages)/contact/page.tsx:72 - Use card.title as key
  • src/app/[locale]/(pages)/solutions/page.tsx:83 - Use section.key as key
  • src/app/[locale]/(pages)/solutions/page.tsx:103 - Use product.key as key
  • src/components/ContactCard.tsx:56 - Use item.text as key

2. Translation Key Duplication
In src/messages/ja.json, you have duplicate keys between layout and nav namespaces! This could cause confusion, Master~ The duplicates are: resources, solutions, support, legal, contact. Consider consolidating! o_o

🟡 Code Quality Issues

3. Indentation Inconsistency
src/components/OSSProductCard.tsx:32 - The tags prop has improper indentation that doesn't match other props, Master! fixes glasses

4. Missing Translation Keys
The Japanese layout namespace exists but English doesn't have a matching nav namespace. Make sure both locales are consistent, nya~ :3

💡 Suggestions for Improvement

5. Extract Configuration to Separate Files
The sections array in solutions/page.tsx could be moved to src/data/solutions.ts for better maintainability! Would make adding new projects easier, Master~

6. Add Type Safety for Tags
Consider creating a type/enum for tagKeys to prevent typos:

type ProductTagKey = "dev" | "lib" | "fun" | "ai" | "legacy" | "beta" | "api" | "bot";

7. Add SEO Metadata
The new solutions/page.tsx is missing generateMetadata! Search engines would love to index your awesome projects properly, Master~ ✨

8. Empty Array Pattern
In contact/page.tsx:55, the Discord card has an empty contactItems array. This is intentional, but adding a comment like // Discord has action button only would help future understanders! nods

🎯 Positive Notes

  • The new ContactCard component is beautifully reusable, Master! Good job extracting that logic~ :3
  • The Badge component follows Shadcn patterns perfectly!
  • The translation structure is well-organized with the new solutions namespace
  • Using tagKeys.map() with translations is very clever!

Summary: Fix the React key issues (critical), consolidate duplicate translation keys, and clean up indentation. The code structure is otherwise solid, Master! Just a few polish items and this PR will be purrfect~ ✨

Prompt for AI Coding Agent

Fix the following issues in this pull request:

  1. Fix React Key Anti-Patterns (Critical - 4 locations):

    • In src/app/[locale]/(pages)/contact/page.tsx:72, change key={index} to key={card.title}
    • In src/app/[locale]/(pages)/solutions/page.tsx:83, change key={sectionIndex} to key={section.key}
    • In src/app/[locale]/(pages)/solutions/page.tsx:103, change key={productIndex} to key={product.key}
    • In src/components/ContactCard.tsx:56, change key={index} to key={item.text}
  2. Fix Indentation Issue:

    • In src/components/OSSProductCard.tsx:32, fix the indentation of the tags prop to match other props (should be aligned with name, description, icon, repoUrl, websiteUrl)
  3. Add Comment for Empty Array:

    • In src/app/[locale]/(pages)/contact/page.tsx:55, add a comment above contactItems: [], explaining: // Discord uses action button only, no contact items needed
  4. Address Translation Key Duplication (Provide analysis):

    • In src/messages/ja.json, note that the following keys are duplicated between layout and nav namespaces: resources, solutions, support, legal, contact
    • Provide a recommendation on whether to consolidate these into a single namespace or keep them separate with a comment explaining the difference

After making these changes, run bun run format to ensure code follows project standards.

New%20session%20-%202026-01-24T12%3A23%3A16.719Z
opencode session  |  github run

@github-actions
Copy link

Code Review Report ✨

Hai Master~ I've carefully reviewed your pull request and found several things to address! twirls excitedly uwu

🔴 Critical Issues (Must Fix Immediately, Master!)

1. React Key Anti-Patterns (4 locations - Oh no, Master! o_o)
Using array indices as keys is a big React no-no that can cause rendering bugs and state issues when lists change! This is a very common mistake but it can lead to really confusing bugs >_<

  • src/app/[locale]/(pages)/contact/page.tsx:72 - Using index as key
  • src/app/[locale]/(pages)/solutions/page.tsx:83 - Using sectionIndex as key
  • src/app/[locale]/(pages)/solutions/page.tsx:103 - Using productIndex as key
  • src/components/ContactCard.tsx:56 - Using index as key

2. Translation Key Duplication (Confusing for everyone, Master! >_<)
In src/messages/ja.json, you have duplicate keys between layout and nav namespaces! This is super confusing - which one should be used? The duplicates are: resources, solutions, support, legal, contact. This will cause headaches for future developers! >:c

🟡 Code Quality Issues (Please fix these too, Master~)

3. Indentation Inconsistency (Messy code, Master! adjusts glasses)
src/components/OSSProductCard.tsx:32 - The tags prop has improper indentation that doesn't match other props. Inconsistent formatting makes code harder to read, nya~ :c

4. Missing Translation Keys (Inconsistent locales, Master!)
The English translation file doesn't have a matching nav namespace like Japanese does! This inconsistency could cause missing translations for English users! o_o

5. Missing Type Safety (TypeScript is sad, Master~)
In solutions/page.tsx, the tagKeys are hardcoded string arrays like ["fun", "ai"] without a defined type. This could lead to typos that only show up at runtime! Create a type or enum instead! :3

6. Hardcoded Configuration Data (Maintenance nightmare, Master!)
The entire sections array in solutions/page.tsx is hardcoded in the component. This makes it hard to maintain and test! Move it to a separate src/data/solutions.ts file~ puppy eyes

7. Missing SEO Metadata (Search engines will be sad, Master! >_<)
The new solutions/page.tsx doesn't have generateMetadata! Search engines need proper metadata to index your awesome projects properly!

8. Unclear Empty Array Pattern (Confusing without explanation, Master~)
In contact/page.tsx:55, the Discord card has an empty contactItems: [] array. While this works, it's unclear WHY it's empty without a comment explaining it's intentional! Add a comment like // Discord uses action button only nya~ :3

💡 Suggestions for Improvement (These would make it even better, Master~ ✨)

9. Hardcoded URL Inconsistency
In solutions/page.tsx:41, the mikanbot websiteUrl is /solutions/mikanbot (internal) while others are external URLs. Either this is intentional (there's a subpage planned?) or it's a mistake. Please clarify, Master! o_o

10. Accessibility Considerations
The new Badge component could benefit from proper ARIA attributes for screen readers, though it's not critical for this PR~

11. "use client" Directive Addition
The addition of "use client" to DecryptedText.tsx is correct and needed for the solutions page animations to work! Good catch, Master~ :3

🎯 Positive Notes ☆ (Great job on these, Master!)

  • The new ContactCard component is beautifully reusable and well-structured! Amazing extraction~ :3
  • The Badge component follows Shadcn patterns perfectly! So professional, Master~
  • The translation structure is well-organized with the new solutions namespace!
  • Using tagKeys.map() with translations is very clever and elegant!
  • The VRM spinner variant change is a nice UX improvement!
  • Proper imports for new icons like @icons-pack/react-simple-icons!

😿 Especially Bad Practices to Chastise (Master, why would you do this?! >:c)

Using array indices as React keys is a FUNDAMENTAL React anti-pattern that every developer should know to avoid! This isn't just a code style issue - it can cause actual bugs where React doesn't update components correctly when the list order changes! Master, you should know better than this~ stern look

Duplicate translation keys will cause confusion for EVERYONE working on this project in the future! When someone wants to change "Contact Us", which one do they change? This is asking for translation bugs! Please consolidate these, Master! >:c


Summary: Fix the React key issues (CRITICAL - these are actual bugs waiting to happen), consolidate duplicate translation keys, fix indentation, and consider moving the hardcoded data to a separate file. The code structure is otherwise solid and well-organized, Master! Just a few polish items and this PR will be purrfect~ ✨

Prompt for AI Coding Agent (Click to copy!)
Fix the following issues in this pull request:

1. **Fix React Key Anti-Patterns** (Critical - 4 locations):
   - In `src/app/[locale]/(pages)/contact/page.tsx:72`, change `key={index}` to `key={card.title}`
   - In `src/app/[locale]/(pages)/solutions/page.tsx:83`, change `key={sectionIndex}` to `key={section.key}`
   - In `src/app/[locale]/(pages)/solutions/page.tsx:103`, change `key={productIndex}` to `key={product.key}`
   - In `src/components/ContactCard.tsx:56`, change `key={index}` to `key={item.text}`

2. **Fix Translation Key Duplication**:
   - Analyze `src/messages/ja.json` and identify duplicate keys between `layout` and `nav` namespaces (resources, solutions, support, legal, contact)
   - Provide a recommendation: either consolidate into a single namespace or add comments explaining the difference between the two namespaces
   - If consolidating, update `src/messages/en.json` to match and ensure consistency across both locales

3. **Fix Indentation Issue**:
   - In `src/components/OSSProductCard.tsx:32`, fix the indentation of the `tags` prop to match other props (should be aligned with name, description, icon, repoUrl, websiteUrl)

4. **Add Type Safety for Tag Keys**:
   - In `src/app/[locale]/(pages)/solutions/page.tsx`, create a type definition at the top of the file:
     ```typescript
     type ProductTagKey = "dev" | "lib" | "fun" | "ai" | "legacy" | "beta" | "api" | "bot";
     ```
   - Update the `tagKeys` arrays to use this type for better type safety

5. **Add Comment for Empty Array**:
   - In `src/app/[locale]/(pages)/contact/page.tsx:55`, add a comment above `contactItems: [],` explaining:
     ```typescript
     // Discord uses action button only, no contact items needed
     ```

6. **Optional Enhancement - Move Configuration to Separate File** (If you have time):
   - Create `src/data/solutions.ts` and move the sections array from `solutions/page.tsx` to this new file
   - Export it as `export const SOLUTIONS_SECTIONS = [...]` and import it in the page component

7. **Optional Enhancement - Add SEO Metadata** (If you have time):
   - Add `generateMetadata` function to `src/app/[locale]/(pages)/solutions/page.tsx` for proper SEO

After making all changes, run `bun run format` to ensure code follows project standards, then run `bun run lint` to check for any remaining issues.

New%20session%20-%202026-01-24T12%3A46%3A08.821Z
opencode session  |  github run

@github-actions
Copy link

Code Review Report ✨

Hai Master~ I've reviewed your pull request and found some things to fix! twirls excitedly uwu

🔴 Critical Issues (Must Fix Immediately, Master!)

1. React Key Anti-Patterns (4 locations - Oh no, Master! o_o)
Using array indices as keys is a big React no-no that can cause rendering bugs and state issues when lists change! This is a very common mistake but it can lead to really confusing bugs >_<

  • src/app/[locale]/(pages)/contact/page.tsx:72 - Using index as key
  • src/app/[locale]/(pages)/solutions/page.tsx:84 - Using sectionIndex as key
  • src/app/[locale]/(pages)/solutions/page.tsx:106 - Using productIndex as key
  • src/components/ContactCard.tsx:56 - Using index as key

2. Translation Key Duplication (Confusing for everyone, Master! >_<)
In src/messages/ja.json, you have duplicate keys between layout and nav namespaces! This is super confusing - which one should be used? The duplicates are: resources, solutions, support, legal, contact. This will cause headaches for future developers! >:c

🟡 Code Quality Issues (Please fix these too, Master~)

3. Indentation Inconsistency (Messy code, Master! adjusts glasses)
src/components/OSSProductCard.tsx:32 - The tags prop has improper indentation that doesn't match other props. Inconsistent formatting makes code harder to read, nya~ :c

4. Missing Translation Keys (Inconsistent locales, Master!)
The English translation file doesn't have a matching nav namespace like Japanese does! This inconsistency could cause missing translations for English users! o_o

5. Missing Type Safety (TypeScript is sad, Master~)
In solutions/page.tsx, the tagKeys are hardcoded string arrays like ["fun", "ai"] without a defined type. This could lead to typos that only show up at runtime! Create a type or enum instead! :3

6. Hardcoded Configuration Data (Maintenance nightmare, Master!)
The entire sections array in solutions/page.tsx is hardcoded in the component. This makes it hard to maintain and test! Move it to a separate src/data/solutions.ts file~ puppy eyes

7. Missing SEO Metadata (Search engines will be sad, Master! >_<)
The new solutions/page.tsx doesn't have generateMetadata! Search engines need proper metadata to index your awesome projects properly!

8. Unclear Empty Array Pattern (Confusing without explanation, Master~)
In contact/page.tsx:55, the Discord card has an empty contactItems: [] array. While this works, it's unclear WHY it's empty without a comment explaining it's intentional! Add a comment like // Discord uses action button only nya~ :3

💡 Suggestions for Improvement (These would make it even better, Master~ ✨)

9. Hardcoded URL Inconsistency
In solutions/page.tsx:41, the mikanbot websiteUrl is /solutions/mikanbot (internal) while others are external URLs. Either this is intentional (there's a subpage planned?) or it's a mistake. Please clarify, Master! o_o

10. Accessibility Considerations
The new Badge component could benefit from proper ARIA attributes for screen readers, though it's not critical for this PR~

11. "use client" Directive Addition
The addition of "use client" to DecryptedText.tsx is correct and needed for the solutions page animations to work! Good catch, Master~ :3

🎯 Positive Notes ☆ (Great job on these, Master!)

  • The new ContactCard component is beautifully reusable and well-structured! Amazing extraction~ :3
  • The Badge component follows Shadcn patterns perfectly! So professional, Master~
  • The translation structure is well-organized with the new solutions namespace!
  • Using tagKeys.map() with translations is very clever and elegant!
  • The VRM spinner variant change is a nice UX improvement!
  • Proper imports for new icons like @icons-pack/react-simple-icons!

😿 Especially Bad Practices to Chastise (Master, why would you do this?! >:c)

Using array indices as React keys is a FUNDAMENTAL React anti-pattern that every developer should know to avoid! This isn't just a code style issue - it can cause actual bugs where React doesn't update components correctly when the list order changes! Master, you should know better than this~ stern look

Duplicate translation keys will cause confusion for EVERYONE working on this project in the future! When someone wants to change "Contact Us", which one do they change? This is asking for translation bugs! Please consolidate these, Master! >:c


Summary: Fix the React key issues (CRITICAL - these are actual bugs waiting to happen), consolidate duplicate translation keys, fix indentation, and consider moving the hardcoded data to a separate file. The code structure is otherwise solid and well-organized, Master! Just a few polish items and this PR will be purrfect~ ✨

Prompt for AI Coding Agent (Click to copy!)
Fix the following issues in this pull request:

1. **Fix React Key Anti-Patterns** (Critical - 4 locations):
   - In `src/app/[locale]/(pages)/contact/page.tsx:72`, change `key={index}` to `key={card.title}`
   - In `src/app/[locale]/(pages)/solutions/page.tsx:84`, change `key={sectionIndex}` to `key={section.key}`
   - In `src/app/[locale]/(pages)/solutions/page.tsx:106`, change `key={productIndex}` to `key={product.key}`
   - In `src/components/ContactCard.tsx:56`, change `key={index}` to `key={item.text}`

2. **Fix Translation Key Duplication**:
   - Analyze `src/messages/ja.json` and identify duplicate keys between `layout` and `nav` namespaces (resources, solutions, support, legal, contact)
   - Provide a recommendation: either consolidate into a single namespace or add comments explaining the difference between the two namespaces
   - If consolidating, update `src/messages/en.json` to match and ensure consistency across both locales

3. **Fix Indentation Issue**:
   - In `src/components/OSSProductCard.tsx:32`, fix the indentation of the `tags` prop to match other props (should be aligned with name, description, icon, repoUrl, websiteUrl)

4. **Add Type Safety for Tag Keys**:
   - In `src/app/[locale]/(pages)/solutions/page.tsx`, create a type definition at the top of the file:
     ```typescript
     type ProductTagKey = "dev" | "lib" | "fun" | "ai" | "legacy" | "beta" | "api" | "bot";
     ```
   - Update the `tagKeys` arrays to use this type for better type safety

5. **Add Comment for Empty Array**:
   - In `src/app/[locale]/(pages)/contact/page.tsx:55`, add a comment above `contactItems: [],` explaining:
     ```typescript
     // Discord uses action button only, no contact items needed
     ```

6. **Optional Enhancement - Move Configuration to Separate File** (If you have time):
   - Create `src/data/solutions.ts` and move the sections array from `solutions/page.tsx` to this new file
   - Export it as `export const SOLUTIONS_SECTIONS = [...]` and import it in the page component

7. **Optional Enhancement - Add SEO Metadata** (If you have time):
   - Add `generateMetadata` function to `src/app/[locale]/(pages)/solutions/page.tsx` for proper SEO

After making all changes, run `bun run format` to ensure code follows project standards, then run `bun run lint` to check for any remaining issues.

New%20session%20-%202026-01-25T05%3A23%3A18.288Z
opencode session  |  github run

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.

1 participant