스몰비즈니스 예약 랜딩페이지 - 고객 예약 폼 & 자동 알림 - 바이브코딩 레시피
입문 PHP Laravel AI: Claude

스몰비즈니스 예약 랜딩페이지 - 고객 예약 폼 & 자동 알림

리포지토리명 small-business-booking-landing
조회수 132 0건 제출

문제 설명

📋 프로젝트 개요

소규모 비즈니스(네일샵, 헤어샵, 상담소, 과외 등)를 위한 심플한 예약 랜딩페이지를 만듭니다. 고객이 서비스를 선택하고 날짜/시간을 입력하여 예약을 신청하면, 사업자에게 자동으로 이메일이 발송됩니다.

✨ 필수 기능

  • 랜딩페이지: 비즈니스 소개, 서비스 목록, 예약 폼이 한 페이지에
  • 예약 폼: 고객 이름, 연락처, 서비스 선택(드롭다운), 희망 날짜/시간, 메모
  • 폼 검증: 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에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.

1
Step 1
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 접속 시 스타일이 적용된 랜딩페이지를 확인할 수 있습니다.

2
Step 2
예약 기능을 위한 데이터베이스와 모델을 생성하세요.

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와 라우트가 설정되어 예약 폼 제출과 목록 조회를 위한 기반이 마련됩니다.

3
Step 3
예약 폼을 완성하고 폼 제출 로직을 구현하세요.

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로 폼 스타일링 (입력 필드, 버튼, 에러/성공 메시지)

예약 폼이 완전히 작동하고, 제출 시 데이터가 저장되어야 합니다.

기대 결과: 랜딩페이지의 예약 폼이 완성되고, 고객이 정보를 입력하여 제출하면 데이터베이스에 저장됩니다. 검증 오류 시 에러 메시지가 표시되고, 성공 시 성공 메시지가 표시됩니다.

4
Step 4
예약 완료 시 사업자에게 자동으로 이메일을 발송하는 기능을 추가하세요.

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인 경우)

예약 완료 시 자동으로 이메일이 발송되어야 합니다.

기대 결과: 예약이 완료되면 사업자 이메일로 예약 정보가 담긴 알림 이메일이 자동 발송됩니다. 로컬 환경에서는 로그 파일에서 이메일 내용을 확인할 수 있습니다.

5
Step 5
관리자 페이지를 만들어 예약 목록을 확인할 수 있도록 구현하세요.

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)

로그인 후 제출

아직 제출된 작품이 없습니다. 첫 번째 도전자가 되어보세요!

댓글 (0)

로그인 후 댓글을 남길 수 있습니다.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!