Lewati ke konten

Konsep Inti

Semua dokumen lain memakai istilah di halaman ini. Sepuluh menit di sini menghemat banyak kebingungan nanti.

Batas isolasi data. Setiap tenant memiliki akun, perangkat, konten, dan job sendiri. Tidak ada query yang boleh melintasi batas tenant - ini aturan keamanan, bukan sekadar konvensi. Satu pengguna perorangan tetap satu tenant.

Satu identitas di satu platform, misalnya satu channel YouTube atau satu profil TikTok. Satu tenant boleh punya banyak akun di platform yang sama.

Yang disimpan adalah kredensial terenkripsi (AES-GCM at-rest), bukan kata sandi mentah. Untuk platform jalur API resmi, yang tersimpan adalah token OAuth yang Anda izinkan.

Perangkat adalah HP Android milik Anda yang terdaftar di sistem. Agent adalah aplikasi yang berjalan di perangkat itu.

Arah koneksinya penting dan sering disalahpahami:

HP Anda (agent) ──── outbound WebSocket ───▶ Server GoSosmed
◀─── tugas dikirim balik ───

Agent yang menghubungi server, bukan sebaliknya. Konsekuensinya: tidak perlu IP publik, tidak perlu buka port, dan server tidak punya jalan masuk ke jaringan rumah Anda.

Inilah arti BYOD - Bring Your Own Device. Bandingkan dengan model device cloud yang menyewakan HP di data center sekitar $80 per perangkat per bulan, dengan kredensial Anda tersimpan di sana.

Satu unit materi yang akan diterbitkan: caption, media, dan metadata. Konten bersifat netral platform - ia belum tahu akan terbit ke mana.

Penyesuaian per platform (misalnya judul khusus YouTube, atau caption lebih pendek untuk X) disimpan sebagai override, bukan sebagai konten terpisah. Satu sumber, banyak varian.

Satu konten ke satu akun di satu platform. Ini unit eksekusi terkecil, dan alasannya penting: kalau Anda menerbitkan satu konten ke enam platform, itu enam job independen. Instagram gagal tidak membatalkan YouTube.

State machine job:

queued ──▶ running ──▶ succeeded
└──▶ failed ──▶ (retry terbatas)

Setiap transisi tercatat beserta alasannya. Job yang gagal menyimpan error sebenarnya dari platform, bukan pesan generik.

Adapter adalah implementasi cara berbicara dengan satu platform. Arsitekturnya mengikuti pola Ports & Adapters (Hexagonal): domain mendefinisikan port (kontrak), adapter mengimplementasikannya. Menambah platform baru berarti menulis adapter baru - tanpa menyentuh domain.

Mode Platform Kenapa mode ini
API resmi YouTube, Facebook, Instagram, Threads, Pinterest, X Paling stabil - selalu dipilih kalau tersedia
Browser terkelola TikTok Tidak ada API publikasi publik yang memadai
Mobile-native (BYOD) Shopee Video Fungsinya hanya ada di aplikasi HP

Detail per platform, termasuk status kematangan tiap jalur: Mode Publikasi & Platform.

Proses terpisah yang menjalankan beban berat - browser headless, ffmpeg, atau ADB. Sengaja tidak disatukan ke API.

Alasannya prinsip “ringan di atas segalanya”: API harus tetap di bawah 80 MB RAM saat idle. Kalau browser dijalankan di dalam proses API, angka itu mustahil. Runner punya batas konkurensi eksplisit, sehingga beban puncak bisa diprediksi.

Catatan satu keputusan teknis: konteksnya, pilihan yang dipertimbangkan, keputusannya, dan konsekuensinya - termasuk opsi yang ditolak dan alasannya.

Kumpulan ADR GoSosmed berada di repo privat dan tidak diterbitkan di situs publik ini. Keputusan yang memengaruhi Anda secara langsung tetap dijelaskan di sini - misalnya kenapa agent memakai Accessibility Service di Izin & Privasi, dan kenapa sebagian kode dibuka sementara sisanya tidak di Apa yang Publik & Apa yang Tidak.

Tenant
├── Akun (identitas per platform, kredensial terenkripsi)
├── Perangkat (HP Anda + agent, koneksi outbound)
└── Konten (netral platform)
└── Job (konten × akun × platform)
└── dieksekusi oleh Adapter
└── via API resmi / Browser runner / Agent BYOD