Open-Source Cold Email & Warmup Platform
Warmbly 是开源的冷邮件平台:温暖您的邮箱、发送活动、并对每条回复进行分流。可在我们的云端运行,也可自行托管整套系统。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Neon(Bassip)의 데이터를 Supabase로 매일 동기화하고, Vercel로 배포된 대시보드가 페이지를 열 때마다 Supabase에서 실시간으로 데이터를 불러옵니다. 실제 의뢰인 데이터가 들어있으므로 대시보드 페이지 자체에 로그인(Supabase Auth)이 걸려 있습니다. GitHub Pages는 개인 계정 Free 플랜에서는 Private 저장소에 못 켭니다 (Pro 이상만 가능). 그래서 Vercel로 배포합니다 — Private 저장소도 그대로 연결되고, 무료 플랜으로 충분합니다. • GitHub 계정, Private 저장소로 이 폴더를 push • Vercel 계정 (무료 플랜으로 충분, GitHub 계정으로 바로 가입 가능) — https://vercel.com • Supabase 계정 (무료 플랜으로 충분) — https://supabase.com • Neon(bassip_ai_reader) 연결 문자열 — 이전에 psql로 접속할 때 쓰던 그 문자열查看完整 README ↗
Neon(Bassip)의 데이터를 Supabase로 매일 동기화하고, Vercel로 배포된 대시보드가 페이지를 열 때마다 Supabase에서 실시간으로 데이터를 불러옵니다. 실제 의뢰인 데이터가 들어있으므로 대시보드 페이지 자체에 로그인(Supabase Auth)이 걸려 있습니다.
Neon (bassip_ai_reader, 원본)
│ 매일 08:00 KST, GitHub Actions
▼
Supabase Postgres (읽기 전용 미러 + RLS)
│ 로그인한 사용자만 조회 가능
▼
Vercel (docs/index.html 배포) — 매 접속마다 Supabase에서 fetch
GitHub Pages는 개인 계정 Free 플랜에서는 Private 저장소에 못 켭니다 (Pro 이상만 가능). 그래서 Vercel로 배포합니다 — Private 저장소도 그대로 연결되고, 무료 플랜으로 충분합니다.
https://supabase.com/dashboard 에서 New Project 생성 (리전은 서울과 가까운 곳 추천)
프로젝트가 만들어지면 Settings → API 에서 다음 두 값을 복사해둡니다.
Project URL (예: https://abcdxyz.supabase.co)
https://blkelwmejqlofvplrfvp.supabase.coanon public key
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImJsa2Vsd21lanFsb2Z2cGxyZnZwIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODc4NjU4NjMsImV4cCI6MjEwMzQ0MTg2M30.ieS6WGi1qHgFgJG7C58UWI5Hx1L0ui-lEk9lGiXuZDgSettings → Database → Connection string 에서 URI 형식의 연결 문자열을 복사해둡니다.
(이게 SUPABASE_DB_URL — service_role 이 아니라 DB 자체 접속 문자열입니다. 비밀번호는
프로젝트 생성 시 설정한 DB 비밀번호입니다.)
postgresql://postgres:[YOUR-PASSWORD]@db.blkelwmejqlofvplrfvp.supabase.co:5432/postgres
Supabase 대시보드 SQL Editor에서 아래 파일들을 순서대로 통째로 붙여넣고 실행하세요.
supabase/schema.sql — 테이블 3개 + RLS 정책 생성supabase/seed/seed_funnel_rows.sqlsupabase/seed/seed_case_rows.sqlsupabase/seed/seed_case_stage_events.sql(이 seed 파일들은 현재 대시보드에 이미 들어있던 스냅샷을 그대로 옮긴 것이라, 여기까지만 해도 대시보드는 바로 정상 작동합니다. 이후 데이터는 3번의 자동 동기화가 매일 새로 갱신합니다.)
실제 의뢰인 데이터라서 아무나 로그인할 수 없게 막아야 합니다.
docs/index.html 안에서 아래 두 줄을 찾아 1번에서 복사해둔 값으로 바꿉니다.
var SUPABASE_URL = 'https://YOUR-PROJECT-REF.supabase.co';
var SUPABASE_ANON_KEY = 'YOUR-ANON-PUBLIC-KEY';
anon 키는 브라우저 소스에 그대로 노출되지만, RLS 정책이 "로그인한 사용자만 조회"로
막고 있어서 로그인하지 않은 사람은 이 키만으로는 데이터를 하나도 읽을 수 없습니다.
이미 GitHub Private 저장소에 push가 끝났다면 이 단계는 건너뛰고 아래 Vercel 설정만 하면 됩니다.
growth-analytics 저장소만 접근 허용해도 됩니다(Private 저장소도 문제없이
선택 가능합니다).growth-analytics를 찾아 Import를 누릅니다.Other (자동 인식 안 되면 이걸로 직접 선택)Edit 버튼을 눌러 docs 로 지정 (이게 제일 중요합니다 —
대시보드 파일이 저장소 최상위가 아니라 docs/ 폴더 안에 있기 때문입니다)https://growth-analytics-<random>.vercel.app 같은
주소로 배포가 끝납니다. 이후 main에 새로 push할 때마다 Vercel이 자동으로
재배포합니다.⚠️ 중요: Private 저장소를 연결해도 Vercel 배포 URL 자체는 링크를 아는 사람이면 누구나 열립니다 (GitHub Pages와 마찬가지 — Vercel의 비밀번호 보호 기능은 유료 플랜 전용입니다). 그래서 4번에서 만든 로그인 화면이 실제 접근 제한 역할을 합니다 — 반드시 3번(회원가입 차단 + 계정 직접 생성)을 건너뛰지 마세요.
Settings → Secrets and variables → Actions 에서 시크릿 2개를 등록하세요.
NEON_DATABASE_URL — bassip_ai_reader 읽기전용 연결 문자열SUPABASE_DB_URL — 1번에서 복사해둔 Supabase DB 연결 문자열META_ACCESS_TOKEN — (선택, 월간 보고서의 CTR/CVR용) 아래 "월간 보고서 — Meta 광고 연동" 참고.github/workflows/sync-data.yml 이 매일 08:00 KST(UTC 23:00 전날)에 자동으로
sync/sync.sh 를 실행해서 Neon → Supabase로 최신 데이터를 다시 채워 넣습니다.
바로 한 번 테스트해보고 싶으면 저장소의 Actions 탭 → Sync Bassip data →
Run workflow 로 수동 실행할 수 있습니다.
3개 쿼리 모두 실제 Neon 스키마와 대조 확인했고, psql로 직접 실행해서 정상적으로
JSON을 뽑아내는 것까지 확인했습니다(문의 3,185건/사건 1,055건/단계이력 2,645건 —
마지막 스냅샷보다 늘어난 건 그 사이 실제로 들어온 신규 데이터라 정상입니다). 그대로
쓰면 됩니다. 스키마가 나중에 바뀌면(테이블/컬럼 추가 등) 아래로 다시 확인하세요.
psql "$NEON_DATABASE_URL" -c "\d requests"
psql "$NEON_DATABASE_URL" -c "\d communications"
psql "$NEON_DATABASE_URL" -c "\d quotes"
psql "$NEON_DATABASE_URL" -c "\d contracts"
psql "$NEON_DATABASE_URL" -c "\d cases"
psql "$NEON_DATABASE_URL" -c "\d case_stage_histories"
요약 탭의 "월간 보고서"(리드수/CTR/CVR/유효리드율)는 Neon이 아니라 Meta 광고 계정
(베이스 특허법률사무소, ad_account 1410802980341574)에서 직접 데이터를 가져옵니다.
META_ACCESS_TOKEN 시크릿을 등록하기 전까지는 이 표가 비어 있고, 나머지 대시보드는
평소처럼 정상 작동합니다.
토큰 발급 (한 번만 하면 됨, System User 토큰은 만료가 없습니다):
693181260125342)의 Business Settings 로 들어갑니다.베이스 특허법률사무소)을
추가하고 권한을 "Manage campaigns"(또는 그 이상)로 부여합니다 — 최소 ads_read
권한이 있어야 인사이트 조회가 됩니다.ads_read 체크 → 생성된 토큰을 복사합니다.META_ACCESS_TOKEN
이름으로 등록합니다.등록 후 다음 동기화(스케줄 또는 Actions 탭에서 수동 Run workflow)부터 2026-05월치부터
지금까지 월별 노출/클릭/지출 데이터가 자동으로 채워지고, 이후 매일 최신 값으로
갱신됩니다(집행 중인 달은 그 달이 끝날 때까지 값이 계속 바뀝니다 — 정상입니다).
리드수·유효리드율은 광고(Meta) 채널로 들어온 문의만 대상으로 계산합니다(CTR/클릭
분모와 같은 채널이어야 CVR=리드/클릭이 의미가 있기 때문). "유효 리드"는
requests.category가 상표/디자인/기타(취급 범위 밖)가 아닌 건 — 즉 특허 상담으로
이어질 가능성이 있는 리드만 셉니다.
bassip-dashboard/
├── docs/index.html 대시보드 본체 (Vercel Root Directory = docs)
├── supabase/schema.sql 테이블 + RLS 정책
├── supabase/seed/*.sql 초기 데이터 (현재 스냅샷)
├── sync/neon_export.sql Neon에서 뽑는 3개 쿼리 (검증 완료)
├── sync/sync.sh Neon → Supabase 동기화 스크립트
└── .github/workflows/sync-data.yml 매일 자동 실행 워크플로
docs/index.html은 순수 정적 파일이라 아무 방법으로나 로컬에서 열어볼 수 있습니다
(단, Supabase 값을 채워야 로그인 화면 다음 단계까지 확인됩니다). 이 컴퓨터엔 Python/Node가
따로 없으므로 PowerShell로 간단히 띄우면 됩니다.
# 이 폴더(docs)에서 실행 — http://localhost:8080/index.html
cd docs
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://localhost:8080/")
$listener.Start()
while ($listener.IsListening) {
$ctx = $listener.GetContext()
$path = $ctx.Request.Url.LocalPath.TrimStart('/')
if ([string]::IsNullOrEmpty($path)) { $path = "index.html" }
$bytes = [System.IO.File]::ReadAllBytes((Join-Path (Get-Location) $path))
$ctx.Response.OutputStream.Write($bytes, 0, $bytes.Length)
$ctx.Response.Close()
}