예약Lite現在のバージョン v0.4.5 (eeb7812)

업데이트 내역

0.4.5 — 2026-09-28

  • 표시 속도 측정: 소개 페이지와 예약 페이지(/book/매장)에 Vercel Speed Insights 도입(쿠키 미사용). URL의 식별자(LINE 연동용 파라미터 등)는 전송 전에 제거. 예약 확인 페이지·관리 화면에서는 로드하지 않습니다
  • 개인정보처리방침: 외부 전송에 Vercel Speed Insights 추가(전송 내용·대상 페이지)
  • 0.4.4 — 2026-09-28

    실제 기기의 LINE에서 '일본 고객의 시선'으로 확인한 결과를 반영한 수정입니다.

  • 매장의 취소 알림: 긴 영숫자 URL을 본문에 표시하지 않고 '다시 예약하기' 버튼으로 변경. 경어를 '취소 처리해 드렸습니다', '예약을 받을 수 없게 되었습니다', '대단히 죄송합니다'로 수정. 관리 화면의 미리보기도 실제 표시와 일치
  • 예약 확인 메시지: '변경·취소'를 '취소(일시 변경은 취소 후 재예약)'로 변경. 취소 기한(예: 24시간 전까지)과 매장 전화번호를 기재
  • 취소 목록: 기한이 지난 예약 카드에 '취소 기한이 지났습니다'라고 표시. 안내 문구를 정중한 표현으로 변경
  • LINE에서 취소한 후의 답장에 '연락해 주셔서 감사합니다. 다음 예약을 진심으로 기다리겠습니다.'를 추가
  • 예약 확인 페이지에서 취소한 경우에도 LINE으로 확인 메시지를 전송. 오너에게 보내는 메일에도 어디에서 취소되었는지 올바르게 표시
  • 예약 완료 화면: 요금에 '(세금 포함)' 표기, 완료 후에는 LINE 연동 안내를 숨김, LINE에서 온 고객에게는 '대화 화면으로 돌아가기' 버튼 표시
  • LINE 알림·대화 목록에 표시되는 문자열(altText)에 URL을 포함하지 않도록 변경
  • 0.4.3 — 2026-09-28

  • 접속 분석: 소개 페이지(메인·회원가입·로그인·약관·개인정보·특정상거래법·업데이트 내역·API 문서)에만 Cloudflare Web Analytics(쿠키 미사용)를 도입. 예약 페이지·예약 확인 페이지·관리 화면에서는 로드하지 않습니다
  • 개인정보처리방침: 외부 전송(Cloudflare Web Analytics)의 전송처·전송 정보·대상 페이지를 명시. 위탁처에 Cloudflare 추가
  • 이용약관·개인정보처리방침 개정(2026년 9월 28일): 매장 정보의 공개 API·AI용 형식으로의 제공(예약자 정보는 대상 외), Google 캘린더 연결 해제 시 예약 접수 중지, 부정 방지를 위한 IP 주소(해시 처리), 알림 메일·리마인드를 명시. 매장에는 다음 로그인 시 재동의를 요청드립니다
  • 0.4.2 — 2026-09-28

  • Google 캘린더: 연결이 끊긴 것(Google 측에서 취소·만료)을 감지하여 오너에게 메일로 1회 알림. 관리 화면에 빨간색 안내와 '재연결' 버튼을 표시. 기존에는 연결 중으로 표시된 채 고객 측에서는 모든 날짜가 회색으로 표시되어 예약할 수 없었습니다
  • 예약 페이지: 캘린더 연결이 끊긴 동안에는 '현재 온라인 예약을 일시 중지하고 있습니다. 매장으로 직접 연락해 주세요(전화번호)'라고 표시(중복 예약 방지를 위해 접수는 중지 상태 유지)
  • LINE 연동 페이지: 인사 메시지가 켜져 있어도 예약 링크가 전송된다는 내용으로 수정(실제 기기에서 확인)
  • DB: migration 0014(google_tokens.revoked_at). 운영 환경에는 2026-09-28에 적용 완료
  • 0.4.1 — 2026-09-28

  • 가입·로그인: 전송 후 화면에 '등록된 주소로는 로그인용 링크가 발송된다'는 안내와 메일이 오지 않을 경우의 안내(스팸 메일함, docomo·au·SoftBank 수신 설정), 재전송 버튼을 추가. 로그인 메일에도 이미 등록된 경우의 설명을 추가
  • 로그인 링크를 두 번 열었을 때의 표시를 '이미 사용되었거나 유효기간이 만료되었습니다'로 변경(기존에는 항상 '기간 만료')
  • 매장 정보 등록: 예약 페이지 URL에 전각·대문자·공백을 입력해도 자동으로 변환. 로마자 매장명으로 URL을 제안. 오류 시 입력 내용을 유지. URL이 이미 사용 중인 경우 변경 방법의 예시를 표시. 일본어 입력 예시로 변경
  • 로그인·매장 정보 등록 페이지에 개별 페이지 제목을 지정. 사이트 설명과 공유 이미지의 '5분 만에 설정'을 '10분'으로 통일
  • 0.4.0 — 2026-09-28

  • AI 에이전트용 공개 API(읽기 전용): RFC 9727의 API 카탈로그(/.well-known/api-catalog), OpenAPI 3.1(/openapi.json), API 문서(/docs/api), /auth.md를 공개. 매장의 메뉴·요금·빈 시간대를 조회할 수 있음. 예약 확정은 API로 하지 않고 고객을 예약 페이지로 안내함(예약 API는 인증이 없으므로 공개 대상에서 제외)
  • 홈페이지의 Link 헤더에 api-catalog와 service-doc를 추가. /docs/api를 사이트맵에 추가
  • Markdown 버전 맨 앞에 표시되던 빈 링크(로고)를 삭제
  • 홈페이지: 작은 주석·푸터·버전 표기의 글자색을 진하게 하여 대비를 WCAG AA 기준으로 개선(Lighthouse 접근성 100). 제목 계층 구조를 수정
  • 표시 속도: 고정폭 글꼴(LINE 설정 화면에서만 사용)을 모든 페이지에서 미리 불러오지 않도록 변경
  • 0.3.0 — 2026-09-28

  • LINE 연동: 연결과 해제가 겹친 경우 등에 암호화된 시크릿이 남아, 이후 해당 매장에서 LINE 연결이 계속 '저장에 실패했습니다'가 되는 문제를 수정(남은 시크릿을 재사용하여 자동 복구). Google 연동도 동일
  • 예약: 숫자가 없는 전화번호(예: '--------')로 예약이 가능하여 전화번호가 빈 값으로 저장되는 문제를 수정. 전화번호에 오류가 있는 경우 '전화번호를 올바르게 입력해 주세요(반각 숫자 8자리 이상·20자 이내)'를 표시(기존에는 '예약에 실패했습니다'만 표시)
  • 대시보드: 메인(예약)을 열 때마다 표시 불일치 오류(React #418)가 발생하여 화면을 다시 그리던 문제를 수정(14일간 그래프의 항목명)
  • 접근성: 예약 페이지에서 선택한 시간대와 대시보드에서 표시 중인 탭을 스크린 리더가 읽어 주도록 개선
  • AI 에이전트용: 홈페이지에 Link 헤더(RFC 8288: sitemap·개인정보처리방침·이용약관·Markdown 버전). 공개 페이지(홈·약관·개인정보·특정상거래법 표기·업데이트 내역)는 Accept: text/markdown으로 본문을 Markdown으로 반환(브라우저는 기존대로 HTML, /md/는 검색 대상 제외·canonical 포함)
  • 테스트: E2E를 추가(공개 페이지·웹 예약·대시보드 전체 탭). LINE 테스트는 준비에 실패한 시점에 중단되도록 변경
  • DB: migration 0013(set_line_secret / set_google_refresh_token 수정). 운영 환경에는 2026-09-28에 적용 완료
  • 0.2.5 — 2026-09-12

  • 신규 가입 시 확인 메일을 일본어·예약Lite 디자인으로 변경(기존에는 영어 기본 템플릿). 템플릿은 supabase/email-templates/, 적용은 scripts/apply-email-templates.mjs
  • 테스트: LINE 앱 내(LIFF) 예약 흐름을 E2E에 추가(@line/liff-mock으로 LINE 클라이언트를 재현, ID 토큰 검증까지 확인)
  • 테스트: 운영 LINE Messaging API에 대한 자동 테스트를 추가(테스트룸 채널에서 토큰 발급·Webhook 등록·모든 메시지 형식 검증·1건 실제 발송). 매일 밤 GitHub Actions에서 실행
  • 0.2.4 — 2026-09-12

  • Stripe: 결제 서비스가 일시적으로 응답하지 않는 경우에도 결제 정보를 삭제하지 않고 오류를 표시하여 재시도할 수 있도록 개선(고객이 실제로 존재하지 않는 경우에만 다시 생성)
  • Stripe: 동시에 여러 번 '업그레이드'를 눌러도 고객·결제 세션이 중복 생성되지 않음(멱등 키+저장 경합 제어)
  • 리마인드: 발송 전에 '발송 완료'로 처리하지 않고 발송 후에 기록. 처리 중 중단된 경우에도 15분 후에 재발송됨
  • 리마인드: 매시간 실행(Vercel 10시+GitHub Actions 11~20시. 10시~20시대에만 발송). 당일 예약은 '오늘의 예약'으로 표시하며, 전날 10시 이후에 들어온 예약도 당일 중에 리마인드
  • 운영: CI(lint / typecheck / test / build)를 추가. GitHub에 CRON_SECRET 시크릿이 필요. 백업을 pg_dump custom 형식으로 변경하고 권한(GRANT)도 저장. 복원 리허설용 스크립트를 추가
  • DB: migration 0012(bookings.reminder_claimed_at)를 적용한 후 배포
  • 0.2.3 — 2026-09-12

  • 예약 취소 후 "취소되었습니다."를 표시(기존에는 표시되기 전에 화면이 전환되었습니다)
  • LINE이나 SNS에서 링크를 공유할 때의 미리보기 이미지와 제목을 추가. 매장 페이지는 매장명을 표시
  • 요금 표시에 "부가세 포함"을 명시
  • 점주에게 보내는 알림 메일(신규 예약·취소·LINE 전송 실패)이 운영 환경에서 발송되지 않는 문제를 수정
  • 운영용: /api/version이 연동 상태(메일·Stripe·Google 등)를 반환(CRON_SECRET 필수)
  • 0.2.2 — 2026-09-11

  • Stripe 결제: 일본 소비세 등록을 설정하고, Pro 플랜 청구서에 포함된 소비세(10%)를 표시
  • Stripe는 라이브 모드에서만 작동(테스트 키는 시작 시 오류). 샌드박스용 설정을 삭제
  • robots.txt와 sitemap.xml을 공개. 검색 엔진과 AI 검색은 허용, AI 학습용 크롤러는 거부(Content-Signal)
  • 특정상거래법 페이지: 적격청구서 발행사업자 등록번호를 게재
  • 0.2.1 — 2026-09-09

  • 대시보드: 오늘의 일정·확인 필요·예약 등록을 최상단에 배치하고, 통계는 접기. "이번 달 방문 예정"과 "이번 달 예약 접수(한도 계산)"를 분리
  • LINE을 사용하지 않는 고객에게도 예약 내용 페이지(확인·취소) 링크를 발급
  • 수동 등록의 "영업시간 외에도 등록"은 다른 예약·휴무·Google 일정과의 중복을 계속 방지
  • 취소와 접수 중지를 하나의 트랜잭션으로 실행. 휴무 데이터를 읽을 수 없을 때는 빈 시간대를 표시하지 않음
  • 리마인드 중복 발송 방지 및 실패 시 재발송, 마감 후 취소 시 매장 전화번호를 안내
  • 주간 캘린더에 Google 일정 표시, 종일 휴무 표시
  • 알림 메일은 실제 발송 결과를 반영. 메뉴 저장 및 Stripe 결제 세션의 중복을 방지
  • 0.2.0 — 2026-09-09

  • 대시보드에 통계: 오늘·이번 주·이번 달, 예상 매출, 취소율, LINE 경유율 및 알림 성공률, 신규/재방문, 인기 메뉴, 14일간 추이
  • 예약 페이지: 월간 캘린더에서 날짜를 선택(빈자리가 있는 날에 ●)
  • 캘린더: 주간 보기, 전화·매장 방문 예약의 수동 등록
  • 전날 리마인드(LINE), 신규 예약·취소 메일 알림, LINE 알림 실패 알림
  • 고객이 LINE에서 예약 확인·취소(마감 시간은 설정에서 변경)
  • 메뉴에 설명·카테고리·라벨·옵션(추가 요금·추가 시간)
  • 휴무일·접수 중지, 예약 접수 일시 중지 스위치
  • 취소 시 메시지 템플릿 및 접수 중지 선택
  • 이용약관에 대한 명시적 동의, 신규 가입과 로그인 분리
  • 보안: 시크릿 암호화 저장(Vault), 결제 항목 보호, 예약 이중 등록·중복 방지 강화
  • 안정성: Google 캘린더 동기화 재시도, 외부 API 타임아웃, 로딩 실패 시 다시 불러오기 화면
  • 0.1.0 — 2026-09-07

  • 최초 출시: LINE 예약 페이지, Google 캘린더 연동, Stripe 결제, 관리 화면