BossHunter
스마트 구직 에이전트(소스 공개, PolyForm 비상업적 라이선스; 상업적 이용은 별도 서면 허가 필요)
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
financial_os_app.html의 디자인/레이아웃/탭 구성을 그대로 유지하면서, 데이터가 실제로 영속되는 앱으로 만든 버전입니다. Next.js (App Router) + Supabase 스택으로, SDWGA-APP과 동일한 방식(Next.js + Supabase, Vercel 배포)으로 구축되어 있습니다. 고객 데이터는 사람(people)과 정책(policies)으로 분리되어 있습니다 — 한 사람이 여러 정책(Life/Annuity)을 가질 수 있고, 사람 정보(성별/생년월일/직업/이메일 등)는 한 번만 입력하면 그 사람의 모든 정책에서 공유됩니다. 이미 배포된 프로젝트를 업그레이드하는 경우 (기존 clients 테이블 → people+policies) 이전 버전을 이미 Supabase에 배포해서 쓰고 계셨다면, Supabase SQL Editor에서 아래 순서로 실행하세요 (모두 두 번 실행해도 안전합니다 — 이미 끝난 단계는 아무 것도 하지 않습니다):README 전문 보기 ↗
financial_os_app.html의 디자인/레이아웃/탭 구성을 그대로 유지하면서, 데이터가 실제로 영속되는
앱으로 만든 버전입니다. Next.js (App Router) + Supabase 스택으로, SDWGA-APP과 동일한
방식(Next.js + Supabase, Vercel 배포)으로 구축되어 있습니다.
고객 데이터는 **사람(people)**과 **정책(policies)**으로 분리되어 있습니다 — 한 사람이 여러 정책(Life/Annuity)을 가질 수 있고, 사람 정보(성별/생년월일/직업/이메일 등)는 한 번만 입력하면 그 사람의 모든 정책에서 공유됩니다.
clients 테이블 → people+policies)이전 버전을 이미 Supabase에 배포해서 쓰고 계셨다면, Supabase SQL Editor에서 아래 순서로 실행하세요 (모두 두 번 실행해도 안전합니다 — 이미 끝난 단계는 아무 것도 하지 않습니다):
supabase/migrate_people_policies.sql — 기존 clients 테이블의 163건 데이터를
이름이 같으면 같은 사람으로 묶어서 people(사람) + policies(정책) 테이블로 이전하고,
clients 테이블은 삭제합니다.supabase/migrate_add_surrendered.sql, supabase/migrate_add_needs_attention.sql,
supabase/migrate_add_policy_changed.sql
— policies에 "계약해지"/"주의요망"/"정책변경" 상태 컬럼을 추가합니다.supabase/migrate_prospects_fields.sql — 기존 prospects 테이블의 (name, segment)를
(last_name, first_name, korean_name, category)로 재구성합니다. 원래 이름(name)은
korean_name에 그대로 보존되고, last_name/first_name은 한글 이름은 통째로
last_name에, 영문 이름("Luke Chung" 같은 First-Last 순서)은 자연스러운 순서로
분리해 넣습니다 — 자동 분리가 애매한 경우 나중에 직접 수정하시면 됩니다.supabase/migrate_add_calendar_events.sql — Dashboard Today 캘린더에 쓰는
calendar_events 테이블(사용자가 직접 추가하는 일정)을 만듭니다.supabase/migrate_add_column_content.sql — columns_lib에 칼럼 본문을
저장할 content, 외부 링크를 저장할 link 컬럼을 추가합니다.supabase/backfill_column_content.sql — 위 4번 마이그레이션을 먼저 실행한
뒤에 한 번 실행하세요. 업로드해주신 칼럼 원문 파일(.docx/.pdf) 104개를
기존 file 컬럼 값으로 매칭해 content에 채워 넣는 일회성 스크립트입니다.
이미 content가 채워진 행은 건드리지 않으므로 다시 실행해도 안전합니다.supabase/migrate_add_knowledge_and_licenses.sql — Columns와 같은 레벨의
새 탭 두 개, knowledge_items(Knowledge Vault/지식 창고)와
licenses_certificates(License & Certificate) 테이블을 만듭니다.supabase/migrate_add_license_file_upload.sql — licenses_certificates에
PDF/이미지 스캔본을 첨부할 수 있도록 file_path/file_name 컬럼과, 파일을 저장할
비공개 Storage 버킷(licenses)을 만듭니다.supabase/migrate_add_person_grade.sql — people에 고객 등급(A/B/C/D)
컬럼을 추가합니다. 등급은 사람 단위로 저장되므로, 한 사람에게 매긴 등급이 그
사람의 모든 Policy 행(Current Client 표)에 자동으로 반영됩니다.supabase/migrate_add_manual_indexes.sql — Dashboard Today의 Key Financial
Index 카드에서 직접 입력하는 보험사 전용 크레딧 지수(MLSB, S&P MARC 5%,
Barclays Focus)를 저장할 manual_indexes 테이블을 만듭니다.supabase/migrate_add_column_categories.sql — columns_lib의 자유 텍스트
단일 category를 복수 선택 가능한 categories text[]로 바꿉니다. 기존
카테고리 값을 새 10종 분류(생명보험/연금/절세/401(k)·IRA Rollover/학자금
/은퇴준비/상속·증여/자산운용·투자/Medicare·LTC/기타)로 최대한 자동 매칭하고,
특정 분류에 매칭이 안 되는 값은 모두 "기타"로 분류합니다.supabase/migrate_add_prospect_contact_fields.sql — prospects의 기존
category(접촉경로와 "미접촉" 상태를 함께 나타내던 필드)를 contacted(접촉유무,
boolean)와 category(접촉경로, 소개/골프/모임/교회/전화·이메일 연락/CPA·변호사
/광고·명함/기타 8종 고정 분류)로 분리합니다. 기존 자유 텍스트 값은 새 8종 분류에
최대한 자동 매칭되고, 매칭이 안 되는 값은 "기타"로 분류됩니다 — "모임/골프"처럼
두 값이 합쳐진 기존 텍스트는 "골프"로 처리되므로, 실제로는 "모임" 접촉이었던
특정 잠재고객이 있다면 Potential Client 탭에서 직접 수정해 주세요.supabase/migrate_add_prospect_sales_priority.sql — prospects에
Sales Priority(영업 우선순위) 컬럼을 추가합니다. A(우선영업)/B(접촉유지)/
C(관망대상) 중 하나를 잠재고객 정보 입력/수정 화면에서 고를 수 있고, 필터
패널에서 걸러볼 수 있습니다. 표에는 컬럼으로 노출되지 않습니다.supabase/migrate_rename_prospect_category_meeting.sql — prospects의
접촉경로 값 "모임"을 "모임/세미나"로 바꿉니다.supabase/migrate_rename_prospect_category_phone_email.sql — prospects의
접촉경로 값 "전화/이메일 연락"을 "방문/전화/이메일"로 바꿉니다.supabase/migrate_drop_manual_indexes.sql — Dashboard Today의 Key
Financial Index 카드에서 직접 입력하던 MLSB/S&P MARC 5%/Barclays Focus
3종을 완전히 없애고 manual_indexes 테이블을 삭제합니다. 대신 Tesla/
Palantir/Nvidia/KOSPI/Bitcoin/XRP가 S&P 500/Dow Jones/Nasdaq/Gold와
같은 방식으로 자동 조회됩니다 (Yahoo Finance).supabase.com에서 새 프로젝트를 생성합니다.
Supabase 대시보드의 SQL Editor에서 supabase/schema.sql을 실행해 테이블
(people, policies, prospects, columns_lib, calendar_events,
knowledge_items, licenses_certificates)과 convert_prospect 함수를 만듭니다.
이어서 supabase/seed.sql을 실행하면 초기 데이터(people 133명, policies 163건,
prospects 227명, columns 104편)가 채워집니다. 빈 DB에 한 번만 실행하세요.
.env.local.example을 .env.local로 복사하고, Supabase 대시보드의
Project Settings > API에서 값을 채웁니다:
SUPABASE_URL — Project URLSUPABASE_SERVICE_ROLE_KEY — service_role secret key (anon key 아님)두 값 모두 서버에서만 쓰이고 브라우저에는 절대 노출되지 않습니다 (NEXT_PUBLIC_ 접두사를
붙이지 않은 이유입니다) — 이 앱은 브라우저가 Supabase에 직접 접속하지 않고, 항상 이
앱의 /api/* 라우트를 거쳐 service role 키로만 접근합니다.
의존성 설치 후 개발 서버 실행:
npm install
npm run dev
브라우저에서 http://localhost:3000 을 엽니다.
.env.local과 같은 두 값(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY)을
Vercel 프로젝트의 Environment Variables에 등록합니다.main 브랜치에 push할 때마다 자동으로 재배포됩니다.여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗