Customer Engagement Platform for Email, Push Notifications, & SMS
모바일 푸시, 웹 푸시, SMS, 이메일, 인앱 메시징 분야 세계 최고, 200만 기업이 신뢰해 연간 120억 건 이상 전송
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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 32README 전문 보기 ↗
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.