스몰비즈니스 예약 랜딩페이지 - 고객 예약 폼 & 자동 알림
small-business-booking-landing
문제 설명
📋 프로젝트 개요
소규모 비즈니스(네일샵, 헤어샵, 상담소, 과외 등)를 위한 심플한 예약 랜딩페이지를 만듭니다. 고객이 서비스를 선택하고 날짜/시간을 입력하여 예약을 신청하면, 사업자에게 자동으로 이메일이 발송됩니다.
✨ 필수 기능
- 랜딩페이지: 비즈니스 소개, 서비스 목록, 예약 폼이 한 페이지에
- 예약 폼: 고객 이름, 연락처, 서비스 선택(드롭다운), 희망 날짜/시간, 메모
- 폼 검증: Laravel Validation으로 필수 입력 체크
- 데이터 저장: SQLite에 예약 정보 저장
- 자동 이메일: 예약 완료 시 사업자 이메일로 알림 발송 (Laravel Mail)
- 예약 목록 페이지: 간단한 관리자 페이지에서 예약 목록 확인 (읽기 전용)
- 반응형 디자인: Tailwind CSS로 모바일/데스크톱 대응
🎁 보너스 기능 (선택)
- 예약 상태 변경 (대기중/확정/취소)
- 고객에게도 예약 확인 이메일 발송
- 서비스별 예상 소요 시간 표시
- 예약 가능한 시간대만 선택 가능하도록 제한
- 캘린더 UI로 날짜 선택 개선
🎯 학습 목표
- Laravel 13.x + Blade 템플릿 기본 구조 이해
- 폼 처리 및 Validation
- Eloquent 모델과 마이그레이션
- Laravel Mail 기본 사용법
- Tailwind CSS로 랜딩페이지 스타일링
제약 조건
- • Laravel 13.x 사용 (최신 버전)
- • Blade 템플릿 엔진 사용 (React/Vue 사용 금지)
- • SQLite 데이터베이스 사용
- • Tailwind CSS로 스타일링
- • Laravel Mail 기능 활용 (Mailtrap 또는 로컬 메일 드라이버)
- • 반응형 디자인 필수
- • 예약 폼은 단일 페이지에 포함
- • 관리자 페이지는 별도 라우트로 분리 (/admin/bookings)
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
mkdir small-business-booking-landing && cd small-business-booking-landing 이 폴더에서 Laravel 13.x 프로젝트를 시작합니다. 다음 작업을 수행하세요: 1. Laravel 13.x 프로젝트 생성 (composer create-project laravel/laravel . "^13.0") 2. .env 파일에서 DB_CONNECTION을 sqlite로 변경하고, database/database.sqlite 파일 생성 3. Tailwind CSS 설치 및 설정 (npm install, Vite 설정 포함) 4. 기본 레이아웃 Blade 템플릿 생성 (resources/views/layouts/app.blade.php) - HTML5 기본 구조 - Tailwind CSS 및 Vite 에셋 로드 (@vite) - 헤더, 메인 콘텐츠 영역, 푸터 포함 - 모바일 친화적인 기본 스타일 5. Welcome 페이지를 랜딩페이지로 변경 (resources/views/welcome.blade.php) - 비즈니스 소개 섹션 (헤더, 간단한 설명) - 서비스 목록 섹션 (카드 형태로 3~4개 서비스 예시) - 예약 폼 섹션 (아직 폼 로직은 없고 UI만) - Tailwind CSS로 깔끔하게 스타일링 6. 개발 서버 실행 확인 (php artisan serve, npm run dev) 프로젝트 구조와 기본 UI가 완성되어야 합니다.
기대 결과: Laravel 13.x 프로젝트가 생성되고, Tailwind CSS가 설정되며, 랜딩페이지 기본 UI(비즈니스 소개, 서비스 목록, 예약 폼 섹션)가 표시됩니다. 개발 서버에서 http://localhost:8000 접속 시 스타일이 적용된 랜딩페이지를 확인할 수 있습니다.
예약 기능을 위한 데이터베이스와 모델을 생성하세요. 1. Booking 모델과 마이그레이션 생성 (php artisan make:model Booking -m) 2. 마이그레이션 파일에 다음 컬럼 추가: - customer_name (string, 고객 이름) - customer_phone (string, 연락처) - customer_email (string, 이메일) - service (string, 선택한 서비스) - booking_date (date, 예약 날짜) - booking_time (time, 예약 시간) - notes (text, nullable, 메모) - status (string, default 'pending', 예약 상태: pending/confirmed/cancelled) - timestamps (created_at, updated_at) 3. 마이그레이션 실행 (php artisan migrate) 4. Booking 모델에 $fillable 속성 추가 (mass assignment 허용) 5. BookingController 생성 (php artisan make:controller BookingController) - index 메서드: 관리자 페이지에서 예약 목록 표시 - store 메서드: 예약 폼 제출 처리 6. routes/web.php에 라우트 추가: - GET / → welcome 페이지 (기본) - POST /bookings → BookingController@store - GET /admin/bookings → BookingController@index 데이터베이스 구조와 컨트롤러 기본 틀이 완성되어야 합니다.
기대 결과: Booking 모델과 마이그레이션이 생성되고, 데이터베이스에 bookings 테이블이 생성됩니다. BookingController와 라우트가 설정되어 예약 폼 제출과 목록 조회를 위한 기반이 마련됩니다.
예약 폼을 완성하고 폼 제출 로직을 구현하세요.
1. resources/views/welcome.blade.php의 예약 폼 섹션을 실제 작동하는 폼으로 변경:
- form 태그 (action="/bookings", method="POST")
- @csrf 토큰 추가
- 입력 필드:
* 고객 이름 (required)
* 연락처 (required)
* 이메일 (required, email 형식)
* 서비스 선택 (select 드롭다운, 옵션: 네일아트, 헤어컷, 염색, 상담 등)
* 예약 날짜 (date input, required)
* 예약 시간 (time input, required)
* 메모 (textarea, optional)
- 제출 버튼 (Tailwind로 스타일링)
- 에러 메시지 표시 영역 (@error 디렉티브 활용)
- 성공 메시지 표시 영역 (session flash 메시지)
2. BookingController@store 메서드 구현:
- 폼 데이터 검증 (Laravel Validation)
* customer_name: required, string, max:255
* customer_phone: required, string
* customer_email: required, email
* service: required, string
* booking_date: required, date, after_or_equal:today
* booking_time: required
* notes: nullable, string
- 검증 통과 시 Booking 모델에 데이터 저장
- 성공 메시지와 함께 리다이렉트 (redirect()->back()->with('success', '예약이 접수되었습니다!'))
3. Tailwind CSS로 폼 스타일링 (입력 필드, 버튼, 에러/성공 메시지)
예약 폼이 완전히 작동하고, 제출 시 데이터가 저장되어야 합니다.
기대 결과: 랜딩페이지의 예약 폼이 완성되고, 고객이 정보를 입력하여 제출하면 데이터베이스에 저장됩니다. 검증 오류 시 에러 메시지가 표시되고, 성공 시 성공 메시지가 표시됩니다.
예약 완료 시 사업자에게 자동으로 이메일을 발송하는 기능을 추가하세요.
1. .env 파일에서 메일 설정:
- MAIL_MAILER=log (로컬 테스트용, 실제 배포 시 smtp 등으로 변경)
- MAIL_FROM_ADDRESS="noreply@yourbusiness.com"
- MAIL_FROM_NAME="Your Business"
2. BookingNotification Mailable 클래스 생성 (php artisan make:mail BookingNotification)
3. BookingNotification 클래스 구현:
- 생성자에서 Booking 모델 인스턴스 받기
- build() 메서드에서 이메일 제목, 뷰, 데이터 설정
- 이메일 뷰 파일: resources/views/emails/booking-notification.blade.php
4. 이메일 뷰 파일 생성 (resources/views/emails/booking-notification.blade.php):
- 예약 정보 표시 (고객 이름, 연락처, 이메일, 서비스, 날짜, 시간, 메모)
- 간단한 HTML 구조 (Tailwind 또는 인라인 스타일)
5. BookingController@store 메서드 수정:
- 예약 저장 후 Mail::to('business@example.com')->send(new BookingNotification($booking)) 추가
- 이메일 발송 후 성공 메시지 표시
6. 테스트:
- 예약 폼 제출 후 storage/logs/laravel.log 파일에서 이메일 내용 확인 (MAIL_MAILER=log인 경우)
예약 완료 시 자동으로 이메일이 발송되어야 합니다.
기대 결과: 예약이 완료되면 사업자 이메일로 예약 정보가 담긴 알림 이메일이 자동 발송됩니다. 로컬 환경에서는 로그 파일에서 이메일 내용을 확인할 수 있습니다.
관리자 페이지를 만들어 예약 목록을 확인할 수 있도록 구현하세요.
1. BookingController@index 메서드 구현:
- Booking 모델에서 모든 예약 조회 (최신순 정렬)
- 뷰에 데이터 전달 (return view('admin.bookings.index', compact('bookings')))
2. 관리자 페이지 뷰 생성 (resources/views/admin/bookings/index.blade.php):
- layouts/app.blade.php 레이아웃 상속
- 예약 목록을 테이블 형태로 표시:
* 컬럼: ID, 고객 이름, 연락처, 서비스, 예약 날짜, 예약 시간, 상태, 등록일
- 각 예약 상태를 색상으로 구분 (pending: 노란색, confirmed: 초록색, cancelled: 회색)
- Tailwind CSS로 테이블 스타일링 (반응형)
- 예약이 없을 경우 "아직 예약이 없습니다" 메시지 표시
3. 랜딩페이지 헤더에 "관리자" 링크 추가 (href="/admin/bookings")
4. 관리자 페이지 접속 테스트:
- 예약 폼에서 몇 개의 예약 생성
- /admin/bookings 페이지에서 예약 목록 확인
관리자 페이지에서 예약 목록을 확인할 수 있어야 합니다.
기대 결과: 관리자 페이지(/admin/bookings)가 생성되고, 예약 목록이 테이블 형태로 깔끔하게 표시됩니다. 예약 상태별로 색상이 다르게 표시되며, 반응형 디자인이 적용됩니다.
제출된 작품 (0)
로그인 후 제출아직 제출된 작품이 없습니다. 첫 번째 도전자가 되어보세요!