Changelog
Yang kita ship, urut newest-first. Setiap entry source-of-truth — gak ada marketing fluff.
- shipped
Phase 4 prep — Subscription model + webhook canary
SignalSubscription model: user subscribes to tenant feed, fanout scopes to active subscribers (was: global). /me/signals upgrade: browse tenant catalog, toggle subscribe/pause/unsubscribe, real-time signal feed from subscribed tenants. Webhook canary cron (every 15min, alert if tenant lastWebhookAt quiet >24h). Cross-tenant RLS integration test — 6 cases passing.
- shipped
Phase 4 — BYO-bot webhook architecture
Pivot from GramJS userbot to Bring-Your-Own-Bot: KOLs paste BotFather token, we verify via getMe + auto-setWebhook. /api/tg/webhook/[secret] receiver with defense-in-depth (URL + header secret), forward guard, my_chat_member auto-detect. Shared signal-pipeline lib (admin manual ingest + live webhook share same ingestSignal helper).
- shipped
Phase 3 — Admin signal pipeline + parser sandbox
Admin surface: /admin/parsers (registry + interactive sandbox), /admin/channels (CRUD), /admin/signals (timeline + manual ingest). Worker signal.fanout from stub to real: SignalEvent → eligible creds → order.place per cred (paperTrade default). Default tenant + 4 ParserPlugin rows seeded.
- shipped
Phase 2 — User-side dashboard + Telegram deeplink auth
Telegram Login Widget swapped for deeplink magic-link flow (no domain config rituals). /me shell with auth gate, /me/exchanges user-side connect (scoped by session userId). PostgreSQL Row-Level Security on credentials + listener channels + signals (admin/worker bypass, user-scope key).
- shipped
Phase 1.5 — Multi-tenant scaffolding + 5 tier-1 exchange adapters
Tenant model + AsyncLocalStorage propagation; BullMQ queue package; token-bucket rate limiter per (exchange, scope, tenant); market-metadata cache. Tier-1 adapters: Binance, Bybit, OKX, KuCoin, Bitget — CCXT-backed with capability flags pinned. Parser plugin registry with 4 reference parsers. Listener (GramJS) skeleton deferred; replaced by BYO-bot.
- shipped
Phase 1.0 — Multi-exchange foundation
Strict TypeScript ExchangeAdapter contract, error taxonomy (10 classes with `.recoverable` flag), symbol normalization, capability negotiation. AES-256-GCM credential cipher (KMS-ready, key-rotation aware). 24 unit tests passing.
- shipped
Phase 0 launch — kopitrade.id live
Brand kit applied (Dark Roast Tech palette, monogram K↗, "Trading otomatis. Lo cuma ngopi."). Landing + waitlist + 6 pilar + Cornix comparison. HTTPS via Let's Encrypt, HTTP/2. Prisma schema seeded.