Skip to content

Conversation

@jbdevprimary
Copy link
Contributor

@jbdevprimary jbdevprimary commented Jan 19, 2026

Summary

  • Creates centralized src/lib/organic-styles.ts module with ViewStyle/TextStyle constants for the P3 "Warm Technical" design system
  • Updates core UI components to use these constants instead of inline magic numbers
  • All 233 tests pass, web build succeeds

Components Updated

Component Changes
Card.tsx Use organicBorderRadius.card
Button.tsx Use organicBorderRadius.button, extract color constants
Modal.tsx Use organicBorderRadius.modal and .button
Toast.tsx Use organicBorderRadius.toast
Badge.tsx Use organicBorderRadius.badge
Input.tsx Use organicBorderRadius.textInput
welcome.tsx Use .hero, .card, .cta
chat.tsx Use .badge, .button

Test plan

  • TypeScript type check passes
  • All 233 tests pass
  • Web build (npx expo export --platform web) succeeds
  • Visual verification in iOS/Android simulators

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Button, Card, and Input now accept external style props for easier customization.
  • Refactor

    • Centralized border-radius and shadow tokens applied across the UI for consistent shapes and visuals.
    • Multiple components updated to rely on the shared design tokens, improving styling consistency.
  • Chores

    • Added generated expo-cli ignore entries to project ignore file.

✏️ Tip: You can customize this high-level summary in your review settings.

jbdevprimary and others added 6 commits January 18, 2026 23:50
- Change social config from array to object format for Starlight compatibility
- Fix find command to use docs-dist instead of dist in workflow

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create centralized organic-styles.ts module with ViewStyle/TextStyle
constants for the P3 "Warm Technical" design system. Update core UI
components to use these constants instead of inline magic numbers.

Components updated:
- welcome.tsx: Use hero, card, cta organic radii
- Card.tsx: Use card organic radius
- Button.tsx: Use button organic radius, extract color constants
- Modal.tsx: Use modal and button organic radii
- Toast.tsx: Use toast organic radius
- Badge.tsx: Use badge organic radius
- Input.tsx: Use textInput organic radius

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update chat screen to use centralized organic style constants
for buttons and badge elements instead of inline values.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 19, 2026

Note

Other AI code review bot(s) detected

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

📝 Walkthrough

Walkthrough

Adds a new centralized styling module src/lib/organic-styles.ts exporting border-radius and shadow tokens, updates many UI components and pages to consume those tokens (replacing inline per‑corner radii), and introduces style props/typing adjustments in several core UI components; also appends an expo-cli block to .gitignore.

Changes

Cohort / File(s) Summary
Core styling & exports
src/lib/organic-styles.ts, src/lib/index.ts
New organicBorderRadius and organicShadow constants added; index gets explanatory comments about separate export to avoid native module deps.
Config
.gitignore
Appended expo-cli generated block to ignore .expo/ and expo-env.d.ts.
UI library — Buttons / Cards / Inputs / Stack
src/components/ui/Button.tsx, src/components/ui/Card.tsx, src/components/ui/Input.tsx, src/components/layout/Stack.tsx
Added/expanded style props and typing; Button: activity indicator color logic and merges organicBorderRadius.button; Card/Input use organicBorderRadius.* and accept style prop; Stack style typing changed to StyleProp<ViewStyle> and flattens incoming styles.
Feedback & overlays
src/components/feedback/Modal.tsx, src/components/feedback/Toast.tsx, src/components/feedback/BottomSheet.tsx, src/components/feedback/Loading.tsx, src/components/feedback/Progress.tsx
Replaced inline per-corner radii with organicBorderRadius tokens; Modal/ConfirmDialog/ActionSheet/BottomSheet compose radius token into style arrays.
Display components
src/components/display/Badge.tsx, src/components/display/EmptyState.tsx, src/components/display/Tooltip.tsx, src/components/display/Tooltip.tsx
Badge/EmptyState/Tooltip now use organicBorderRadius.* instead of inline radius objects.
Forms & inputs
src/components/form/Checkbox.tsx, src/components/form/Select.tsx, src/components/form/TextArea.tsx
Controls now apply organicBorderRadius tokens (badge/input/textInput/modal) and compose with sizing styles; no behavior changes.
Code viewer & file UI
src/components/code/DiffViewer.tsx, src/components/code/FileTree.tsx
Wrapper views switched to organicBorderRadius.card.
Feedback UI — modal/dialog/toast/button radii
src/components/feedback/* (see above)
Centralized button/cancel/confirm radii applied across feedback components.
Screens & pages (many)
app/(onboarding)/*, app/(tabs)/*, app/settings/*, app/+not-found.tsx, app/agent/[id].tsx, app/project/[id].tsx, ...
Large set of screens/pages updated to import @/lib/organic-styles and replace inline per-corner borderRadius objects with organicBorderRadius tokens (card, button, badge, hero, cta) — purely visual changes.
Misc components
src/components/error/ErrorFallback.tsx, src/components/feedback/BottomSheet.tsx, src/components/display/...
Error and other miscellaneous components updated to use the centralized radius tokens.

Sequence Diagram(s)

(Skipped — changes are styling consolidation without new multi‑actor sequential control flow.)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰
I hopped along the rounded edge,
tucked radii into one hedge,
corners neat and tokens sewn,
a unified shape now fully grown —
yay, the UI feels like home! 🥕✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: refactoring UI components to use centralized border-radius constants instead of inline values across the codebase.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

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

❤️ Share

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

@gemini-code-assist
Copy link

Summary of Changes

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

This pull request significantly refactors the application's UI styling by centralizing "organic" border-radius values into a dedicated organic-styles.ts module. This change promotes design consistency across various components, including cards, buttons, modals, and input fields, by replacing numerous inline style definitions with a single source of truth. The refactoring enhances maintainability and ensures that the application adheres more closely to its defined "Warm Technical" design system.

Highlights

  • Centralized Organic Styles: Introduced src/lib/organic-styles.ts to house ViewStyle/TextStyle constants for the P3 "Warm Technical" design system's organic border-radius values.
  • UI Component Refactoring: Core UI components such as Card, Button, Modal, Toast, Badge, Input, welcome.tsx, and chat.tsx were updated to consume these new centralized constants, replacing hardcoded inline styles.
  • Color Constant Extraction: Extracted ActivityIndicator colors in Button.tsx and placeholderTextColor in Input.tsx into named constants for improved readability and maintainability.
  • Build Configuration Update: Added expo-env.d.ts to the .gitignore file, likely due to an expo-cli generation.
Using Gemini Code Assist

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

Invoking Gemini

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

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

Customization

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

Limitations & Feedback

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

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

Footnotes

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

@github-actions
Copy link

github-actions bot commented Jan 19, 2026

🚀 Expo preview is ready!

  • Project → thumbcode
  • Platforms → android, ios
  • Scheme → thumbcode
  • Runtime Version → 0.1.0
  • More info

Learn more about 𝝠 Expo Github Action

Copy link

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

Choose a reason for hiding this comment

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

Code Review

This is an excellent refactoring effort to centralize the 'organic' border-radius values from your design system into a single organic-styles.ts module. This greatly improves code maintainability, consistency, and adherence to the design system. The changes across the various components are clean and effective. I have a couple of suggestions to further enhance the code quality.

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

🤖 Fix all issues with AI agents
In `@src/lib/organic-styles.ts`:
- Around line 50-56: The textInput style object in organic-styles.ts is
incorrectly asserted as TextStyle while it contains border radius properties
that belong to ViewStyle; change the type assertion on the textInput object from
TextStyle to ViewStyle (or remove the assertion and type it appropriately) and
update the comment to note this is a container/View style for TextInput
(reference the textInput object and TextInput component) so the
borderTopLeftRadius, borderTopRightRadius, borderBottomRightRadius, and
borderBottomLeftRadius are typed correctly.
🧹 Nitpick comments (4)
src/lib/index.ts (1)

73-74: Consider clarifying the export rationale.

The comment mentions "native module dependency issues," but organic-styles.ts only uses import type { TextStyle, ViewStyle } which are type-only imports and shouldn't cause native module issues. If the intent is to avoid pulling React Native types into non-RN contexts (e.g., Node.js scripts), consider updating the comment to reflect the actual reason.

app/(tabs)/chat.tsx (1)

189-194: Consider migrating remaining inline border radii for consistency.

This container's border radius pattern (16, 14, 18, 12) closely resembles organicBorderRadius.card (16, 12, 20, 8). If exact values aren't critical here, consider using the centralized token for consistency.

Similarly, inline radii remain at:

  • Lines 263-268 (chat input wrapper)
  • Lines 284-289 (send button — matches organicBorderRadius.toast)

These could be migrated in a follow-up to complete the standardization.

src/components/ui/Input.tsx (1)

25-26: Consider co-locating color constants in the design system module.

PLACEHOLDER_COLOR is a design token that could live in src/lib/organic-styles.ts alongside the border radius tokens for centralized management. This would allow other components to reuse it consistently.

src/components/ui/Button.tsx (1)

67-67: Redundant type cast.

The style prop inherited from PressableProps is already typed as StyleProp<ViewStyle>, so the cast is unnecessary.

Suggested simplification
-      style={[organicBorderRadius.button, style as StyleProp<ViewStyle>]}
+      style={[organicBorderRadius.button, style]}

jbdevprimary and others added 2 commits January 19, 2026 03:36
- Standardize all 30 files to use organicBorderRadius constants
- Fix Stack component to accept StyleProp<ViewStyle> for array styles
- Remove 555 lines of inline border-radius code
- Run lint:fix to fix import ordering
- Add .expo/ to .gitignore
- All 233 tests pass, TypeScript passes

Files updated:
- All app screens (onboarding, tabs, settings, project, agent)
- All display components (Badge, EmptyState, Tooltip)
- All feedback components (BottomSheet, Loading, Progress, Toast)
- All form components (Checkbox, Select, TextArea)
- Layout components (Stack with StyleProp fix)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix Button style prop to handle function-based styles (Gemini high)
- Remove input/textInput duplication with shared constant (Gemini medium)
- Keep textInput as TextStyle for TextInput compatibility (CodeRabbit)
- All 233 tests pass, TypeScript passes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@sonarqubecloud
Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
30.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@jbdevprimary jbdevprimary merged commit 09c0b3f into main Jan 19, 2026
18 of 19 checks passed
@jbdevprimary jbdevprimary deleted the fix/production-styling-cleanup branch January 19, 2026 09:43
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