feat(profile): complete #46 — profile feature + auth/upload fixes#146
Merged
Conversation
- Add SVG favicon with decoded "D" logo (brand colors) - Add PWA manifest.ts with app metadata - Fix html lang attribute: en → ko (consistent with global-error.tsx) - Add favicon metadata to layout.tsx Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- PublicProfileClient: replace placeholder sections with actual activity tabs (PostsGrid, SpotsList, SolutionsList) using Supabase queries - ProfileClient: switch from API-based ActivityItemCard to Supabase-based grid components (works without backend API server) - ActivityTabs: add configurable tabs prop with PUBLIC_TABS preset - Profile OG metadata: add avatar image, username, Korean description - Mobile header: show user display name instead of generic "Profile" Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use IF NOT EXISTS to prevent failure when columns already exist in the database (added via Supabase migration in #58). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SmartNav: uncomment Upload nav item (was hidden for 1st release #35) - MobileNavBar: add Upload icon between Search and Explore Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Avatar click now shows dropdown with: - User info (display name, username) - Profile link - Upload link - Logout button (red) Closes on outside click and route change. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add bg-black/60 to container for instant backdrop - Use fromTo with immediateRender to prevent opacity:0 flash - Faster, smoother animation (0.2s backdrop, 0.25s modal) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Upload button now opens RequestModal via state instead of navigating to /request/upload (intercepting route). This prevents the hero section from re-rendering and flickering when the modal opens. - Desktop nav Upload: button → RequestModal (no URL change) - Profile dropdown Upload: same modal approach - Direct URL /request/upload still works as full page Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Supabase defaulted to implicit grant (hash-based tokens) but the callback route expects a code parameter for exchangeCodeForSession. Setting flowType: 'pkce' ensures the OAuth redirect sends a code instead of hash tokens, fixing "인증 코드가 없습니다" error. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ection The server callback route (/api/auth/callback) requires PKCE code exchange but @supabase/auth-helpers-nextjs v0.15 doesn't handle code verifier cookies. Fix: redirect OAuth back to the client page instead of server callback. Supabase JS client with detectSessionInUrl: true auto-detects the hash tokens and sets the session via onAuthStateChange. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ankings Backend (Rust): - Fix get_user_stats: real COUNT queries for posts/comments/likes - Fix list_user_activities: UNION ALL across posts/spots/solutions - Add follow/unfollow/follow-status endpoints - Add FollowStatusResponse DTO Frontend (Next.js): - Add follow proxy routes and hooks (useFollowUser/useUnfollowUser/useFollowStatus) - Add FollowButton component with Follow/Following/Unfollow states - Integrate FollowButton into PublicProfileClient - Avatar upload via Supabase Storage (replace URL text input) - StyleDNAEditModal with keyword tags + color picker - Profile OG metadata: twitter card, JSON-LD Person schema - Rankings page with period filter (weekly/monthly/all_time) - Rankings proxy API routes Closes #46 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
With implicit OAuth, session lives in localStorage (not cookies), so proxy.ts middleware cannot detect it. Let /profile and /request routes through and rely on client-side 401 → login redirect instead. Also add isAuthReady guard to useMe/useUserStats to prevent race condition on direct /profile navigation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…pabase URL NEXT_PUBLIC_API_BASE_URL was bypassing the proxy and hitting Supabase URL directly, causing CORS errors. Use empty baseURL to route through /api/v1/* proxy like all other API calls. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The modal's DetectionView was missing the onImageClick handler, so users couldn't tap to add spot markers. Now uses addSpot from requestStore, matching the page version behavior. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add onImageClick handler to DetectionView in modal (tap to add spots) - Add removeSpot with Trash2 icon to each detected item card - Matches page version (/request/upload) behavior Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When a spot on the image is already selected, tapping it again now removes it. This matches the expected UX of direct spot management on the image without needing to scroll to the trash icon. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Keep FollowButton, OG metadata, and twitter card additions from feature branch. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/rankings라우트 + API 프록시NEXT_PUBLIC_API_BASE_URL직접 호출 → Next.js 프록시 경로로 변경Test plan
/profile직접 접근 시 로그인 리다이렉트 없이 프로필 표시 확인/profile/[userId]타인 프로필에서 FollowButton 동작/rankings페이지 로드 확인Closes #46
🤖 Generated with Claude Code