Skip to content

hellogpc/ootb-proposal-plugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 

Repository files navigation

오오티비랩 제안서 자동화 플러그인

Claude Cowork 에 설치해 과거 제안서를 DB 에 쌓고, 새 RFP/과업지시서/공고가 오면 유사 사례를 찾아 오오티비랩(OOTB Lab) 브랜드 포맷의 제안서 초안 PPT 를 자동으로 만들어 주는 플러그인.

시스템 구조

┌──────────────────────────────────────────────────────────────────┐
│                        Claude Cowork (Mac)                        │
│  ┌──────────────────────────────────────────────────────────┐    │
│  │  Plugin: ootb-proposal-automation (GitHub 마켓플레이스)    │    │
│  │  ├─ dashboard              ⭐ 메인 진입점                    │    │
│  │  ├─ proposal-supabase-sync   PDF 등록·검색                 │    │
│  │  └─ rfp-to-proposal-pipeline RFP → outline.yaml → .pptx   │    │
│  │                              (.pptx는 anthropic-skills:pptx) │    │
│  └─────────────┬──────────────────────────┬─────────────────┘    │
│                │                           │                       │
│        Supabase MCP                  로컬 Python                  │
│       (SQL 실행, 메타데이터)          (PDF 텍스트 추출)              │
└────────────────┼───────────────────────────┼──────────────────────┘
                 │                           │
                 │                           │ HTTP POST (PDF 바이너리)
                 ▼                           ▼
┌──────────────────────────────────────────────────────────────────┐
│                          Supabase                                 │
│  ┌──────────────┐  ┌──────────────────────────────────────────┐  │
│  │  Postgres    │  │  Edge Functions                          │  │
│  │  proposals   │  │  • upload-binary (~50MB PDF)             │  │
│  │  (pgvector)  │  │  • embed         (GEMINI_API_KEY env)    │  │
│  └──────┬───────┘  │  • sign-url      (SERVICE_ROLE_KEY env)  │  │
│         │          └──────┬───────────────────────────────────┘  │
│         │                 │                                       │
│         ▼                 ▼                                       │
│  ┌──────────────┐                                                │
│  │   Storage    │  ← upload-binary 이 Storage에 직접 PUT          │
│  │   proposals/ │                                                │
│  └──────────────┘                                                │
│                                                                  │
│  Gemini API ◀── embed Edge Function — GEMINI_API_KEY env로 호출    │
└──────────────────────────────────────────────────────────────────┘

데이터 흐름

📂 PDF 등록

PDF 파일
  → prep.py (텍스트 추출)
  → Edge Function upload-binary (HTTP POST 바이너리)  → Storage
  → Claude (구조화 추출: 제목·태그·요약)
  → MCP execute_sql + gemini_embed_vault()  → Postgres (메타+벡터)

🔍 검색

질의문 → MCP execute_sql:
  match_proposals(query_text, gemini_embed_vault(query_text))
  → top-N 유사 제안서

✨ 제안서 작성 (RFP → PPT)

RFP PDF
  → prep_rfp.py (텍스트만)
  → Claude (RFP 구조화)
  → match_proposals_with_url() (유사 사례 top-3 + signed URL)
  → Claude (outline.yaml 합성)
  → render_deck.js (pptxgenjs) → .pptx

포함된 스킬

스킬 역할
dashboard ⭐ 메인 진입점. 채팅 안 마크다운 카드 + AskUserQuestion 으로 대화형 메뉴
proposal-supabase-sync 과거 제안서 PDF 를 Supabase DB + Storage 에 수집, 하이브리드 검색
rfp-to-proposal-pipeline RFP → 유사 사례 top-3 → outline.yaml → .pptx (렌더링은 anthropic-skills:pptx 위임, OOTB brand reference 포함)

설치

1단계 — Supabase 준비 (관리자가 1회)

Edge Function 환경변수 등록 (Supabase Dashboard → Project Settings → Functions → Secrets):

  • GEMINI_API_KEY — Gemini 임베딩용 (Google AI Studio 발급)
  • SERVICE_ROLE_KEY — Storage signed URL 생성용 (Project Settings → API → service_role 키)

스키마 + 함수 적용 (apply_migration 으로 순서대로):

  • sql/001_init.sqlproposals 테이블 + match_proposals RPC
  • sql/002_embed_in_db.sqlhttp 확장
  • sql/003_vault_helpers.sqlmatch_proposals_with_url 등 (006이 일부 함수 overwrite)
  • sql/006_edge_secrets.sqlgemini_embed_vault/sign_storage_url (Edge Function 호출 방식). proj_url + anon_key를 자기 프로젝트에 맞게 수정 후 적용.

Edge Functions 배포 (3개):

  • edge-functions/upload-binary/ — PDF 바이너리 업로드 (~50MB)
  • edge-functions/embed/ — Gemini 임베딩 (GEMINI_API_KEY 사용)
  • edge-functions/sign-url/ — Storage signed URL (SERVICE_ROLE_KEY 사용)

2단계 — 팀원 PC (각자 1회)

  1. Cowork → 설정 → Connectors → Supabase MCP 연결
  2. 마켓플레이스 추가: https://github.com/hellogpc/ootb-proposal-plugin
  3. 플러그인 설치: ootb-proposal-automation
  4. Python 의존성:
    pip install -r skills/proposal-supabase-sync/scripts/requirements.txt
    pip install -r skills/rfp-to-proposal-pipeline/scripts/requirements.txt
    # PPT 렌더링은 anthropic-skills:pptx 가 Cowork 내장 의존성 처리

로컬 .env 불필요 — 모든 시크릿은 Supabase Edge Function 환경변수에 보관됨

일상 사용

Cowork 채팅창에서 한 마디:

상황 명령
메뉴 열기 "대시보드 보여줘"
새 PDF 등록 "이 PDF 등록해줘" + 파일 첨부
과거 사례 검색 "복지 관련 제안서 찾아줘"
제안서 초안 생성 "이 RFP로 제안서 만들어줘" + 파일 첨부
등록 현황 "DB에 몇 건 있지?"

대시보드가 상태 카드(Edge Functions / Function Secrets / DB 연결 / 등록 건수)를 표시한 후, 메뉴 선택으로 진행합니다.

디렉터리

ootb-proposal-plugin/
├── .claude-plugin/
│   ├── plugin.json          # 플러그인 매니페스트
│   └── marketplace.json     # 마켓플레이스 항목
└── skills/
    ├── dashboard/                 ⭐ 메인 진입점 (대화형 메뉴)
    ├── proposal-supabase-sync/    PDF 등록·검색
    │   ├── scripts/prep.py        텍스트 추출 + HTTP 업로드
    │   ├── sql/                   001~004 마이그레이션
    │   └── edge-functions/        upload-binary, upload-b64
    └── rfp-to-proposal-pipeline/  RFP → outline 합성 + .pptx 렌더
                                   (.pptx는 anthropic-skills:pptx + references/brand_*)

핵심 설계 원칙

원칙 구현
시크릿은 서버에만 Gemini·service role 키 모두 Supabase Edge Function Secrets. 로컬·git에 평문 키 없음
MCP가 메인 채널 Claude ↔ DB 통신은 모두 execute_sql
바이너리는 HTTP로 PDF는 Edge Function 직접 POST (~50MB). MCP의 3.4MB 한계 우회
임베딩은 DB-side gemini_embed_vault(text) 한 줄. 로컬 Gemini 호출 없음
Plugin은 read-only git 마켓플레이스 → Cowork 자동 동기화. GitHub이 진실의 원천

외부 의존성

  • Supabase — Postgres + pgvector + Storage + Edge Functions (MCP)
  • Google Gemini — Embedding (1536-d). API 키는 Edge Function Secrets
  • pptxgenjs — 플러그인 내 npm install
  • LibreOffice + poppler (선택) — QA 용

버전 이력

  • 0.7.0ootb-proposal-pptx 스킬 제거. PPT 렌더링은 anthropic-skills:pptx 에 위임. brand_tokens.json + brand_design.md 가 rfp-to-proposal-pipeline/references/ 로 이전. 스킬 4개 → 3개.
  • 0.6.1 — render_deck.js 버그 수정. brand.json 키 이름 불일치로 검은 화면 렌더링되던 문제 해결. v1 alias 키(navy_deep / blue / white / blue_light 등) + sizes_pt fallback 복원. hex() / sz() 함수에 명시적 경고 로그 추가 (누락 키 즉시 식별).
  • 0.6.0 — PPT 스킬을 Brandlogy 디자인 시스템 (MiniMax-inspired) 으로 리디자인. 7-슬라이드 타입 → 5-zone locked skeleton + 6 body patterns (A: KPI Strip, B: Two-Column, C: Diagram-Centered, D: Process Flow, E: Quote+Evidence, F: Stacked Insight). White-dominant canvas + Pretendard-only + Hero Gradient accent + Visualization-First rule.
  • 0.5.5 — Vault 관련 가이드 잔재 정리. SKILL.md/README 전반에서 vault.create_secret 안내 제거하고 "Project Settings → Functions → Secrets" 가이드로 통일.
  • 0.5.4 — Vault 의존성 제거. 시크릿을 Edge Function 환경변수(GEMINI_API_KEY, SERVICE_ROLE_KEY)로 관리. 신규 Edge Function embed/sign-url + SQL 마이그레이션 006_edge_secrets.sql. SQL gemini_embed_vault/sign_storage_url은 이제 Edge Function을 호출.
  • 0.5.3 — Storage 업로드를 Edge Function upload-binary 직접 HTTP 방식으로 전환 (~50 MB 지원). MCP execute_sql의 ~3.4 MB payload 한계 우회.
  • 0.5.2 — configure-env/web-ui 스킬 제거, deprecated 스크립트 정리. 로컬 .env 완전 불필요.
  • 0.5.1 — .plugin 번들·GitHub Action 제거 (마켓플레이스 설치는 repo 직접 참조).
  • 0.5.0 — Env-free 운영 전환. Vault + Edge Function upload-b64 + gemini_embed_vault().
  • 0.4.0 — web-ui 스킬 추가 (이후 0.5.2에서 제거).
  • 0.3.x — configure-env TUI / 사용자 config 위치 (이후 0.5.2에서 제거).
  • 0.2.0 — configure-env 스킬 추가 (이후 0.5.2에서 제거).
  • 0.1.0 — 초기 릴리스

라이선스

내부 자산 (Proprietary).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors