Skip to content

[feature/#40] HomeHashtag 컴포넌트 구현 #41

Merged
hyeminililo merged 9 commits intodevfrom
feature/#40-home-component
Mar 8, 2026
Merged

[feature/#40] HomeHashtag 컴포넌트 구현 #41
hyeminililo merged 9 commits intodevfrom
feature/#40-home-component

Conversation

@hyeminililo
Copy link
Collaborator

@hyeminililo hyeminililo commented Feb 20, 2026

✨ 작업 내용

  • 홈 화면에서 사용하는 HomeHashtag 컴포넌트 구현
  • 홈 섹션 우측 액션용 HomeSectionTrailingAction 컴포넌트 구현

📄 상세 내용

  • HomeHashtag

홈 화면에서 사용하는 캡슐 형태의 해시태그 UI를 컴포넌트로 분리하여 구현했습니다. 피그마에 있는 UI 디자인 적용했습니다

  • HomeSectionTrailingAction
    클릭 영역을 충분히 확보하기 위해 Row에 padding을 적용했습니다.

👀 To Reviewer

현재는 기본 clickable을 사용하고 있습니다. 추후 공통 noRippleClickable 커스텀 Modifier를 만약 사용한다면 해당 컴포넌트에도 적용 예정입니다. => 현재 HomeHashTag - 실시간인기여행지 부분이 background 컬러가 변경될 가능성이 있습니다 !

📎 관련 이슈

📷 스크린샷 / 영상

  • 전체보기 프리뷰
image
  • 해시태그 프리뷰
image

Summary by CodeRabbit

  • New Features

    • 홈 화면에 다양한 색상·타이포그래피·패딩을 지원하는 해시태그 배지 컴포넌트가 추가되었습니다. 자동으로 "#" 접두사가 붙어 표시됩니다.
    • 홈 섹션에 텍스트와 오른쪽 화살표를 함께 보여주는 전체 클릭 가능한 트레일링 액션 뷰가 추가되었습니다.
  • Style

    • 앱 타이포그래피에 소형 텍스트 스타일(Micro2)이 새로 도입되었습니다.

@hyeminililo hyeminililo self-assigned this Feb 20, 2026
@hyeminililo hyeminililo added feature ✨ 새로운 기능 추가, 신규 화면, API 연동 혜민 ☃️ 혜민씨 전용 라벨 labels Feb 20, 2026
@coderabbitai
Copy link

coderabbitai bot commented Feb 20, 2026

Walkthrough

홈 화면용 Jetpack Compose UI 컴포넌트 2개(해시태그 배지, 섹션 트레일링 액션)와 디자인 시스템 타이포그래피에 Micro2 텍스트 스타일을 추가합니다.

Changes

Cohort / File(s) Summary
HomeHashtag 컴포넌트
app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeHashtag.kt
해시태그 배지 Compose 컴포넌트 추가. "#" 접두사 포함 텍스트를 둥근 배지로 렌더링하며 색상, 타이포그래피, 패딩을 파라미터화. 여러 Preview 포함.
HomeSectionTrailingAction 컴포넌트
app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt
섹션 우측에 표시되는 클릭 가능한 트레일링 액션 Compose 컴포넌트 추가(라벨 텍스트 + 오른쪽 화살표 아이콘). onClick 파라미터와 Preview 포함.
타이포그래피 변경
app/src/main/java/com/gildongmu/dduru/core/designsystem/typography/Type.kt
DduruTypography에 Micro2: TextStyle 속성 추가 및 기본 초기화에 Micro2 스타일(pretendard, SemiBold, 10.sp 등) 정의. 데이터 클래스 시그니처 변경.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Suggested labels

mod 🎉

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (2 warnings, 1 inconclusive)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning HomeSectionTrailingAction 컴포넌트와 Micro2 TextStyle 추가는 이슈 #40의 직접적인 범위를 벗어나 있습니다. HomeSectionTrailingAction 및 Micro2 TextStyle이 HomeHashtag 구현에 필수적인 이유를 명시하거나 별도 이슈로 분류하세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Linked Issues check ❓ Inconclusive PR은 이슈 #40의 주요 요구사항인 해시태그 컴포넌트(HomeHashtag) 구현을 완료했지만, 글쓰기 컴포넌트는 미포함입니다. 글쓰기 컴포넌트 구현 상태를 확인하거나, 별도의 PR로 분리할 계획이 있는지 명확히 하세요.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 '[feature/#40] HomeHashtag 컴포넌트 구현'으로 HomeHashtag 컴포넌트 구현에 중점을 두고 있으며, 변경 사항의 주요 구성 요소 중 하나를 명확하게 설명하고 있습니다.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/#40-home-component

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.

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

🧹 Nitpick comments (1)
app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeHashtag.kt (1)

23-23: named argument = 앞뒤 공백 불일치 (Kotlin 스타일 가이드)

Line 23의 shape=RoundedCornerShape(size=99.dp)= 양쪽에 공백이 없어, 동일 파일 내 lines 24-25와 스타일이 불일치합니다. Kotlin 코딩 컨벤션 및 ktlint 규칙에 따르면 named argument에는 = 앞뒤 공백이 필요합니다.

✨ 제안하는 수정 방법
-            .clip(shape=RoundedCornerShape(size=99.dp))
+            .clip(shape = RoundedCornerShape(size = 99.dp))
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeHashtag.kt`
at line 23, Fix the inconsistent spacing for named arguments in HomeHashtag.kt
by adding spaces around the `=` in the `.clip` call: change the
`.clip(shape=RoundedCornerShape(size=99.dp))` usage so the named arguments match
the file's Kotlin style (use `shape = ...` and also `size = ...` inside
RoundedCornerShape) to comply with ktlint/Kotlin conventions and align with the
surrounding lines (references: the `.clip` call and `RoundedCornerShape`
constructor).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeHashtag.kt`:
- Around line 36-46: The two preview functions HomeHashtagDefaultPreview and
HomeHashtagLongTextPreview call HomeHashtag directly and crash because
LocalDduruColors/LocalDduruTypography (used via DduruTheme.colors and
DduruTheme.typography) are not provided; wrap each preview invocation in the
DduruTheme composition (e.g., DduruTheme { HomeHashtag(text = "...") }) so the
CompositionLocals are supplied before HomeHashtag uses DduruTheme.colors.gray300
or DduruTheme.typography.Caption2.

---

Nitpick comments:
In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeHashtag.kt`:
- Line 23: Fix the inconsistent spacing for named arguments in HomeHashtag.kt by
adding spaces around the `=` in the `.clip` call: change the
`.clip(shape=RoundedCornerShape(size=99.dp))` usage so the named arguments match
the file's Kotlin style (use `shape = ...` and also `size = ...` inside
RoundedCornerShape) to comply with ktlint/Kotlin conventions and align with the
surrounding lines (references: the `.clip` call and `RoundedCornerShape`
constructor).

dlwl224
dlwl224 previously approved these changes Feb 21, 2026
Copy link
Collaborator

@dlwl224 dlwl224 left a comment

Choose a reason for hiding this comment

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

예시 이미지도 포함해주신거 좋은것같습니다. 참고하겠습니다. 수고하셨습니다.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt (1)

30-31: 콘텐츠가 Start 정렬되어 "TrailingAction"의 디자인 의도와 맞지 않을 수 있음

Arrangement.spacedBy(8.dp)는 두 번째 정렬 인자 없이 사용할 경우, Row의 첫 번째 UI 요소가 화면 좌측부터 배치됩니다. fillMaxWidth()가 적용된 Row에서 Arrangement.spacedBy(8.dp)만 사용하면 [전체보기][8dp][→]왼쪽 정렬되어, "섹션 우측 트레일링 액션"이라는 컴포넌트 이름과 피그마 디자인 의도에 부합하지 않을 수 있습니다.

콘텐츠를 우측(End)에 정렬하려면 Arrangement.spacedBy(8.dp, Alignment.End)로 변경하거나, Text 앞에 Spacer(Modifier.weight(1f))를 추가하는 방식을 검토하세요.

✏️ 제안하는 수정 방법 (Arrangement.spacedBy 활용)
-        horizontalArrangement = Arrangement.spacedBy(8.dp)
+        horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.End)

부모 레이아웃에서 이 컴포넌트가 어떻게 배치되는지 확인해 피그마 디자인 의도와 실제 정렬이 일치하는지 검증이 필요합니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt`
around lines 30 - 31, Row in HomeSectionTrailingAction is currently using
Arrangement.spacedBy(8.dp) which left-aligns contents in a full-width Row;
change the horizontal arrangement to Arrangement.spacedBy(8.dp, Alignment.End)
to right-align the trailing action, or alternatively insert a
Spacer(Modifier.weight(1f)) before the first child to push content to the end.
Locate the Row declaration in HomeSectionTrailingAction.kt (the one with
verticalAlignment = Alignment.CenterVertically, horizontalArrangement =
Arrangement.spacedBy(8.dp)) and replace the arrangement or add the Spacer as
described, then verify in the parent layout that the component occupies full
width so the end alignment matches the Figma design.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt`:
- Around line 47-53: The Preview (HomeSectionTrailingActionPreview) is not
wrapped in DduruTheme so CompositionLocals used by HomeSectionTrailingAction
(DduruTheme.typography.Body4 and DduruTheme.colors.gray600) are missing; fix by
wrapping the call to HomeSectionTrailingAction inside DduruTheme { ... } in the
HomeSectionTrailingActionPreview function (ensure you call DduruTheme before
invoking HomeSectionTrailingAction and import/restore any theme provider as
needed).
- Around line 39-43: The clickable Row in HomeSectionTrailingAction.kt lacks
accessibility semantics; update the Row's Modifier (the same one that uses
clickable) to include a semantics block that sets role = Role.Button and a
meaningful contentDescription string describing the action (e.g., "Open section"
or context-specific label), and keep the Icon's contentDescription = null so the
Row-level label is used by screen readers; reference the Row modifier in
HomeSectionTrailingAction and import androidx.compose.ui.semantics.Role and
semantics.

---

Nitpick comments:
In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt`:
- Around line 30-31: Row in HomeSectionTrailingAction is currently using
Arrangement.spacedBy(8.dp) which left-aligns contents in a full-width Row;
change the horizontal arrangement to Arrangement.spacedBy(8.dp, Alignment.End)
to right-align the trailing action, or alternatively insert a
Spacer(Modifier.weight(1f)) before the first child to push content to the end.
Locate the Row declaration in HomeSectionTrailingAction.kt (the one with
verticalAlignment = Alignment.CenterVertically, horizontalArrangement =
Arrangement.spacedBy(8.dp)) and replace the arrangement or add the Spacer as
described, then verify in the parent layout that the component occupies full
width so the end alignment matches the Figma design.

Comment on lines +39 to +43
Icon(
imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight,
contentDescription = null,
tint = DduruTheme.colors.gray600
)
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

클릭 가능한 Row에 접근성(semantics) 레이블 누락

clickable Row 전체가 하나의 인터랙션 요소이지만, Row에도 Icon에도 접근성 설명이 없어 스크린 리더가 동작을 안내하지 못합니다.

IconcontentDescription = null은 텍스트가 충분한 컨텍스트를 제공하는 경우 허용되지만, clickable Modifier에 semantics 블록을 추가해 rolecontentDescription을 명시하는 것을 권장합니다.

♿ 접근성 개선 제안
     Row(
         modifier = modifier
             .fillMaxWidth()
-            .clickable(onClick = onClick)
+            .clickable(
+                onClick = onClick,
+                onClickLabel = text
+            )
             .padding(vertical = 4.dp),
📝 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
Icon(
imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight,
contentDescription = null,
tint = DduruTheme.colors.gray600
)
Row(
modifier = modifier
.fillMaxWidth()
.clickable(
onClick = onClick,
onClickLabel = text
)
.padding(vertical = 4.dp),
) {
Icon(
imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight,
contentDescription = null,
tint = DduruTheme.colors.gray600
)
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt`
around lines 39 - 43, The clickable Row in HomeSectionTrailingAction.kt lacks
accessibility semantics; update the Row's Modifier (the same one that uses
clickable) to include a semantics block that sets role = Role.Button and a
meaningful contentDescription string describing the action (e.g., "Open section"
or context-specific label), and keep the Icon's contentDescription = null so the
Row-level label is used by screen readers; reference the Row modifier in
HomeSectionTrailingAction and import androidx.compose.ui.semantics.Role and
semantics.

@hyeminililo hyeminililo requested a review from dlwl224 March 6, 2026 14:52
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: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt`:
- Around line 24-27: The Row in HomeSectionTrailingAction is too short for the
recommended 48.dp touch target; update the modifier chain to enforce a minimum
height by inserting sizeIn(minHeight = 48.dp) before .clickable(onClick =
onClick) (i.e., apply sizeIn on the same modifier used for Row so the clickable
area meets Material 3 touch target guidelines).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e57814c7-7e99-4909-82a9-2123771e40e9

📥 Commits

Reviewing files that changed from the base of the PR and between f155b8a and 3c54f66.

📒 Files selected for processing (3)
  • app/src/main/java/com/gildongmu/dduru/core/designsystem/typography/Type.kt
  • app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeHashtag.kt
  • app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt
🚧 Files skipped from review as they are similar to previous changes (1)
  • app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeHashtag.kt

Comment on lines +24 to +27
Row(
modifier = modifier
.clickable(onClick = onClick)
.padding(vertical = 4.dp),
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

find . -name "HomeSectionTrailingAction.kt" -type f

Repository: ddu-ru/ddu-ru-android

Length of output: 169


🏁 Script executed:

cat -n ./app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt

Repository: ddu-ru/ddu-ru-android

Length of output: 2059


🏁 Script executed:

# Check the design system theme to understand Body4 text style dimensions
fd -t f "theme" "app/src/main/java/com/gildongmu/dduru/core/designsystem" | head -20

Repository: ddu-ru/ddu-ru-android

Length of output: 135


🏁 Script executed:

# Let's look at the Typography definitions to understand Body4 dimensions
rg "Body4|body4" app/src/main/java/com/gildongmu/dduru/core/designsystem -A 2 -B 2 -t kt

Repository: ddu-ru/ddu-ru-android

Length of output: 91


🏁 Script executed:

cat -n app/src/main/java/com/gildongmu/dduru/core/designsystem/theme/Theme.kt | head -100

Repository: ddu-ru/ddu-ru-android

Length of output: 2492


🏁 Script executed:

fd -t f "Typography" app/src/main/java/com/gildongmu/dduru/core/designsystem/typography

Repository: ddu-ru/ddu-ru-android

Length of output: 47


🏁 Script executed:

rg "Body4" app/src/main/java/com/gildongmu/dduru/core/designsystem -A 3 -B 1

Repository: ddu-ru/ddu-ru-android

Length of output: 1051


🏁 Script executed:

cat -n app/src/main/java/com/gildongmu/dduru/core/designsystem/typography/Type.kt

Repository: ddu-ru/ddu-ru-android

Length of output: 5511


🏁 Script executed:

# Check if there are any size/dimension constants defined for touch targets
rg "48.dp|minHeight|touchTarget" app/src/main/java/com/gildongmu/dduru --max-count 20

Repository: ddu-ru/ddu-ru-android

Length of output: 280


🏁 Script executed:

# Check if there are any other similar components that define minimum touch target sizes
rg "sizeIn|minHeight|minWidth" app/src/main/java/com/gildongmu/dduru/presentation -A 1 -B 1 | head -40

Repository: ddu-ru/ddu-ru-android

Length of output: 47


🏁 Script executed:

# Verify Material Design guidelines for touch targets by checking Android documentation context
# Also check if this component is used in a context where touch target size might be constrained
rg "HomeSectionTrailingAction" app/src/main/java/com/gildongmu/dduru/presentation -B 2 -A 2

Repository: ddu-ru/ddu-ru-android

Length of output: 1564


🏁 Script executed:

# Check Icon default size in Material3
rg "Icon" app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt -A 5

Repository: ddu-ru/ddu-ru-android

Length of output: 623


🏁 Script executed:

# Verify how other clickable components in the app handle touch targets
fd "Button" app/src/main/java/com/gildongmu/dduru/core/designsystem/component -type f

Repository: ddu-ru/ddu-ru-android

Length of output: 235


🏁 Script executed:

# Check the exact usage location of this component to see if it's constrained
rg "HomeSectionTrailingAction" app/src/main/java/com/gildongmu/dduru/presentation/feature/home -B 5 -A 5

Repository: ddu-ru/ddu-ru-android

Length of output: 3022


🏁 Script executed:

# Verify Icon default size by checking Material3 documentation context in the codebase
rg "Icon\(" app/src/main/java/com/gildongmu/dduru --max-count 10 -A 3 | head -50

Repository: ddu-ru/ddu-ru-android

Length of output: 646


최소 터치 영역 48.dp를 보장하도록 명시하세요.

현재 코드에서 Row의 높이는 Body4 텍스트(약 17.6.sp 라인 높이)와 기본 아이콘 크기(24.dp)에 상하 패딩 8.dp만 더해져 약 32dp에 불과합니다. 이는 Material Design 3의 권장 최소 터치 영역 48.dp에 미치지 못합니다. sizeIn(minHeight = 48.dp).clickable() 전에 추가하여 접근성을 개선하세요.

🔧 제안하는 수정
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.sizeIn
 ...
     Row(
         modifier = modifier
+            .sizeIn(minHeight = 48.dp)
             .clickable(onClick = onClick)
             .padding(vertical = 4.dp),
📝 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
Row(
modifier = modifier
.clickable(onClick = onClick)
.padding(vertical = 4.dp),
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.sizeIn
Row(
modifier = modifier
.sizeIn(minHeight = 48.dp)
.clickable(onClick = onClick)
.padding(vertical = 4.dp),
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@app/src/main/java/com/gildongmu/dduru/presentation/feature/home/component/HomeSectionTrailingAction.kt`
around lines 24 - 27, The Row in HomeSectionTrailingAction is too short for the
recommended 48.dp touch target; update the modifier chain to enforce a minimum
height by inserting sizeIn(minHeight = 48.dp) before .clickable(onClick =
onClick) (i.e., apply sizeIn on the same modifier used for Row so the clickable
area meets Material 3 touch target guidelines).

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

굳이?

Copy link
Collaborator

@dlwl224 dlwl224 left a comment

Choose a reason for hiding this comment

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

수고하셨습니다

Copy link
Collaborator

@choi-day choi-day left a comment

Choose a reason for hiding this comment

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

수고하셨습니다~

@hyeminililo hyeminililo merged commit e768c02 into dev Mar 8, 2026
3 checks passed
@github-project-automation github-project-automation bot moved this from Todo to Done in Android Workspace Mar 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature ✨ 새로운 기능 추가, 신규 화면, API 연동 혜민 ☃️ 혜민씨 전용 라벨

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[feature] 홈화면 글쓰기 및 해시태그 컴포넌트 구현

3 participants