Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

54 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🍞 λΉ΅μ§€μˆœλ‘€ (BreadTrip)

"μ„œμšΈμ˜ 빡집을 νƒν—˜ν•˜κ³ , λ‚˜λ§Œμ˜ 빡지도λ₯Ό μ±„μ›Œκ°€λŠ” λ”°λœ»ν•œ 탐방 μ„œλΉ„μŠ€"

μ„œμšΈ ν•œμ • MVP 버전


πŸ“‹ ν”„λ‘œμ νŠΈ ν˜„ν™©

βœ… μ™„λ£Œλœ κΈ°λŠ₯ (Phase 0-3)

Phase 0: ν”„λ‘œμ νŠΈ 초기 μ„€μ •

  • Next.js 14+ (App Router) ν”„λ‘œμ νŠΈ 생성
  • TypeScript μ„€μ •
  • Tailwind CSS μ»€μŠ€ν…€ ν…Œλ§ˆ (λΉ΅μ§‘ 감성)
  • 폴더 ꡬ쑰 (/app, /components, /lib, /types)
  • ν™˜κ²½ λ³€μˆ˜ μ„€μ •

Phase 1: Supabase μ„€μ •

  • Supabase ν΄λΌμ΄μ–ΈνŠΈ (client, server, middleware)
  • TypeScript νƒ€μž… μ •μ˜
  • DB μŠ€ν‚€λ§ˆ SQL (users, bakeries, reviews)
  • μ‹œλ“œ 데이터 (μ„œμšΈ λΉ΅μ§‘ 10개)
  • RLS μ •μ±…

Phase 2: κΈ°λ³Έ λ ˆμ΄μ•„μ›ƒ & 인증

  • ν•˜λ‹¨ λ„€λΉ„κ²Œμ΄μ…˜ λ°”
  • 둜그인 λͺ¨λ‹¬ (Email Magic Link)
  • Auth Server Actions
  • ν”„λ‘œν•„ νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€
  • ν”Όλ“œ νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€

Phase 3: 지도 탐색 (핡심 κΈ°λŠ₯)

  • Kakao Map 톡합
  • μ»€μŠ€ν…€ λΉ΅μ§‘ 마컀 (🍞)
  • 마컀 클릭 이벀트
  • ν•˜λ‹¨ μ‹œνŠΈ (λΉ΅μ§‘ 미리보기)
  • λΉ΅μ§‘ 상세 νŽ˜μ΄μ§€
  • API μ—”λ“œν¬μΈνŠΈ (/api/bakeries)

πŸš€ μ‹œμž‘ν•˜κΈ°

1. ν™˜κ²½ λ³€μˆ˜ μ„€μ •

.env.local 파일이 이미 μƒμ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

2. Supabase λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •

μ€‘μš”: 아직 Supabaseμ—μ„œ SQL을 μ‹€ν–‰ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ λ°˜λ“œμ‹œ μ‹€ν–‰ν•˜μ„Έμš”!

  1. Supabase Dashboard 접속
  2. ν”„λ‘œμ νŠΈ: vetpzzvvdkpjgqdywflb 선택
  3. 쒌츑 메뉴 > SQL Editor 클릭
  4. μ•„λž˜ 파일 λ‚΄μš©μ„ μˆœμ„œλŒ€λ‘œ 볡사 & μ‹€ν–‰:
    • supabase/migrations/001_initial_schema.sql
    • supabase/migrations/002_seed_data.sql

μžμ„Έν•œ μ„€λͺ…: supabase/README.md μ°Έκ³ 

3. 개발 μ„œλ²„ μ‹€ν–‰

npm install  # 이미 μ„€μΉ˜λ¨
npm run dev  # 이미 μ‹€ν–‰ 쀑

λΈŒλΌμš°μ €μ—μ„œ http://localhost:3000 접속


πŸ“± μ£Όμš” κΈ°λŠ₯

ν˜„μž¬ μ‚¬μš© κ°€λŠ₯ν•œ νŽ˜μ΄μ§€

νŽ˜μ΄μ§€ 경둜 μ„€λͺ…
πŸ—ΊοΈ ν™ˆ (지도) / Kakao Map 기반 λΉ΅μ§‘ 탐색
πŸ“° ν”Όλ“œ /feed 리뷰 ν”Όλ“œ (μŠ€μΌˆλ ˆν†€)
πŸ‘€ ν”„λ‘œν•„ /profile 둜그인/찜 λͺ©λ‘
🍞 λΉ΅μ§‘ 상세 /bakeries/:id λΉ΅μ§‘ 정보 상세 보기

μ£Όμš” μ»΄ν¬λ„ŒνŠΈ

components/
β”œβ”€β”€ layout/
β”‚   β”œβ”€β”€ Navigation.tsx       # ν•˜λ‹¨ λ„€λΉ„κ²Œμ΄μ…˜ λ°”
β”‚   └── AuthModal.tsx        # 둜그인 λͺ¨λ‹¬
β”œβ”€β”€ map/
β”‚   β”œβ”€β”€ KakaoMap.tsx         # 카카였맡 μ»΄ν¬λ„ŒνŠΈ
β”‚   └── BottomSheet.tsx      # λΉ΅μ§‘ 미리보기 μ‹œνŠΈ
└── ui/
    β”œβ”€β”€ Button.tsx           # λ²„νŠΌ
    β”œβ”€β”€ Input.tsx            # μž…λ ₯ ν•„λ“œ
    └── Modal.tsx            # λͺ¨λ‹¬

πŸ›  기술 μŠ€νƒ

ꡬ뢄 기술
Frontend Next.js 16 (App Router), TypeScript, Tailwind CSS
Backend Next.js API Routes, Server Actions
Database Supabase (PostgreSQL)
Auth Supabase Auth (Email Magic Link)
Map Kakao Maps SDK
Storage Supabase Storage (μ€€λΉ„ 쀑)
Deploy Vercel (μ˜ˆμ •)

πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰

bread-trip/
β”œβ”€β”€ app/                      # Next.js App Router
β”‚   β”œβ”€β”€ actions/              # Server Actions
β”‚   β”‚   └── auth.ts
β”‚   β”œβ”€β”€ api/                  # API Routes
β”‚   β”‚   └── bakeries/
β”‚   β”œβ”€β”€ auth/                 # 인증 κ΄€λ ¨
β”‚   β”œβ”€β”€ bakeries/[id]/        # λΉ΅μ§‘ 상세
β”‚   β”œβ”€β”€ feed/                 # ν”Όλ“œ
β”‚   β”œβ”€β”€ profile/              # ν”„λ‘œν•„
β”‚   └── page.tsx              # ν™ˆ (지도)
β”œβ”€β”€ components/               # React μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ layout/
β”‚   β”œβ”€β”€ map/
β”‚   └── ui/
β”œβ”€β”€ lib/                      # μœ ν‹Έλ¦¬ν‹°
β”‚   β”œβ”€β”€ supabase/             # Supabase ν΄λΌμ΄μ–ΈνŠΈ
β”‚   └── utils.ts
β”œβ”€β”€ types/                    # TypeScript νƒ€μž…
β”‚   β”œβ”€β”€ database.ts           # DB νƒ€μž…
β”‚   β”œβ”€β”€ common.ts             # 곡톡 νƒ€μž…
β”‚   └── kakao.d.ts            # Kakao Maps νƒ€μž…
β”œβ”€β”€ supabase/                 # Supabase μ„€μ •
β”‚   β”œβ”€β”€ migrations/           # SQL λ§ˆμ΄κ·Έλ ˆμ΄μ…˜
β”‚   └── README.md
└── public/                   # 정적 파일

πŸ”„ λ‹€μŒ 단계 (Phase 4-6)

Phase 4: λΉ΅μ§‘ 등둝

  • λΉ΅μ§‘ 등둝 폼
  • Kakao μ£Όμ†Œ 검색 API
  • 이미지 μ—…λ‘œλ“œ (Supabase Storage)
  • 등둝 API

Phase 5: ν”Όλ“œ μ‹œμŠ€ν…œ

  • 리뷰 μž‘μ„± λͺ¨λ‹¬
  • 리뷰 API
  • λ¬΄ν•œ 슀크둀
  • 리뷰 μΉ΄λ“œ μ»΄ν¬λ„ŒνŠΈ

Phase 6: μ΅œμ ν™” & 배포

  • 이미지 μ΅œμ ν™”
  • λ‘œλ”©/μ—λŸ¬ μƒνƒœ κ°œμ„ 
  • GA4 이벀트
  • Vercel 배포

πŸ› ν˜„μž¬ μ•Œλ €μ§„ μ œν•œμ‚¬ν•­

  1. Supabase SQL μ‹€ν–‰ ν•„μš”: λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆλ₯Ό μˆ˜λ™μœΌλ‘œ μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€
  2. μ°œν•˜κΈ° λ―Έκ΅¬ν˜„: UIλŠ” μžˆμ§€λ§Œ λ°±μ—”λ“œ 연동 ν•„μš”
  3. 리뷰 λ―Έκ΅¬ν˜„: ν”Όλ“œμ™€ 리뷰 μž‘μ„± κΈ°λŠ₯은 Phase 5μ—μ„œ κ΅¬ν˜„ μ˜ˆμ •
  4. 이미지 μ—…λ‘œλ“œ λ―Έκ΅¬ν˜„: Storage μ„€μ • ν›„ κ΅¬ν˜„ μ˜ˆμ •
  5. 인증 μƒνƒœ 관리: ν”„λ‘œν•„ νŽ˜μ΄μ§€μ—μ„œ μ‹€μ œ μœ μ € 정보 연동 ν•„μš”

πŸ“ 개발 λ…ΈνŠΈ

Tailwind μ»€μŠ€ν…€ 색상

--cream-beige: #F6E9D8  /* 크림베이지 */
--brown: #8B5E3C         /* 브라운 */
--white-warm: #FFF9F4    /* λ”°λœ»ν•œ ν™”μ΄νŠΈ */

μ‚¬μš© 예:

<div className="bg-cream text-brown">

API μ—”λ“œν¬μΈνŠΈ

GET  /api/bakeries          # λΉ΅μ§‘ λͺ©λ‘ 쑰회
POST /api/bakeries          # λΉ΅μ§‘ 등둝 (인증 ν•„μš”)
GET  /api/bakeries/:id      # λΉ΅μ§‘ 상세 쑰회

λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”

  • users: μ‚¬μš©μž 정보
  • bakeries: λΉ΅μ§‘ 정보
  • reviews: 리뷰 (쀀비됨, λ―Έμ‚¬μš©)

πŸ™‹ 문제 ν•΄κ²°

지도가 ν‘œμ‹œλ˜μ§€ μ•ŠλŠ” 경우

  1. Kakao Maps API ν‚€ 확인
  2. λΈŒλΌμš°μ € μ½˜μ†”μ—μ„œ μ—λŸ¬ 확인
  3. window.kakao 객체 λ‘œλ“œ 확인

API 호좜 μ‹€νŒ¨

  1. Supabase URL/Key 확인
  2. Supabaseμ—μ„œ SQL μ‹€ν–‰ μ—¬λΆ€ 확인
  3. RLS μ •μ±… 확인

λΉŒλ“œ μ—λŸ¬

npm run build

TypeScript μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ νƒ€μž… μ •μ˜ 확인


πŸ“„ λΌμ΄μ„ μŠ€

MIT


🎯 ν”„λ‘œμ νŠΈ λͺ©ν‘œ

  • μœ μž…: μ„œμšΈ μ‹œλ“œ λΉ΅μ§‘ 50개 등둝
  • μ°Έμ—¬: 지도 클릭λ₯  40% 이상
  • μœ μ§€: D7 재방문율 20% 이상

Releases

Packages

Contributors

Languages