Skip to content

chore: standard format for eng docs#3439

Merged
perkinsjr merged 19 commits intomainfrom
eng-1870-consistent-layout-for-engineering-documents
Jul 10, 2025
Merged

chore: standard format for eng docs#3439
perkinsjr merged 19 commits intomainfrom
eng-1870-consistent-layout-for-engineering-documents

Conversation

@MichaelUnkey
Copy link
Collaborator

@MichaelUnkey MichaelUnkey commented Jul 2, 2025

What does this PR do?

Fixes # (issue)

If there is not an issue for this, please create one first. This is used to tracking purposes and also helps use understand why this PR exists

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • Chore (refactoring code, technical debt, workflow improvements)
  • Enhancement (small improvements)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How should this be tested?

each document follows a standard template for layout.

Checklist

Required

  • Filled out the "How to test" section in this PR
  • Read Contributing Guide
  • Self-reviewed my own code
  • Commented on my code in hard-to-understand areas
  • Ran pnpm build
  • Ran pnpm fmt
  • Checked for warnings, there are none
  • Removed all console.logs
  • Merged the latest changes from main onto my branch with git pull origin main
  • My changes don't cause any responsiveness issues

Appreciated

  • If a UI change was made: Added a screen recording or screenshots to this PR
  • Updated the Unkey Docs if changes were necessary

Summary by CodeRabbit

  • New Features

    • Integrated automatic TypeScript-based table generation in documentation for improved component prop tables.
    • Added new size variants for the FormCheckbox component to showcase extended sizing options.
  • Documentation

    • Extensively expanded, restructured, and clarified documentation for numerous UI components, including Button, Card, Checkbox, FormCheckbox, FormInput, Select, Tooltip, Dialogs, Loading, Toaster, and more.
    • Added detailed usage examples, features lists, prop tables, styling guidance, accessibility notes, and best practices across component docs.
    • Improved organization, accessibility guidance, and customization instructions in all component documentation.
    • Enhanced documentation for tooltips with new props and clearer usage instructions.
    • Added comprehensive new documentation for the FormCheckbox component.
    • Added overview section for RefreshButton documentation.
  • Refactor

    • Removed the MetricCard and MetricCardTitle components and related references from Card examples and exports.
    • Updated import paths for type table components in design documentation.
    • Adjusted KeyboardButton component props to align with rendered HTML element type.
  • Chores

    • Updated a dependency version to improve compatibility and features.

@linear
Copy link

linear bot commented Jul 2, 2025

@changeset-bot
Copy link

changeset-bot bot commented Jul 2, 2025

⚠️ No Changeset found

Latest commit: bceb0cd

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link

vercel bot commented Jul 2, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
dashboard ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 10, 2025 0:19am
1 Skipped Deployment
Name Status Preview Comments Updated (UTC)
engineering ⬜️ Ignored (Inspect) Visit Preview Jul 10, 2025 0:19am

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 2, 2025

📝 Walkthrough

Walkthrough

This update primarily restructures and expands the documentation for numerous UI components, enhancing clarity, organization, and completeness. Several components have their documentation rewritten to include detailed sections on usage, features, props, styling, accessibility, and structure. Additionally, the MetricCardTitle component is removed from both the codebase and related documentation, and the TypeScript documentation tooling is updated and integrated into the build configuration.

Changes

Files / Group Change Summary
apps/engineering/app/design/[[...slug]]/page.tsx, apps/engineering/package.json, apps/engineering/source.config.ts Updated fumadocs-typescript dependency and integration; switched from createTypeTable to TypeTable import; added remarkAutoTypeTable plugin to MDX processing.
internal/ui/src/components/card.tsx, apps/engineering/content/design/components/cards/card.example.tsx Removed MetricCardTitle component from code and all example usages.
apps/engineering/content/design/components/cards/card.mdx Removed references to MetricCardTitle and MetricCard; reorganized and expanded documentation with new sections on overview, features, structure, styling, and accessibility.
apps/engineering/content/design/components/badge.mdx, apps/engineering/content/design/components/buttons/button.mdx, apps/engineering/content/design/components/buttons/copy-button.mdx, apps/engineering/content/design/components/buttons/keyboard-button.mdx, apps/engineering/content/design/components/buttons/visual-button.mdx Extensively restructured and expanded documentation for button-related components; added detailed sections on overview, usage, features, props, structure, styling, accessibility, and custom styling.
apps/engineering/content/design/components/cards/settings-card.mdx Expanded documentation with enhanced description, usage example, features, updated props (including new border and contentWidth types), structure, styling, border/content width options, and accessibility.
apps/engineering/content/design/components/code.mdx, apps/engineering/content/design/components/empty.mdx, apps/engineering/content/design/components/filter/control-cloud.mdx, apps/engineering/content/design/components/id.mdx, apps/engineering/content/design/components/inline-link.mdx, apps/engineering/content/design/components/loading.mdx, apps/engineering/content/design/components/separator.mdx, apps/engineering/content/design/components/toaster.mdx Major documentation overhaul: added or expanded sections on overview, usage, features, props, structure, styling, custom styling, and accessibility for each component.
apps/engineering/content/design/components/dialogs/date-time.mdx, apps/engineering/content/design/components/dialogs/dialog-container.mdx, apps/engineering/content/design/components/dialogs/dialog.mdx, apps/engineering/content/design/components/dialogs/navigable-dialog.mdx Reorganized and expanded dialog-related component documentation: added detailed usage, features, props, structure, styling, accessibility, and improved formatting and clarity.
apps/engineering/content/design/components/form-inputs/checkbox.mdx, apps/engineering/content/design/components/form-inputs/form-chekbox.mdx, apps/engineering/content/design/components/form-inputs/form-input.mdx, apps/engineering/content/design/components/form-inputs/form-textarea.mdx, apps/engineering/content/design/components/form-inputs/input.mdx, apps/engineering/content/design/components/form-inputs/select.mdx, apps/engineering/content/design/components/form-inputs/textarea.mdx Comprehensive rewrite and expansion of form input component documentation; added structured sections for overview, usage, examples, features, props, variants, structure, styling, custom styling, and accessibility.
apps/engineering/content/design/components/tooltips/info-tooltip.mdx, apps/engineering/content/design/components/tooltips/timestamp-info.mdx, apps/engineering/content/design/components/tooltips/tooltip.mdx Extensively expanded and restructured tooltip component documentation; added overview, usage, features, props, structure, styling, custom styling, and accessibility sections.
apps/engineering/content/design/components/form-inputs/form-checkbox.variants.tsx Added three new size variant components for FormCheckbox: XLarge, Medium, and Small, each demonstrating different size options with consistent label and description.
internal/ui/src/components/buttons/keyboard-button.tsx Changed KeyboardButtonProps interface to extend ComponentProps<"span"> instead of ComponentProps<"div"> to align with the rendered HTML element.
apps/engineering/content/design/components/form-inputs/form-checkbox.mdx Added new comprehensive documentation file for FormCheckbox component with detailed overview, usage, variants, features, props, structure, styling, and accessibility.
apps/engineering/content/design/components/buttons/refresh-button.mdx Added an "Overview" section describing the RefreshButton component's purpose and features; no functional changes.

Suggested reviewers

  • perkinsjr
  • chronark
  • mcstepp
  • ogzhanolguncu

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions
Copy link
Contributor

github-actions bot commented Jul 7, 2025

Thank you for following the naming conventions for pull request titles! 🙏

Copy link
Contributor

@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: 28

🔭 Outside diff range comments (2)
apps/engineering/content/design/components/filter/control-cloud.mdx (1)

95-97: Magic number in default prop

12 * 60 * 60 * 1000 is clear to developers but intimidating in docs.
Consider expressing it as “12 hours (in ms)” or defining a named constant in code and referencing it here.

apps/engineering/content/design/components/buttons/keyboard-button.mdx (1)

45-50: Type definition: prefer undefined over null

Accepting null for modifierKey forces consumers to cast; idiomatic React props treat “not provided” as undefined.

-| `modifierKey` | `"⌘" \| "⇧" \| "CTRL" \| "⌥" \| null`
+| `modifierKey` | `"⌘" \| "⇧" \| "CTRL" \| "⌥"`
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8293aa6 and 8639529.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (35)
  • apps/engineering/app/design/[[...slug]]/page.tsx (2 hunks)
  • apps/engineering/content/design/components/badge.mdx (3 hunks)
  • apps/engineering/content/design/components/buttons/button.mdx (1 hunks)
  • apps/engineering/content/design/components/buttons/copy-button.mdx (3 hunks)
  • apps/engineering/content/design/components/buttons/keyboard-button.mdx (2 hunks)
  • apps/engineering/content/design/components/buttons/visual-button.mdx (3 hunks)
  • apps/engineering/content/design/components/cards/card.example.tsx (2 hunks)
  • apps/engineering/content/design/components/cards/card.mdx (3 hunks)
  • apps/engineering/content/design/components/cards/settings-card.mdx (1 hunks)
  • apps/engineering/content/design/components/code.mdx (4 hunks)
  • apps/engineering/content/design/components/dialogs/date-time.mdx (1 hunks)
  • apps/engineering/content/design/components/dialogs/dialog-container.mdx (2 hunks)
  • apps/engineering/content/design/components/dialogs/dialog.mdx (3 hunks)
  • apps/engineering/content/design/components/dialogs/navigable-dialog.mdx (3 hunks)
  • apps/engineering/content/design/components/empty.mdx (1 hunks)
  • apps/engineering/content/design/components/filter/control-cloud.mdx (4 hunks)
  • apps/engineering/content/design/components/form-inputs/checkbox.mdx (2 hunks)
  • apps/engineering/content/design/components/form-inputs/form-chekbox.mdx (2 hunks)
  • apps/engineering/content/design/components/form-inputs/form-input.mdx (2 hunks)
  • apps/engineering/content/design/components/form-inputs/form-textarea.mdx (2 hunks)
  • apps/engineering/content/design/components/form-inputs/input.mdx (1 hunks)
  • apps/engineering/content/design/components/form-inputs/select.mdx (1 hunks)
  • apps/engineering/content/design/components/form-inputs/textarea.mdx (2 hunks)
  • apps/engineering/content/design/components/id.mdx (1 hunks)
  • apps/engineering/content/design/components/inline-link.mdx (1 hunks)
  • apps/engineering/content/design/components/loading.mdx (1 hunks)
  • apps/engineering/content/design/components/separator.mdx (2 hunks)
  • apps/engineering/content/design/components/toaster.mdx (1 hunks)
  • apps/engineering/content/design/components/tooltips/info-tooltip.mdx (1 hunks)
  • apps/engineering/content/design/components/tooltips/timestamp-info.mdx (1 hunks)
  • apps/engineering/content/design/components/tooltips/tooltip.mdx (1 hunks)
  • apps/engineering/package.json (1 hunks)
  • apps/engineering/source.config.ts (2 hunks)
  • internal/ui/src/components/card.tsx (1 hunks)
  • packages/api/src/openapi.d.ts (39 hunks)
🧰 Additional context used
🧠 Learnings (34)
📓 Common learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
apps/engineering/app/design/[[...slug]]/page.tsx (4)
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/search.tsx:16-20
Timestamp: 2024-10-23T16:21:47.395Z
Learning: For the `FilterableCommand` component in `apps/www/components/glossary/search.tsx`, refactoring type definitions into an interface is not necessary at this time.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/ui/button.tsx:39-46
Timestamp: 2024-10-23T16:33:02.143Z
Learning: In `apps/www/components/ui/` directory, components are based on shadcn UI patterns, including their typing conventions.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
apps/engineering/content/design/components/cards/card.example.tsx (4)
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/search.tsx:16-20
Timestamp: 2024-10-23T16:21:47.395Z
Learning: For the `FilterableCommand` component in `apps/www/components/glossary/search.tsx`, refactoring type definitions into an interface is not necessary at this time.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
internal/ui/src/components/card.tsx (3)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/search.tsx:16-20
Timestamp: 2024-10-23T16:21:47.395Z
Learning: For the `FilterableCommand` component in `apps/www/components/glossary/search.tsx`, refactoring type definitions into an interface is not necessary at this time.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/content/design/components/dialogs/date-time.mdx (3)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:0-0
Timestamp: 2025-01-22T16:52:29.277Z
Learning: For time input fields in React, use pattern="[0-9]*" for HTML5 validation and handle specific range validation (hours: 0-23, minutes/seconds: 0-59) in the onChange handler to ensure better user experience and consistent validation behavior.
apps/engineering/content/design/components/id.mdx (3)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2910
File: apps/engineering/content/design/components/form/form-input.variants.tsx:38-38
Timestamp: 2025-02-24T13:35:00.816Z
Learning: In the Unkey codebase, example values in documentation and demo components intentionally use themed fake data (e.g., Middle Earth references) rather than generic placeholder text.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
apps/engineering/content/design/components/dialogs/navigable-dialog.mdx (3)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3156
File: apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/index.tsx:112-0
Timestamp: 2025-04-22T11:49:06.167Z
Learning: In the CreateKeyDialog component of Unkey, section navigation is designed to always allow progression even if validation fails, as visual indicators display the validation state of each section.
apps/engineering/content/design/components/code.mdx (3)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
apps/engineering/content/design/components/badge.mdx (2)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
apps/engineering/content/design/components/separator.mdx (1)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
apps/engineering/content/design/components/filter/control-cloud.mdx (7)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/search.tsx:16-20
Timestamp: 2024-10-23T16:21:47.395Z
Learning: For the `FilterableCommand` component in `apps/www/components/glossary/search.tsx`, refactoring type definitions into an interface is not necessary at this time.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3115
File: apps/dashboard/components/logs/checkbox/filters-popover.tsx:33-55
Timestamp: 2025-04-24T14:34:30.621Z
Learning: In the ShortcutActivator component within filters-popover.tsx, the purpose is to track keys separately for each filter item, providing a registration mechanism for shortcuts passed to it rather than enforcing specific key combinations like option+shift+key.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/search.tsx:41-57
Timestamp: 2024-10-23T16:19:42.049Z
Learning: For the `FilterableCommand` component in `apps/www/components/glossary/search.tsx`, adding error handling and loading states to the results list is not necessary.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3401
File: apps/dashboard/app/(app)/logs/filters.query-params.ts:10-0
Timestamp: 2025-06-24T13:29:10.129Z
Learning: The `buildQueryParams` function in `apps/dashboard/app/(app)/logs/filters.query-params.ts` calls `useFilters()` hook inside it, but this is valid because the function is only called from within other React hooks, maintaining the Rules of Hooks compliance.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2825
File: apps/dashboard/app/(app)/logs-v2/components/controls/components/logs-datetime/index.tsx:0-0
Timestamp: 2025-01-30T20:38:00.058Z
Learning: In the logs dashboard, keyboard shortcuts that toggle UI elements (like popovers) should be implemented in the component that owns the state being toggled, not in the presentational wrapper components. For example, the 'T' shortcut for toggling the datetime filter is implemented in DatetimePopover, not in LogsDateTime.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
apps/engineering/content/design/components/dialogs/dialog.mdx (4)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3156
File: apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/index.tsx:112-0
Timestamp: 2025-04-22T11:49:06.167Z
Learning: In the CreateKeyDialog component of Unkey, section navigation is designed to always allow progression even if validation fails, as visual indicators display the validation state of each section.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
apps/engineering/content/design/components/buttons/visual-button.mdx (2)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
apps/engineering/content/design/components/tooltips/info-tooltip.mdx (2)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
apps/engineering/content/design/components/form-inputs/select.mdx (2)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
apps/engineering/content/design/components/form-inputs/form-textarea.mdx (3)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
apps/engineering/content/design/components/dialogs/dialog-container.mdx (1)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
apps/engineering/content/design/components/form-inputs/form-chekbox.mdx (5)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3156
File: apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/index.tsx:112-0
Timestamp: 2025-04-22T11:49:06.167Z
Learning: In the CreateKeyDialog component of Unkey, section navigation is designed to always allow progression even if validation fails, as visual indicators display the validation state of each section.
Learnt from: chronark
PR: unkeyed/unkey#2146
File: apps/dashboard/app/(app)/apis/[apiId]/settings/default-prefix.tsx:74-75
Timestamp: 2024-10-04T17:27:09.821Z
Learning: In `apps/dashboard/app/(app)/apis/[apiId]/settings/default-prefix.tsx`, the hidden `<input>` elements for `workspaceId` and `keyAuthId` work correctly without being registered with React Hook Form.
apps/engineering/content/design/components/toaster.mdx (1)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
apps/engineering/content/design/components/form-inputs/textarea.mdx (3)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
apps/engineering/content/design/components/buttons/copy-button.mdx (5)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: unrenamed
PR: unkeyed/unkey#2652
File: apps/dashboard/components/dashboard/copy-button.tsx:38-38
Timestamp: 2024-11-08T11:40:17.737Z
Learning: The `copyToClipboardWithMeta` function currently has an unused `_meta` parameter. Consider removing it or utilizing it appropriately, especially when introducing the `useCopyToClipboard` hook.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
apps/engineering/content/design/components/form-inputs/input.mdx (2)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: chronark
PR: unkeyed/unkey#2146
File: apps/dashboard/app/(app)/apis/[apiId]/settings/default-prefix.tsx:74-75
Timestamp: 2024-10-04T17:27:09.821Z
Learning: In `apps/dashboard/app/(app)/apis/[apiId]/settings/default-prefix.tsx`, the hidden `<input>` elements for `workspaceId` and `keyAuthId` work correctly without being registered with React Hook Form.
apps/engineering/content/design/components/form-inputs/form-input.mdx (8)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: chronark
PR: unkeyed/unkey#2146
File: apps/dashboard/app/(app)/apis/[apiId]/settings/default-prefix.tsx:74-75
Timestamp: 2024-10-04T17:27:09.821Z
Learning: In `apps/dashboard/app/(app)/apis/[apiId]/settings/default-prefix.tsx`, the hidden `<input>` elements for `workspaceId` and `keyAuthId` work correctly without being registered with React Hook Form.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2825
File: apps/dashboard/app/(app)/logs/components/controls/components/logs-datetime/utils/process-time.ts:8-18
Timestamp: 2025-01-30T20:41:25.648Z
Learning: Extensive input validation is not required for internal UI utility functions in the dashboard, as they are used with controlled UI components that already handle validation.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:0-0
Timestamp: 2025-01-22T16:52:29.277Z
Learning: For time input fields in React, use pattern="[0-9]*" for HTML5 validation and handle specific range validation (hours: 0-23, minutes/seconds: 0-59) in the onChange handler to ensure better user experience and consistent validation behavior.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3156
File: apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/index.tsx:112-0
Timestamp: 2025-04-22T11:49:06.167Z
Learning: In the CreateKeyDialog component of Unkey, section navigation is designed to always allow progression even if validation fails, as visual indicators display the validation state of each section.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3156
File: apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/ratelimit-setup.tsx:48-59
Timestamp: 2025-04-22T11:47:24.733Z
Learning: For form inputs in the Unkey dashboard, validation constraints are handled at the schema level using Zod rather than using HTML attributes like min/step on numeric inputs.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
apps/engineering/content/design/components/cards/settings-card.mdx (1)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
apps/engineering/content/design/components/buttons/button.mdx (3)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
apps/engineering/content/design/components/tooltips/timestamp-info.mdx (2)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
apps/engineering/content/design/components/form-inputs/checkbox.mdx (4)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
apps/engineering/content/design/components/tooltips/tooltip.mdx (4)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2825
File: apps/dashboard/app/(app)/logs-v2/components/controls/components/logs-datetime/index.tsx:0-0
Timestamp: 2025-01-30T20:38:00.058Z
Learning: In the logs dashboard, keyboard shortcuts that toggle UI elements (like popovers) should be implemented in the component that owns the state being toggled, not in the presentational wrapper components. For example, the 'T' shortcut for toggling the datetime filter is implemented in DatetimePopover, not in LogsDateTime.
apps/engineering/content/design/components/loading.mdx (2)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: chronark
PR: unkeyed/unkey#2792
File: apps/dashboard/app/(app)/settings/user/update-user-email.tsx:76-78
Timestamp: 2025-01-07T19:55:33.055Z
Learning: In the Unkey codebase, the Empty component can be used as a container for loading states, as demonstrated in the UpdateUserEmail component where it wraps the Loading component.
apps/engineering/content/design/components/buttons/keyboard-button.mdx (6)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3115
File: apps/dashboard/components/logs/checkbox/filters-popover.tsx:33-55
Timestamp: 2025-04-24T14:34:30.621Z
Learning: In the ShortcutActivator component within filters-popover.tsx, the purpose is to track keys separately for each filter item, providing a registration mechanism for shortcuts passed to it rather than enforcing specific key combinations like option+shift+key.
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2825
File: apps/dashboard/app/(app)/logs-v2/components/controls/components/logs-datetime/index.tsx:0-0
Timestamp: 2025-01-30T20:38:00.058Z
Learning: In the logs dashboard, keyboard shortcuts that toggle UI elements (like popovers) should be implemented in the component that owns the state being toggled, not in the presentational wrapper components. For example, the 'T' shortcut for toggling the datetime filter is implemented in DatetimePopover, not in LogsDateTime.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
apps/engineering/content/design/components/empty.mdx (5)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: chronark
PR: unkeyed/unkey#2792
File: apps/dashboard/app/(app)/settings/user/update-user-email.tsx:76-78
Timestamp: 2025-01-07T19:55:33.055Z
Learning: In the Unkey codebase, the Empty component can be used as a container for loading states, as demonstrated in the UpdateUserEmail component where it wraps the Loading component.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2866
File: apps/dashboard/app/(app)/ratelimits/[namespaceId]/logs/components/table/log-details/components/log-footer.tsx:85-98
Timestamp: 2025-02-05T12:56:44.873Z
Learning: The RequestResponseDetails component in the ratelimit logs UI already handles empty content cases by preventing rendering when content is empty, so no additional empty state handling is needed in the parent components.
Learnt from: chronark
PR: unkeyed/unkey#2143
File: apps/dashboard/app/(app)/logs/components/log-details/components/log-footer.tsx:58-61
Timestamp: 2024-12-03T14:21:19.543Z
Learning: For the "Outcome" field in the `LogFooter` component (`apps/dashboard/app/(app)/logs/components/log-details/components/log-footer.tsx`), default to "N/A" instead of "VALID" when handling null values to avoid confusing customers.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2910
File: apps/engineering/content/design/components/form/form-input.variants.tsx:38-38
Timestamp: 2025-02-24T13:35:00.816Z
Learning: In the Unkey codebase, example values in documentation and demo components intentionally use themed fake data (e.g., Middle Earth references) rather than generic placeholder text.
apps/engineering/content/design/components/cards/card.mdx (1)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
apps/engineering/content/design/components/inline-link.mdx (3)
Learnt from: chronark
PR: unkeyed/unkey#3324
File: apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/warning-callout.tsx:22-27
Timestamp: 2025-07-03T11:57:15.263Z
Learning: The `target` prop on `InlineLink` components in the @unkey/ui package is a boolean prop, not a string. When `target` is truthy, it automatically sets `target="_blank"` and `rel="noopener noreferrer"` on the underlying anchor element. Using just `target` (equivalent to `target={true}`) is the correct way to make the link open in a new tab.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
packages/api/src/openapi.d.ts (20)

undefined

<retrieved_learning>
Learnt from: Flo4604
PR: #3421
File: go/apps/api/openapi/openapi.yaml:196-200
Timestamp: 2025-07-03T05:58:10.699Z
Learning: In the Unkey codebase, OpenAPI 3.1 is used, which allows sibling keys (such as description) alongside $ref in schema objects. Do not flag this as an error in future reviews.
</retrieved_learning>

<retrieved_learning>
Learnt from: chronark
PR: #2693
File: apps/api/src/routes/v1_keys_updateKey.ts:350-368
Timestamp: 2024-11-29T15:15:47.308Z
Learning: In apps/api/src/routes/v1_keys_updateKey.ts, the code intentionally handles externalId and ownerId separately for clarity. The ownerId field will be removed in the future, simplifying the code.
</retrieved_learning>

<retrieved_learning>
Learnt from: chronark
PR: #2544
File: apps/api/src/pkg/env.ts:4-6
Timestamp: 2024-10-23T12:05:31.121Z
Learning: The cloudflareRatelimiter type definition in apps/api/src/pkg/env.ts should not have its interface changed; it should keep the limit method returning Promise<{ success: boolean }> without additional error properties.
</retrieved_learning>

<retrieved_learning>
Learnt from: Flo4604
PR: #3151
File: go/apps/api/openapi/gen.go:221-233
Timestamp: 2025-04-18T20:01:33.812Z
Learning: For destructive operations like deletion in the Unkey API, oneOf validation is preferred over anyOf to enforce explicit targeting and prevent ambiguity.
</retrieved_learning>

<retrieved_learning>
Learnt from: mcstepp
PR: #3242
File: apps/dashboard/app/(app)/apis/[apiId]/api-id-navbar.tsx:230-266
Timestamp: 2025-05-15T15:59:20.955Z
Learning: Avoid using any type in TypeScript code as it defeats the purpose of type safety and will cause linter issues in the future. Instead, create proper interfaces or utilize existing type definitions, especially for complex nested objects.
</retrieved_learning>

<retrieved_learning>
Learnt from: chronark
PR: #2294
File: apps/api/src/pkg/keys/service.ts:268-271
Timestamp: 2024-10-20T07:05:55.471Z
Learning: In apps/api/src/pkg/keys/service.ts, ratelimitAsync is a table relation, not a column selection. When querying, ensure that table relations are included appropriately, not as columns.
</retrieved_learning>

<retrieved_learning>
Learnt from: chronark
PR: #2544
File: apps/api/src/pkg/ratelimit/client.ts:83-83
Timestamp: 2024-10-23T12:04:12.530Z
Learning: In the metrics.emit call, it's acceptable to set mode to "cloudflare" when using Cloudflare's rate limiter.
</retrieved_learning>

<retrieved_learning>
Learnt from: ogzhanolguncu
PR: #2707
File: apps/dashboard/lib/trpc/routers/ratelimit/createOverride.ts:63-63
Timestamp: 2024-12-05T13:27:55.555Z
Learning: In apps/dashboard/lib/trpc/routers/ratelimit/createOverride.ts, when determining the maximum number of rate limit overrides (max), the intentional use of const max = hasWorkspaceAccess("ratelimitOverrides", namespace.workspace) || 5; allows max to fall back to 5 when hasWorkspaceAccess returns 0 or false. This fallback behavior is expected and intended in the codebase.
</retrieved_learning>

<retrieved_learning>
Learnt from: chronark
PR: #2126
File: apps/api/src/routes/v1_ratelimit_getOverride.happy.test.ts:36-36
Timestamp: 2024-11-13T19:06:36.786Z
Learning: In the rate limit test files (e.g., apps/api/src/routes/v1_ratelimit_getOverride.happy.test.ts), URL parameters like namespaceId and identifier do not need to be URL-encoded in the test code because the values used are always considered safe within the test environment.
</retrieved_learning>

<retrieved_learning>
Learnt from: MichaelUnkey
PR: #2114
File: apps/api/src/routes/v1_keys_updateKey.error.test.ts:0-0
Timestamp: 2024-09-27T15:20:05.475Z
Learning: In the v1/keys.updateKey endpoint, the server validates the refill configuration before checking if the key exists. Therefore, tests can assert validation errors without needing to create the key first.
</retrieved_learning>

<retrieved_learning>
Learnt from: ogzhanolguncu
PR: #3324
File: apps/dashboard/app/(app)/authorization/roles/components/table/components/actions/keys-table-action.popover.constants.tsx:17-18
Timestamp: 2025-06-19T11:48:05.070Z
Learning: In the authorization roles refactor, the RoleBasic type uses roleId as the property name for the role identifier, not id. This is consistent throughout the codebase in apps/dashboard/lib/trpc/routers/authorization/roles/query.ts.
</retrieved_learning>

<retrieved_learning>
Learnt from: AkshayBandi027
PR: #2215
File: apps/dashboard/app/(app)/@breadcrumb/authorization/roles/[roleId]/page.tsx:28-29
Timestamp: 2024-10-08T15:33:04.290Z
Learning: In authorization/roles/[roleId]/update-role.tsx, the tag role-${role.id} is revalidated after updating a role to ensure that the caching mechanism is properly handled for roles.
</retrieved_learning>

<retrieved_learning>
Learnt from: Flo4604
PR: #2955
File: go/apps/api/routes/v2_identities_create_identity/handler.go:162-202
Timestamp: 2025-03-19T09:25:59.751Z
Learning: In the Unkey codebase, input validation for API endpoints is primarily handled through OpenAPI schema validation, which occurs before requests reach the handler code. For example, in the identities.createIdentity endpoint, minimum values for ratelimit duration and limit are defined in the OpenAPI schema rather than duplicating these checks in the handler.
</retrieved_learning>

<retrieved_learning>
Learnt from: ogzhanolguncu
PR: #3321
File: apps/dashboard/lib/trpc/routers/authorization/roles/keys/schema-with-helpers.ts:5-8
Timestamp: 2025-06-18T12:28:10.449Z
Learning: In the unkey dashboard application, API validation for pagination limits is controlled at the UI level rather than requiring additional server-side validation, as the APIs are internal and protected by UI logic.
</retrieved_learning>

<retrieved_learning>
Learnt from: Flo4604
PR: #3151
File: go/apps/api/openapi/gen.go:221-233
Timestamp: 2025-04-18T20:01:33.812Z
Learning: For identity deletion operations in the Unkey API, identityId takes precedence over externalId when both are provided in the request body.
</retrieved_learning>

<retrieved_learning>
Learnt from: ogzhanolguncu
PR: #3315
File: apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/general-setup.tsx:40-50
Timestamp: 2025-06-19T13:01:55.338Z
Learning: In the create-key form's GeneralSetup component, the Controller is intentionally bound to "identityId" as the primary field while "externalId" is set explicitly via setValue. The ExternalIdField component has been designed to handle this pattern where it receives identityId as its value prop but manages both identityId and externalId through its onChange callback.
</retrieved_learning>

<retrieved_learning>
Learnt from: ogzhanolguncu
PR: #3156
File: apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/ratelimit-setup.tsx:36-47
Timestamp: 2025-04-22T11:48:39.670Z
Learning: The Unkey dashboard's form validation for numeric values like rate limits is handled through the Zod schema validation (with .positive() validators and additional checks in superRefine), rather than HTML input attributes like min.
</retrieved_learning>

<retrieved_learning>
Learnt from: ogzhanolguncu
PR: #3292
File: apps/dashboard/lib/trpc/routers/key/create.ts:11-14
Timestamp: 2025-06-02T11:09:58.791Z
Learning: In the unkey codebase, TypeScript and the env() function implementation already provide sufficient validation for environment variables, so additional runtime error handling for missing env vars is not needed.
</retrieved_learning>

<retrieved_learning>
Learnt from: ogzhanolguncu
PR: #2866
File: apps/dashboard/app/(app)/ratelimits/[namespaceId]/logs/components/control-cloud/index.tsx:13-30
Timestamp: 2025-02-05T11:49:04.098Z
Learning: In the ratelimits logs context, "requestId" is used for single request IDs, while "requestIds" is used when dealing with multiple request IDs.
</retrieved_learning>

<retrieved_learning>
Learnt from: ogzhanolguncu
PR: #2825
File: apps/dashboard/app/(app)/logs/components/table/query-logs.schema.ts:49-58
Timestamp: 2025-01-30T20:43:19.720Z
Learning: Status code validation is handled at the ClickHouse query level rather than in the schema, as invalid status codes will cause query failures that are caught by TRPC error handling.
</retrieved_learning>

🪛 LanguageTool
apps/engineering/content/design/components/dialogs/date-time.mdx

[misspelling] ~88-~88: This word is normally spelled as one.
Context: ...teTime component is composed of several sub-components that work together: 1. DateTime - ...

(EN_COMPOUNDS_SUB_COMPONENTS)

apps/engineering/content/design/components/dialogs/navigable-dialog.mdx

[misspelling] ~9-~9: This word is normally spelled as one.
Context: ... ## Overview The Navigable Dialog is a multi-step modal component that provides a consist...

(EN_COMPOUNDS_MULTI_STEP)


[uncategorized] ~9-~9: Possible missing comma found.
Context: ...ctions. It's built on top of the Dialog Container with additional navigation capabilities...

(AI_HYDRA_LEO_MISSING_COMMA)


[misspelling] ~57-~57: This word is normally spelled as one.
Context: ... DialogContainer props. ## Features - Multi-step navigation with sidebar - Icon support ...

(EN_COMPOUNDS_MULTI_STEP)

apps/engineering/content/design/components/code.mdx

[uncategorized] ~9-~9: Possible missing comma found.
Context: ...ed to handle both inline and block code display with customizable styling options and i...

(AI_HYDRA_LEO_MISSING_COMMA)

apps/engineering/content/design/components/badge.mdx

[duplication] ~49-~49: Possible typo: you repeated a word.
Context: ...ons. ### Interactive Badges Badges with hover effects and interactive styl...

(ENGLISH_WORD_REPEAT_RULE)


[misspelling] ~83-~83: This word is normally spelled as one.
Context: ...ontained component that doesn't require sub-components. It renders as a single span element wi...

(EN_COMPOUNDS_SUB_COMPONENTS)

apps/engineering/content/design/components/separator.mdx

[grammar] ~40-~40: This phrase is duplicated. You should probably use “Vertical Separator” only once.
Context: ...sections. ### Vertical Separator Vertical separator for dividing content in horizontal layo...

(PHRASE_REPETITION)


[duplication] ~45-~45: Possible typo: you repeated a word.
Context: ... ### Decorative Separator Separator with decorative styling and custom appe...

(ENGLISH_WORD_REPEAT_RULE)

apps/engineering/content/design/components/dialogs/dialog.mdx

[misspelling] ~134-~134: This word is normally spelled as one.
Context: ...Dialog component is composed of several sub-components that work together: 1. Dialog - Th...

(EN_COMPOUNDS_SUB_COMPONENTS)

apps/engineering/content/design/components/buttons/visual-button.mdx

[duplication] ~71-~71: Possible typo: you repeated a word.
Context: ...between Eye and EyeSlash icons based on state 3. State Integration: Integrates with external...

(ENGLISH_WORD_REPEAT_RULE)

apps/engineering/content/design/components/form-inputs/select.mdx

[misspelling] ~105-~105: This word is normally spelled as one.
Context: ...Select component is composed of several sub-components that work together: 1. Select - Th...

(EN_COMPOUNDS_SUB_COMPONENTS)

apps/engineering/content/design/components/dialogs/dialog-container.mdx

[misspelling] ~66-~66: This word is normally spelled as one.
Context: ... | true | Whether to prevent auto-focus on open | | children ...

(EN_COMPOUNDS_AUTO_FOCUS)

apps/engineering/content/design/components/form-inputs/form-chekbox.mdx

[uncategorized] ~98-~98: Possible missing preposition found.
Context: ...CheckboxVariant /> ### Different Sizes Checkboxes can be sized appropriately for differen...

(AI_HYDRA_LEO_MISSING_OF)

apps/engineering/content/design/components/toaster.mdx

[duplication] ~56-~56: Possible typo: you repeated a word.
Context: ...ithCustomDuration /> ### Promise-based Toast Toast that updates based on promise resolutio...

(ENGLISH_WORD_REPEAT_RULE)

apps/engineering/content/design/components/form-inputs/textarea.mdx

[uncategorized] ~18-~18: Possible missing comma found.
Context: ...feedback and enhanced usability through icons while maintaining accessibility and con...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~74-~74: It seems likely that a singular genitive (’s) apostrophe is missing.
Context: ...TextareaWithCharacterCount /> ### With Icons Example of a textarea with both leading...

(AI_HYDRA_LEO_APOSTROPHE_S_XS)

apps/engineering/content/design/components/buttons/copy-button.mdx

[uncategorized] ~40-~40: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...askChecked on copy - Accessibility: Full screen reader support with ARIA labels - **Aut...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

apps/engineering/content/design/components/form-inputs/input.mdx

[style] ~45-~45: ‘with success’ might be wordy. Consider a shorter alternative.
Context: ...ltVariant /> ### Success Variant Input with success styling for positive validation states....

(EN_WORDINESS_PREMIUM_WITH_SUCCESS)

apps/engineering/content/design/components/cards/settings-card.mdx

[uncategorized] ~38-~38: This verb may not be in the correct form. Consider using a different form for this context.
Context: ... Shared Edge Two SettingCard components sharing a common edge for related settings. <S...

(AI_EN_LECTOR_REPLACEMENT_VERB_FORM)


[uncategorized] ~95-~95: Loose punctuation mark.
Context: ... prop ### Border Options - "top": Only shows a top border - **"bottom"*...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~102-~102: Loose punctuation mark.
Context: ...Content Width Options - "default": Standard content width - "full": ...

(UNLIKELY_OPENING_PUNCTUATION)

apps/engineering/content/design/components/buttons/button.mdx

[uncategorized] ~48-~48: Possible missing article found.
Context: ... } ``` ## Examples ### Basic Variants Button comes in three basic variants that serv...

(AI_HYDRA_LEO_MISSING_THE)


[formatting] ~137-~137: Consider inserting a comma here, unless the first half is essential to the meaning of the sentence.
Context: ...ility and interaction. #### With Icons Buttons can include icons from the Lucide libra...

(WITH_THAT_COMMA)

apps/engineering/content/design/components/empty.mdx

[misspelling] ~79-~79: This word is normally spelled as one.
Context: ... Empty component is composed of several sub-components that work together: 1. Empty - The...

(EN_COMPOUNDS_SUB_COMPONENTS)

apps/engineering/content/design/components/cards/card.mdx

[duplication] ~47-~47: Possible typo: you repeated a word.
Context: ...ions. ### Complete Card Card with header, content, and footer sectio...

(ENGLISH_WORD_REPEAT_RULE)


[misspelling] ~59-~59: This word is normally spelled as one.
Context: ...- Composable Architecture: Flexible sub-components for custom layouts - **Consistent Styli...

(EN_COMPOUNDS_SUB_COMPONENTS)


[misspelling] ~116-~116: This word is normally spelled as one.
Context: ... The Card system is composed of several sub-components that work together: 1. Card - The ...

(EN_COMPOUNDS_SUB_COMPONENTS)

🔇 Additional comments (40)
apps/engineering/package.json (1)

19-19: LGTM: Dependency update supports new TypeScript table features.

The major version update from 3.x to 4.x is coordinated with changes in other files that adapt to the new API for TypeScript table generation.

apps/engineering/app/design/[[...slug]]/page.tsx (2)

2-2: LGTM: Clean import update for new fumadocs API.

The direct import of TypeTable from fumadocs-ui/components/type-table properly adapts to the new fumadocs-typescript v4 API.


28-28: LGTM: Simplified TypeTable usage.

The direct usage of TypeTable component eliminates the need for the createTypeTable() function, simplifying the code while maintaining the same functionality.

apps/engineering/content/design/components/cards/card.example.tsx (2)

4-4: LGTM: Import cleaned up after MetricCardTitle removal.

The import statement properly removes MetricCardTitle while maintaining the other Card component imports.


133-133: LGTM: Appropriate replacement of MetricCardTitle with span elements.

The replacement of MetricCardTitle with plain <span> elements maintains the visual structure while adapting to the component removal. This is a clean solution that preserves functionality.

Also applies to: 137-137

apps/engineering/source.config.ts (3)

7-7: LGTM: Proper imports for TypeScript table generation.

The imports of createGenerator and remarkAutoTypeTable are correctly added to support automatic TypeScript table generation in documentation.


10-10: LGTM: Generator instance creation.

The generator instance is properly created for use with the TypeScript table generation feature.


55-57: LGTM: MDX configuration enhanced for TypeScript tables.

The remarkAutoTypeTable plugin is properly configured with the generator instance to enable automatic TypeScript table generation in MDX files. This aligns well with the PR objective of standardizing documentation format.

apps/engineering/content/design/components/id.mdx (1)

91-109: Re-evaluate inclusion of “Accessibility” & “Best Practices” sections

Historical feedback from Michael indicates a preference to omit these two sections from component docs in apps/engineering/content/design/components/.
If the new global template intentionally changes that convention, ignore this note; otherwise consider removing them for consistency.

apps/engineering/content/design/components/form-inputs/select.mdx (2)

61-63: Verify prop names align with implementation

variant and leftIcon appear in the docs, but earlier releases used status / iconLeft.
Please grep the codebase to ensure the docs match the actual prop names exported by SelectTrigger.


105-109: Spelling: “sub-components” → “subcomponents”

Compound nouns should be written as one word in technical docs.

-The Select component is composed of several sub-components that work together:
+The Select component is composed of several subcomponents that work together:
⛔ Skipped due to learnings
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/content/design/components/buttons/visual-button.mdx (1)

68-72: Duplicate word removed

“One word repeated” (Language-tool). Tiny polish:

-1. **Renders as Button**: Uses the base Button component for styling and behavior
+1. **Renders as Button** — uses the base Button component for styling and behavior
⛔ Skipped due to learnings
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: chronark
PR: unkeyed/unkey#2792
File: apps/dashboard/app/(app)/settings/user/update-user-email.tsx:76-78
Timestamp: 2025-01-07T19:55:33.055Z
Learning: In the Unkey codebase, the Empty component can be used as a container for loading states, as demonstrated in the UpdateUserEmail component where it wraps the Loading component.
apps/engineering/content/design/components/code.mdx (1)

121-128: Accessibility section conflicts with recorded author preference

Historic feedback (see “retrieved_learnings”) indicates Michael prefers leaving out dedicated “Accessibility” sections in component docs. Please confirm whether this new template intentionally overrides that preference or whether the section should be dropped/relocated.

apps/engineering/content/design/components/badge.mdx (2)

109-118: Accessibility section may violate author preference

Per stored learning, dedicated Accessibility sections are usually omitted in these docs. Double-check if this is an intentional deviation for the new template.


81-84: “sub-components” → “subcomponents”

-The Badge component is a simple, self-contained component that doesn't require sub-components.
+The Badge component is a simple, self-contained component that doesn't require subcomponents.
⛔ Skipped due to learnings
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/content/design/components/separator.mdx (1)

109-117: Accessibility section – verify with documented preference

Template adds a dedicated section that previous guidance suggests omitting. Please confirm desired convention.

apps/engineering/content/design/components/loading.mdx (1)

104-113: Confirm inclusion of Accessibility section

This doc also introduces a full Accessibility section. Given earlier preference to exclude these, please verify whether this is now part of the standard template.

apps/engineering/content/design/components/dialogs/dialog.mdx (2)

170-178: Accessibility section inclusion – needs confirmation

As with other files, a dedicated Accessibility section is present. Please confirm if this aligns with the updated documentation standard or should be removed to follow prior preference.


134-144: “sub-components” spelling

-The Dialog component is composed of several sub-components that work together:
+The Dialog component is composed of several subcomponents that work together:
⛔ Skipped due to learnings
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/ui/button.tsx:39-46
Timestamp: 2024-10-23T16:33:02.143Z
Learning: In `apps/www/components/ui/` directory, components are based on shadcn UI patterns, including their typing conventions.
apps/engineering/content/design/components/form-inputs/form-chekbox.mdx (1)

221-232: Accessibility section conflicts with agreed template

Per long-term learning, Michael prefers to omit “Accessibility” sections in component docs. Confirm that the new standard intentionally overrides that preference before merging.

apps/engineering/content/design/components/empty.mdx (1)

115-123: Template deviation – Accessibility block

Same note as for FormCheckbox: check whether keeping an explicit Accessibility section aligns with the newly agreed documentation template.

apps/engineering/content/design/components/dialogs/date-time.mdx (2)

125-135: Accessibility section – confirm template change

Re-confirm inclusion with Michael as it contradicts earlier preference.


88-94: Spelling: “subcomponents”

Same compound-word issue as before.

⛔ Skipped due to learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
apps/engineering/content/design/components/tooltips/info-tooltip.mdx (1)

107-116: Accessibility section – confirm with template owners

Same concern about the newly added Accessibility block.

apps/engineering/content/design/components/buttons/keyboard-button.mdx (1)

88-96: Accessibility section – template alignment

Yet another file adding an Accessibility section; verify global decision.

apps/engineering/content/design/components/dialogs/dialog-container.mdx (2)

103-112: Accessibility section contradicts documented author preference
Per long-term learning, Michael prefers to omit “Accessibility” sections from component docs in apps/engineering/content/design/components/. Consider dropping or relocating this section to stay consistent with the agreed template.


66-66: Default value of preventAutoFocus looks surprising – verify against implementation
Most dialog APIs default to focusing the first focusable element. A default of true (i.e. preventing focus) reverses that expectation. Ensure the underlying DialogContainer really uses true as its default; otherwise update the table.

apps/engineering/content/design/components/form-inputs/form-input.mdx (1)

116-118: Ambiguous interplay between required and optional props
Allowing both booleans invites invalid configurations (required && optional). Document precedence or enforce mutual exclusivity in the component; otherwise consumers may mis-use the API.

apps/engineering/content/design/components/buttons/copy-button.mdx (1)

91-99: Section may violate author’s doc template preference
Same as other files: the added “Accessibility” block conflicts with Michael’s stated preference to omit it. Confirm whether the new standard intentionally overrides that guidance.

apps/engineering/content/design/components/cards/settings-card.mdx (1)

121-130: Accessibility section vs. documented preference
As with other component docs, confirm whether including this section is now desired or should be removed per earlier conventions.

apps/engineering/content/design/components/form-inputs/form-textarea.mdx (1)

209-218: Confirm need for “Accessibility” section
Echoing previous comments: double-check whether this section should remain, given the historical preference to omit it in design component docs.

apps/engineering/content/design/components/cards/card.mdx (1)

59-65: Hyphenated “sub-components” reads awkwardly

Across the docs we’ve standardised on “subcomponents” (no hyphen). Adjust for consistency.

⛔ Skipped due to learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/ui/button.tsx:39-46
Timestamp: 2024-10-23T16:33:02.143Z
Learning: In `apps/www/components/ui/` directory, components are based on shadcn UI patterns, including their typing conventions.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
apps/engineering/content/design/components/form-inputs/textarea.mdx (1)

94-111: Verify wrapperClassName vs className duplication

Both wrapperClassName and className are documented. In the shipped component only one is supported (commonly className). If wrapperClassName isn’t actually wired, remove it to avoid false promises.

apps/engineering/content/design/components/inline-link.mdx (1)

20-23: target="_blank" usage contradicts actual API (target is boolean).

According to previous component behaviour (target → boolean that automatically expands to "_blank" + secure rel), hard-coding the string union here is misleading. It suggests consumers may pass arbitrary targets, which the component does not support.

-      <InlineLink href="https://example.com" target="_blank">
+      <InlineLink href="https://example.com" target>

Please verify whether the component API actually changed; if not, adjust the example.

apps/engineering/content/design/components/tooltips/tooltip.mdx (1)

125-132: Check doc-template alignment with maintainer preference.

Maintainer previously asked to omit “Accessibility” sections in component docs under this path. This new section may be intentional with the new “standard format”, but worth double-checking before we cement a convention that conflicts with earlier guidance.

apps/engineering/content/design/components/buttons/button.mdx (1)

253-262: Accessibility section may violate earlier doc guidelines.

Similar to Tooltip, earlier reviews indicated these docs should exclude dedicated “Accessibility” blocks. Please confirm the updated standard allows this section; otherwise drop to stay consistent.

apps/engineering/content/design/components/form-inputs/checkbox.mdx (1)

237-246: Verify inclusion of large Accessibility section against doc standard.

As with Button/Tooltip, ensure the new template explicitly requires this content; if not, consider removing to honour earlier maintainer preference.

packages/api/src/openapi.d.ts (3)

2-3: Auto-generated file changes look good.

The formatting improvements and type definition refinements in this auto-generated OpenAPI TypeScript file enhance readability without affecting API contracts.


3324-3326: Verify the impact of changing the async default from true to false.

This default value change in the migration endpoints could affect existing clients that rely on the previous default behavior. Ensure this change is documented in release notes and migration guides.

Since this appears to be a potentially breaking change, please confirm:

  1. Is this change intentional and aligned with the migration strategy?
  2. Are existing clients notified about this behavioral change?

3247-3257: Well-structured field migration from ownerId to externalId.

The deprecation is properly documented with clear migration guidance. This approach allows for a smooth transition while maintaining backward compatibility.

Copy link
Contributor

@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: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8639529 and 8f9ef49.

📒 Files selected for processing (1)
  • apps/engineering/source.config.ts (2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (24)
  • GitHub Check: Test Go API Local / Test (Shard 1/8)
  • GitHub Check: Test Go API Local / Test (Shard 3/8)
  • GitHub Check: Test Go API Local / Test (Shard 6/8)
  • GitHub Check: Test Go API Local / Test (Shard 2/8)
  • GitHub Check: Test Go API Local / Test (Shard 4/8)
  • GitHub Check: Test Go API Local / Test (Shard 8/8)
  • GitHub Check: Test Go API Local / Test (Shard 7/8)
  • GitHub Check: Test Go API Local / Test (Shard 5/8)
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Build / Build
  • GitHub Check: Test Packages / Test ./packages/hono
  • GitHub Check: Test Packages / Test ./packages/cache
  • GitHub Check: Test Packages / Test ./packages/rbac
  • GitHub Check: Test Packages / Test ./internal/id
  • GitHub Check: Test Packages / Test ./apps/dashboard
  • GitHub Check: Test Packages / Test ./packages/nextjs
  • GitHub Check: Test Packages / Test ./packages/api
  • GitHub Check: Test Packages / Test ./internal/hash
  • GitHub Check: Test Packages / Test ./internal/resend
  • GitHub Check: Test Packages / Test ./internal/clickhouse
  • GitHub Check: Test Packages / Test ./internal/keys
  • GitHub Check: Test Packages / Test ./internal/encryption
  • GitHub Check: autofix
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (1)
apps/engineering/source.config.ts (1)

23-25: Verify that mdxOptions is the correct key for Fumadocs v4

The plugin wiring looks fine, but Fumadocs’ config surface has changed a few times (e.g. mdx vs mdxOptions). Double-check against the 4.0.6 docs to ensure this property is still respected; otherwise the table generator won’t run.

Copy link
Contributor

@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: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8f9ef49 and f99a25f.

📒 Files selected for processing (1)
  • apps/engineering/source.config.ts (2 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/source.config.ts (2)
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-rolodex-desktop.tsx:26-37
Timestamp: 2024-10-23T16:20:19.324Z
Learning: When reviewing React components in this project, avoid suggesting manual memoization with `useMemo` for performance optimizations, as the team prefers to rely on the React compiler to handle such optimizations.
Learnt from: mcstepp
PR: unkeyed/unkey#3242
File: apps/dashboard/app/(app)/apis/[apiId]/api-id-navbar.tsx:230-266
Timestamp: 2025-05-15T15:59:20.955Z
Learning: Avoid using `any` type in TypeScript code as it defeats the purpose of type safety and will cause linter issues in the future. Instead, create proper interfaces or utilize existing type definitions, especially for complex nested objects.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (13)
  • GitHub Check: Test Go API Local / Test (Shard 7/8)
  • GitHub Check: Test Go API Local / Test (Shard 8/8)
  • GitHub Check: Test Go API Local / Test (Shard 1/8)
  • GitHub Check: Test Go API Local / Test (Shard 3/8)
  • GitHub Check: Test Go API Local / Test (Shard 4/8)
  • GitHub Check: Test Go API Local / Test (Shard 6/8)
  • GitHub Check: Test Go API Local / Test (Shard 5/8)
  • GitHub Check: Test Go API Local / Test (Shard 2/8)
  • GitHub Check: Build / Build
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Test Packages / Test ./internal/clickhouse
  • GitHub Check: autofix
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (1)
apps/engineering/source.config.ts (1)

8-10: Unused-import issue resolved – looks good.

z is no longer imported; the file now compiles cleanly with noUnusedLocals.
No further action required.

Copy link
Contributor

@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: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0655fef and be0b566.

📒 Files selected for processing (1)
  • apps/engineering/content/design/components/cards/card.mdx (3 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/content/design/components/cards/card.mdx (4)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2697
File: apps/engineering/content/design/components/id.mdx:34-40
Timestamp: 2024-12-04T17:20:37.426Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), Michael prefers to include a `Props` section but prefers to exclude `Accessibility` and `Best Practices` sections.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
Learnt from: unrenamed
PR: unkeyed/unkey#2652
File: apps/dashboard/components/dashboard/copy-button.tsx:38-38
Timestamp: 2024-11-08T11:40:17.737Z
Learning: The `copyToClipboardWithMeta` function currently has an unused `_meta` parameter. Consider removing it or utilizing it appropriately, especially when introducing the `useCopyToClipboard` hook.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
🪛 LanguageTool
apps/engineering/content/design/components/cards/card.mdx

[style] ~44-~44: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...tent sections. ### Card with Footer Card with action buttons i...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[misspelling] ~64-~64: This word is normally spelled as one.
Context: ...- Composable Architecture: Flexible sub-components for custom layouts - **Consistent Styli...

(EN_COMPOUNDS_SUB_COMPONENTS)


[misspelling] ~121-~121: This word is normally spelled as one.
Context: ... The Card system is composed of several sub-components that work together: 1. Card - The ...

(EN_COMPOUNDS_SUB_COMPONENTS)


[uncategorized] ~134-~134: You might be missing the article “the” here.
Context: ... Consistent spacing and typography from design system - Border and background styling ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (11)
  • GitHub Check: Test Go API Local / Test (Shard 1/8)
  • GitHub Check: Test Go API Local / Test (Shard 8/8)
  • GitHub Check: Test Go API Local / Test (Shard 4/8)
  • GitHub Check: Test Go API Local / Test (Shard 3/8)
  • GitHub Check: Test Go API Local / Test (Shard 7/8)
  • GitHub Check: Test Go API Local / Test (Shard 2/8)
  • GitHub Check: Test Go API Local / Test (Shard 6/8)
  • GitHub Check: Test Go API Local / Test (Shard 5/8)
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Build / Build
  • GitHub Check: Test Packages / Test ./internal/clickhouse
🔇 Additional comments (1)
apps/engineering/content/design/components/cards/card.mdx (1)

156-164: Confirm inclusion of the Accessibility section – it contradicts the usual template.

Past feedback (PR #2697) indicates Michael prefers engineering component docs to omit Accessibility (and Best Practices) sections. This file introduces a dedicated Accessibility section.
Please confirm that this deviation is intentional before we standardise on the new template across docs.

Copy link
Contributor

@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

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between be0b566 and cb348a5.

📒 Files selected for processing (1)
  • apps/engineering/content/design/components/cards/card.mdx (3 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3439
File: apps/engineering/content/design/components/dialogs/dialog-container.mdx:103-111
Timestamp: 2025-07-08T12:47:17.828Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), the Accessibility section is included in the standard template and should not be removed from component documentation.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/content/design/components/cards/card.mdx (5)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3439
File: apps/engineering/content/design/components/dialogs/dialog-container.mdx:103-111
Timestamp: 2025-07-08T12:47:17.828Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), the Accessibility section is included in the standard template and should not be removed from component documentation.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
Learnt from: unrenamed
PR: unkeyed/unkey#2652
File: apps/dashboard/components/dashboard/copy-button.tsx:38-38
Timestamp: 2024-11-08T11:40:17.737Z
Learning: The `copyToClipboardWithMeta` function currently has an unused `_meta` parameter. Consider removing it or utilizing it appropriately, especially when introducing the `useCopyToClipboard` hook.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
🪛 LanguageTool
apps/engineering/content/design/components/cards/card.mdx

[grammar] ~5-~5: Use proper spacing conventions.
Context: ...teCard, CardGrid } from "./card.example" ## Overview The Card component provides a ...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~7-~7: Use proper spacing conventions.
Context: ...rid } from "./card.example" ## Overview The Card component provides a flexible c...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~9-~9: Use proper spacing conventions.
Context: ...ing accessibility and responsive design. ## Usage ```tsx import { Card, CardContent...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~11-~11: Use proper spacing conventions.
Context: ...ibility and responsive design. ## Usage tsx import { Card, CardContent, CardHeader, CardTitle } from "@unkey/ui"; export default function MyComponent() { return ( <Card> <CardHeader> <CardTitle>Card Title</CardTitle> </CardHeader> <CardContent> <p>Your content goes here</p> </CardContent> </Card> ); } ## Examples ### Basic Card A simple card ...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~34-~34: Use proper spacing conventions.
Context: ...rd with just content for simple layouts. ### Card with Header Card with a title and ...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~38-~38: Use proper spacing conventions.
Context: ...ts. ### Card with Header Card with a title and description in the...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~40-~40: Use proper spacing conventions.
Context: ...header for introducing content sections. ### Card with Footer Card with action butto...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[style] ~44-~44: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...tent sections. ### Card with Footer Card with action buttons i...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~44-~44: Use proper spacing conventions.
Context: ... ### Card with Footer Card with action buttons in the footer f...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~46-~46: Use proper spacing conventions.
Context: ...ons in the footer for user interactions. ### Complete Card Card with header, content...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~50-~50: Use proper spacing conventions.
Context: .... ### Complete Card Card with header, content, and footer se...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~52-~52: Use proper spacing conventions.
Context: ...t, and footer sections working together. ### Card Grid Multiple cards in a responsiv...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~56-~56: Use proper spacing conventions.
Context: ...gether. ### Card Grid Multiple cards in a responsive grid layo...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~58-~58: Use proper spacing conventions.
Context: ...d layout for dashboard-style interfaces. ## Features - Composable Architecture:...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~62-~62: Use proper spacing conventions.
Context: ...e interfaces. ## Features - Composable Architecture: Flexible subc...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~69-~69: Use proper spacing conventions.
Context: ... styling options through className props ## Props ### Card | Prop | Type | Default...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~115-~115: Use proper spacing conventions.
Context: ...mponent accepts all standard Card props. ## Structure The Card system is composed o...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~117-~117: Use proper spacing conventions.
Context: ...s all standard Card props. ## Structure The Card system is composed of several s...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~119-~119: Use proper spacing conventions.
Context: ...everal subcomponents that work together: 1. Card - The main container component 2....

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[typographical] ~121-~121: To join two clauses or set off examples, consider using an em dash.
Context: ...subcomponents that work together: 1. Card - The main container component 2. **CardHeade...

(QB_NEW_EN_DASH_RULE_EM)


[typographical] ~122-~122: To join two clauses or set off examples, consider using an em dash.
Context: ...d** - The main container component 2. CardHeader - Container for title and description 3. **CardTitl...

(QB_NEW_EN_DASH_RULE_EM)


[typographical] ~123-~123: To join two clauses or set off examples, consider using an em dash.
Context: ...ontainer for title and description 3. CardTitle - Main heading text (h2 element) 4. **CardDesc...

(QB_NEW_EN_DASH_RULE_EM)


[typographical] ~124-~124: To join two clauses or set off examples, consider using an em dash.
Context: ...* - Main heading text (h2 element) 4. CardDescription - Subtitle or description text 5. CardContent ...

(QB_NEW_EN_DASH_RULE_EM)


[typographical] ~125-~125: To join two clauses or set off examples, consider using an em dash.
Context: ...n** - Subtitle or description text 5. CardContent - Main content area 6. CardFooter - Footer...

(QB_NEW_EN_DASH_RULE_EM)


[typographical] ~126-~126: To join two clauses or set off examples, consider using an em dash.
Context: ...CardContent* - Main content area 6. CardFooter - Footer area with border separator ## Styling ...

(QB_NEW_EN_DASH_RULE_EM)


[grammar] ~126-~126: Use proper spacing conventions.
Context: ...er** - Footer area with border separator ## Styling The Card component includes def...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~128-~128: Use proper spacing conventions.
Context: ...r area with border separator ## Styling The Card component includes default styl...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~130-~130: Use proper spacing conventions.
Context: ...component includes default styling with: - Consistent spacing and typography from t...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~137-~137: Use proper spacing conventions.
Context: ...y - Customizable through className props ### Custom Styling You can customize the ap...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~139-~139: Use proper spacing conventions.
Context: ...ough className props ### Custom Styling You can customize the appearance using c...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~141-~141: Use proper spacing conventions.
Context: ...ze the appearance using className props: tsx <Card className="custom-card-class"> <CardHeader className="custom-header-class"> <CardTitle className="custom-title-class">Custom Title</CardTitle> </CardHeader> <CardContent className="custom-content-class"> Custom content </CardContent> </Card> ## Accessibility The Card component is bui...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~154-~154: Use proper spacing conventions.
Context: ...rdContent> ``` ## Accessibility The Card component is built with accessi...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)


[grammar] ~156-~156: Use proper spacing conventions.
Context: ...ent is built with accessibility in mind: - Semantic HTML: Uses appropriate HTML e...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: Test Go API Local / Test (Shard 4/8)
  • GitHub Check: Test Go API Local / Test (Shard 5/8)
  • GitHub Check: Test Go API Local / Test (Shard 3/8)
  • GitHub Check: Test Go API Local / Test (Shard 1/8)
  • GitHub Check: Test Go API Local / Test (Shard 2/8)
  • GitHub Check: Build / Build
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Test Packages / Test ./internal/clickhouse
🔇 Additional comments (1)
apps/engineering/content/design/components/cards/card.mdx (1)

50-52: Heading duplication resolved – looks good
The previous “Card Card” duplication has been cleaned up, so the heading now reads clearly.

Copy link
Contributor

@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: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cb348a5 and 864a70b.

📒 Files selected for processing (1)
  • apps/engineering/content/design/components/cards/card.mdx (3 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3439
File: apps/engineering/content/design/components/dialogs/dialog-container.mdx:103-111
Timestamp: 2025-07-08T12:47:17.828Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), the Accessibility section is included in the standard template and should not be removed from component documentation.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/content/design/components/cards/card.mdx (7)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3439
File: apps/engineering/content/design/components/dialogs/dialog-container.mdx:103-111
Timestamp: 2025-07-08T12:47:17.828Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), the Accessibility section is included in the standard template and should not be removed from component documentation.
Learnt from: CR
PR: unkeyed/unkey#0
File: go/deploy/CLAUDE.md:0-0
Timestamp: 2025-07-09T08:42:29.305Z
Learning: Applies to go/deploy/**/*.{go,js,ts,tsx,py,sh,md,txt,json,yaml,yml,ini,rb,java,c,cpp,h,cs,rs,php,html,css,scss,xml} : Use `AIDEV-NOTE:`, `AIDEV-TODO:`, `AIDEV-BUSINESS_RULE:`, or `AIDEV-QUESTION:` (all-caps prefix) as anchor comments aimed at AI and developers.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
Learnt from: unrenamed
PR: unkeyed/unkey#2652
File: apps/dashboard/components/dashboard/copy-button.tsx:38-38
Timestamp: 2024-11-08T11:40:17.737Z
Learning: The `copyToClipboardWithMeta` function currently has an unused `_meta` parameter. Consider removing it or utilizing it appropriately, especially when introducing the `useCopyToClipboard` hook.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
Learnt from: CR
PR: unkeyed/unkey#0
File: go/deploy/CLAUDE.md:0-0
Timestamp: 2025-07-09T08:42:29.305Z
Learning: Applies to go/deploy/**/*.{go,js,ts,tsx,py,sh,md,txt,json,yaml,yml,ini,rb,java,c,cpp,h,cs,rs,php,html,css,scss,xml} : Make sure to add relevant anchor comments whenever a file or piece of code is too complex, very important, confusing, or could have a bug.
🪛 LanguageTool
apps/engineering/content/design/components/cards/card.mdx

[style] ~44-~44: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...tent sections. ### Card with Footer Card with action buttons i...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~62-~62: Use correct spacing
Context: ...ard-style interfaces. ## Features - Composable Architecture: Flexible sub...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (19)
  • GitHub Check: Test Go API Local / Test (Shard 4/8)
  • GitHub Check: Test Go API Local / Test (Shard 7/8)
  • GitHub Check: Test Go API Local / Test (Shard 3/8)
  • GitHub Check: Test Go API Local / Test (Shard 8/8)
  • GitHub Check: Test Go API Local / Test (Shard 5/8)
  • GitHub Check: Test Go API Local / Test (Shard 6/8)
  • GitHub Check: Test Go API Local / Test (Shard 2/8)
  • GitHub Check: Test Go API Local / Test (Shard 1/8)
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Build / Build
  • GitHub Check: Test Packages / Test ./internal/clickhouse
  • GitHub Check: Test Packages / Test ./packages/hono
  • GitHub Check: Test Packages / Test ./apps/dashboard
  • GitHub Check: Test Packages / Test ./packages/nextjs
  • GitHub Check: Test Packages / Test ./packages/cache
  • GitHub Check: Test Packages / Test ./packages/api
  • GitHub Check: Test Packages / Test ./internal/billing
  • GitHub Check: Test Packages / Test ./internal/encryption
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (2)
apps/engineering/content/design/components/cards/card.mdx (2)

115-115: Props-inheritance clarification looks good

The new sentence cleanly explains that <Card> forwards standard <div> props—much clearer than the old “standard props” wording. 👍


154-162: Accessibility section retained and explicit – great

Nice job keeping the Accessibility section (per the standard template) and spelling out key considerations like semantic HTML and keyboard navigation.

@perkinsjr perkinsjr self-assigned this Jul 9, 2025
Copy link
Member

@perkinsjr perkinsjr left a comment

Choose a reason for hiding this comment

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

There is a button mising an overview section. Add that and I will approve

Copy link
Contributor

@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: 1

🔭 Outside diff range comments (1)
apps/engineering/content/design/components/buttons/refresh-button.mdx (1)

70-79: Missing “Accessibility” section — required by the standard component-doc template

Per the engineering-docs template (and the learning from PR #3439), every component page must include an explicit “Accessibility” section. Omitting it breaks consistency across docs and risks overlooking a11y guidance.

Consider appending something like:

+## Accessibility
+
+- Uses a native `<button>` element, ensuring correct focus behaviour and semantics.
+- Conveys loading (`aria-busy`) and disabled (`disabled` / `aria-disabled`) states.
+- Keyboard shortcut (⌥+⇧+R) is documented and discoverable via tooltip.
+- Accepts an optional `aria-label` prop for customised screen-reader text.
+
+No additional configuration is needed for baseline WCAG 2.1 AA compliance.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 864a70b and 2a36998.

📒 Files selected for processing (1)
  • apps/engineering/content/design/components/buttons/refresh-button.mdx (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3439
File: apps/engineering/content/design/components/dialogs/dialog-container.mdx:103-111
Timestamp: 2025-07-08T12:47:17.828Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), the Accessibility section is included in the standard template and should not be removed from component documentation.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/content/design/components/buttons/refresh-button.mdx (2)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3439
File: apps/engineering/content/design/components/dialogs/dialog-container.mdx:103-111
Timestamp: 2025-07-08T12:47:17.828Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), the Accessibility section is included in the standard template and should not be removed from component documentation.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
🪛 LanguageTool
apps/engineering/content/design/components/buttons/refresh-button.mdx

[grammar] ~9-~9: There might be a problem here.
Context: ...rd navigation, and proper accessibility features. ## Features - Keyboard Shortcut: Built-in support f...

(QB_NEW_EN_MERGED_MATCH)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (17)
  • GitHub Check: Build / Build
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Test Packages / Test ./packages/cache
  • GitHub Check: Test Packages / Test ./apps/dashboard
  • GitHub Check: Test Packages / Test ./packages/nextjs
  • GitHub Check: Test Packages / Test ./packages/rbac
  • GitHub Check: Test Packages / Test ./packages/api
  • GitHub Check: Test Packages / Test ./internal/clickhouse
  • GitHub Check: Test Packages / Test ./packages/hono
  • GitHub Check: Test Packages / Test ./internal/id
  • GitHub Check: Test Packages / Test ./internal/resend
  • GitHub Check: Test Packages / Test ./internal/billing
  • GitHub Check: Test Packages / Test ./internal/encryption
  • GitHub Check: Test Packages / Test ./internal/hash
  • GitHub Check: Test Packages / Test ./internal/keys
  • GitHub Check: autofix
  • GitHub Check: Analyze (javascript-typescript)

…ton.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@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: 1

🔭 Outside diff range comments (1)
apps/engineering/content/design/components/buttons/refresh-button.mdx (1)

72-78: Missing “Accessibility” section required by the standard template
Per the agreed-upon documentation template (see previous learnings), every component doc must include a dedicated “## Accessibility” section. Its absence breaks consistency and risks key guidance being overlooked.

Consider appending something like:

 ## Behavior
@@
 - Live mode is temporarily disabled if enabled
+
+## Accessibility
+
+- **Focus order**: The button is part of the natural tab order and gains focus visibility via the design-system focus ring.
+- **Shortcut discoverability**: The tooltip announces ⌥+⇧+R for screen-reader users.
+- **ARIA labelling**: `aria-label="Refresh"` is applied so the button is announced unambiguously.
+- **Disabled semantics**: When `isEnabled` is false, `disabled` is set and the tooltip explains why refresh is unavailable.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2a36998 and a3eec0e.

📒 Files selected for processing (1)
  • apps/engineering/content/design/components/buttons/refresh-button.mdx (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3439
File: apps/engineering/content/design/components/dialogs/dialog-container.mdx:103-111
Timestamp: 2025-07-08T12:47:17.841Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), the Accessibility section is included in the standard template and should not be removed from component documentation.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#2810
File: internal/ui/src/components/date-time/components/time-split.tsx:10-14
Timestamp: 2025-01-22T16:51:59.978Z
Learning: The DateTime component in internal/ui/src/components/date-time/components/time-split.tsx already includes sufficient validation through handleChange and handleBlur functions, making additional runtime validation unnecessary.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
apps/engineering/content/design/components/buttons/refresh-button.mdx (10)
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3439
File: apps/engineering/content/design/components/dialogs/dialog-container.mdx:103-111
Timestamp: 2025-07-08T12:47:17.841Z
Learning: In component documentation files (e.g., `.mdx` files in `apps/engineering/content/design/components/`), the Accessibility section is included in the standard template and should not be removed from component documentation.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2143
File: apps/dashboard/components/ui/group-button.tsx:21-31
Timestamp: 2024-12-03T14:07:45.173Z
Learning: In the `ButtonGroup` component (`apps/dashboard/components/ui/group-button.tsx`), avoid suggesting the use of `role="group"` in ARIA attributes.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-stepper-mobile.tsx:16-20
Timestamp: 2024-10-23T16:25:33.113Z
Learning: In the `apps/www/components/glossary/terms-stepper-mobile.tsx` file, avoid suggesting to extract the term navigation logic into a custom hook, as the user prefers to keep the component straightforward.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#2825
File: apps/dashboard/app/(app)/logs-v2/components/controls/components/logs-datetime/index.tsx:0-0
Timestamp: 2025-01-30T20:38:00.058Z
Learning: In the logs dashboard, keyboard shortcuts that toggle UI elements (like popovers) should be implemented in the component that owns the state being toggled, not in the presentational wrapper components. For example, the 'T' shortcut for toggling the datetime filter is implemented in DatetimePopover, not in LogsDateTime.
Learnt from: CR
PR: unkeyed/unkey#0
File: go/deploy/CLAUDE.md:0-0
Timestamp: 2025-07-09T08:42:29.316Z
Learning: Applies to go/deploy/**/*.{go,js,ts,tsx,py,sh,md,txt,json,yaml,yml,ini,rb,java,c,cpp,h,cs,rs,php,html,css,scss,xml} : Use `AIDEV-NOTE:`, `AIDEV-TODO:`, `AIDEV-BUSINESS_RULE:`, or `AIDEV-QUESTION:` (all-caps prefix) as anchor comments aimed at AI and developers.
Learnt from: p6l-richard
PR: unkeyed/unkey#2085
File: apps/www/components/glossary/terms-rolodex-desktop.tsx:26-37
Timestamp: 2024-10-23T16:20:19.324Z
Learning: When reviewing React components in this project, avoid suggesting manual memoization with `useMemo` for performance optimizations, as the team prefers to rely on the React compiler to handle such optimizations.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3173
File: apps/docs/security/delete-protection.mdx:32-36
Timestamp: 2025-04-22T17:33:28.162Z
Learning: In the Unkey dashboard UI for delete protection, the button/link to initiate the process is labeled "Disable Delete Protection" while the confirmation button is labeled "Disable API Delete Protection". The documentation should maintain these different labels to match the actual UI.
Learnt from: MichaelUnkey
PR: unkeyed/unkey#3425
File: apps/engineering/content/design/components/filter/control-cloud.examples.tsx:73-83
Timestamp: 2025-07-02T14:13:01.711Z
Learning: In apps/engineering/content/design/components/, when the `RenderComponentWithSnippet` component does not render code snippets correctly, use the `customCodeSnippet` prop to manually provide the correct JSX code as a string. This manual approach is necessary due to technical limitations in the automatic rendering mechanism.
Learnt from: CR
PR: unkeyed/unkey#0
File: go/deploy/CLAUDE.md:0-0
Timestamp: 2025-07-09T08:42:29.316Z
Learning: Applies to go/deploy/**/*.{go,js,ts,tsx,py,sh,md,txt,json,yaml,yml,ini,rb,java,c,cpp,h,cs,rs,php,html,css,scss,xml} : Make sure to add relevant anchor comments whenever a file or piece of code is too complex, very important, confusing, or could have a bug.
Learnt from: ogzhanolguncu
PR: unkeyed/unkey#3115
File: apps/dashboard/components/logs/checkbox/filters-popover.tsx:33-55
Timestamp: 2025-04-24T14:34:30.621Z
Learning: In the ShortcutActivator component within filters-popover.tsx, the purpose is to track keys separately for each filter item, providing a registration mechanism for shortcuts passed to it rather than enforcing specific key combinations like option+shift+key.
🪛 LanguageTool
apps/engineering/content/design/components/buttons/refresh-button.mdx

[grammar] ~7-~7: Use proper spacing conventions.
Context: ..../refresh-button.examples"; ## Overview The RefreshButton component offers built...

(QB_NEW_EN_OTHER_ERROR_IDS_000007)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (19)
  • GitHub Check: Test Go API Local / Test (Shard 3/8)
  • GitHub Check: Test Go API Local / Test (Shard 5/8)
  • GitHub Check: Test Go API Local / Test (Shard 7/8)
  • GitHub Check: Test Go API Local / Test (Shard 2/8)
  • GitHub Check: Test Go API Local / Test (Shard 8/8)
  • GitHub Check: Test Go API Local / Test (Shard 6/8)
  • GitHub Check: Test Go API Local / Test (Shard 4/8)
  • GitHub Check: Test Go API Local / Test (Shard 1/8)
  • GitHub Check: Build / Build
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Test Packages / Test ./apps/dashboard
  • GitHub Check: Test Packages / Test ./internal/clickhouse
  • GitHub Check: Test Packages / Test ./internal/encryption
  • GitHub Check: Test Packages / Test ./packages/nextjs
  • GitHub Check: Test Packages / Test ./internal/resend
  • GitHub Check: Test Packages / Test ./packages/hono
  • GitHub Check: Test Packages / Test ./packages/api
  • GitHub Check: Test Packages / Test ./internal/id
  • GitHub Check: Analyze (javascript-typescript)

@perkinsjr perkinsjr self-requested a review July 9, 2025 16:19
@MichaelUnkey MichaelUnkey added this pull request to the merge queue Jul 9, 2025
github-merge-queue bot pushed a commit that referenced this pull request Jul 9, 2025
* standard format for end docs

* manual props table

* [autofix.ci] apply automated fixes

* some rabbit changes

* rabbit changes

* rabbit

* spacing

* rabbit

* rabbit

* missing overview added

* Update apps/engineering/content/design/components/buttons/refresh-button.mdx

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

---------

Co-authored-by: James P <james@unkey.dev>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to no response for status checks Jul 9, 2025
@perkinsjr perkinsjr merged commit 54398ab into main Jul 10, 2025
28 of 37 checks passed
@perkinsjr perkinsjr deleted the eng-1870-consistent-layout-for-engineering-documents branch July 10, 2025 12:54
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.

2 participants