Skip to content

feat(web): 게스트/Soft Wall 게이트 단일화 + 포스트 열람 개방 + auth 폼 i18n (#850)#913

Merged
thxforall merged 2 commits into
devfrom
feat/850-guest-softwall
Jul 11, 2026
Merged

feat(web): 게스트/Soft Wall 게이트 단일화 + 포스트 열람 개방 + auth 폼 i18n (#850)#913
thxforall merged 2 commits into
devfrom
feat/850-guest-softwall

Conversation

@thxforall

Copy link
Copy Markdown
Contributor

What

게스트 브라우징 정책을 "열람 개방 + 액션 게이트"로 단일화한다. (map #789 / 결정 #794)

⚠️ 프로덕션 행동 변경 (리뷰 필독)

  1. 익명 포스트 3회 소프트월 → 완전 개방. compose.ts에서 익명 포스트 열람 하드블록(x-soft-wall) 제거. 게이트는 write-action(like/save/decode/follow)에서만. killswitch 인프라(lib/softwall/helpers.ts)는 dormant 유지(dead code, 되살릴 수 있게 보존).
  2. /login·/signup 동적 렌더 전환. AuthIntlProvidercookies()(NEXT_LOCALE)를 읽음. 인증 페이지라 수용 가능.

Changes

  • 게이트 단일화: SoftWallSheet 삭제 → LoginRequiredModal을 단일 진입점으로 승격(signup 우선 + Log in 토글 + dismissible "둘러보기 계속"), i18n(Auth.modal.*)
  • sign-in flash 픽스: LibraryShellauthStore.isInitialized 가드
  • 게스트 nav 자물쇠: shellNav/AppSidebar/MobileBottomTabBar — Library/Profile에 requiresAuth, 게스트 클릭 시 소프트 게이트
  • auth 폼 i18n: 라우트 대이동 없이 AuthIntlProvider로 non-[locale] 라우트 provider 래핑, LoginForm/SignupForm useTranslations("Auth")

Deferred (honest)

  • AuthSplitLayout 좌측 패널 HERO_BENEFITS·약관 푸터 영문 하드코딩 유지(공유 서버 레이아웃) — 후속

Carve-out

Verify

  • tsc 0 · vitest 775/775 (compose soft-wall 회귀 + login-modal + softwall helpers 포함) · 리뷰어 독립 재검증 완료

🤖 Generated with Claude Code

thxforall and others added 2 commits July 11, 2026 20:27
3중 게이트(SoftWallSheet 뷰 하드블록 / route redirect / 클라 모달)를
LoginRequiredModal 단일 진입점으로 수렴한다 (#794 결정 1·2·4).

- 열람 개방: compose.ts에서 익명 포스트 열람 하드블록(count>limit →
  x-soft-wall) 제거. posts/[id]는 SoftWallSheet·headers() 없이 공개 렌더.
  게이트는 write-action(like/save/decode)의 LoginRequiredModal에서만.
  killswitch/미터링 infra(lib/softwall/helpers.ts)는 dormant로 보존.
  SoftWallSheet.tsx 삭제, 관련 테스트를 열람-개방 회귀 테스트로 교체.
- 단일 진입점: LoginRequiredModal을 signup 우선 + login 토글로 승격,
  Auth 네임스페이스로 i18n(dismissible = continue-as-guest 유지).
- sign-in flash 픽스: LibraryShell + 게스트 nav 자물쇠 모두 authStore
  isInitialized 가드 — 하이드레이션 전 로그인 유저가 signedOut/lock을
  플래시하지 않게 한다(가드 전엔 optimistic 링크).
- 게스트 nav 자물쇠: Library/Profile에 requiresAuth 표기, 게스트는 자물쇠
  아이콘 + 클릭 시 소프트 게이트(하드 리다이렉트 대신 LoginRequiredModal).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
/login·/signup은 app/[locale]/ 밖이라 NextIntlClientProvider가 없어
useTranslations가 크래시했다. 라우트를 [locale]로 대이동하는 대신
AuthIntlProvider(NEXT_LOCALE 쿠키로 locale 해석 + messages 명시 로드)로
두 레이아웃을 래핑해 폼을 locale-aware로 만든다. 쿠키 없을 땐
RENDERED_LOCALE(앱이 실제 렌더하는 로케일, <html lang> 고정값)로 폴백해
쿠키리스 딥링크가 주변 앱과 어긋나지 않게 한다.

- LoginForm/SignupForm: 하드코딩 영문(Email/Password/Remember me 등) →
  useTranslations("Auth"). 약관 동의·확인메일 안내는 t.rich.
- login/signup page: 에디토리얼 헤드라인/서브카피를 AuthHeroCopy 클라이언트
  컴포넌트(t.rich)로 이관 — 서버 getTranslations 리스크 회피.
- AuthSplitLayout: subcopy prop을 ReactNode로 확장(클라 컴포넌트 수용).
- auth 화면에 continue-as-guest("둘러보기 계속") 어피던스 복원 (#794 결정 3).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 11, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
decoded-app Building Building Preview, Comment Jul 11, 2026 11:43am

@thxforall thxforall moved this from Todo to In Progress in decoded-monorepo Jul 11, 2026
@thxforall thxforall added the bump:patch Bug fixes / internal refactor label Jul 11, 2026
@thxforall
thxforall merged commit f55e4f7 into dev Jul 11, 2026
7 of 9 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in decoded-monorepo Jul 11, 2026
github-actions Bot pushed a commit that referenced this pull request Jul 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bump:patch Bug fixes / internal refactor

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant