아이디어 제출 시 로그인 필수화: 로그인하지 않은 사용자가 아이디어를 제출하려 할 때 Shadcn Dialogue를 통해 로그인 요청 모달을 표시하고, Better Auth의 useSession으로 인증 상태를 확인하도록 개선했습니다. 🔐
모든 사용자에게 아이디어 표시: 기존에는 인증된 사용자에게만 아이디어가 표시되던 문제를 해결하기 위해 isAuthenticated 미들웨어를 제거하여 로그인 여부와 관계없이 모든 아이디어를 볼 수 있도록 했습니다. 🌍
개선된 로딩 인디케이터: 단순한 '...' 로딩 표시 대신 Shadcn Skeleton Loader를 사용하여 4개의 아이디어 카드 플레이스홀더를 보여줌으로써 사용자 경험을 향상시켰습니다. 💀
일관된 UI 스타일링: 스켈레톤 로더의 디자인이 더 좋다고 판단하여 실제 아이디어 카드도 스켈레톤과 유사한 스타일로 통일성을 갖추도록 재조정했습니다. 🎨
아이디어 제출 후 토스트 알림: 아이디어 제출 성공 시 Shadcn Toast (Sonner 라이브러리 사용)를 통해 사용자에게 피드백을 제공하며, Toaster 컴포넌트는 전역적으로 사용 가능하도록 루트에 배치했습니다. 🍞
업보트 기능 위한 DB 스키마 설계: Drizzle ORM을 사용하여 upvote 테이블을 생성하고, ideaId와 userId에 대한 복합 고유 제약 조건(composite unique constraint)을 추가하여 한 사용자가 같은 아이디어를 두 번 업보트할 수 없도록 했습니다. 🗳️
업보트/업보트 취소 로직 구현: 사용자가 아이디어를 업보트하거나 취소할 수 있도록 서버 함수(upvoteIdea, removeUpvote)를 구현하고, Tanstack Query 뮤테이션을 사용하여 프론트엔드와 연동했습니다. 👍
선택적 인증을 통한 아이디어 조회: 사용자의 업보트 여부를 표시하기 위해 아이디어를 가져올 때 '선택적 인증' 미들웨어를 적용하여, 로그인하지 않은 사용자도 아이디어를 볼 수 있으면서 로그인 시에는 자신의 업보트 상태를 확인할 수 있도록 했습니다. 👤
AI 어시스턴트 활용: 코드 생성, 리팩토링, 스키마 수정 등 개발 과정 전반에 걸쳐 AI 어시스턴트(Cursor)를 적극적으로 활용하여 생산성을 높였습니다. 🤖