Ringkasan
Flotilla itu mission control untuk agency automation yang menjalankan n8n untuk banyak klien. Praktik terbaiknya adalah satu instance n8n terisolasi per klien, yang kedengarannya rapi sampai kamu punya 15 klien. Setelah itu kamu deploy workflow yang sama 15 kali secara manual, bikin ulang kredensial 15 kali, terapkan ulang tiap perbaikan 15 kali, dan biasanya tahu automation klien rusak dari email marah, bukan dari dashboard.
Flotilla adalah lapisan operasional yang hilang itu. Dia connect ke REST API publik dari instance yang dimiliki klien (bersih di bawah Sustainable Use License n8n), deploy satu workflow induk ke seluruh armada dengan injeksi kredensial per klien, mendeteksi drift saat ada yang edit produksi manual, roll out update sekali klik, alert kegagalan ke Telegram sebelum klien sadar, dan menghasilkan laporan jam-hemat bulanan yang dilampirkan agency ke invoice retainer.
Tantangan
Agency adalah channel yang tumbuh paling cepat di ekosistem n8n, dan mereka semua mentok di tembok yang sama. Kebutuhan akan lapisan fleet ini terdokumentasi di feature request paling banyak di-vote di n8n, terbuka bertahun-tahun, dan di thread mingguan “gimana cara kelola banyak klien?” di forum dan komunitas agency. Satu-satunya tool komersial sejenis berhenti di monitoring read-only: tanpa deploy, tanpa kredensial, tanpa drift. Bagian sulitnya, dan justru intinya, adalah menguasai jalur tulis (write path) dengan aman.
Itu berarti membangun empat hal yang gampang salah:
- Client API n8n yang defensif, yang tahan terhadap perbedaan versi dan endpoint yang hilang di seluruh armada, dan tidak pernah membatalkan semua klien hanya karena satu instance punya keanehan.
- Deteksi drift yang bisa membedakan edit manual asli dari variabel per klien dan identitas kredensial. Tanpa itu, setiap perbedaan per klien yang sah akan terbaca sebagai alarm palsu.
- Injeksi kredensial yang memetakan placeholder template ke kredensial per klien yang nyata lalu memverifikasinya, tanpa Flotilla pernah menyimpan rahasianya.
- Model data multi-tenant yang bersih dengan isolasi per akun.
Solusi
Deteksi drift via canonical hash (intinya)
Drift membandingkan bentuk kanonik dari workflow, dengan field volatil (id, timestamp, posisi node, webhook id) dibuang dan identitas kredensial di-mask, terhadap checksum dari apa yang benar-benar di-deploy ke klien itu. Variabel dan kredensial per klien tidak dihitung sebagai drift; hanya edit asli yang dihitung. Hasilnya diff JSON yang bersih dan re-sync sekali klik.
Fleet deploy dengan injeksi kredensial
Template induk merujuk kredensial lewat placeholder (TPL_slack) dan variabel lewat {{VAR:key}}. Deploy ke subset instance mana pun menyubstitusi variabel tiap klien, memetakan atau membuat kredensialnya di remote lewat API n8n, lalu memverifikasinya. Hasilnya kembali per instance, dan tidak ada yang membatalkan armada kalau satu klien gagal.
Dibangun untuk tahan n8n asli
Diverifikasi end-to-end terhadap n8n self-hosted yang live, bukan sekadar mock yang ramah. n8n asli berbeda dengan cara yang kini ditangani Flotilla otomatis: node trigger webhook butuh webhookId yang di-generate atau URL produksinya 404 padahal workflow-nya terbaca aktif; data kredensial divalidasi skema; POST/PUT pada workflow ketat soal field yang diterima; dan n8n memperkaya workflow saat disimpan, jadi drift membandingkan bentuk kanonik dari apa yang sebenarnya disimpan n8n dan tidak pernah menandai positif palsu.
Monitoring, alert, dan triage AI
Polling berbasis cursor atas eksekusi di tiap instance memberi tampilan kegagalan dan statistik per klien. Kegagalan memicu alert Telegram dan webhook dengan dedup cooldown per workflow dan instance. Langkah triage AI mengelompokkan kegagalan berdasarkan signature error yang dinormalisasi dan menulis ringkasan satu baris soal apa yang harus dibenahi dulu, dengan fallback heuristik supaya tetap jalan tanpa API key.
Laporan yang membela retainer
Laporan per klien yang bisa dicetak (jumlah run, success rate, perkiraan jam hemat, insiden tertangani, automation yang dikelola) yang langsung dilampirkan ke invoice bulanan. Inilah artefak yang mengubah maintenance tak kasat mata jadi sesuatu yang bisa dilihat klien.
Posisi lisensi
Flotilla tidak pernah meng-host, membundel, atau mendistribusi ulang n8n. Dia hanya memanggil API publik dari instance yang dimiliki klien, yang berada di luar batasan Sustainable Use License n8n, dan justru mendorong setup instance-per-klien yang compliant.
Hasil
- v0.1 MVP yang berfungsi, bisa dijalankan hari ini, mencakup fleet deploy, injeksi kredensial, drift diff dan re-sync, monitoring, alert, triage AI, dan laporan ROI klien.
- 75-plus automated end-to-end check lolos terhadap tiga instance n8n mock, plus smoke test idempoten yang membersihkan dirinya sendiri, menjalankan seluruh loop terhadap n8n asli lalu menghapus semua yang dibuatnya (aman diarahkan ke produksi).
- Multi-tenant dengan isolasi data per akun. API key instance dienkripsi at rest dengan Fernet dan tidak pernah ditampilkan lagi, dan rahasia kredensial diteruskan langsung ke instance, tidak pernah disimpan di Flotilla.
Batasan jujur (v0.1, memang disengaja)
- Kredensial OAuth2 dibuat sebagai shell, karena langkah consent-nya interaktif. Kredensial API-key dan token di-inject penuh; yang OAuth perlu diselesaikan manual.
- Eksekusi di-poll (default 30 detik), bukan di-stream.
- Belum ada RBAC dalam satu akun, belum ada billing, dan portal klien white-label masih di roadmap.
Kenapa pilihan ini
- FastAPI dengan Jinja2 server-rendered, tanpa SPA. UI-nya operasional, bukan pamer, dan semuanya ship sebagai satu deployable.
- SQLAlchemy 2.x sync, SQLite untuk dev dan Postgres untuk produksi lewat satu environment variable.
- Fernet untuk enkripsi key instance. Rahasia diteruskan ke instance, tidak pernah disimpan.
- APScheduler untuk job poll, drift, dan health.
- Claude Haiku opsional untuk ringkasan triage, dengan fallback heuristik supaya fiturnya tidak pernah bergantung pada adanya API key.