Conversation
홈은 뷰포트가 정해지기 전에 같은 크기의 스켈레톤을 그리고, 테두리·글자 스케일·관리자 배너 조회와 로컬 3000 포트를 맞춘다. Co-authored-by: Cursor <cursoragent@cursor.com>
fix: 첫 화면 정적 스켈레톤과 스타일·관리자 지표
develop가 data보다 뒤처져 다음 승격이 막혀 있어, 이미 data에 있는 머지 커밋만 포함한다.
…-20260924 sync: data 승격 머지를 develop에 포함한다
접힌 패널이 지도를 가리지 않게 하고, 서비스 롤 설정 실패도 banner_read_failed로 막는다. Co-authored-by: Cursor <cursoragent@cursor.com>
fix: 스켈레톤 해제와 배너 실패 코드
promote: develop를 data로 올린다
data에서 main으로 올리기 전에, main에만 있는 머지 커밋을 develop 경유로 포함한다.
…-20260924 sync: main 승격 머지를 develop에 포함한다
…-20260924b sync: data의 최신 승격 머지를 develop에 포함한다
promote: develop를 data로 올린다
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5943eb3455
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (cohortVideos.length > 0) return cohortVideos; | ||
| return growthInsightQuery.data?.videos ?? []; |
There was a problem hiding this comment.
Preserve an empty period cohort
When the selected period legitimately has no uploaded videos, the successful cohort response contains videos: [], but this condition treats that valid result as unavailable and substitutes growthInsightQuery, whose channel-growth scope is explicitly unfiltered by period. Consequently the dashboard shows all channel videos, totals, and top-content rows for a period that should show none; only fall back when the cohort request has no usable response, not when its array is empty.
Useful? React with 👍 / 👎.
| const videoPeriodDeltasAreFlat = | ||
| videoSnapshotComparisonAvailable && | ||
| periodViewValue === 0 && | ||
| periodLikeValue === 0 && | ||
| periodCommentValue === 0; |
There was a problem hiding this comment.
Preserve legitimate zero-growth snapshot results
When valid comparison snapshots exist but views, likes, and comments genuinely did not change, this predicate classifies the real zero deltas as a fallback condition. The downstream period*DisplayValue calculations then replace those zeros with current cohort totals, disable delta ranking, and can display nonzero likes/comments for a zero-growth period. Snapshot availability is already represented separately, so an all-zero comparison must remain a valid measured result rather than being treated as missing data.
Useful? React with 👍 / 👎.
| return () => { | ||
| delete document.documentElement.dataset.homeChromeReady; | ||
| }; |
There was a problem hiding this comment.
Keep the loading skeleton dismissed in mobile fullscreen
When a mobile or tablet user enters map fullscreen, home-client.tsx intentionally unmounts HomeControlPanel; this cleanup then removes data-home-chrome-ready. Because HomeStaticSkeleton remains mounted and its CSS visibility depends solely on that attribute, the placeholder search and bottom bars reappear over the already-loaded fullscreen map until the user exits fullscreen. The readiness flag should not be reset when chrome is temporarily suppressed.
Useful? React with 👍 / 👎.
| <div className="h-11 animate-pulse rounded-full bg-muted" /> | ||
| <div className="mt-4 space-y-3"> | ||
| {Array.from({ length: 6 }, (_, index) => ( | ||
| <div key={index} className="h-16 animate-pulse rounded-xl bg-muted" /> |
There was a problem hiding this comment.
Disable skeleton pulsing for reduced-motion users
The new initial-home skeleton applies animate-pulse to every placeholder without a motion-reduce:animate-none override, while the home-specific stylesheet's blanket reduced-motion rule is commented out. Users who request reduced motion therefore still receive several continuously pulsing elements during startup; add the reduced-motion utility or an equivalent active media rule to these placeholders.
Useful? React with 👍 / 👎.
| "dev": "node scripts/run-local-dev.mjs --port 3000", | ||
| "dev:local": "node scripts/run-local-dev.mjs --port 3000", |
There was a problem hiding this comment.
Align the local Supabase site URL with port 3000
Changing the default development server to port 3000 leaves the generated local Supabase stack's SITE_URL at http://127.0.0.1:8080. The password-account creation path calls auth.signUp without an emailRedirectTo, so GoTrue-generated confirmation links continue redirecting to the now-unused 8080 origin and local users cannot complete email confirmation through the default npm run dev flow. Update the local Auth site URL alongside the default app port.
Useful? React with 👍 / 👎.
Summary
5943eb3455dc3269bb306965d77fb0a2e607a0cf를 main으로 올립니다.febbc76fd78ff4cbe9fe3aa29df16e8199088953입니다.Test plan
www.tzudong.app/api/health가 main 커밋과 같은지 확인Made with Cursor