업데이트 내역
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 결제, 관리 화면