Xây dựng website nhà hàng sushi tương tác bằng AI

Tạo website nhà hàng sushi có băng chuyền tương tác, đặt món mang về và trang quản trị. Xem bản demo trực tiếp (mở trong thẻ mới)

Lộ trình & tài nguyên

Yêu cầu

Claude Desktop

Dùng Claude Code trong ứng dụng desktop để thiết lập và tùy chỉnh website nhà hàng của bạn.

Tải Claude Desktop

https://claude.ai/download

Tài khoản GitHub

Miễn phí. Bản sao KAITEN của riêng bạn nằm ở đây, và Hostinger triển khai từ đó.

Tạo tài khoản GitHub

https://github.com/signup

Node.js

Tải bản LTS. Claude dùng nó để cài đặt và kiểm tra cửa hàng của bạn.

Tải Node.js

https://nodejs.org/en/download

Tài khoản Supabase

Gói miễn phí là đủ. Nó lưu thực đơn, ảnh, giờ mở cửa, đơn hàng và thông tin đăng nhập quản trị của bạn.

Tạo tài khoản Supabase

https://supabase.link/r4gdwhi

Hosting Hostinger

Bạn cần hosting ở Bước 5, khi cửa hàng lên mạng.

Chọn gói Hostinger

Dùng gói Unlimited hoặc gói Cloud — KAITEN được triển khai dưới dạng Node.js Web App, không phải website tĩnh.

Lấy bản khởi đầu KAITEN

Tạo bản sao của riêng bạn

Mở KAITEN trên GitHub

https://github.com/salhiworks/kaiten-sushi-store

Nhấn Use this template, rồi Create a new repository Đặt tên và chọn Public hoặc Private Nhấn Create repository và sao chép địa chỉ của nó

Thiết lập Supabase

Tạo một dự án Supabase

Mở Supabase Dashboard

https://supabase.com/dashboard

Nhấn New project — khu vực nào và gói Free đều được Lưu mật khẩu cơ sở dữ liệu ở nơi an toàn — Claude không bao giờ cần đến nó Khi dự án sẵn sàng, sao chép Project ID của nó

Supabase Project Settings General

Project ID là thông tin dự án duy nhất mà Claude cần. Bạn không phải tạo bảng hay viết SQL nào: Claude sẽ thiết lập cơ sở dữ liệu ở Bước 3.

Kết nối cửa hàng với Claude Desktop

Đưa vào Claude Desktop

Claude Desktop Code Local

Bắt đầu một phiên Local trong một thư mục như Documents, thêm địa chỉ repository của bạn bên dưới rồi gửi:

Clone bản sao của bạn

Tải repository KAITEN của riêng bạn vào một thư mục con mới và kiểm tra rằng Claude có thể cập nhật nó.

Clone {{REPOSITORY_URL}} into a NEW subfolder inside the folder I selected, named after the repository. Never clone directly into the selected folder and never overwrite existing files. If Git is missing, tell me exactly how to install it. Then check that you can push to this repository with git push --dry-run. If GitHub needs me to sign in, tell me exactly what to do, and never ask me to paste a password or token into the chat. When it is done, tell me which new folder to open in my next Claude Desktop Local session.

Địa chỉ kho của bạn

https://github.com/your-name/my-sushi-restaurant

Mở thư mục KAITEN của bạn

Bắt đầu một phiên Local mới Mở thư mục Claude vừa tạo — thư mục có README.md bên trong Nếu Claude Desktop hỏi, hãy tin cậy thư mục này

Nhờ Claude kết nối cửa hàng của bạn

Trong phiên KAITEN của bạn, thêm Project ID bên dưới rồi gửi:

Kết nối KAITEN với Supabase

Claude áp dụng ba migration và thực đơn ban đầu của bản khởi đầu bằng Supabase CLI, kiểm tra bảo mật và bộ nhớ lưu trữ, rồi đưa cho bạn hai giá trị công khai dùng cho Hostinger.

Connect this KAITEN restaurant to my Supabase project {{PROJECT_REF}}. Work only on that project and never touch any other. Read README.md (step 2, "Make it a real store with Supabase") and docs/SUPABASE.md first, and follow docs/SUPABASE.md's Supabase CLI steps. Use only the SQL this project already has. Don't write new tables, policies or setup SQL, and don't change the store's code. Use only this project's own pinned Supabase CLI, through npx supabase after npm install — never a global supabase command — always on my hosted project. Never run supabase db reset, supabase migration repair or any command that deletes data, never use --include-seed, and never start a local database or Docker. Never ask me for a password, an access token or a Secret key, and never use --reveal. Do these yourself, and tell me what each one does before you run it: 1. Check that Node.js 22 or newer is installed (if it isn't, stop and tell me how to install it), then run npm install and check that npx supabase --version shows 2.122.0. If it doesn't, stop and tell me. 2. Check that I'm signed in to the Supabase CLI. If I'm not, stop and tell me to run npx supabase login in the Terminal myself, and continue when I say I'm signed in. 3. Link this folder with npx supabase link --project-ref {{PROJECT_REF}}, then show me the project's name and URL and ask me to confirm it's the right one. 4. Show me the project's migration history (npx supabase migration list --linked). If it has migrations that aren't in supabase/migrations, stop and explain what you see. If the history is empty but the table public.dishes already exists, the setup was already run by hand: stop and tell me, and push nothing, because these files must not run twice. 5. Show me what the push would apply (npx supabase db push --linked --dry-run). It must be exactly the three files in supabase/migrations, in order: kaiten_schema, kaiten_seed, kaiten_private_helpers. Then apply them with npx supabase db push --linked, so they are recorded in the project's migration history. They create the tables, the Row Level Security policies, the dish-images storage bucket and the starting menu. There is no separate seed step. 6. Verify the setup with npx supabase db query --linked: Row Level Security is on for all seven tables in public, the public dish-images bucket exists, and there are 5 plate tiers, 4 categories and 8 dishes. Fix nothing by hand: tell me what's wrong. 7. Show me my Project URL and Publishable key (sb_publishable_...) as NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, ready to copy into Hostinger, using npx supabase projects api-keys --project-ref {{PROJECT_REF}}. If no Publishable key is listed, tell me to copy it from Connect in the Supabase Dashboard. Never read, use or write the Secret key or service_role key, and don't create .env.local. Then stop and tell me to create my admin user in the Supabase Dashboard. When I give you my admin email, never my password, add that user to public.admin_users with the SQL in docs/SUPABASE.md ("Your admin account"), through npx supabase db query --linked, and check that the row exists. Finally, tell me in plain words what passed and what is still left to do.

Project ID Supabase của bạn

abcdefghijklmnopqrst

Claude hỏi trước mỗi hành động — hãy nhấn Allow. Claude dừng lại khi đến lượt bạn.

Đăng nhập Supabase CLI

Khi Claude yêu cầu, bạn tự chạy lệnh này một lần — nó sẽ mở trình duyệt:

Nhấn Terminal trên thanh tiêu đề của phiên Chạy lệnh bên dưới Chấp thuận đăng nhập trong cửa sổ trình duyệt vừa mở Báo Claude là bạn đã đăng nhập

npx supabase login

Tạo tài khoản quản trị

Supabase Authentication Users

Nhấn Add user, rồi Create new user Nhập email và một mật khẩu mạnh Để nguyên Auto Confirm User được đánh dấu và tạo người dùng Cho Claude biết email quản trị của bạn — không bao giờ cho mật khẩu

Supabase Authentication Sign In / Providers

Tắt Allow new users to sign up và lưu — cửa hàng không có tài khoản khách hàng

Claude thêm email của bạn vào danh sách quản trị viên của cửa hàng. Bạn đăng nhập tại /admin trên cửa hàng trực tuyến ở Bước 5.

Supabase CLI không hoạt động? Thiết lập thủ công

Trong dự án Supabase, mở SQL Editor. Chạy ba tệp này từ thư mục KAITEN của bạn, mỗi tệp một lần và theo đúng thứ tự. Với mỗi tệp, mở ra, sao chép toàn bộ, dán vào một query mới và nhấn Run.

supabase/migrations/20261102200000_kaiten_schema.sql

supabase/migrations/20261102200100_kaiten_seed.sql

supabase/migrations/20261102200200_kaiten_private_helpers.sql

Sao chép Project URL và Publishable key từ Connect — bạn sẽ thêm chúng vào Hostinger ở Bước 5. Sau khi tạo người dùng quản trị ở trên, thêm email của bạn bên dưới rồi chạy đoạn này trong SQL Editor:

Đặt tôi làm quản trị viên

insert into public.admin_users (user_id) select id from auth.users where email = '{{ADMIN_EMAIL}}';

Email quản trị của bạn

you@example.com

Tùy chỉnh nhà hàng sushi của bạn

Mô tả nhà hàng của bạn cho Claude

Điền những gì bạn biết — để trống phần còn lại và Claude sẽ giữ phiên bản của KAITEN. Rồi gửi trong phiên KAITEN của bạn:

Tùy chỉnh nhà hàng sushi của tôi

Đổi tên, nội dung và giao diện, giữ nguyên băng chuyền và chức năng đặt món, rồi push các thay đổi lên repository GitHub của riêng bạn.

This folder is my own copy of the KAITEN sushi restaurant. Before you change anything, read README.md ("How it works"), AGENTS.md and docs/ASSETS.md. AGENTS.md matters: this version of Next.js differs from what you may know. Customize the website for my restaurant. Restaurant name: {{RESTAURANT_NAME}} Our concept and story: {{RESTAURANT_STORY}} Visual identity: {{VISUAL_STYLE}} Where each change belongs: - The brand mark and its default name: src/components/site/brand-mark.tsx - Homepage and about copy: src/components/home/ and src/app/(store)/about/page.tsx - Colours and fonts: src/app/globals.css and src/app/layout.tsx The restaurant name guests see in the header, footer and page titles, plus the address, phone, opening hours, dishes, photos and plate prices, come from the database. Don't hard-code them: I'll set them in the admin after launch. Tell me which name to enter there. Keep these exactly as they are: - The sushi conveyor belt in src/components/ui/sushi-conveyor-menu.tsx: dragging, flicking, lifting a plate, the plate stack and every animation, timing and hit area - The menu, the order and checkout, pickup ordering, the admin, the Supabase migrations, KAITEN_MODE and the other environment variables - The dependencies: don't add new ones First show me a short plan: every file you will change, and what changes in it. Wait for my approval. Then make the changes, and run npm install, npm run lint and npm run typecheck so the build can't break. Fix anything they report. Don't start a local server. Then summarize what you changed and wait. I may ask for more changes. Only when I say it's ready: make sure .env.local and any other secrets are not committed, commit everything with a clear message and push it to the main branch of my own GitHub repository. Never push to any other repository. If GitHub needs me to sign in, tell me exactly what to do. When it is done, tell me the commit you pushed.

Tên nhà hàng

Sushi Nami

Ý tưởng hoặc câu chuyện của nhà hàng

Quầy kaiten do một gia đình điều hành tại Lyon từ năm 2009, với cá từ chợ sáng và cơm được nấu mới mỗi giờ.

Nhận diện thương hiệu

Claude thay đổi thương hiệu, thiết kế và code. Món ăn, ảnh, giá đĩa, danh mục, giờ mở cửa, thông tin nhận món và đơn hàng được quản lý trong trang quản trị sau khi ra mắt, ở Bước 5. Xem lại các thay đổi của Claude, yêu cầu thêm trong cùng phiên, và báo cho Claude khi đã sẵn sàng: Claude push một lần lên repository GitHub của bạn, nơi Bước 5 sẽ triển khai.

Triển khai và ra mắt trên Hostinger

Tạo Web App của bạn

Chưa có hosting? Hãy chọn gói ở phần Yêu cầu.

Hostinger Websites Create site Web App

Nếu Hostinger cho chọn tên miền, hãy chọn tên miền của bạn — nếu không, ứng dụng của bạn sẽ bắt đầu trên một tên miền tạm thời Chọn Import Git Repository Cấp quyền cho GitHub và chọn bản sao KAITEN của riêng bạn, với các thay đổi Claude đã push ở Bước 4

Tên miền đăng ký ở nơi khác? Thêm các bản ghi DNS mà Hostinger hiển thị tại nhà đăng ký tên miền của bạn, và giữ nguyên các bản ghi email hiện có.

Cấu hình và triển khai

Giữ các thiết lập Next.js mà Hostinger phát hiện — nó tự build và khởi động cửa hàng Chọn Node.js 22 trở lên Đảm bảo lệnh build là npm run build và lệnh start là npm start — không bao giờ dùng npm run build:demo, lệnh đó build bản demo bị khóa

Trước khi triển khai, mở Environment variables, nhấn Edit và thêm ba biến này. KAITEN_MODE bật chức năng đặt món thật và trang quản trị — thiếu nó, website sẽ được build thành bản demo. Hai giá trị Supabase là những giá trị Claude đã cho bạn xem ở Bước 3. Chúng được build sẵn vào cửa hàng, nên nếu đổi một giá trị sau này thì cần deploy lại.

KAITEN_MODE NEXT_PUBLIC_SUPABASE_URL NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY

KAITEN_MODE

Từ live, viết thường

NEXT_PUBLIC_SUPABASE_URL

Project URL của Supabase

NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY

Publishable key của Supabase

Các giá trị Supabase nằm trong Connect.

Mở Connect

https://supabase.com/dashboard/project/_?showConnect=true

Chỉ giá trị công khai

Tuyệt đối không thêm Secret key hay service_role key của Supabase vào đây. Mọi biến bắt đầu bằng NEXT_PUBLIC_ đều hiển thị được trong trình duyệt.

Nhấn Finish, rồi Deploy, và chờ build hoàn tất

Đang chạy trên tên miền tạm thời?

Để chuyển sang tên miền của riêng bạn, mở Web App trong Hostinger và kết nối tên miền ở đó, thêm các bản ghi DNS được hiển thị tại nhà đăng ký tên miền. KAITEN không lưu địa chỉ của chính nó, nên không cần thay đổi gì và không cần deploy lại.

Thiết lập nhà hàng của bạn

Mở /admin trên cửa hàng đang chạy và đăng nhập bằng email quản trị. Mọi thứ bạn lưu trong trang quản trị đều vào thẳng cơ sở dữ liệu — không cần sửa code.

Trong Restaurant, chọn múi giờ ở Hours are in trước, sau đó đặt Restaurant name, địa chỉ nhận món, số điện thoại và giờ mở cửa, rồi nhấn Save restaurant details Trong Plates & prices, đặt giá cho từng màu đĩa và nhấn Save plate prices — mọi món trên đĩa đó đều theo giá này Trong Menu, nhấn Edit ở một món, thay đổi thông tin, dùng Replace photo để thay bằng ảnh của bạn và nhấn Save changes. Dùng Add dish để thêm món mới Tắt On menu cho những món bạn không phục vụ, và tắt In stock khi một món đã hết trong ngày Trong Categories, đổi tên, sắp xếp lại hoặc thêm các mục trong thực đơn

Thay ảnh ban đầu trước khi mở cửa

Tám ảnh món ăn ban đầu lấy từ bản demo của component gốc, và bản quyền của chúng chưa được xác minh. Hãy dùng ảnh bạn sở hữu hoặc đã được cấp phép.

Ảnh món ăn của bạn cần gì

Hình vuông, tối thiểu 800 × 800 px

Chụp từ trên xuống, đĩa lấp đầy khung hình

Nền trong suốt (PNG hoặc WebP), để băng chuyền hiện ra xung quanh đĩa

Tối đa 5 MB

Kiểm tra và ra mắt

Mở tên miền của bạn — biểu tượng ổ khóa hiện ra, băng chuyền quay và phần đầu trang hiển thị trạng thái mở cửa Lấy vài đĩa vào đơn của bạn, nhấn Review order, rồi Checkout for pickup Nhập tên và số điện thoại rồi nhấn Place pickup order Trong trang quản trị, mở Orders, tìm đơn hàng và nhấn Start preparing Trên trang xác nhận đơn hàng, nhấn Refresh status: lúc này nó hiển thị Preparing

Cửa hàng chỉ nhận đơn trong giờ mở cửa và khi Taking orders đang bật, ở phía trên mỗi trang quản trị. Khách thanh toán khi đến nhận món: không có thanh toán thẻ trực tuyến.

Sau này, hãy thay đổi món ăn, ảnh, giá và giờ mở cửa trong trang quản trị — thay đổi có hiệu lực ngay. Với thay đổi thiết kế hoặc code, hãy nhờ Claude và duyệt lần push: Hostinger build lại cửa hàng sau mỗi lần push lên main.