კონფიდენციალური
Digital Hub
სრული არქიტექტურის დოკუმენტაცია
Telegram Mini App · Laravel Backend · Multi-tenant SaaS პლატფორმა
ვერსია
v1.0
თარიღი
2026
სტატუსი
Pre-Development
პლატფორმა
Telegram + Web
სარჩევი
დოკუმენტის სტრუქტურა
ეს დოკუმენტი მოიცავს Fika Digital Hub-ის სრულ ტექნიკურ სპეციფიკაციას — არქიტექტურიდან deployment-მდე.
დოკუმენტის მიზანი
ეს არის ცოცხალი დოკუმენტი, რომელიც იქნება განახლებული განვითარების პროცესში. მისი მიზანია უზრუნველყოს ერთიანი სარეფერენციო წყარო ყველა ტექნიკური გადაწყვეტილებისთვის.
სექცია 01
პროდუქტის ხედვა და Scope
რა ვაშენებთ, ვისთვის და რატომ — ბიზნეს კონტექსტი და პრობლემის განსაზღვრა.
პრობლემა, რომელსაც ვხსნით
💸
Wolt/Bolt საკომისიო
კაფეები კარგავენ შემოსავლის 25–35%-ს delivery პლატფორმების საკომისიოებში. Fika-სთვის ეს ნიშნავს ათასობით ლარს ყოველთვიურად.
🙈
კლიენტების მონაცემები
Wolt-ზე გამოქვეყნებული კაფე ვერ ხედავს ვინ ყიდულობს მის პროდუქტს. კლიენტთა ბაზა მიეკუთვნება პლატფორმას, არა ბიზნესს.
ოპერაციული არაეფექტურობა
ხელით შეკვეთების მიღება, ჯავშნების ტელეფონით დადასტურება — ეს ყველაფერი კარგავს პერსონალის დროს და ქმნის შეცდომებს.
🔗
ბრენდის კონტროლი
მესამე მხარის პლატფორმაზე კაფე ვერ აკეთებს დიზაინს, ლოიალობის პროგრამებს ან კლიენტებთან პირდაპირ კომუნიკაციას.
გამოსავალი: Fika Digital Hub

ავტონომიური Telegram Mini App, რომელიც კაფეს აძლევს Wolt-ის ეფექტურობას + საკუთარი ბრენდის სრულ კონტროლს. კლიენტს არ სჭირდება ახალი აპლიკაცია — Telegram უკვე ყველას აქვს.

👤
კლიენტი
მენიუს დათვალიერება, წინასწარ შეკვეთა, მაგიდის ჯავშანი, ლოიალობის ბარათი — ყველაფერი Telegram-ში.
👨‍🍳
პერსონალი
შეკვეთების და ჯავშნების მართვა Telegram Bot-ის ღილაკებით. Stock-ის განახლება ერთი კლიკით.
👑
მფლობელი
Web Dashboard-ი Analytics-ით, გადახდების კონფიგურაციით და კლიენტთა ბაზით.
მთავარი Selling Point
Dashboard-ი რეალურ დროში ითვლის, რამდენი ლარი დაიზოგა Wolt-ის საკომისიოს გარეშე. ეს არის კონკრეტული, გაზომვადი ROI, რომელსაც კაფეს მფლობელი ყოველ დღე ხედავს.
სექცია 02
სისტემური არქიტექტურა
სამი ძირითადი ფენა — Client, Server, Infrastructure — და მათ შორის კომუნიკაციის სქემა.
Client Layer — მომხმარებლის ინტერფეისები
📱 Telegram Mini App
React + TypeScript
🤖 Admin Bot
Telegram Bot API
💻 Web Dashboard
React + Inertia.js
↕ HTTPS / WebSocket
Application Layer — ბიზნეს ლოგიკა
🔧 Laravel 11 Backend
📋 REST API
🔔 Webhook Handler
⚙️ Queue Worker
↕ Database Drivers / Cache
Data & Infrastructure Layer
🗄️ MySQL 8.0
⚡ Redis Cache
💳 BOG Payment
💳 TBC Payment
📤 Telegram API
მონაცემთა ნაკადი — კლიენტის შეკვეთა
#მოქმედებაკომპონენტიპრობოკოლი
1კლიენტი ხსნის Mini App-ს და ირჩევს პროდუქტსReact Mini AppTelegram SDK
2POST /api/orders — შეკვეთის გაგზავნაOrderControllerHTTPS REST
3ბაზაში ჩაწერა + Queue Job გაშვებაLaravel + MySQLEloquent ORM
4Barista Bot-ს გაეგზავნება შეტყობინება ღილაკებითTelegramServiceBot API
5ბარისტა "✅ მივიღე" ღილაკს დააჭერსAdmin BotWebhook POST
6კლიენტს ეგზავნება "შეკვეთა მიღებულია" notificationTelegramServiceBot API
7შეკვეთა მზადაა — კლიენტს ეგზავნება alertTelegramServiceBot API
Webhook vs Polling
პროდაქშენში გამოვიყენებთ Webhook მეთოდს — Telegram-ი პირდაპირ გამოგვიგზავნის update-ებს ჩვენს სერვერზე. განვითარების დროს გამოვიყენებთ Long Polling-ს ადგილობრივ გარემოში (ngrok-ის გარეშეც მუშაობს).
სექცია 03
Tech Stack — ტექნოლოგიების სტეკი
ყველა ტექნოლოგია შერჩეულია სამი კრიტერიუმით: სიმარტივე, ქართული Developer Community-სთვის ცნობადობა, და მომავლის მასშტაბირება.
ფენატექნოლოგიავერსიამიზეზი
Backend Framework Laravel 11.x PHP-ის საუკეთესო framework, ORM, Queue, Sanctum auth — ყველაფერი built-in
Mini App Frontend React + TypeScript 18 + TS 5 Telegram SDK TypeScript-ზეა. Type safety ამცირებს runtime error-ებს
Admin Dashboard React + Inertia.js 1.x Laravel-თან seamless ინტეგრაცია. SPA ბიჰევიორი routing overhead-ის გარეშე
CSS Framework Tailwind CSS 3.x Utility-first. Telegram-ის dark theme-ს მარტივად ეგუება
Primary Database MySQL 8.0 Laravel-ის default. JSON columns-ის მხარდაჭერა order items-ისთვის
Cache / Queue Redis 7.x Session cache, notification queue-ების სწრაფი დამუშავება
Telegram Integration irazasyed/telegram-bot-sdk 3.x Laravel-ის native package. Webhook registration, keyboard builder
Payments (Primary) BOG API v2 Bank of Georgia — ყველაზე გავრცელებული ქართულ ბიზნესში
Payments (Secondary) TBC API v1 TBC Bank — დამატებითი ვარიანტი, abstract layer-ით
i18n (მრავალენოვნობა) react-i18next 14.x ქართული / ინგლისური / რუსული — runtime language switching
Build Tool Vite 5.x Laravel-თან built-in ინტეგრაცია, HMR Mini App-ისთვის
Testing Pest PHP 2.x Laravel-ის modern testing framework, readable syntax
Server Nginx + PHP-FPM Production-grade. Laravel Forge-ით ავტომატური კონფიგურაცია
Hosting DigitalOcean $12/თვე Droplet საკმარისია MVP-სთვის. მარტივი scale-up
SSL Let's Encrypt უფასო. Telegram Webhook-ი HTTPS-ს საჭიროებს სავალდებულოდ
Payment Gateway Abstract Layer
BOG და TBC-ს ვკოდავთ საერთო Interface-ის მიღმა (PaymentGatewayInterface). ეს ნიშნავს, რომ მომავალში ნებისმიერი ახალი ბანკის დამატება = ერთი ახალი კლასის წერა, დანარჩენი კოდის შეცვლის გარეშე.
სექცია 04
ფუნქციონალური სპეციფიკაცია
სამი მომხმარებლის პერსპექტივა — კლიენტი, ბარისტა, მფლობელი — და მათი სრული feature set.
📱 Telegram Mini App — კლიენტი
🤖 Telegram Admin Bot — ბარისტა / პერსონალი
💻 Web Dashboard — მფლობელი
სექცია 05
მონაცემთა ბაზის სქემა
MySQL-ის სრული სქემა. ყველა ცხრილი ემყარება Multi-tenant არქიტექტურას — cafe_id foreign key ყველგან.
cafesMulti-tenant Root
idPKbigintAuto-increment პირველადი გასაღები
namevarchar(100)კაფეს სახელი (მაგ: "Fika")
slugvarchar(50)URL-safe identifier (მაგ: "fika"). Unique.
telegram_bot_tokenvarchar(255)კაფეს Bot-ის token — encrypted at rest
wolt_linktextWolt-ის გვერდის URL redirect-ისთვის
settingsjsonკაფეს კონფიგურაცია: ონლაინ გადახდა, ენა, სამუშაო საათები
is_activebooleanკაფეს სტატუსი პლატფორმაზე
productsმენიუ
idPKbigint
cafe_idFKbigint→ cafes.id | Multi-tenant isolation
namejson{"ka": "ყავა", "en": "Coffee", "ru": "Кофе"} — i18n
descriptionjsonმრავალენოვანი აღწერა
pricedecimal(8,2)ფასი ლარში
categoryvarchar(50)კატეგორია ფილტრაციისთვის
image_urlvarchar(255)S3 ან local storage path
is_activebooleanfalse = "out of stock" — ბარისტა ცვლის Bot-დან
sort_orderintegerმენიუში გამოჩენის თანმიმდევრობა
ordersშეკვეთები
idPKbigint
cafe_idFKbigint→ cafes.id
user_idFKbigint→ customers.id
itemsjsonპროდუქტები + qty + ფასი
total_amountdecimal(8,2)ჯამური თანხა
payment_methodenumcounter / bog / tbc
statusenumpending/accepted/ready/done/cancelled
notestextკლიენტის შენიშვნა
reservationsჯავშნები
idPKbigint
cafe_idFKbigint→ cafes.id
user_idFKbigint→ customers.id
reserved_atdatetimeჯავშნის თარიღი და დრო
guest_counttinyintსტუმრების რაოდენობა
statusenumpending/confirmed/cancelled
notestextსპეციალური მოთხოვნები
customersკლიენტები
idPKbigint
telegram_idbigintTelegram user ID. Unique.
first_namevarchar(100)Telegram-ის სახელი
usernamevarchar(100)@handle (nullable)
language_codevarchar(5)ka / en / ru — auto-detected
phonevarchar(20)საჭიროების შემთხვევაში
loyalty_cardsლოიალობა
idPKbigint
cafe_idFKbigint→ cafes.id
customer_idFKbigint→ customers.id
stampstinyint0–10. 10-ზე = უფასო
total_redeemedintegerგამოყენებული უფასო შეკვეთები
სექცია 06
API სტრუქტურა
RESTful API endpoints — Mini App-ს, Admin Bot-ს და Dashboard-ს შორის კომუნიკაციისთვის. ყველა response JSON ფორმატშია.
Public API — Mini App (auth: Telegram initData)
MethodEndpointაღწერაAuth
GET/api/{cafe}/menuმენიუს სრული სია კატეგორიებით
POST/api/{cafe}/ordersახალი შეკვეთის შექმნაTG initData
GET/api/{cafe}/orders/{id}შეკვეთის სტატუსის შემოწმებაTG initData
GET/api/{cafe}/orders/historyკლიენტის შეკვეთების ისტორიაTG initData
POST/api/{cafe}/reservationsახალი ჯავშნის შექმნაTG initData
GET/api/{cafe}/reservations/slotsხელმისაწვდომი დროები
GET/api/{cafe}/loyaltyკლიენტის loyalty card სტატუსიTG initData
POST/api/{cafe}/payments/initiateონლაინ გადახდის დაწყება (BOG/TBC)TG initData
GET/api/{cafe}/payments/callbackბანკის callback — გადახდის დადასტურებაBank Sig
Telegram Webhook — Bot Updates
MethodEndpointაღწერა
POST/webhook/{cafe}/{token}Telegram-ის Bot update-ების მიღება (secret token path)
Admin API — Dashboard (auth: Sanctum session)
MethodEndpointაღწერა
GET/admin/analyticsშემოსავლის სტატისტიკა + Wolt-ის შედარება
GET/admin/ordersშეკვეთების სია ფილტრებით
GET/admin/customersკლიენტების სია + CSV export
PUT/admin/menu/{id}პროდუქტის რედაქტირება
POST/admin/menuახალი პროდუქტის დამატება
DELETE/admin/menu/{id}პროდუქტის წაშლა
PUT/admin/settingsBOG/TBC API keys, ონლაინ გადახდა toggle
POST/admin/campaignsTelegram Push notification-ის გაგზავნა
Telegram initData ავთენტიფიკაცია
Mini App-ი Telegram-ისგან იღებს initData hash-ს, რომელიც შეიცავს მომხმარებლის ID-ს და signature-ს. Backend ამოწმებს ამ hash-ს Bot Token-ის გამოყენებით HMAC-SHA256-ით. ეს არის Telegram-ის official auth მეთოდი — password ან JWT-ი არ გვჭირდება.
სექცია 07
პროექტის ფაილური სტრუქტურა
სრული Laravel 11 პროექტის ფაილური ხე — ყველა ფოლდერი განმარტებით.
fika-app/ — Laravel 11 Root
fika-app/
├── app/
│   ├── Http/Controllers/
│   │   ├── Api/                        # Mini App endpoints
│   │   │   ├── MenuController.php         # GET /api/{cafe}/menu
│   │   │   ├── OrderController.php        # შეკვეთების CRUD
│   │   │   ├── BookingController.php      # ჯავშნების მართვა
│   │   │   ├── LoyaltyController.php      # Stamp card ლოგიკა
│   │   │   └── PaymentController.php      # BOG/TBC integration
│   │   ├── Admin/                       # Dashboard (Inertia)
│   │   │   ├── AnalyticsController.php
│   │   │   ├── MenuManagementController.php
│   │   │   ├── CustomerController.php
│   │   │   ├── SettingsController.php
│   │   │   └── CampaignController.php     # Push notifications
│   │   └── WebhookController.php          # Telegram Bot updates
│   ├── Services/                       # ბიზნეს ლოგიკა
│   │   ├── TelegramService.php            # Bot messages, keyboards
│   │   ├── PaymentGatewayService.php      # Abstract payment layer
│   │   ├── BogPaymentService.php          # BOG API implementation
│   │   ├── TbcPaymentService.php          # TBC API implementation
│   │   └── LoyaltyService.php             # Stamp logic
│   ├── Models/
│   │   ├── Cafe.php                       # Multi-tenant root
│   │   ├── Product.php
│   │   ├── Order.php
│   │   ├── Reservation.php
│   │   ├── Customer.php
│   │   └── LoyaltyCard.php
│   └── Jobs/                           # Queue jobs
│       ├── NotifyBarista.php
│       └── NotifyCustomer.php
├── resources/js/                      # Frontend (Vite)
│   ├── miniapp/                         # Telegram Mini App
│   │   ├── components/
│   │   │   ├── Menu/                    # MenuCard, CategoryFilter
│   │   │   ├── Order/                   # Cart, OrderStatus
│   │   │   ├── Booking/                 # Calendar, BookingForm
│   │   │   └── Loyalty/                 # StampCard component
│   │   ├── i18n/                        # ka.json, en.json, ru.json
│   │   ├── hooks/                       # useTelegram, useCart
│   │   └── App.tsx
│   └── admin/                           # Dashboard (Inertia pages)
│       ├── pages/
│       │   ├── Analytics.tsx
│       │   ├── Menu.tsx
│       │   ├── Customers.tsx
│       │   └── Settings.tsx
│       └── app.tsx
├── database/migrations/              # DB schema migrations
├── routes/
│   ├── api.php                        # Mini App routes
│   ├── web.php                        # Dashboard + Webhook
│   └── channels.php                   # Broadcasting
└── .env                               # Environment variables
სექცია 08
გარემოს კონფიგურაცია (.env)
ყველა გარემოს ცვლადი, რომელიც პროექტს სჭირდება. გასაღებები ინახება მხოლოდ .env ფაილში, რომელიც .gitignore-შია.
Application
APP_NAME=FikaDigitalHub
APP_ENV=production
APP_URL=https://app.fikadigital.ge
APP_KEY=base64:... (php artisan key:generate)
Database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=fika_db
DB_USERNAME=fika_user
DB_PASSWORD=strong_password_here
Cache & Queue
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
Telegram
TELEGRAM_BOT_TOKEN=123456:ABC... (BotFather-დან)
TELEGRAM_WEBHOOK_SECRET=random_secret_for_url_security
Bank of Georgia (BOG)
BOG_CLIENT_ID=your_client_id
BOG_CLIENT_SECRET=your_client_secret
BOG_API_URL=https://api.bog.ge/payments/v1
BOG_CALLBACK_URL=https://app.fikadigital.ge/api/payments/callback/bog
TBC Bank
TBC_CLIENT_ID=your_tbc_client_id
TBC_CLIENT_SECRET=your_tbc_secret
TBC_API_URL=https://api.tbcbank.ge/v1
Storage
FILESYSTEM_DISK=local (MVP) / s3 (production)
უსაფრთხოება — კრიტიკული
.env ფაილი არასდროს არ მოხვდეს Git-ში. .gitignore-ი უნდა შეიცავდეს .env ჩანაწერს. Production-ზე გასაღებები ინახება Laravel Forge-ის Environment სექციაში ან DigitalOcean Secrets-ში.
სექცია 09
Multi-tenant სტრატეგია
ერთი კოდბაზა, მრავალი კაფე. Fika ჯერ, მერე სხვები — ნებისმიერი ახალი კაფე = კონფიგურაცია, არა ახალი Deploy.
მიდგომა: Single Database, Shared Schema

ყველა კაფე ერთ ბაზაში. ყველა ცხრილს აქვს cafe_id კოლონი. Laravel Global Scope ავტომატურად ფილტრავს ყველა Query-ს.

app/Models/Product.php — Global Scope მაგალითი
class Product extends Model {
    use BelongsToCafe;  // Trait adds cafe_id scope automatically

    // ყოველი Query ავტომატურად: WHERE cafe_id = {current_cafe}
    // კლიენტი ვერ ნახავს სხვა კაფეს პროდუქტებს
}
ახალი კაფეს დამატება — 5 ნაბიჯი
White-label შესაძლებლობა
ყოველ კაფეს ექნება საკუთარი Bot-ი კაფეს სახელით (მაგ: @FikaGeBot, @BarakaGeBot). Mini App-ი ავტომატურად გამოიყენებს კაფეს ბრენდის ფერებს cafes.settings JSON-დან. ერთი სერვერი, ერთი კოდი — უსასრულო კაფეები.
სექცია 10
განვითარების ფაზები
4 ფაზა — MVP-დან სრულ SaaS პლატფორმამდე. Fika ჯერ, მასშტაბი მერე.
⏱ სულ ~ 11 კვირა
MVP Fika-სთვის მე-6 კვირაზე. სრული პლატფორმა მე-11 კვირაზე.
🎯 MVP-ის კრიტერიუმი
კლიენტი შეუკვეთავს, ბარისტა მიიღებს Bot-ში, გადახდა ან counter ან BOG-ი.
სექცია 11
Deployment და ინფრასტრუქტურა
Development-დან Production-მდე — ნაბიჯ-ნაბიჯ სერვერის კონფიგურაცია.
Development გარემო (ადგილობრივი)
ინსტრუმენტიმიზნობრიობაინსტალაცია
PHP 8.3Laravel Backendphp.net ან XAMPP
ComposerPHP Package Managergetcomposer.org
Node.js 20 LTSReact / Vite Buildnodejs.org
MySQL 8.0ადგილობრივი ბაზაXAMPP-ში ჩართული
RedisCache / Queueredis.io (ან Upstash free tier)
ngrokWebhook testingngrok.com (Telegram HTTPS-ს საჭიროებს)
PostmanAPI ტესტირებაpostman.com
Production სერვერი (DigitalOcean)
კომპონენტისპეციფიკაციაღირებულება
Droplet2 vCPU, 2GB RAM, 50GB SSD (Ubuntu 22.04)$14/თვე
Managed MySQLDigitalOcean Managed DB (MVP-ზე Droplet-ში)$0 (MVP)
RedisDroplet-ზე ადგილობრივი$0
Laravel ForgeServer Management / Auto-deploy$12/თვე
Domainfikadigital.ge ან მსგავსი~$15/წელი
SSLLet's Encrypt (Forge ავტომატურად)$0
სულ MVP~$26/თვე
Auto-Deploy Pipeline
GitHub-ი → Laravel Forge Webhook → სერვერი ავტომატურად: git pull → composer install → npm build → migrations → php-fpm restart. ყოველი Git push ავტომატურად ადის production-ზე.
სექცია 12
უსაფრთხოება და Best Practices
გადახდების და კლიენტების მონაცემების დაცვა — PCI DSS compliance და Telegram security.
🔐
Telegram Auth Verification
Mini App-ის ყოველი request-ი შემოწმება HMAC-SHA256-ით. Bot Token-ი ინახება მხოლოდ .env-ში. Fake initData-ს მიღება შეუძლებელია.
💳
Payment Security
ჩვენ არ ვინახავთ ბარათის ნომრებს. BOG/TBC redirect-ი — მთელი transaction ბანკის სერვერზე ხდება. PCI DSS by design.
🏰
Multi-tenant Isolation
Global Scope-ები ყველა Model-ზე. Unit test-ები isolation-ის შემოწმებისთვის. კაფე A ვერ ხედავს კაფე B-ს მონაცემებს.
🔒
API Rate Limiting
Laravel-ის ThrottleRequests middleware. Mini App endpoints: 60 req/min. Payment: 10 req/min. Webhook: Telegram IP whitelist.
🛡️
Input Validation
Laravel Form Request Validation ყველა endpoint-ზე. SQL Injection შეუძლებელია Eloquent ORM-ით. XSS protection built-in.
🔑
Secret Management
Bot Token-ები DB-ში encrypted. .env ფაილი .gitignore-ში. Production secrets: Laravel Forge Environment.
GDPR / მონაცემთა დაცვა
მოთხოვნაგამოსავალი
კლიენტის მონაცემების მინიმუმივინახავთ მხოლოდ Telegram ID, სახელი, ენა — სხვა არაფერი ნებართვის გარეშე
მონაცემების წაშლაDELETE /api/me endpoint — კლიენტი ითხოვს, ყველა მონაცემი იშლება
Phone numberმხოლოდ კლიენტის ნებართვით (Telegram contact sharing)
შეტყობინებების opt-outკლიენტი შეუძლია Bot-ს block გაუკეთოს — ავტომატური opt-out
შემდეგი ნაბიჯი
ეს დოკუმენტი დასრულებულია. ახლა შეგვიძლია დავიწყოთ ფაზა 1-ის კოდირება: გარემოს მომზადება → PHP + Composer + Node.js ინსტალაცია → Laravel პროექტის შექმნა → პირველი migration-ების დაწერა.