Customer Engagement Platform for Email, Push Notifications, & SMS
The world's leader for mobile push notifications, web push, SMS, email and in-app messaging. Trusted by 2 million+ businesses to send 12 billion+ messages per…
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Cold email automation untuk multi-workspace business. Built untuk handle 3 bisnis (Tiska Catering, Tetra Photobooth, Visual Tetra) dengan database kontak shared, schedule otomatis berbeda per workspace, dan AI personalization gratis. Cost target: Rp 0/bulan. Prereq • Node.js 20+ (cek: node --version) • npm 10+ 3. Isi .env.local dengan kredensial dari: • Supabase project → URL + anon key + service role key • Google Cloud Console (OAuth): client ID + secret • Google AI Studio: Gemini API key • Generate CRON_SECRET dan ENCRYPTION_KEY: openssl rand -hex 32檢視完整 README ↗
Cold email automation untuk multi-workspace business. Built untuk handle 3 bisnis (Tiska Catering, Tetra Photobooth, Visual Tetra) dengan database kontak shared, schedule otomatis berbeda per workspace, dan AI personalization gratis.
Source of truth:
docs/14-Final-MVP-Decision.md
| Layer | Tool |
|---|---|
| Frontend + Backend | Next.js 16 (App Router) di Vercel Hobby |
| Database + Auth + Storage + Cron | Supabase Free |
| Email Sending | Gmail API (per workspace) |
| AI Personalization | Google Gemini 2.5 Flash (1500 req/day free) |
Cost target: Rp 0/bulan.
node --version)Install dependencies
npm install
Copy environment file
cp .env.local.example .env.local
Isi .env.local dengan kredensial dari:
CRON_SECRET dan ENCRYPTION_KEY: openssl rand -hex 32Apply DB migrations ke Supabase via SQL Editor, dalam urutan:
supabase/migrations/0001_initial_schema.sql — 17 tables, RLS, triggerssupabase/migrations/0002_storage.sql — attachment bucketsupabase/migrations/0003_ai_opener.sql — AI opener cache columnsRun dev server
npm run dev
.
├── src/
│ ├── app/
│ │ ├── (app)/ # Protected pages (auth required)
│ │ │ ├── dashboard/ # Cross-workspace dashboard
│ │ │ ├── onboarding/ # First-time + add workspace
│ │ │ └── w/[slug]/ # Per-workspace section
│ │ │ ├── dashboard/, contacts/, templates/, queues/,
│ │ │ │ pipeline/, settings/
│ │ │ └── layout.tsx + sidebar.tsx + workspace-switcher.tsx
│ │ ├── api/
│ │ │ ├── cron/ # Scheduled jobs (queue, reply, followup)
│ │ │ ├── gmail/connect # OAuth flow
│ │ │ └── track/open # Email open pixel
│ │ ├── auth/ # Login/signout/callbacks
│ │ └── login/
│ ├── components/ # Shared components
│ └── lib/
│ ├── supabase/ # client.ts, server.ts, admin.ts, session.ts
│ ├── ai-opener.ts # Gemini personalization
│ ├── crypto.ts # AES-256-GCM for OAuth tokens
│ ├── email-sender.ts # MIME compose + Gmail API send
│ ├── followup-runner.ts
│ ├── gmail.ts # OAuth helpers
│ ├── queue-runner.ts # The "kerja sendiri" core
│ ├── reply-detector.ts
│ ├── stats.ts
│ ├── templates.ts, queues.ts, workspaces.ts, contacts.ts
│ └── *-helpers.ts # Client-safe types/constants
├── supabase/
│ └── migrations/ # 4 SQL migrations
├── docs/ # Spec docs (source of truth)
└── proxy.ts # Auth gate (Next.js 16 middleware convention)
| Fase | Deliverable | Status |
|---|---|---|
| 0 | Project setup (Next.js scaffold, Supabase + Google OAuth + Gemini accounts, env) | ✓ |
| 1 | Database schema (17 tables) + RLS + Supabase client lib | ✓ |
| 2 | Auth (Google OAuth via Supabase) + login flow + protected layout | ✓ |
| 2.5 | Multi-workspace foundation (table, switcher, /w/[slug] routing) | ✓ |
| 3A | Contact CRUD (list, create, edit, soft-delete) | ✓ |
| 3B | CSV import (papaparse, 3-step wizard, bulk insert with dedup) | ✓ |
| 4 | Templates editor (subject variants, plain body, variable detection, PDF attachment) | ✓ |
| 5 | Connect Gmail per workspace (OAuth + AES-256-GCM token encryption) | ✓ |
| 6 | Send Queue + Email Engine (compose MIME, send via Gmail API, run-now button) | ✓ |
| 7 | AI Opener (Gemini 2.5 Flash with per-contact-per-workspace cache) | ✓ |
| 8 | Tracking (open pixel + Gmail thread poller for replies) | ✓ |
| 9 | Auto Follow-up (threaded replies via In-Reply-To header) | ✓ |
| 10 | Pipeline Kanban view per workspace | ✓ |
| 11 | Dashboard + Notifications (real KPIs, recent replies, activity feed) | ✓ |
| 12 | Polish (sidebar nav, lucide icons, deploy guide) | ✓ |
Setelah deploy, pasang pg_cron schedules dari supabase/migrations/0004_production_cron.sql:
| Job | Schedule | Endpoint |
|---|---|---|
| queue-runner | Every 30 min, Mon-Fri 08-18 WIB | /api/cron/queue-runner |
| reply-poller | Every 15 min, 24/7 | /api/cron/reply-poller |
| followup-runner | Every hour, Mon-Fri 08-18 WIB | /api/cron/followup-runner |
| quota-reset | Daily 00:00 WIB | public.reset_daily_quotas() |
All HTTP endpoints require X-Cron-Secret header matching CRON_SECRET env.
Lihat DEPLOY.md untuk panduan deploy ke Vercel + production cron setup.
Private project. All rights reserved.