Skip to content

Conversation

@vvan2
Copy link
Member

@vvan2 vvan2 commented Oct 19, 2025

ISSUE

❗ WORK DESCRIPTION

  • color, type, theme 수정
  • design system 세팅

📸 SCREENSHOT

📢 TO REVIEWERS

  • 저렇게 쓰시면 됩니다

Summary by CodeRabbit

  • New Features

    • Redesigned visual design system with an updated color palette featuring sky blue, deep blue, grey, and red tones.
    • Introduced a new typography system with refined font styling and sizing for improved readability.
  • Bug Fixes

    • Enhanced home screen styling to leverage the updated design system.

@vvan2 vvan2 self-assigned this Oct 19, 2025
@vvan2 vvan2 added setting ⚙️ 기초 세팅 주완🐹 주완 전용 라벨 labels Oct 19, 2025
@vvan2 vvan2 linked an issue Oct 19, 2025 that may be closed by this pull request
1 task
@coderabbitai
Copy link

coderabbitai bot commented Oct 19, 2025

Walkthrough

Complete redesign of the design system architecture from Material Design 3 to a custom HsLink theme. Replaced legacy color palette with new SkyBlue, DeepBlue, Grey, and Red color families. Introduced strongly-typed HsLinkColor and HsLinkTypography data classes backed by CompositionLocals. Updated theme infrastructure to provide colors and typography through composition locals instead of static schemes.

Changes

Cohort / File(s) Summary
Color System Redesign
Color.kt
Removed legacy Material Design 3 colors (Purple80, PurpleGrey80, Pink80, Purple40, PurpleGrey40, Pink40). Introduced new color families: Common, Transparent, SkyBlue (100–700), DeepBlue (100–700), Grey (100–700), Red (100–700). Added HsLinkColor data class, defaultHsLinkColor instance, and LocalHsLinkColors composition local.
Theme Infrastructure
Theme.kt
Removed static DarkColorScheme/LightColorScheme definitions. Introduced HsLinkTheme object exposing colors and typography via composition locals. Added ProvideHsLinkColorsAndTypography composable wrapper. Simplified HsLinkTheme composable to accept only content. Added status bar appearance side-effect logic.
Typography System
Type.kt
Replaced Material default Typography with custom system. Added three font families: HsLinkSemiBoldFont, HsLinkRegularFont, HsLinkMediumFont. Introduced HsLinkTypography data class with named text style properties (title_, body_, caption_, btm_). Added defaultHsLinkTypography instance and LocalHsLinkTypography composition local.
Consumer Implementation
HomeScreen.kt
Updated HomeRoute to wrap HomeScreen in HsLinkTheme scope. Modified HomeScreen to apply typography (body_16Normal) and color (SkyBlue100) from the new theme system.

Sequence Diagram

sequenceDiagram
    participant App as Application
    participant HsLinkTheme as HsLinkTheme<br/>(Object)
    participant ProvideCompose as ProvideHsLinkColorsAndTypography
    participant CompLocal as CompositionLocal<br/>(Colors & Typog)
    participant Screen as HomeScreen

    App->>HsLinkTheme: HsLinkTheme { content }
    HsLinkTheme->>ProvideCompose: ProvideHsLinkColorsAndTypography<br/>(defaultHsLinkColor,<br/>defaultHsLinkTypography)
    ProvideCompose->>CompLocal: CompositionLocalProvider<br/>(LocalHsLinkColors,<br/>LocalHsLinkTypography)
    CompLocal->>Screen: Render with theme context
    Screen->>HsLinkTheme: HsLinkTheme.colors<br/>HsLinkTheme.typography
    HsLinkTheme-->>Screen: Returns current<br/>LocalHsLinkColors.current<br/>LocalHsLinkTypography.current
    Screen->>Screen: Apply SkyBlue100 color<br/>+ body_16Normal style
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

The changes involve significant architectural restructuring across three foundational theme files with multiple interdependent data classes and composition locals. The migration from Material Design 3 to a custom theme system requires careful review of the new typing contracts, color mappings, and theme provision logic. While changes are cohesive in purpose, the density of new public APIs and their interconnections across files demands moderate-to-high scrutiny.

Possibly related PRs

Suggested reviewers

  • dmp100

Poem

🐰 Whiskers twitching with delight,
New colors paint the screen so bright,
SkyBlue skies and DeepBlue dreams,
A custom theme now reigns supreme!
Composition locals hold the way,
Design system's born today!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Title Check ✅ Passed The pull request title "[setting/#7] design system" directly aligns with the primary objective of the changeset. The modifications across Color.kt, Theme.kt, and Type.kt collectively establish a new design system architecture based on CompositionLocal, including a restructured color palette (HsLinkColor), typography system (HsLinkTypography), and theming approach (HsLinkTheme). The title is concise, specific, and clearly communicates the main purpose of the changes without being vague or generic.
Linked Issues Check ✅ Passed The code changes directly address the primary objective of linked issue #7 to set up the design system. The modifications introduce a comprehensive design system architecture: a new color palette and HsLinkColor data structure (Color.kt), a CompositionLocal-based theming approach with HsLinkTheme object (Theme.kt), and a structured typography system with HsLinkTypography (Type.kt). These changes collectively establish the foundational design system infrastructure required by the issue, providing centralized color and typography management throughout the application.
Out of Scope Changes Check ✅ Passed
Description Check ✅ Passed The pull request description follows the required template structure with all major sections present: ISSUE (closed #7), WORK DESCRIPTION (color, type, theme modifications; design system setup), SCREENSHOT (two images with URLs), and TO REVIEWERS section. While the work description is concise, it adequately covers the scope of changes. All required template elements are included, making the description sufficiently complete for reviewers to understand the intent and scope of the changes.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch setting/#7-design-system

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

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (6)
app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Color.kt (2)

111-111: Use a crashing default for CompositionLocal to catch missing providers early.

-val LocalHsLinkColors = staticCompositionLocalOf { defaultHsLinkColor }
+val LocalHsLinkColors = staticCompositionLocalOf<HsLinkColor> {
+    error("No HsLinkColors provided")
+}

45-76: Token and API ergonomics: consider semantic aliases and property casing.

  • Add semantic roles (e.g., primary, onPrimary, background, onBackground, surface, error) mapped to scale tokens to decouple UI from raw scales and ease dark-mode.
  • Prefer lowerCamelCase for data class properties to align with Kotlin style.
app/src/main/java/com/hsLink/hslink/presentation/home/HomeScreen.kt (1)

15-17: Lift HsLinkTheme higher (e.g., App/NavHost) to avoid per-screen re-wrapping and status-bar flicker.

app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Theme.kt (1)

53-55: Bridge your tokens into Material3 ColorScheme/Typography for wider theming.

Pass a Material3 ColorScheme and Typography to MaterialTheme(...) so stock components adopt your DS. Suggest adding a small mapper (e.g., toMaterialColorScheme(colors)) and supplying it here.

app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Type.kt (2)

128-128: Use a crashing default for LocalHsLinkTypography to surface missing providers.

-val LocalHsLinkTypography = staticCompositionLocalOf { defaultHsLinkTypography }
+val LocalHsLinkTypography = staticCompositionLocalOf<HsLinkTypography> {
+    error("No HsLinkTypography provided")
+}

31-34: Clarify button text style names.

Rename btm_L/M/S to clearer API like buttonLabelLarge/Medium/Small for readability and IDE discoverability.

Also applies to: 105-125

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 38deb29 and 40467a2.

⛔ Files ignored due to path filters (3)
  • app/src/main/res/font/pretendard_medium.otf is excluded by !**/*.otf
  • app/src/main/res/font/pretendard_regular.otf is excluded by !**/*.otf
  • app/src/main/res/font/pretendard_semibold.otf is excluded by !**/*.otf
📒 Files selected for processing (4)
  • app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Color.kt (1 hunks)
  • app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Theme.kt (1 hunks)
  • app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Type.kt (1 hunks)
  • app/src/main/java/com/hsLink/hslink/presentation/home/HomeScreen.kt (2 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
app/src/main/java/com/hsLink/hslink/presentation/home/HomeScreen.kt (1)
app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Theme.kt (1)
  • HsLinkTheme (37-57)
⏰ 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). (1)
  • GitHub Check: build-and-test

val Pink40 = Color(0xFF7D5260) No newline at end of file
val Common = Color(0xFFFFFFFF)

val Transparent = Color(0xFF2D2D2D)
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

"Transparent" is opaque (#2D2D2D); make it truly transparent.

Use 0x00000000 (or Color.Transparent) to avoid unexpected opaque backgrounds.

-val Transparent = Color(0xFF2D2D2D)
+val Transparent = Color(0x00000000) // or: Color.Transparent
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
val Transparent = Color(0xFF2D2D2D)
val Transparent = Color(0x00000000) // or: Color.Transparent
🤖 Prompt for AI Agents
In app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Color.kt around
line 10, the val Transparent is defined as an opaque color (0xFF2D2D2D) instead
of being transparent; replace that value with a true transparent color (e.g.,
0x00000000) or use Color.Transparent so the variable name matches its behavior
and avoids unexpected opaque backgrounds.

Comment on lines +45 to +51
val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
(view.context as Activity).window.run {
WindowCompat.getInsetsController(this, view).isAppearanceLightStatusBars = false
}
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Status bar icon contrast is inverted for a light UI.

Setting isAppearanceLightStatusBars = false forces light icons; on a light background they become unreadable. Default to dark icons on light backgrounds, or compute dynamically.

-                    WindowCompat.getInsetsController(this, view).isAppearanceLightStatusBars = false
+                    // For light background (e.g., white), use dark icons:
+                    WindowCompat.getInsetsController(this, view).isAppearanceLightStatusBars = true
🤖 Prompt for AI Agents
In app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Theme.kt around
lines 45–51, the code unconditionally sets isAppearanceLightStatusBars = false
which forces light status bar icons (poor contrast on light backgrounds); change
it to compute the correct value from the current theme (e.g., use
isSystemInDarkTheme() or MaterialTheme.colors.isLight) and set
isAppearanceLightStatusBars to true when the UI is light (so dark icons are
used), otherwise set it to false; implement this conditional assignment inside
the existing SideEffect block and keep casting/view access unchanged.

Comment on lines +13 to +15
val HsLinkSemiBoldFont = FontFamily(Font(R.font.pretendard_semibold))
val HsLinkRegularFont = FontFamily(Font(R.font.pretendard_regular))
val HsLinkMediumFont = FontFamily(Font(R.font.pretendard_medium))
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify font resources exist (pretendard_*).

Ensure res/font/pretendard_{semibold,regular,medium}.* are present to avoid build errors.


🏁 Script executed:

#!/bin/bash
# List expected font files and confirm references.
fd -a -t f 'res/font/pretendard_*' || true
rg -nP 'R\.font\.pretendard_(semibold|regular|medium)' -g '!**/build/**' -S

Length of output: 416


Missing font resource files will cause build failures.

The code references R.font.pretendard_semibold, R.font.pretendard_regular, and R.font.pretendard_medium at lines 13-15, but these font resource files do not exist in res/font/. Add the three font files:

  • res/font/pretendard_semibold.ttf (or .otf)
  • res/font/pretendard_regular.ttf (or .otf)
  • res/font/pretendard_medium.ttf (or .otf)
🤖 Prompt for AI Agents
In app/src/main/java/com/hsLink/hslink/core/designsystem/theme/Type.kt around
lines 13 to 15 the code references R.font.pretendard_semibold,
R.font.pretendard_regular, and R.font.pretendard_medium which are missing and
will break the build; add the corresponding font resource files into res/font
(e.g., pretendard_semibold.ttf or .otf, pretendard_regular.ttf or .otf,
pretendard_medium.ttf or .otf), ensure their filenames match the R identifiers
(lowercase, underscores), and sync/clean the project so the resources are
recognized.

Comment on lines +27 to 29
style = HsLinkTheme.typography.body_16Normal,
color = HsLinkTheme.colors.SkyBlue100,
modifier = modifier
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Text color likely fails contrast; avoid very light SkyBlue100 for body text.

Use a darker token (e.g., DeepBlue700 or Grey700) or a semantic onBackground.

-        style = HsLinkTheme.typography.body_16Normal,
-        color = HsLinkTheme.colors.SkyBlue100,
+        style = HsLinkTheme.typography.body_16Normal,
+        color = HsLinkTheme.colors.DeepBlue700,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
style = HsLinkTheme.typography.body_16Normal,
color = HsLinkTheme.colors.SkyBlue100,
modifier = modifier
style = HsLinkTheme.typography.body_16Normal,
color = HsLinkTheme.colors.DeepBlue700,
modifier = modifier
🤖 Prompt for AI Agents
In app/src/main/java/com/hsLink/hslink/presentation/home/HomeScreen.kt around
lines 27 to 29, the Text uses a very light color token
(HsLinkTheme.colors.SkyBlue100) which is inappropriate for body text; replace it
with a darker token such as HsLinkTheme.colors.DeepBlue700,
HsLinkTheme.colors.Grey700, or the semantic HsLinkTheme.colors.onBackground to
ensure readable contrast, and update any previews or tests to reflect the new
color.

@vvan2 vvan2 merged commit 74495fd into develop Oct 20, 2025
3 checks passed
@vvan2 vvan2 deleted the setting/#7-design-system branch October 20, 2025 03:26
@coderabbitai coderabbitai bot mentioned this pull request Nov 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

setting ⚙️ 기초 세팅 주완🐹 주완 전용 라벨

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[setting] 디자인 시스템 세팅

2 participants