Akbar
フードオーダープラットフォーム
akbar.co.jpで動くアクバルの公式オンライン注文。たまプラーザ・あざみ野周辺のお客様が、お店から直接デリバリーやテイクアウトを注文し、オンラインで支払えます。
サイトを見る

今や多くの人がデリバリーアプリで料理を注文しますが、アプリは注文ごとに大きな手数料を取ります。電話注文は時間がかかり、誰かが電話の前にいなければなりません。
主な特長

デリバリーもテイクアウトもワンタップで
お客様はご自宅へのデリバリーか店頭受け取りを選び、スマホからメニューを見て注文できます。電話を待つことも、聞き間違いもありません。

お店と同じメニューをそのまま
カレー・セット・ナンを写真と価格つきでタブごとに掲載。検索や絞り込みもでき、辛さやトッピングも選べます。ランチセットはランチの時間だけ表示されます。

お店のすべてを1つのダッシュボードで
上部に進行中の注文・本日の注文数・本日の売上を表示し、日・週・月ごとの売上グラフと人気メニューも並びます。下には最近の注文が内容・支払い方法・状況つきで一覧になり、新しい注文は入った瞬間に表示されます。

忙しい夜のための一時停止
キッチンが混み合ったら、新規注文の一時停止や配達時間帯の締め切りができ、ワンクリックで再開できます。お客様にはいつも正しい受付状況が表示されます。
お店にとって変わること
電話番が不要に
注文は内容も支払いも確定した状態で届くので、電話を受けて注文を取るためだけの人手が要らなくなります。
手数料を手元に
デリバリーアプリは注文ごとに大きな手数料を取ります。アクバルの公式サイトでの注文ならその手数料がかからず、売上がより多くお店に残ります。
電話よりかんたん
今はスマホで料理を注文するのが当たり前。アクバルにも、誰かが電話に出るのを待たずに、いつでも直接注文できます。
ひと目でわかる
プロジェクト概要
- クライアント
- 横浜市のたまプラーザ・あざみ野エリアのインド料理店、アクバル。
- 担当
- お客様向けの注文サイトからスタッフ用ダッシュボード、決済、サーバーまで、デザインと開発をすべて担当しました。現在も保守を続けています。
- 納品したもの
- デリバリー・テイクアウトの注文サイト
- SMSコードで電話番号を確認する会員登録
- オンラインのカード決済と代金引換
- 注文・売上・人気メニューをリアルタイムで確認できるスタッフ用ダッシュボード
- 写真・トッピング・売り切れ設定つきのメニュー管理
- サーバー構築・ホスティング・HTTPS対応
- 状況
- akbar.co.jpで公開中。実際のご注文を受け付けています。
飲食店を経営していて、アプリを通さずに直接注文を受けたい方は、飲食店のウェブサイト制作(英語のページ)もご覧ください。
開発者向けの技術情報
使用技術・アーキテクチャ・作り方について。
スタック
アーキテクチャ
Key flows
技術的なハイライト
本番クラウドデプロイ
AWS EC2にNginxリバースプロキシとGunicorn(2〜6ワーカー)でデプロイ。CertbotでHTTPS対応。メニュー画像はCloudflare R2に保存。akbar.co.jpで実際のお客様に公開中。
エッジDBへの無停止移行
本番データベースをAWS RDS PostgreSQLからCloudflare D1へ移行。D1はCloudflare Workersランタイム内からしかアクセスできないため、D1の手前にHTTPプロキシとして動作する小さなCloudflare Workerと通信するカスタムSQLAlchemyダイアレクト(d1+http)を実装。FlaskアプリのORMコード自体は変更不要でした。画像保存もAWS S3からCloudflare R2へ同様に移行(同じS3互換APIのため)。
Data model
| Table | What it stores |
|---|---|
| CustomerLogin | Phone number (unique), name, email, hashed password, address fields, verification status, order count |
| Admin | Restaurant admin accounts: email, PBKDF2-SHA256 hashed password (310,000 iterations), passcode |
| SuperAdmin | Top-level admin: email and 4-digit passcode. One row expected |
| DeliveryBoy | Delivery staff: name and PIN for simplified login |
| Category | Food categories with position ordering, optional time restriction, and spicy level flag |
| MenuItem | Individual items: name, description, price, image URL, availability, spice options, position, order count |
| AddonCategory | Add-on groups (e.g. "Spice Level", "Drink Choice") scoped per category or per item |
| AddonItem | Individual add-on choices (e.g. "Mild", "Medium Hot") with price. Belongs to an AddonCategory |
| Order | Placed order: links to customer, status, total, payment method, Stripe payment_intent_id, delivery method, scheduled time |
| OrderItem | Items within an order: quantity, price at time of order, spicy level, special instructions, add-ons stored as JSON |
| Settings | Restaurant settings: name, address, phone, opening hours, admin email. One row |
| TodayCurry / MonthlyCurry | CMS data: today's curry name and the monthly special (name, image URL, price) |
Deployment & security
Production stack
- AWS EC2 instance (Ubuntu)
- Nginx: reverse proxy, rate limiting, HTTPS
- Gunicorn: 2–6 workers, internal port 8000
- Cloudflare D1: all data, via a custom SQLAlchemy dialect talking HTTP to a Cloudflare Worker proxy (D1 isn't reachable outside the Workers runtime)
- Certbot: SSL certificate with auto-renewal script
- Cloudflare R2: images and PDFs, S3-compatible API
- Domain: akbar.co.jp (confirmed in nginx.conf)
Authentication
- Customers: phone + password (PBKDF2-SHA256, 310,000 iterations)
- Admins: email + password, same hash algorithm
- Super admin: 4-digit passcode
- Delivery boys: PIN number
- Sessions are signed cookies (Flask default), last 60 days
- CSRF protection via Flask-WTF on all forms
Payment security
- Card numbers never reach the Flask server
- Stripe PaymentIntent API (industry standard approach)
- Unique reference UUID per order prevents duplicate charges
- Stripe commission (3.6%) tracked separately in dashboard
- Auto-refund on cancellation via Stripe Refunds API
Environment variables
- SECRET_KEY (Flask session signing)
- STRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY
- R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_ACCOUNT_ID, R2_BUCKET_NAME, R2_PUBLIC_URL
- TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_VERIFY_SERVICE_ID
- MAIL_USERNAME, MAIL_PASSWORD (Zoho SMTP)
このようなサイトをお考えですか?
オンライン注文、予約、ポイント機能を備えた飲食店のウェブサイトを制作しています。注文はお店に直接届きます。