სარჩევი
დოკუმენტის სტრუქტურა
ეს დოკუმენტი მოიცავს Fika Digital Hub-ის სრულ ტექნიკურ სპეციფიკაციას — არქიტექტურიდან deployment-მდე.
- 01პროდუქტის ხედვა და Scope3
- 02სისტემური არქიტექტურა4
- 03Tech Stack — ტექნოლოგიების სტეკი5
- 04ფუნქციონალური სპეციფიკაცია6
- 05მონაცემთა ბაზის სქემა7
- 06API სტრუქტურა8
- 07პროექტის ფაილური სტრუქტურა9
- 08გარემოს კონფიგურაცია (.env)10
- 09Multi-tenant სტრატეგია11
- 10განვითარების ფაზები და Roadmap12
- 11Deployment და ინფრასტრუქტურა13
- 12უსაფრთხოება და Best Practices14
დოკუმენტის მიზანი
ეს არის ცოცხალი დოკუმენტი, რომელიც იქნება განახლებული განვითარების პროცესში. მისი მიზანია უზრუნველყოს ერთიანი სარეფერენციო წყარო ყველა ტექნიკური გადაწყვეტილებისთვის.
სექცია 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 App | Telegram SDK |
| 2 | POST /api/orders — შეკვეთის გაგზავნა | OrderController | HTTPS REST |
| 3 | ბაზაში ჩაწერა + Queue Job გაშვება | Laravel + MySQL | Eloquent ORM |
| 4 | Barista Bot-ს გაეგზავნება შეტყობინება ღილაკებით | TelegramService | Bot API |
| 5 | ბარისტა "✅ მივიღე" ღილაკს დააჭერს | Admin Bot | Webhook POST |
| 6 | კლიენტს ეგზავნება "შეკვეთა მიღებულია" notification | TelegramService | Bot API |
| 7 | შეკვეთა მზადაა — კლიენტს ეგზავნება alert | TelegramService | Bot 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 — კლიენტი
- Digital Menu — პროდუქტების კატეგორიებად დახარისხება, სურათები, ფასები, out-of-stock ინდიკატორი. ენის არჩევა (KA/EN/RU) პირველი გახსნისას.
- Pre-order & Cart — პროდუქტების basket-ში დამატება, რაოდენობის შეცვლა, სპეციალური შენიშვნები ბარისტასთვის ("ნაკლები შაქარი").
- Hybrid Payment — "ადგილზე გადახდა" (counter) ან "ბარათით ონლაინ" (BOG/TBC redirect). მფლობელს შეუძლია ონლაინ გადახდა გამართოს/გამოართვის Dashboard-დან.
- Table Booking — ინტერაქტიული კალენდარი, ვიზიტორების რაოდენობის მითითება, სურვილების ველი. Real-time ხელმისაწვდომობა.
- Loyalty Stamp Card — ყოველ შეკვეთაზე stamp. მე-10 შეკვეთა უფასოა. ციფრული კარტი ხილულია Mini App-ში.
- Smart Notifications — Push notification, როცა შეკვეთა: მიღებულია → მზადდება → მზადაა. Telegram-ის native notification სისტემა.
- Wolt/Bolt Redirect — "მიტანა გინდა?" ღილაკი პირდაპირ ხსნის კაფეს Wolt-ის გვერდს. Seamless UX, კაფე ინარჩუნებს delivery option-ს.
- Order History — კლიენტი ხედავს წინა შეკვეთებს. "კვლავ შეუკვეთე" ღილაკი — ერთი კლიკით basket-ის შევსება.
🤖 Telegram Admin Bot — ბარისტა / პერსონალი
- Real-time Order Alerts — ახალი შეკვეთა მყისიერად ჩამოდის Bot-ში. Inline keyboard: ✅ მივიღე / ❌ უარი / ⏳ 5 წუთი ვგვიანდები.
- Order Ready Alert — "კლიენტს ვაცნობო?" ღილაკი — ერთი კლიკით გაეგზავნება "შეკვეთა მზადაა!" notification.
- Reservation Management — ჯავშნის მოთხოვნა ჩამოდის ინფო-ბარათით. ✅ დადასტურება / ❌ უარყოფა / ✏️ ალტერნატივის შეთავაზება.
- Quick Stock Update — /stock ბრძანება + პროდუქტის სახელი = მყისიერი "out of stock" მენიუში. კლიენტებს აღარ ეჩვენებათ.
- Daily Summary — ყოველ საღამოს 22:00-ზე ავტომატური ანგარიში: X შეკვეთა, Y ლარი, Z Wolt-ისგან დაზოგილი.
💻 Web Dashboard — მფლობელი
- Revenue Analytics — შემოსავალი გრაფიკებით, Wolt-ის შედარება, "დაზოგილი საკომისიო" real-time კალკულატორი.
- Menu Management — პროდუქტების დამატება/რედაქტირება, სურათების ატვირთვა, კატეგორიების მართვა, ფასების ცვლილება.
- Customer Database — კლიენტების სია, შეკვეთების ისტორია, საშუალო check, ბოლო ვიზიტი. Export CSV-ში.
- Payment Settings — BOG/TBC API გასაღებების შეყვანა, ონლაინ გადახდების ჩართვა/გამორთვა, Wolt link-ის განახლება.
- Reservation Calendar — კვირის კალენდარი ყველა ჯავშნით. Drag & drop სტატუსის შეცვლა.
- Push Campaigns — შეტყობინების გაგზავნა ყველა ან სეგმენტირებულ კლიენტზე. "დღეს Croissant-ზე 20% ფასდაკლება!" — 3 კლიკში.
სექცია 05
მონაცემთა ბაზის სქემა
MySQL-ის სრული სქემა. ყველა ცხრილი ემყარება Multi-tenant არქიტექტურას — cafe_id foreign key ყველგან.
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კაფეს სტატუსი პლატფორმაზე
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მენიუში გამოჩენის თანმიმდევრობა
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კლიენტის შენიშვნა
idPKbigint—
cafe_idFKbigint→ cafes.id
user_idFKbigint→ customers.id
reserved_atdatetimeჯავშნის თარიღი და დრო
guest_counttinyintსტუმრების რაოდენობა
statusenumpending/confirmed/cancelled
notestextსპეციალური მოთხოვნები
idPKbigint—
telegram_idbigintTelegram user ID. Unique.
first_namevarchar(100)Telegram-ის სახელი
usernamevarchar(100)@handle (nullable)
language_codevarchar(5)ka / en / ru — auto-detected
phonevarchar(20)საჭიროების შემთხვევაში
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)
| Method | Endpoint | აღწერა | 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
| Method | Endpoint | აღწერა |
| POST | /webhook/{cafe}/{token} | Telegram-ის Bot update-ების მიღება (secret token path) |
Admin API — Dashboard (auth: Sanctum session)
| Method | Endpoint | აღწერა |
| 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/settings | BOG/TBC API keys, ონლაინ გადახდა toggle |
| POST | /admin/campaigns | Telegram 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/
├── app/
│ ├── Http/Controllers/
│ │ ├── Api/
│ │ │ ├── MenuController.php
│ │ │ ├── OrderController.php
│ │ │ ├── BookingController.php
│ │ │ ├── LoyaltyController.php
│ │ │ └── PaymentController.php
│ │ ├── Admin/
│ │ │ ├── AnalyticsController.php
│ │ │ ├── MenuManagementController.php
│ │ │ ├── CustomerController.php
│ │ │ ├── SettingsController.php
│ │ │ └── CampaignController.php
│ │ └── WebhookController.php
│ ├── Services/
│ │ ├── TelegramService.php
│ │ ├── PaymentGatewayService.php
│ │ ├── BogPaymentService.php
│ │ ├── TbcPaymentService.php
│ │ └── LoyaltyService.php
│ ├── Models/
│ │ ├── Cafe.php
│ │ ├── Product.php
│ │ ├── Order.php
│ │ ├── Reservation.php
│ │ ├── Customer.php
│ │ └── LoyaltyCard.php
│ └── Jobs/
│ ├── NotifyBarista.php
│ └── NotifyCustomer.php
├── resources/js/
│ ├── miniapp/
│ │ ├── components/
│ │ │ ├── Menu/
│ │ │ ├── Order/
│ │ │ ├── Booking/
│ │ │ └── Loyalty/
│ │ ├── i18n/
│ │ ├── hooks/
│ │ └── App.tsx
│ └── admin/
│ ├── pages/
│ │ ├── Analytics.tsx
│ │ ├── Menu.tsx
│ │ ├── Customers.tsx
│ │ └── Settings.tsx
│ └── app.tsx
├── database/migrations/
├── routes/
│ ├── api.php
│ ├── web.php
│ └── channels.php
└── .env
სექცია 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-ს.
class Product extends Model {
use BelongsToCafe;
}
ახალი კაფეს დამატება — 5 ნაბიჯი
-
1
კაფეს Record-ის შექმნა
cafes ცხრილში ახალი ჩანაწერი: სახელი, slug, კონფიგურაცია.
-
2
Telegram Bot-ის შექმნა
BotFather-ში ახალი Bot. Token ჩაიწერება cafes.telegram_bot_token-ში.
-
3
Webhook-ის რეგისტრაცია
php artisan telegram:set-webhook {cafe_slug} — ავტომატურად დაარეგისტრირებს Bot-ს.
-
4
მენიუს დასტარტება
Dashboard-ში პროდუქტების დამატება ან CSV-ის import.
-
5
Mini App-ის გაზიარება
t.me/{BotUsername}/app ლინკი — კაფეს კლიენტებს ეგზავნება. Deploy ახალი არ სჭირდება.
White-label შესაძლებლობა
ყოველ კაფეს ექნება საკუთარი Bot-ი კაფეს სახელით (მაგ: @FikaGeBot, @BarakaGeBot). Mini App-ი ავტომატურად გამოიყენებს კაფეს ბრენდის ფერებს cafes.settings JSON-დან. ერთი სერვერი, ერთი კოდი — უსასრულო კაფეები.
სექცია 10
განვითარების ფაზები
4 ფაზა — MVP-დან სრულ SaaS პლატფორმამდე. Fika ჯერ, მასშტაბი მერე.
-
1
ფაზა 1 — Foundation (Backend Core)
~3 კვირა
Laravel 11 პროექტის შექმნა და კონფიგურაცია. MySQL სქემის migration-ები. Multi-tenant Global Scope-ები. Telegram Webhook-ის მიღება და parsing. Admin Bot-ი: შეკვეთის alert + ღილაკები. Basic Menu API endpoint-ები. Auth: Telegram initData verification.
-
2
ფაზა 2 — Mini App MVP
~3 კვირა
React + TypeScript პროექტი Vite-ით. Telegram Web App SDK ინტეგრაცია. მენიუს კომპონენტი კატეგორიებით. Cart და შეკვეთის გაგზავნა. ენის არჩევა (KA/EN/RU). შეკვეთის სტატუსის გვერდი. Wolt redirect ღილაკი. Tailwind Dark theme (Telegram-ის სტილი).
-
3
ფაზა 3 — Advanced Features
~3 კვირა
Table Booking სისტემა (calendar + confirmation flow). Loyalty Stamp Card ლოგიკა. BOG Payment ინტეგრაცია (sandbox → production). Web Dashboard (Inertia + React): Analytics, Menu CRUD, Customer DB. Push Campaign გაგზავნა. Daily Summary Bot message.
-
4
ფაზა 4 — Production & Scale
~2 კვირა
TBC Payment ინტეგრაცია. DigitalOcean Droplet + Laravel Forge deploy. SSL (Let's Encrypt) + Webhook-ის production-ზე გადაყვანა. Pest PHP ტესტები კრიტიკული flow-ებისთვის. Fika-სთვის onboarding + ტრეინინგი. მეორე კაფეს Multi-tenant ტესტი.
⏱ სულ ~ 11 კვირა
MVP Fika-სთვის მე-6 კვირაზე. სრული პლატფორმა მე-11 კვირაზე.
🎯 MVP-ის კრიტერიუმი
კლიენტი შეუკვეთავს, ბარისტა მიიღებს Bot-ში, გადახდა ან counter ან BOG-ი.
სექცია 11
Deployment და ინფრასტრუქტურა
Development-დან Production-მდე — ნაბიჯ-ნაბიჯ სერვერის კონფიგურაცია.
Development გარემო (ადგილობრივი)
| ინსტრუმენტი | მიზნობრიობა | ინსტალაცია |
| PHP 8.3 | Laravel Backend | php.net ან XAMPP |
| Composer | PHP Package Manager | getcomposer.org |
| Node.js 20 LTS | React / Vite Build | nodejs.org |
| MySQL 8.0 | ადგილობრივი ბაზა | XAMPP-ში ჩართული |
| Redis | Cache / Queue | redis.io (ან Upstash free tier) |
| ngrok | Webhook testing | ngrok.com (Telegram HTTPS-ს საჭიროებს) |
| Postman | API ტესტირება | postman.com |
Production სერვერი (DigitalOcean)
| კომპონენტი | სპეციფიკაცია | ღირებულება |
| Droplet | 2 vCPU, 2GB RAM, 50GB SSD (Ubuntu 22.04) | $14/თვე |
| Managed MySQL | DigitalOcean Managed DB (MVP-ზე Droplet-ში) | $0 (MVP) |
| Redis | Droplet-ზე ადგილობრივი | $0 |
| Laravel Forge | Server Management / Auto-deploy | $12/თვე |
| Domain | fikadigital.ge ან მსგავსი | ~$15/წელი |
| SSL | Let'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-ების დაწერა.