予約Lite現在のバージョン v0.4.5 (eeb7812)

Changelog

0.4.5 — 2026-09-28

  • Page speed measurement: Added Vercel Speed Insights (no cookies) to the landing pages and booking pages (/book/store). URL identifiers (such as LINE integration parameters) are removed before sending. Not loaded on the booking confirmation page or the admin dashboard
  • Privacy Policy: Added Vercel Speed Insights to external data transmission (data sent and pages covered)
  • 0.4.4 — 2026-09-28

    These are fixes based on testing on actual LINE devices from the perspective of Japanese customers.

  • Cancellation notices from businesses: Long alphanumeric URLs are no longer shown in the message body and have been replaced with a "Book again" button. Honorific wording has been revised to more polite expressions of apology. The admin dashboard preview now matches the actual display
  • Booking confirmation message: Changed "Change/Cancel" to "Cancel (to change the date or time, cancel and book again)". Now includes the cancellation deadline (e.g., up to 24 hours before) and the business's phone number
  • Cancellation list: Bookings past the deadline now show "The cancellation deadline has passed" on their cards. Notes have been reworded more politely
  • Added "Thank you for letting us know. We sincerely look forward to your next booking." to the reply sent after cancelling via LINE
  • A confirmation message is now also sent via LINE when a booking is cancelled from the booking confirmation page. Emails to owners now correctly show where the cancellation was made
  • Booking completion screen: Added "(tax incl.)" to prices, hid the LINE integration prompt after completion, and added a "Return to chat" button for customers who came from LINE
  • URLs are no longer included in the text (altText) shown in LINE notifications and the chat list
  • 0.4.3 — 2026-09-28

  • Analytics: Added Cloudflare Web Analytics (no cookies) only to the landing pages (Home, Sign Up, Log In, Terms, Privacy, Legal Notice, Changelog, API Docs). Not loaded on booking pages, the booking confirmation page, or the admin dashboard
  • Privacy Policy: Specified the recipient, data sent, and pages covered for external data transmission (Cloudflare Web Analytics). Added Cloudflare as a subcontractor
  • Revised the Terms of Service and Privacy Policy (September 28, 2026): Clarified the provision of business information via a public API and in AI-friendly formats (customer information excluded), suspension of bookings when Google Calendar is disconnected, use of IP addresses (hashed) for fraud prevention, and notification emails and reminders. Businesses will be asked to agree again at their next login
  • 0.4.2 — 2026-09-28

  • Google Calendar: Now detects when the connection has been lost (revoked or expired on Google's side) and notifies the owner once by email. A red notice and a "Reconnect" button are shown in the admin dashboard. Previously, it continued to show as connected while all dates appeared grayed out and unavailable to customers
  • Booking page: While the calendar is disconnected, displays "Online booking is temporarily suspended. Please contact the business directly (phone number)" (bookings remain suspended to prevent double booking)
  • LINE integration page: Corrected to state that booking links are delivered even when the greeting message is on (verified on an actual device)
  • DB: migration 0014 (google_tokens.revoked_at). Applied to production on 2026-09-28
  • 0.4.1 — 2026-09-28

  • Sign-up and login: The post-submission screen now explains that a login link will be sent to registered addresses, provides guidance if the email does not arrive (spam folder, docomo/au/SoftBank receiving settings), and includes a resend button. The login email now also includes an explanation for already-registered addresses
  • Opening a login link a second time now shows "This link has already been used or has expired" (previously it always said "expired")
  • Shop information setup: Full-width characters, uppercase letters, and spaces entered in the booking page URL are now converted automatically. A URL is suggested based on the shop name in romaji. Input is preserved when an error occurs. If the URL is already taken, examples of how to change it are shown. Input examples are now in Japanese
  • Added individual page titles to the login and shop information setup pages. Unified "Set up in 5 minutes" to "10 minutes" in the site description and share image
  • 0.4.0 — 2026-09-28

  • Public read-only API for AI agents: Published an RFC 9727 API catalog (/.well-known/api-catalog), OpenAPI 3.1 (/openapi.json), API documentation (/docs/api), and /auth.md. Shop menus, prices, and available slots can be retrieved. Bookings are not confirmed via the API; instead, customers are directed to the booking page (the booking API is not public because it has no authentication)
  • Added api-catalog and service-doc to the Link header on the top page. Added /docs/api to the sitemap
  • Removed the empty link (logo) that appeared at the top of the Markdown version
  • Top page: Darkened the text color of small notes, the footer, and the version label to meet WCAG AA contrast standards (Lighthouse Accessibility score: 100). Fixed the heading hierarchy
  • Performance: The monospace font (used only on the LINE settings screen) is no longer preloaded on every page
  • 0.3.0 — 2026-09-28

  • LINE integration: Fixed an issue where an encrypted secret could be left behind (e.g., when connecting and disconnecting overlapped), causing all subsequent LINE connection attempts for that shop to fail with "Failed to save" (leftover secrets are now reused for automatic recovery). The same fix applies to Google integration
  • Booking: Fixed an issue where bookings could be made with a phone number containing no digits (e.g., "--------"), resulting in an empty phone number being saved. An invalid phone number now shows "Please enter a valid phone number (at least 8 half-width digits, up to 20 characters)" (previously only "Booking failed" was shown)
  • Dashboard: Fixed an issue where a hydration mismatch error (React #418) occurred every time the top (Bookings) page was opened, causing the screen to re-render (14-day chart labels)
  • Accessibility: Screen readers now announce the selected time slot on the booking page and the active tab on the dashboard
  • For AI agents: Added a Link header to the top page (RFC 8288: sitemap, privacy policy, terms of service, Markdown version). Public pages (top, terms, privacy, Specified Commercial Transactions Act notice, changelog) return their content in Markdown when requested with Accept: text/markdown (browsers still receive HTML as before; /md/ is excluded from search and includes a canonical link)
  • Testing: Added E2E tests (public pages, web bookings, all dashboard tabs). LINE tests now stop as soon as setup fails
  • DB: migration 0013 (fixes to set_line_secret / set_google_refresh_token). Applied to production on 2026-09-28
  • 0.2.5 — 2026-09-12

  • The confirmation email sent on sign-up is now in Japanese with the 予約Lite design (previously the default English template). Templates are in supabase/email-templates/ and are applied with scripts/apply-email-templates.mjs
  • Testing: Added the booking flow from within the LINE app (LIFF) to E2E tests (the LINE client is simulated with @line/liff-mock, verified through ID token validation)
  • Testing: Added automated tests against the production LINE Messaging API (using a test room channel: token issuance, webhook registration, validation of all message formats, and one actual message send). Runs nightly on GitHub Actions
  • 0.2.4 — 2026-09-12

  • Stripe: If the payment service is temporarily unresponsive, billing information is no longer deleted; an error is shown and the action can be retried (the customer is recreated only if they truly do not exist)
  • Stripe: Pressing "Upgrade" multiple times simultaneously no longer creates duplicate customers or checkout sessions (idempotency keys plus concurrency control on save)
  • Reminders: Messages are no longer marked as "sent" before sending; they are recorded after delivery. If processing crashes midway, they are resent 15 minutes later
  • Reminders: Now run hourly (Vercel at 10:00 + GitHub Actions from 11:00 to 20:00; sent only between 10:00 and 20:59). Same-day bookings are labeled "Your booking today," and bookings made after 10:00 the previous day are also reminded on the same day
  • Operations: Added CI (lint / typecheck / test / build). A CRON_SECRET secret is required on GitHub. Backups now use pg_dump custom format and also preserve permissions (GRANT). Added a script for restore rehearsals
  • DB: Apply migration 0012 (bookings.reminder_claimed_at) before deploying
  • 0.2.3 — 2026-09-12

  • A "Booking canceled." message now appears after a booking is canceled (previously the screen changed before it was shown)
  • Added preview images and titles for links shared on LINE and social media. Store pages show the store name
  • Prices are now clearly labeled as "tax included"
  • Fixed an issue where owner notification emails (new bookings, cancellations, LINE delivery failures) were not sent in production
  • For operations: /api/version returns integration status (email, Stripe, Google, etc.) (CRON_SECRET required)
  • 0.2.2 — 2026-09-11

  • Stripe payments: Configured Japanese consumption tax registration; Pro plan invoices now show the included consumption tax (10%)
  • Stripe now runs in live mode only (test keys cause an error at startup). Removed sandbox settings
  • Published robots.txt and sitemap.xml. Search engines and AI search are allowed; AI training crawlers are blocked (Content-Signal)
  • Specified Commercial Transactions Act page: Added the Qualified Invoice Issuer registration number
  • 0.2.1 — 2026-09-09

  • Dashboard: Today's schedule, items needing attention, and booking entry are now at the top, with statistics collapsible. "Visits scheduled this month" and "Bookings received this month (limit calculation)" are now shown separately
  • Booking details page links (view and cancel) are now issued to customers without LINE as well
  • Manual entries using "Register outside business hours" still prevent overlaps with other bookings, closures, and Google events
  • Cancellation and booking suspension now run in a single transaction. No open slots are shown when closure data cannot be read
  • Prevented duplicate reminders and added retries on failure; cancellations after the deadline now direct customers to the store's phone number
  • Weekly calendar now shows Google events and all-day closures
  • Notification emails now reflect actual delivery results. Prevented duplicate menu saves and Stripe checkout sessions
  • 0.2.0 — 2026-09-09

  • Dashboard statistics: today, this week, this month, projected revenue, cancellation rate, LINE booking rate and notification success rate, new/repeat customers, popular menus, and 14-day trends
  • Booking page: Select a date from a monthly calendar (● marks days with availability)
  • Calendar: Weekly view and manual entry of phone and in-store bookings
  • Day-before reminders (LINE), email notifications for new bookings and cancellations, and LINE notification failure alerts
  • Customers can view and cancel bookings from LINE (deadline configurable in settings)
  • Menus now support descriptions, categories, labels, and options (extra charge and extra time)
  • Closed days, booking suspension, and a switch to temporarily pause bookings
  • Message templates for cancellations and the option to suspend bookings
  • Explicit consent to the Terms of Service; separate sign-up and login
  • Security: encrypted storage of secrets (Vault), protection of billing fields, and stronger prevention of double and duplicate bookings
  • Reliability: retries for Google Calendar sync, timeouts for external APIs, and a reload screen when loading fails
  • 0.1.0 — 2026-09-07

  • Initial release: LINE booking page, Google Calendar integration, Stripe billing, and admin dashboard