┌─────────────────────────────────────────────────────────────────────────────┐
│ POC DEPLOYMENT STACK │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ VERCEL │ │ CONVEX │ │ TELEGRAM │ │
│ │ (Frontend) │ │ (Backend) │ │ BOT │ │
│ │ FREE │ │ FREE │ │ FREE │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ Ukupni mesečni trošak: $0 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
- Otvori Telegram i pronađi @BotFather
- Pošalji
/newbot - Unesi ime bota:
Patrola Kovacic Bot - Unesi username:
patrola_kovacic_bot - Sačuvaj BOT TOKEN koji dobiješ (npr.
123456789:ABC-DEF_xyz)
- Kreiraj novu Telegram grupu:
OŠ Kovačić - Patrola - Dodaj bota u grupu
- Postavi bota kao ADMINA (potrebno za slanje poruka)
# Zameni TOKEN sa svojim
curl "https://api.telegram.org/bot<TOKEN>/getUpdates"Ili:
- Pošalji bilo koju poruku u grupu
- Pozovi URL iznad
- U JSON odgovoru nađi
chat.id(npr.-100123456789) - Sačuvaj CHAT_ID
# Kreiraj novi Next.js projekat sa Convex-om
npx create-next-app@latest panic-button-poc --typescript --tailwind
cd panic-button-poc
# Dodaj Convex
npm install convex
npx convex initKreiraj fajlove kao što je opisano u IMPLEMENTATION.md:
convex/schema.tsconvex/alarms.tsconvex/telegram.ts
# Pokreni Convex dev (lokalno testiranje)
npx convex dev
# Ili deploy u produkciju
npx convex deploy- Otvori Convex Dashboard
- Selektuj projekat
- Idi na Settings → Environment Variables
- Dodaj:
TELEGRAM_BOT_TOKEN= tvoj bot tokenTELEGRAM_CHAT_ID= tvoj chat IDAPP_URL=https://tvoj-projekat.vercel.app
# Inicijalizuj git (ako već nije)
git init
git add .
git commit -m "Initial commit - PoC"
# Kreiraj repo na GitHub-u i push-uj
git remote add origin https://github.com/username/panic-button-poc
git push -u origin main- Otvori Vercel
- Klikni Add New → Project
- Importuj GitHub repo
- Vercel će automatski detektovati Next.js
U Vercel dashboard-u, dodaj:
| Variable | Value |
|---|---|
NEXT_PUBLIC_SCHOOL_PIN |
kovacic2025 |
NEXT_PUBLIC_SCHOOL_NAME |
OŠ Ivan Goran Kovačić |
CONVEX_DEPLOYMENT |
(automatski se dodaje) |
Klikni Deploy i sačekaj ~1 minut.
Dobijaš URL: https://panic-button-poc.vercel.app
- Otvori deploy-ovanu aplikaciju
- Unesi PIN (
kovacic2025) - Drži panic dugme 3 sekunde
- Unesi opis i ime
- Klikni POŠALJI
- Proveri Telegram grupu - treba da stigne notifikacija
- U aplikaciji, klikni "PREUZIMAM"
- Unesi ime i potvrdi
- Proveri Telegram - treba da stigne update
- Klikni "REŠENO"
- Alarm treba da nestane
- PIN login radi
- Panic button aktivira alarm
- Lokacija se šalje
- Telegram prima notifikaciju
- "Preuzimam" radi
- Telegram prima update
- Razrešenje radi
- Real-time update radi (otvori u dva browser-a)
Production:
https://panic-button-poc.vercel.app # Frontend
https://xxx.convex.cloud # Convex API
Telegram:
https://t.me/patrola_kovacic_bot # Bot
- Pregled deploy-ova
- Error logs
- Analytics (visits)
- Function calls
- Database pregled
- Logs
- Provera da li bot prima/šalje poruke
Provere:
- Da li je
TELEGRAM_BOT_TOKENispravan? - Da li je
TELEGRAM_CHAT_IDispravan (negativan broj)? - Da li je bot admin u grupi?
- Proveri Convex logs za error-e
Debug:
# Test direktno sa Telegram API
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-H "Content-Type: application/json" \
-d '{"chat_id": "<CHAT_ID>", "text": "Test poruka"}'Uzroci:
- Korisnik nije dozvolio pristup lokaciji
- HTTPS nije uključen (lokacija zahteva HTTPS)
- Browser ne podržava Geolocation API
Rešenje:
- Prikaži fallback da korisnik ručno unese opis lokacije
Provere:
- Da li je
NEXT_PUBLIC_SCHOOL_PINpostavljen u Vercel-u? - Da li je PIN case-sensitive provera ispravna?
- Idi na Vercel Dashboard → Settings → Environment Variables
- Promeni
NEXT_PUBLIC_SCHOOL_PIN - Redeploy (ili sačekaj automatski)
- Admin grupe dodaje nove članove
- Članovi dobijaju PIN od admina
- Nema potrebe za promenama u aplikaciji
Convex automatski čuva podatke. Za export:
- Convex Dashboard → Data
- Export kao JSON
PoC (sada): MVP (sledeće):
───────────── ──────────────
1 škola → 1 škola
Hardcoded config → Dynamic config
$0/mesec → ~$10-15/mesec (SMS)
Zajednički PIN → SMS verifikacija
Nema uloga → RESPONDER uloga
Pre nego što se aplikacija podeli sa pravim korisnicima:
- Telegram bot radi
- Deploy na Vercel završen
- PIN postavljen
- End-to-end test prošao
- Telegram grupa kreirana
- Minimum 5 članova u grupi
- Svi razumeju kako se koristi
| Aktivnost | Vreme |
|---|---|
| Telegram bot setup | 10 min |
| Convex setup | 15 min |
| Vercel deploy | 15 min |
| Testiranje | 20 min |
| UKUPNO | ~1 sat |
Dokument kreiran: Januar 2026