feat: add D.intelligence Agent Corps (9 skills + shared infra)
Add 9 agent skills (#70-#77, #88) for D.intelligence business operations: brand guardian, brand editor, doc secretary, quotation manager, service architect, marketing manager, back office manager, account manager, and skill update meta-agent. Includes shared Python package (dintel), reference docs, document/quotation templates, service module CSVs, cross-device installer, and comprehensive user guide. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
147
custom-skills/dintel-shared/INSTALL-AUDIT-2026-03-09.md
Normal file
147
custom-skills/dintel-shared/INSTALL-AUDIT-2026-03-09.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# D.intelligence Agent Corps — Installation Audit Report
|
||||
|
||||
> **Date**: 2026-03-09
|
||||
> **Auditor**: Claude (Cowork session)
|
||||
> **Repository**: `custom-skills/` (mounted workspace)
|
||||
|
||||
---
|
||||
|
||||
## 1. Current Installation Status
|
||||
|
||||
### Claude Desktop (Cowork) — `.skills/skills/`
|
||||
|
||||
| # | Skill Name | Installed | Version | Status |
|
||||
|---|-----------|-----------|---------|--------|
|
||||
| 70 | dintel-brand-guardian | ✅ Yes | 1.1.0 | Active |
|
||||
| 71 | dintel-brand-editor | ✅ Yes | 1.1.0 | Active |
|
||||
| 72 | dintel-doc-secretary | ❌ No | — | **Needs install** |
|
||||
| 73 | dintel-quotation-mgr | ❌ No | — | **Needs install** |
|
||||
| 74 | dintel-service-architect | ❌ No | — | **Needs install** |
|
||||
| 75 | dintel-marketing-mgr | ❌ No | — | **Needs install** |
|
||||
| 76 | dintel-backoffice-mgr | ❌ No | — | **Needs install** |
|
||||
| 77 | dintel-account-mgr | ❌ No | — | **Needs install** |
|
||||
| 88 | dintel-skill-update | ❌ No | — | **Needs install** |
|
||||
|
||||
**Result**: 2 of 9 installed. **7 skills need installation.**
|
||||
|
||||
---
|
||||
|
||||
## 2. Skill File Validation — All Pass ✅
|
||||
|
||||
### SKILL.md (Desktop)
|
||||
|
||||
| # | Skill | Lines | Frontmatter | Content |
|
||||
|---|-------|-------|-------------|---------|
|
||||
| 70 | dintel-brand-guardian | 516 | ✅ name + description | Full brand review checklist |
|
||||
| 71 | dintel-brand-editor | 146 | ✅ name + description | Content gen + eval workflows |
|
||||
| 72 | dintel-doc-secretary | 377 | ✅ name + description | 6 document templates |
|
||||
| 73 | dintel-quotation-mgr | 399 | ✅ name + description | Multi-agent quotation system |
|
||||
| 74 | dintel-service-architect | 146 | ✅ name + description | Module decision tree |
|
||||
| 75 | dintel-marketing-mgr | 198 | ✅ name + description | Content calendar + pipeline |
|
||||
| 76 | dintel-backoffice-mgr | 184 | ✅ name + description | 5 contract/invoice templates |
|
||||
| 77 | dintel-account-mgr | 162 | ✅ name + description | Meeting prep + status monitoring |
|
||||
| 88 | dintel-skill-update | 260 | ✅ name + description | Cross-skill propagation logic |
|
||||
|
||||
### Reference Files per Skill
|
||||
|
||||
| # | Skill | `shared/` files | `desktop/references/` | `code/scripts/` |
|
||||
|---|-------|----------------|----------------------|-----------------|
|
||||
| 70 | brand-guardian | 0 | 0 | 0 |
|
||||
| 71 | brand-editor | 1 (notion-schema-ref) | 1 (brand_guide.md) | 1 (generate_credential.py) |
|
||||
| 72 | doc-secretary | 6 (document templates) | 0 | 0 |
|
||||
| 73 | quotation-mgr | 6 (pricing + 4 xlsx templates) | 0 | 1 (generate_quotation.py) |
|
||||
| 74 | service-architect | 5 (module decision + 4 CSVs) | 0 | 0 |
|
||||
| 75 | marketing-mgr | 2 (calendar + GA4 guide) | 0 | 0 |
|
||||
| 76 | backoffice-mgr | 6 (billing + 5 contract templates) | 0 | 0 |
|
||||
| 77 | account-mgr | 1 (meeting-prep template) | 0 | 0 |
|
||||
| 88 | skill-update | 1 (change-log.md) | 0 | 0 |
|
||||
|
||||
### Shared Infrastructure — `dintel-shared/`
|
||||
|
||||
| File | Lines | Purpose |
|
||||
|------|-------|---------|
|
||||
| `src/dintel/brand.py` | 132 | Brand constants, colors, service modules |
|
||||
| `src/dintel/document.py` | 91 | DOCX generation with branding |
|
||||
| `src/dintel/excel.py` | 71 | Excel/xlsx branded styles |
|
||||
| `src/dintel/notion.py` | 50 | Notion DB IDs, client mappings |
|
||||
| `references/dintelligence_brand_guide.md` | 439 | Full writing style guide |
|
||||
| `references/pricing-reference.md` | 82 | Service pricing tables |
|
||||
| `references/notion-schema-reference.md` | 140 | Notion database schemas |
|
||||
| `references/design-system-2025.md` | 169 | Visual identity system |
|
||||
|
||||
---
|
||||
|
||||
## 3. Installation Instructions
|
||||
|
||||
### Option A: Use the Install Script (Recommended)
|
||||
|
||||
Run this in your **Mac Terminal** (not Cowork):
|
||||
|
||||
```bash
|
||||
cd ~/Projects/our-claude-skills/custom-skills/dintel-shared/
|
||||
chmod +x install.sh
|
||||
|
||||
# Preview first
|
||||
./install.sh --dry-run
|
||||
|
||||
# Install for both Claude Code + Desktop
|
||||
./install.sh --all
|
||||
|
||||
# Or Desktop only
|
||||
./install.sh --desktop-only
|
||||
```
|
||||
|
||||
The script will:
|
||||
1. Create Python venv + install `dintel` package
|
||||
2. Symlink `desktop/SKILL.md` → `~/.claude/skills/{skill-name}/`
|
||||
3. Symlink shared references → `~/.claude/skills/dintel-references/`
|
||||
4. Create `.claude-agents/` directory with Code directives
|
||||
|
||||
### Option B: Manual Claude Desktop Installation
|
||||
|
||||
In **Claude Desktop** app:
|
||||
1. Go to **Settings → Skills** (or Project Knowledge)
|
||||
2. For each missing skill, add the `desktop/SKILL.md` file:
|
||||
|
||||
```
|
||||
custom-skills/72-dintel-doc-secretary/desktop/SKILL.md
|
||||
custom-skills/73-dintel-quotation-mgr/desktop/SKILL.md
|
||||
custom-skills/74-dintel-service-architect/desktop/SKILL.md
|
||||
custom-skills/75-dintel-marketing-mgr/desktop/SKILL.md
|
||||
custom-skills/76-dintel-backoffice-mgr/desktop/SKILL.md
|
||||
custom-skills/77-dintel-account-mgr/desktop/SKILL.md
|
||||
custom-skills/88-dintel-skill-update/desktop/SKILL.md
|
||||
```
|
||||
|
||||
3. For skills with references, also add:
|
||||
- `71-dintel-brand-editor/desktop/references/dintelligence_brand_guide.md`
|
||||
- All `shared/` files in the respective skill directories
|
||||
|
||||
### Option C: Claude.ai (Web) Installation
|
||||
|
||||
Skills for Claude.ai are managed via **Projects**:
|
||||
1. Open [claude.ai](https://claude.ai) → **Projects**
|
||||
2. Create a project "D.intelligence Agent Corps" (or use existing)
|
||||
3. Under **Project Knowledge**, upload each `desktop/SKILL.md`
|
||||
4. Upload shared reference files as additional knowledge
|
||||
|
||||
---
|
||||
|
||||
## 4. Post-Installation Verification
|
||||
|
||||
After installing, verify in a new Cowork/Desktop session:
|
||||
|
||||
```
|
||||
"D.intelligence 브랜드 검토해줘" → Should trigger #70 Brand Guardian
|
||||
"견적서 만들어줘" → Should trigger #73 Quotation Manager
|
||||
"미팅 준비해줘" → Should trigger #77 Account Manager
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Notes
|
||||
|
||||
- The `code/CLAUDE.md` files are for **Claude Code** (CLI) — separate from Desktop/Cowork
|
||||
- `code/scripts/` Python files (`generate_credential.py`, `generate_quotation.py`) require the `dintel-shared` Python package
|
||||
- All 9 skills share `dintel-shared/` — changes there propagate via `#88 Skill Update`
|
||||
- The installed #70 and #71 match the source with minor version line differences (cosmetic)
|
||||
32
custom-skills/dintel-shared/README.md
Normal file
32
custom-skills/dintel-shared/README.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# dintel-shared — D.intelligence Agent Corps Shared Environment
|
||||
|
||||
Shared Python package and utilities used by all `dintel-` Claude Skills (agents 70-77, 88).
|
||||
|
||||
## Setup
|
||||
|
||||
```bash
|
||||
cd /Users/ourdigital/Projects/our-claude-skills/custom-skills/dintel-shared
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
## Package Structure
|
||||
|
||||
```
|
||||
src/dintel/
|
||||
├── __init__.py # Version
|
||||
├── brand.py # Brand constants, colors, service architecture, prohibited words
|
||||
├── document.py # DOCX generation with D.intelligence branding
|
||||
├── excel.py # Excel/xlsx generation with branded styles
|
||||
└── notion.py # Notion database IDs, status options, client mappings
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```python
|
||||
from dintel.brand import BRAND_NAME, SERVICE_MODULES, COLOR_PRIMARY
|
||||
from dintel.document import create_branded_doc, save_doc
|
||||
from dintel.excel import create_branded_workbook, style_header_row
|
||||
from dintel.notion import DB_TASKS_DASHBOARD, CLIENT_DB_MAP
|
||||
```
|
||||
520
custom-skills/dintel-shared/USER-GUIDE.md
Normal file
520
custom-skills/dintel-shared/USER-GUIDE.md
Normal file
@@ -0,0 +1,520 @@
|
||||
# D.intelligence Agent Corps — User Guide
|
||||
|
||||
> **Version**: 1.0.0
|
||||
> **Updated**: 2026-03-09
|
||||
> **Author**: D.intelligence Engineering
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
D.intelligence Agent Corps는 9개의 AI 에이전트로 구성된 스킬 번들입니다.
|
||||
모든 에이전트는 D.intelligence의 브랜드 가이드, 서비스 아키텍처, 가격 정책을 공유하며,
|
||||
일관된 품질의 결과물을 생성합니다.
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ D.intelligence Agent Corps │
|
||||
│ │
|
||||
│ #70 Brand Guardian ←── 브랜드 컴플라이언스 │
|
||||
│ #71 Brand Editor ←── 카피라이팅 │
|
||||
│ #72 Doc Secretary ←── 문서 포맷팅 │
|
||||
│ #73 Quotation Mgr ←── 견적서 생성 │
|
||||
│ #74 Service Architect ←── 서비스 설계 │
|
||||
│ #75 Marketing Mgr ←── 콘텐츠 파이프라인 │
|
||||
│ #76 Back Office Mgr ←── 계약/인보이스/HR │
|
||||
│ #77 Account Mgr ←── 고객 관계 관리 │
|
||||
│ #88 Skill Update ←── 메타 에이전트 (일괄 변경)│
|
||||
│ │
|
||||
│ dintel-shared/ ←── 공유 인프라 │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Installation
|
||||
|
||||
```bash
|
||||
cd our-claude-skills/custom-skills/dintel-shared/
|
||||
./install.sh # Interactive — choose Code, Desktop, or both
|
||||
./install.sh --all # Install everything
|
||||
./install.sh --dry-run # Preview without changes
|
||||
```
|
||||
|
||||
### Autonomy Levels
|
||||
|
||||
| Level | Agents | Meaning |
|
||||
|-------|--------|---------|
|
||||
| **Auto** | #70 | Runs automatically when D.intelligence content is detected |
|
||||
| **Auto + Ask** | #71 | Auto-activates, asks before making changes |
|
||||
| **Draft & Wait** | #72, #73, #75, #76 | Generates draft, then STOPS for Andrew's review |
|
||||
| **Inquiry-driven** | #74 | Asks structured questions before recommending |
|
||||
| **Mixed** | #77 | Monitors autonomously, asks before client-facing actions |
|
||||
| **Triggered** | #88 | Only runs when explicitly invoked by Andrew |
|
||||
|
||||
---
|
||||
|
||||
## Agent Reference & Use Cases
|
||||
|
||||
---
|
||||
|
||||
### #70 Brand Guardian — 브랜드 가디언
|
||||
|
||||
**What it does**: D.intelligence가 생산하는 모든 콘텐츠의 브랜드 준수 여부를 100점 체계로 검토합니다.
|
||||
|
||||
**When to use**:
|
||||
- 제안서, 리포트, 블로그, 뉴스레터 작성 전후
|
||||
- 프레젠테이션 슬라이드 검토
|
||||
- AI가 생성한 응답의 톤앤매너 검증
|
||||
- 비주얼 자산(로고, 컬러, 타이포그래피) 검수
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "이 제안서 초안을 브랜드 가이드 기준으로 검토해줘"
|
||||
→ 100점 체크리스트 실행 → 위반 사항 + 수정안 제시
|
||||
|
||||
2. "A3 데이터 분석 서비스 소개 페이지를 작성해줘"
|
||||
→ 브랜드 톤(~합니다 서술체) + 서비스 아키텍처 정확성 보장
|
||||
|
||||
3. "이 콘텐츠의 서비스 모듈 코드가 맞는지 확인해줘"
|
||||
→ A1-G4 코드 정확성 + 카테고리 태그(DI/MD/MPO/BVT) 검증
|
||||
|
||||
4. "프레젠테이션 디자인이 2025 디자인 시스템에 맞는지 검토해줘"
|
||||
→ 컬러(D Beige, D Olive 등), 타이포그래피, 레이아웃 검수 (125점)
|
||||
```
|
||||
|
||||
**Review output example**:
|
||||
```
|
||||
브랜드 적합성 리뷰 리포트
|
||||
총점: 87/100
|
||||
|
||||
A. 톤앤매너 (22/25)
|
||||
✗ LINE 12: "획기적인 성과" → 금지 표현. "측정 가능한 성과 개선"으로 수정
|
||||
✓ 전반적 톤: ~합니다 서술체 일관
|
||||
|
||||
B. 메시지 구조 (25/25)
|
||||
✓ 문제 진단 → 데이터 근거 → 해결 방안 → 예상 성과 흐름 준수
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### #71 Brand Editor — 브랜드 에디터
|
||||
|
||||
**What it does**: D.intelligence 브랜드 가이드에 맞는 콘텐츠를 생성하고, 기존 콘텐츠의 스타일 적합성을 평가합니다.
|
||||
|
||||
**When to use**:
|
||||
- Magazine D. 블로그 기사 작성
|
||||
- 서비스 페이지 카피라이팅
|
||||
- 뉴스레터, LinkedIn 포스트 초안
|
||||
- 기존 텍스트의 스타일 가이드 적합성 평가
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "[SEO] 검색엔진 최적화가 브랜드에 미치는 영향 — Magazine D. 기사를 써줘"
|
||||
→ ~다 간결 서술체 + [카테고리] 태그 + 결론적으로 마무리
|
||||
|
||||
2. "T6 Brand Visibility Treatment 서비스 소개 페이지를 작성해줘"
|
||||
→ ~합니다 존칭 서술체 + 문제→근거→해법→성과 구조
|
||||
|
||||
3. "이 블로그 초안을 D.intelligence 스타일 가이드 기준으로 평가해줘"
|
||||
→ 14-point 체크리스트 실행 → PASS/FAIL 판정 + 수정 제안
|
||||
|
||||
4. "회사소개서(Credential) 텍스트를 최신 브랜드 가이드에 맞게 업데이트해줘"
|
||||
→ Company Credential 2025 참조하여 최신 톤으로 수정
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### #72 Doc Secretary — 문서 비서
|
||||
|
||||
**What it does**: 회의록, 리포트, 제안서 등 문서를 브랜드 양식에 맞게 포맷팅합니다.
|
||||
|
||||
**When to use**:
|
||||
- 회의 후 회의록 작성
|
||||
- 분석 리포트 구조화
|
||||
- 제안서 포맷팅
|
||||
- 월간 리포트 작성
|
||||
- 내부 메모 작성
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "오늘 JHR 미팅 회의록을 작성해줘. 참석자: 임명재, 김OO.
|
||||
주요 논의: SEO 월간 보고서 리뷰, Q2 마케팅 예산"
|
||||
→ 회의록 템플릿 적용: 참석자, 안건, 결정사항, 액션아이템
|
||||
|
||||
2. "SLA 디지털 마케팅 진단 결과를 리포트로 만들어줘"
|
||||
→ D.intelligence_Digital_Marketing_Audit_2026 템플릿 기반
|
||||
→ [DRAFT - Awaiting Review] 워터마크 포함
|
||||
|
||||
3. "이번 달 JAM 월간 성과 보고서를 만들어줘"
|
||||
→ Marketing Performance 템플릿 + Notion 태스크 데이터 반영
|
||||
|
||||
4. "제안 준비 절차를 안내해줘"
|
||||
→ 제안 SOP 문서 참조하여 체크리스트 안내
|
||||
```
|
||||
|
||||
**Available templates** (shared/document-templates/):
|
||||
- Initial Brief, Digital Marketing Audit, Marketing Performance
|
||||
- Website Diagnosis, Social Media Excellence, Blank Template
|
||||
|
||||
---
|
||||
|
||||
### #73 Quotation Manager — 견적 관리자
|
||||
|
||||
**What it does**: 4개 서브 에이전트(Scope → Resource → Pricing → Output)를 순차 실행하여 브랜드된 견적서를 생성합니다.
|
||||
|
||||
**When to use**:
|
||||
- 신규 클라이언트 견적 요청
|
||||
- 서비스 패키지 가격 산출
|
||||
- 기존 견적서 수정/업데이트
|
||||
- 가격 시뮬레이션
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "JHR에게 A3 데이터 분석 + T6 Brand Visibility Treatment 견적서를 만들어줘"
|
||||
→ Scope Agent: 모듈 매핑
|
||||
→ Resource Agent: 투입 인력·기간 추정
|
||||
→ Pricing Agent: 가격 산출 + 재계약 할인 10% 적용
|
||||
→ Output: DI-Q-20260309-001_JHR_DRAFT.xlsx 생성
|
||||
→ [DRAFT] Andrew 승인 대기
|
||||
|
||||
2. "콘텐츠 마케팅 3개월 패키지 가격이 얼마인지 시뮬레이션해줘"
|
||||
→ T4 + G2 3개월 기준 가격 산출 + 할인 시나리오
|
||||
|
||||
3. "지난번 SLA 견적서에서 T5를 빼고 T3를 추가해줘"
|
||||
→ 기존 견적 수정 → 새 버전 생성
|
||||
|
||||
4. "GA4 교육 워크숍 견적서를 만들어줘 (반일, 5명)"
|
||||
→ GA교육 템플릿 참조 → 커리큘럼 + 가격 포함
|
||||
```
|
||||
|
||||
**Quotation templates** (shared/quotation-templates/):
|
||||
- 표준 견적서 2026, GA Analytics 템플릿, 콘텐츠 마케팅 템플릿, GA 교육 템플릿
|
||||
|
||||
**Key rules**:
|
||||
- 모든 가격: VAT 별도
|
||||
- 할인: 최대 35% (기본 할인 + 재계약 10% 누적)
|
||||
- 결제 조건 기본: 착수금 50% / 완료 후 50%
|
||||
- 견적 유효기간: 30일
|
||||
|
||||
---
|
||||
|
||||
### #74 Service Architect — 서비스 설계사
|
||||
|
||||
**What it does**: 7단계 구조화 질문으로 클라이언트 니즈를 파악하고, 최적의 서비스 모듈 조합을 설계합니다.
|
||||
|
||||
**When to use**:
|
||||
- 신규 클라이언트 서비스 설계
|
||||
- 기존 클라이언트 서비스 확장
|
||||
- 서비스 모듈 조합 최적화
|
||||
- Pain point → 모듈 매핑
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "중견 이커머스 회사에서 연락이 왔어. GA4는 설치했는데 데이터를 활용 못하고 있대"
|
||||
→ 7단계 질문 시작: 업종, 규모, 현재 마케팅 채널, 페인포인트...
|
||||
→ Pain point 매핑: "데이터 축적만 되고 해석 없음" → A3 + T3
|
||||
→ Starter 패키지 추천 + Scope Document 생성
|
||||
→ #73 Quotation Mgr에 핸드오프
|
||||
|
||||
2. "SLA에서 퍼포먼스 마케팅 진단도 추가하고 싶다고 해"
|
||||
→ 기존 서비스에 A5 추가 → Standard 패키지로 업그레이드 제안
|
||||
|
||||
3. "검색 노출이 전혀 안 되는 스타트업이 있어"
|
||||
→ 매핑: "검색 미노출" → A3 + T6 (SEO Intensive 패키지)
|
||||
→ BVT 카테고리 중심 추천
|
||||
|
||||
4. "이 회사에 맞는 서비스를 추천해줘" + 회사 브리프 첨부
|
||||
→ 브리프 분석 → Maturity Level 판정 → 맞춤 모듈 조합
|
||||
```
|
||||
|
||||
**Service module data** (shared/service-modules/):
|
||||
- 서비스 명세 일람표, 고객 소구점, 전략 키워드, 타겟 오디언스 CSV
|
||||
|
||||
---
|
||||
|
||||
### #75 Marketing Manager — 마케팅 매니저
|
||||
|
||||
**What it does**: Magazine D. 블로그, 뉴스레터, LinkedIn, WordPress 콘텐츠 파이프라인을 관리합니다.
|
||||
|
||||
**When to use**:
|
||||
- Magazine D. 기사 기획/초안
|
||||
- 뉴스레터 에디션 준비
|
||||
- LinkedIn 포스트 작성
|
||||
- 콘텐츠 캘린더 관리
|
||||
- WordPress 서비스 페이지 콘텐츠 준비
|
||||
- SEO 키워드 전략 연동
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "이번 주 Magazine D. 기사 주제를 추천해줘"
|
||||
→ 전략 키워드 + 업계 트렌드 분석 → 3개 주제 제안
|
||||
→ 선택 후 기사 초안 작성 (Chain C: #75 → #71 → #70 → Andrew)
|
||||
|
||||
2. "3월 뉴스레터를 준비해줘"
|
||||
→ 핵심 수치 + 실무 시사점 구조
|
||||
→ 최근 Magazine D. 기사 링크 + 교육 일정 포함
|
||||
|
||||
3. "GA4 교육 프로모션 LinkedIn 포스트를 써줘"
|
||||
→ 인사이트 중심 + Data Intelligence Workshop 홍보
|
||||
→ 해시태그: #GA4 #DataAnalytics #MarketingIntelligence
|
||||
|
||||
4. "Q2 콘텐츠 캘린더를 만들어줘"
|
||||
→ content-calendar-template.md 기반 → 월별/주별 계획
|
||||
→ 상태 트래킹: IDEA → DRAFT → REVIEW → APPROVED → PUBLISHED
|
||||
|
||||
5. "Data Intelligence Workshop 서비스 페이지 콘텐츠를 준비해줘"
|
||||
→ GA4-GTM 실무가이드 참조 + ~합니다/~세요 교육 안내체
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### #76 Back Office Manager — 백오피스 매니저
|
||||
|
||||
**What it does**: 계약서, 인보이스, NDA, 고용계약 등 행정 문서를 관리하고, 빌링/HR/경비를 트래킹합니다.
|
||||
|
||||
**When to use**:
|
||||
- 용역 계약서 초안 작성
|
||||
- 세금계산서 발행 준비
|
||||
- NDA 작성
|
||||
- 인력 온보딩/오프보딩
|
||||
- 월간 빌링 정산
|
||||
- 경비/구독 관리
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "JHR 3개월 SEO 컨설팅 계약서를 만들어줘"
|
||||
→ D.intelligence_Service_Contract_2026.txt 템플릿 기반
|
||||
→ 서비스 범위, 기간, 금액 (Andrew 확인 필요)
|
||||
→ CEO 서명 파일 위치 안내
|
||||
→ [DRAFT - Awaiting Review]
|
||||
|
||||
2. "이번 달 JAM 인보이스를 준비해줘"
|
||||
→ Notion Tasks Dashboard에서 Billable 태스크 집계
|
||||
→ D.intelligence_Invoice_2026.txt 템플릿으로 생성
|
||||
|
||||
3. "새로운 파트타임 매니저 온보딩 체크리스트를 만들어줘"
|
||||
→ D.intelligence_Job_Readiness_2026.txt 참조
|
||||
→ 계약서 + 계정 설정 + 교육 일정 체크리스트
|
||||
|
||||
4. "이번 달 세금계산서 마감일 알려줘"
|
||||
→ billing-checklist.md 참조 → 한국 세금 캘린더 기준
|
||||
|
||||
5. "SLA NDA 초안을 작성해줘"
|
||||
→ NDA 템플릿 기반 → 클라이언트 정보 반영
|
||||
```
|
||||
|
||||
**Document templates** (shared/document-templates/):
|
||||
- Service Contract, Invoice, NDA, Employment Contract, Ad Agency Contract
|
||||
|
||||
**Corporate documents** (reference only):
|
||||
- 사업자등록증, 은행정보, CEO 서명, 법인인감
|
||||
|
||||
---
|
||||
|
||||
### #77 Account Manager — 어카운트 매니저
|
||||
|
||||
**What it does**: Andrew의 고객 관계 관리 코파일럿 — Notion 기반 프로젝트 모니터링, 미팅 준비, 이슈 에스컬레이션.
|
||||
|
||||
**When to use**:
|
||||
- 클라이언트별 프로젝트 현황 파악
|
||||
- 미팅 준비 자료 생성
|
||||
- 주간/월간 상태 요약
|
||||
- 마감 임박 태스크 알림
|
||||
- 신규 클라이언트 온보딩 시작
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "내일 JHR 미팅인데 브리프를 준비해줘"
|
||||
→ meeting-prep-template.md 기반
|
||||
→ Notion Tasks에서 JHR 진행 현황 수집
|
||||
→ 논의 사항 + 데이터 + 미해결 이슈 정리
|
||||
|
||||
2. "이번 주 전체 클라이언트 현황을 요약해줘"
|
||||
→ Notion 5개 DB 스캔 → 클라이언트별 완료/진행/블로킹 요약
|
||||
|
||||
3. "마감이 3일 이내인 태스크가 있어?"
|
||||
→ 자율 모니터링 Rule #1: Due Date 3일 이내 + Not Done 필터
|
||||
|
||||
4. "새 클라이언트 온보딩을 시작하자. 회사명: ABC Corp"
|
||||
→ Chain A 시작: #77 접수 → #74 서비스 설계 → #73 견적
|
||||
→ Credential 2025 + Initial Brief 템플릿 안내
|
||||
|
||||
5. "SLA 프로젝트가 2주 넘게 진행이 없는 것 같은데 확인해줘"
|
||||
→ 자율 모니터링 Rule #2: In Progress > 2주 stale 태스크 체크
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### #88 Skill Update — 스킬 업데이트 (메타 에이전트)
|
||||
|
||||
**What it does**: 공유 참조(브랜드, 가격, 서비스 모듈 등)가 변경될 때, 영향 받는 모든 스킬을 일괄 업데이트합니다.
|
||||
|
||||
**When to use**:
|
||||
- 가격 정책 변경
|
||||
- 서비스 모듈 추가/변경/삭제
|
||||
- 브랜드 가이드 수정
|
||||
- Notion 스키마 변경
|
||||
- 클라이언트 코드 추가
|
||||
- 금지 표현 목록 업데이트
|
||||
|
||||
**Example use cases**:
|
||||
|
||||
```
|
||||
1. "T5 가격이 500만원에서 600만원으로 변경됐어"
|
||||
→ Dependency Map 조회: 가격 변경 → #73, #74, #76 영향
|
||||
→ Impact Report 제시 → Andrew 승인
|
||||
→ dintel-shared/references/pricing-reference.md 먼저 수정
|
||||
→ #73 pricing table, #74 package pricing, #76 billing ref 업데이트
|
||||
→ change-log.md 기록
|
||||
|
||||
2. "새 서비스 모듈 T8 디지털 PR을 추가하자"
|
||||
→ 영향: #70, #71, #73, #74, #75 (서비스 모듈 변경)
|
||||
→ brand.py SERVICE_MODULES에 T8 추가
|
||||
→ 각 스킬의 모듈 목록 업데이트
|
||||
→ 일관성 검증 실행
|
||||
|
||||
3. "클라이언트 코드 HYT를 추가해줘. 현대호텔"
|
||||
→ 영향: #72, #73, #76, #77 (클라이언트 코드 변경)
|
||||
→ brand.py CLIENT_CODES, notion.py CLIENT_DB_MAP 업데이트
|
||||
→ 각 스킬의 클라이언트 목록 업데이트
|
||||
|
||||
4. "전체 스킬의 서비스 모듈 코드가 brand.py와 일치하는지 검증해줘"
|
||||
→ 일관성 검증 모드 → 9개 스킬 전수 검사 → 불일치 리포트
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Workflow Chains
|
||||
|
||||
에이전트들은 단독으로도 작동하지만, 체인으로 연결될 때 가장 강력합니다.
|
||||
|
||||
### Chain A — New Client Onboarding
|
||||
|
||||
```
|
||||
#77 Account Mgr (접수)
|
||||
→ #74 Service Architect (서비스 설계)
|
||||
→ #73 Quotation Mgr (견적 생성)
|
||||
→ #72 Doc Secretary (문서 포맷팅)
|
||||
→ #71 Brand Editor (카피 검수)
|
||||
→ #70 Brand Guardian (브랜드 검토)
|
||||
→ Andrew (최종 승인)
|
||||
```
|
||||
|
||||
**Example**: "ABC Corp에서 디지털 마케팅 컨설팅 문의가 왔어"
|
||||
|
||||
### Chain B — Ongoing Monitoring
|
||||
|
||||
```
|
||||
#77 Account Mgr (Notion 모니터링)
|
||||
→ #72 Doc Secretary (리포트 포맷팅)
|
||||
→ #70 Brand Guardian (검토)
|
||||
```
|
||||
|
||||
**Example**: "이번 주 JHR 진행 상황 리포트를 만들어줘"
|
||||
|
||||
### Chain C — Content Publishing
|
||||
|
||||
```
|
||||
#75 Marketing Mgr (콘텐츠 기획/초안)
|
||||
→ #71 Brand Editor (스타일 검수)
|
||||
→ #70 Brand Guardian (브랜드 검토)
|
||||
→ Andrew (승인)
|
||||
→ WordPress 게시
|
||||
```
|
||||
|
||||
**Example**: "Magazine D. 새 기사를 기획하고 작성해줘"
|
||||
|
||||
### Chain D — Administrative
|
||||
|
||||
```
|
||||
#76 Back Office Mgr (계약서/인보이스 초안)
|
||||
→ #72 Doc Secretary (포맷팅)
|
||||
→ Andrew (승인/서명)
|
||||
```
|
||||
|
||||
**Example**: "SLA 3개월 계약서를 만들어줘"
|
||||
|
||||
---
|
||||
|
||||
## Universal Guardrails
|
||||
|
||||
모든 에이전트에 공통 적용되는 5대 규칙:
|
||||
|
||||
1. **Andrew 승인 없이 클라이언트에게 전달하지 않는다**
|
||||
2. **삭제하지 않는다 — 항상 아카이브**
|
||||
3. **Andrew 확인 없이 가격을 확정하지 않는다**
|
||||
4. **Korean-first, 전문용어는 한글(English) 이중 표기**
|
||||
5. **동의 없이 클라이언트 간 데이터를 교차 참조하지 않는다**
|
||||
|
||||
---
|
||||
|
||||
## Shared Infrastructure
|
||||
|
||||
### dintel-shared/
|
||||
|
||||
```
|
||||
dintel-shared/
|
||||
├── install.sh ← 이 번들 설치 스크립트
|
||||
├── pyproject.toml ← Python 패키지 설정
|
||||
├── src/dintel/
|
||||
│ ├── brand.py ← 브랜드 상수 (컬러, 폰트, 서비스 모듈, 금지어)
|
||||
│ ├── document.py ← DOCX 생성 유틸리티
|
||||
│ ├── excel.py ← Excel 생성 유틸리티
|
||||
│ └── notion.py ← Notion DB ID, 상태값, 필드 정의
|
||||
└── references/
|
||||
├── dintelligence_brand_guide.md ← 라이팅 스타일 가이드
|
||||
├── design-system-2025.md ← 비주얼 아이덴티티
|
||||
├── pricing-reference.md ← 가격 테이블
|
||||
└── notion-schema-reference.md ← Notion DB 스키마
|
||||
```
|
||||
|
||||
### Skill-Level Shared Libraries
|
||||
|
||||
각 스킬은 자체 `shared/`에 업무별 참조 파일을 보유합니다:
|
||||
|
||||
| Skill | shared/ Contents |
|
||||
|-------|-----------------|
|
||||
| #72 Doc Secretary | `document-templates/` — 6개 리포트/감사 TXT 템플릿 |
|
||||
| #73 Quotation Mgr | `quotation-templates/` — 4개 XLSX 견적 템플릿 |
|
||||
| #74 Service Architect | `service-modules/` — 4개 CSV (서비스 명세, 키워드, 오디언스, 소구점) |
|
||||
| #75 Marketing Mgr | `training-materials/` — GA4-GTM 실무가이드 |
|
||||
| #76 Back Office | `document-templates/` — 5개 계약/인보이스 TXT 템플릿 |
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "서비스 모듈 코드가 존재하지 않습니다"
|
||||
→ A1-A6, T1-T7, G1-G4 범위 확인. 존재하지 않는 코드(A7, T8 등)는 #88로 먼저 추가해야 합니다.
|
||||
|
||||
### "브랜드 검토 점수가 낮게 나옵니다"
|
||||
→ #70의 100점 체크리스트 결과를 확인하세요. 가장 흔한 감점:
|
||||
- 금지 표현 사용 (획기적, 혁신적, 놀라운)
|
||||
- ~합니다/~다 톤 혼용
|
||||
- 서비스 모듈 코드 없이 서비스명만 사용
|
||||
|
||||
### "견적서 생성 시 가격이 0으로 나옵니다"
|
||||
→ `shared/pricing-reference.md`에 해당 모듈 가격이 등록되어 있는지 확인하세요.
|
||||
|
||||
### "다른 기기에서 스킬이 작동하지 않습니다"
|
||||
→ `./install.sh`를 새 기기에서 다시 실행하세요. 절대 경로 대신 상대 경로를 사용하므로 저장소만 클론하면 됩니다.
|
||||
|
||||
---
|
||||
|
||||
## Version History
|
||||
|
||||
| Version | Date | Changes |
|
||||
|---------|------|---------|
|
||||
| 1.0.0 | 2026-03-09 | Initial release — 9 agents + shared infra |
|
||||
651
custom-skills/dintel-shared/install.sh
Executable file
651
custom-skills/dintel-shared/install.sh
Executable file
@@ -0,0 +1,651 @@
|
||||
#!/usr/bin/env bash
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# D.intelligence Agent Corps — Skill Bundle Installer
|
||||
# Version: 1.0.0
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
#
|
||||
# Installs the D.intelligence Agent Corps skill bundle for
|
||||
# Claude Code and/or Claude Desktop on any macOS/Linux device.
|
||||
#
|
||||
# Usage:
|
||||
# ./install.sh # Interactive mode
|
||||
# ./install.sh --all # Install everything
|
||||
# ./install.sh --code-only # Claude Code skills only
|
||||
# ./install.sh --desktop-only # Claude Desktop skills only
|
||||
# ./install.sh --dry-run # Preview without changes
|
||||
# ./install.sh --uninstall # Remove installed skills
|
||||
#
|
||||
# Prerequisites:
|
||||
# - Python >= 3.12
|
||||
# - pip or uv (for Python dependencies)
|
||||
# - Claude Code or Claude Desktop installed
|
||||
# - Git (to clone the repository if not already present)
|
||||
#
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
set -eu
|
||||
|
||||
# ── Constants ────────────────────────────────────────────────────
|
||||
|
||||
VERSION="1.0.0"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SKILLS_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
SHARED_DIR="$SCRIPT_DIR"
|
||||
|
||||
# Skill definitions: number|name|description
|
||||
SKILLS=(
|
||||
"70|dintel-brand-guardian|Brand compliance review & content generation"
|
||||
"71|dintel-brand-editor|Brand-compliant copywriting & style evaluation"
|
||||
"72|dintel-doc-secretary|Document formatting, meeting notes, reports"
|
||||
"73|dintel-quotation-mgr|Quotation generation with multi-agent sub-system"
|
||||
"74|dintel-service-architect|Service scope design & module recommendation"
|
||||
"75|dintel-marketing-mgr|Marketing content pipeline management"
|
||||
"76|dintel-backoffice-mgr|Administrative operations, invoicing, contracts"
|
||||
"77|dintel-account-mgr|Client relationship management & monitoring"
|
||||
"88|dintel-skill-update|Cross-skill consistency management (meta-agent)"
|
||||
)
|
||||
|
||||
# Color output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# ── Helper Functions ─────────────────────────────────────────────
|
||||
|
||||
log_info() { echo -e "${BLUE}[INFO]${NC} $*"; }
|
||||
log_success() { echo -e "${GREEN}[OK]${NC} $*"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||||
log_error() { echo -e "${RED}[ERR]${NC} $*"; }
|
||||
log_step() { echo -e "\n${BOLD}${CYAN}── $* ──${NC}"; }
|
||||
|
||||
DRY_RUN=false
|
||||
INSTALL_CODE=false
|
||||
INSTALL_DESKTOP=false
|
||||
UNINSTALL=false
|
||||
|
||||
# ── Platform Detection ───────────────────────────────────────────
|
||||
|
||||
detect_platform() {
|
||||
local os
|
||||
os="$(uname -s)"
|
||||
case "$os" in
|
||||
Darwin) PLATFORM="macos" ;;
|
||||
Linux) PLATFORM="linux" ;;
|
||||
*) log_error "Unsupported platform: $os"; exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
detect_claude_paths() {
|
||||
# Claude Code config
|
||||
CLAUDE_CODE_CONFIG="$HOME/.claude.json"
|
||||
CLAUDE_CODE_DIR="$HOME/.claude"
|
||||
|
||||
# Claude Desktop config (platform-dependent)
|
||||
if [[ "$PLATFORM" == "macos" ]]; then
|
||||
CLAUDE_DESKTOP_CONFIG="$HOME/Library/Application Support/Claude/claude_desktop_config.json"
|
||||
CLAUDE_DESKTOP_DIR="$HOME/Library/Application Support/Claude"
|
||||
else
|
||||
CLAUDE_DESKTOP_CONFIG="$HOME/.config/Claude/claude_desktop_config.json"
|
||||
CLAUDE_DESKTOP_DIR="$HOME/.config/Claude"
|
||||
fi
|
||||
|
||||
# Check which Claude products are installed
|
||||
HAS_CLAUDE_CODE=false
|
||||
HAS_CLAUDE_DESKTOP=false
|
||||
|
||||
if command -v claude &>/dev/null || [[ -f "$CLAUDE_CODE_CONFIG" ]]; then
|
||||
HAS_CLAUDE_CODE=true
|
||||
fi
|
||||
if [[ -d "$CLAUDE_DESKTOP_DIR" ]]; then
|
||||
HAS_CLAUDE_DESKTOP=true
|
||||
fi
|
||||
}
|
||||
|
||||
detect_python() {
|
||||
PYTHON_CMD=""
|
||||
for cmd in python3.13 python3.12 python3; do
|
||||
if command -v "$cmd" &>/dev/null; then
|
||||
local ver
|
||||
ver="$($cmd --version 2>&1 | grep -oE '[0-9]+\.[0-9]+')"
|
||||
local major minor
|
||||
major="${ver%%.*}"
|
||||
minor="${ver#*.}"
|
||||
if [[ "$major" -ge 3 && "$minor" -ge 12 ]]; then
|
||||
PYTHON_CMD="$cmd"
|
||||
PYTHON_VERSION="$ver"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
done
|
||||
log_warn "Python >= 3.12 not found. Python utilities will not be installed."
|
||||
}
|
||||
|
||||
detect_package_manager() {
|
||||
PKG_MGR=""
|
||||
if command -v uv &>/dev/null; then
|
||||
PKG_MGR="uv"
|
||||
elif command -v pip3 &>/dev/null; then
|
||||
PKG_MGR="pip3"
|
||||
elif command -v pip &>/dev/null; then
|
||||
PKG_MGR="pip"
|
||||
fi
|
||||
}
|
||||
|
||||
# ── Parse Arguments ──────────────────────────────────────────────
|
||||
|
||||
parse_args() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--all)
|
||||
INSTALL_CODE=true
|
||||
INSTALL_DESKTOP=true
|
||||
;;
|
||||
--code-only)
|
||||
INSTALL_CODE=true
|
||||
;;
|
||||
--desktop-only)
|
||||
INSTALL_DESKTOP=true
|
||||
;;
|
||||
--dry-run)
|
||||
DRY_RUN=true
|
||||
;;
|
||||
--uninstall)
|
||||
UNINSTALL=true
|
||||
;;
|
||||
--help|-h)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown option: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
show_help() {
|
||||
cat <<'HELP'
|
||||
|
||||
D.intelligence Agent Corps — Skill Bundle Installer v1.0.0
|
||||
|
||||
Usage:
|
||||
./install.sh Interactive mode
|
||||
./install.sh --all Install for both Claude Code and Desktop
|
||||
./install.sh --code-only Claude Code only
|
||||
./install.sh --desktop-only Claude Desktop only
|
||||
./install.sh --dry-run Preview without making changes
|
||||
./install.sh --uninstall Remove installed skills
|
||||
|
||||
Skills Included:
|
||||
#70 Brand Guardian Brand compliance review
|
||||
#71 Brand Editor Copywriting & style evaluation
|
||||
#72 Doc Secretary Document formatting & reports
|
||||
#73 Quotation Manager Quotation generation (multi-agent)
|
||||
#74 Service Architect Service scope & module design
|
||||
#75 Marketing Manager Content pipeline management
|
||||
#76 Back Office Manager Admin, invoicing, contracts
|
||||
#77 Account Manager Client relationship & monitoring
|
||||
#88 Skill Update Cross-skill consistency (meta-agent)
|
||||
|
||||
Shared Infrastructure:
|
||||
dintel-shared/ Python package + reference docs
|
||||
|
||||
HELP
|
||||
}
|
||||
|
||||
# ── Pre-flight Checks ────────────────────────────────────────────
|
||||
|
||||
preflight() {
|
||||
log_step "Pre-flight Checks"
|
||||
|
||||
detect_platform
|
||||
log_info "Platform: $PLATFORM"
|
||||
|
||||
detect_claude_paths
|
||||
if $HAS_CLAUDE_CODE; then
|
||||
log_success "Claude Code detected"
|
||||
else
|
||||
log_warn "Claude Code not detected"
|
||||
fi
|
||||
if $HAS_CLAUDE_DESKTOP; then
|
||||
log_success "Claude Desktop detected"
|
||||
else
|
||||
log_warn "Claude Desktop not detected"
|
||||
fi
|
||||
|
||||
detect_python
|
||||
if [[ -n "$PYTHON_CMD" ]]; then
|
||||
log_success "Python $PYTHON_VERSION ($PYTHON_CMD)"
|
||||
fi
|
||||
|
||||
detect_package_manager
|
||||
if [[ -n "$PKG_MGR" ]]; then
|
||||
log_success "Package manager: $PKG_MGR"
|
||||
else
|
||||
log_warn "No pip/uv found — skipping Python package install"
|
||||
fi
|
||||
|
||||
# Verify skill directories exist
|
||||
local missing=0
|
||||
for entry in "${SKILLS[@]}"; do
|
||||
IFS='|' read -r num name desc <<< "$entry"
|
||||
local dir="$SKILLS_ROOT/${num}-${name}"
|
||||
if [[ ! -d "$dir" ]]; then
|
||||
log_error "Missing skill directory: ${num}-${name}/"
|
||||
((missing++))
|
||||
fi
|
||||
done
|
||||
if [[ $missing -gt 0 ]]; then
|
||||
log_error "$missing skill directories not found. Is the repository complete?"
|
||||
exit 1
|
||||
fi
|
||||
log_success "All 9 skill directories present"
|
||||
|
||||
# Verify shared infrastructure
|
||||
if [[ ! -f "$SHARED_DIR/pyproject.toml" ]]; then
|
||||
log_error "dintel-shared/pyproject.toml not found"
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -f "$SHARED_DIR/src/dintel/brand.py" ]]; then
|
||||
log_error "dintel-shared/src/dintel/brand.py not found"
|
||||
exit 1
|
||||
fi
|
||||
log_success "Shared infrastructure intact"
|
||||
}
|
||||
|
||||
# ── Interactive Mode ─────────────────────────────────────────────
|
||||
|
||||
interactive_prompt() {
|
||||
if $INSTALL_CODE || $INSTALL_DESKTOP || $UNINSTALL; then
|
||||
return # Already specified via flags
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${BOLD}D.intelligence Agent Corps — Skill Bundle Installer v${VERSION}${NC}"
|
||||
echo ""
|
||||
echo " Available targets:"
|
||||
if $HAS_CLAUDE_CODE; then
|
||||
echo -e " ${GREEN}[1]${NC} Claude Code (code/CLAUDE.md directives)"
|
||||
else
|
||||
echo -e " ${RED}[1]${NC} Claude Code (not detected)"
|
||||
fi
|
||||
if $HAS_CLAUDE_DESKTOP; then
|
||||
echo -e " ${GREEN}[2]${NC} Claude Desktop (desktop/SKILL.md skills)"
|
||||
else
|
||||
echo -e " ${RED}[2]${NC} Claude Desktop (not detected)"
|
||||
fi
|
||||
echo -e " ${GREEN}[3]${NC} Both"
|
||||
echo ""
|
||||
|
||||
read -rp " Select target [1/2/3]: " choice
|
||||
case "$choice" in
|
||||
1) INSTALL_CODE=true ;;
|
||||
2) INSTALL_DESKTOP=true ;;
|
||||
3) INSTALL_CODE=true; INSTALL_DESKTOP=true ;;
|
||||
*)
|
||||
log_error "Invalid choice"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# ── Install Python Environment ───────────────────────────────────
|
||||
|
||||
install_python_env() {
|
||||
if [[ -z "$PYTHON_CMD" || -z "$PKG_MGR" ]]; then
|
||||
log_warn "Skipping Python environment setup (missing Python or pip)"
|
||||
return
|
||||
fi
|
||||
|
||||
log_step "Python Environment — dintel-shared"
|
||||
|
||||
local venv_dir="$SHARED_DIR/.venv"
|
||||
|
||||
if $DRY_RUN; then
|
||||
log_info "[DRY-RUN] Would create venv at: $venv_dir"
|
||||
log_info "[DRY-RUN] Would install dintel package in editable mode"
|
||||
return
|
||||
fi
|
||||
|
||||
# Create virtual environment if it doesn't exist
|
||||
if [[ ! -d "$venv_dir" ]]; then
|
||||
log_info "Creating virtual environment..."
|
||||
"$PYTHON_CMD" -m venv "$venv_dir"
|
||||
log_success "Virtual environment created at $venv_dir"
|
||||
else
|
||||
log_info "Virtual environment already exists"
|
||||
fi
|
||||
|
||||
# Activate and install
|
||||
log_info "Installing dintel package (editable mode)..."
|
||||
"$venv_dir/bin/pip" install --quiet --upgrade pip
|
||||
"$venv_dir/bin/pip" install --quiet -e "$SHARED_DIR"
|
||||
log_success "dintel package installed"
|
||||
|
||||
# Verify
|
||||
if "$venv_dir/bin/python" -c "from dintel.brand import BRAND_NAME; print(f' Brand: {BRAND_NAME}')" 2>/dev/null; then
|
||||
log_success "Package verification passed"
|
||||
else
|
||||
log_error "Package verification failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ── Install Claude Code Skills ───────────────────────────────────
|
||||
|
||||
install_code_skills() {
|
||||
if ! $INSTALL_CODE; then return; fi
|
||||
|
||||
log_step "Claude Code Skills (code/CLAUDE.md)"
|
||||
|
||||
# Claude Code skills are activated by project CLAUDE.md includes.
|
||||
# We create a project-level CLAUDE.md fragment that includes all skills.
|
||||
|
||||
local target_dir
|
||||
if [[ -t 0 ]]; then
|
||||
read -rp " Service Package repo path [default: current dir]: " target_dir
|
||||
else
|
||||
target_dir=""
|
||||
fi
|
||||
target_dir="${target_dir:-$(pwd)}"
|
||||
|
||||
# Resolve to absolute
|
||||
target_dir="$(cd "$target_dir" 2>/dev/null && pwd)" || {
|
||||
log_error "Invalid path: $target_dir"
|
||||
return 1
|
||||
}
|
||||
|
||||
local claude_md="$target_dir/CLAUDE.md"
|
||||
local include_block=""
|
||||
|
||||
# Generate include block for CLAUDE.md
|
||||
include_block+=$'\n'"# ── D.intelligence Agent Corps Skills ────────────────────────"$'\n'
|
||||
include_block+="# Auto-generated by dintel-shared/install.sh v${VERSION}"$'\n'
|
||||
include_block+="# Skills are loaded from: ${SKILLS_ROOT}"$'\n'
|
||||
include_block+="#"$'\n'
|
||||
include_block+="# To activate a specific agent in Claude Code, reference its CLAUDE.md:"$'\n'
|
||||
|
||||
for entry in "${SKILLS[@]}"; do
|
||||
IFS='|' read -r num name desc <<< "$entry"
|
||||
local skill_claude_md="$SKILLS_ROOT/${num}-${name}/code/CLAUDE.md"
|
||||
if [[ -f "$skill_claude_md" ]]; then
|
||||
include_block+="# Agent #${num} (${name}): ${skill_claude_md}"$'\n'
|
||||
fi
|
||||
done
|
||||
include_block+="# ─────────────────────────────────────────────────────────────"$'\n'
|
||||
|
||||
if $DRY_RUN; then
|
||||
log_info "[DRY-RUN] Would append agent index to: $claude_md"
|
||||
echo "$include_block"
|
||||
return
|
||||
fi
|
||||
|
||||
# Create symlinks in the project for easy access
|
||||
local agents_dir="$target_dir/.claude-agents"
|
||||
mkdir -p "$agents_dir"
|
||||
|
||||
for entry in "${SKILLS[@]}"; do
|
||||
IFS='|' read -r num name desc <<< "$entry"
|
||||
local src="$SKILLS_ROOT/${num}-${name}/code/CLAUDE.md"
|
||||
local dest="$agents_dir/${num}-${name}.md"
|
||||
if [[ -f "$src" ]]; then
|
||||
ln -sf "$src" "$dest"
|
||||
log_success "#${num} ${name} → symlinked"
|
||||
fi
|
||||
done
|
||||
|
||||
# Symlink shared library
|
||||
ln -sf "$SHARED_DIR" "$agents_dir/dintel-shared"
|
||||
log_success "dintel-shared → symlinked"
|
||||
|
||||
# Write a loader CLAUDE.md fragment
|
||||
cat > "$agents_dir/README.md" <<EOF
|
||||
# D.intelligence Agent Corps — Claude Code
|
||||
|
||||
Symlinks to agent directives for Claude Code.
|
||||
Generated by \`dintel-shared/install.sh v${VERSION}\`.
|
||||
|
||||
## Agents
|
||||
|
||||
| # | Agent | Directive |
|
||||
|---|-------|-----------|
|
||||
EOF
|
||||
|
||||
for entry in "${SKILLS[@]}"; do
|
||||
IFS='|' read -r num name desc <<< "$entry"
|
||||
echo "| ${num} | ${name} | \`${num}-${name}.md\` |" >> "$agents_dir/README.md"
|
||||
done
|
||||
|
||||
cat >> "$agents_dir/README.md" <<EOF
|
||||
|
||||
## Usage
|
||||
|
||||
In Claude Code, reference an agent directive:
|
||||
\`\`\`
|
||||
Read .claude-agents/70-dintel-brand-guardian.md
|
||||
\`\`\`
|
||||
|
||||
Or add to your project CLAUDE.md as an include.
|
||||
|
||||
## Shared Library
|
||||
|
||||
\`dintel-shared/\` contains:
|
||||
- \`src/dintel/brand.py\` — Brand constants, colors, service modules
|
||||
- \`src/dintel/document.py\` — DOCX generation
|
||||
- \`src/dintel/excel.py\` — Excel generation
|
||||
- \`src/dintel/notion.py\` — Notion DB IDs
|
||||
- \`references/\` — Brand guide, pricing, Notion schema, design system
|
||||
EOF
|
||||
|
||||
log_success "Agent index created at $agents_dir/"
|
||||
echo ""
|
||||
log_info "To use agents in Claude Code:"
|
||||
log_info " 1. cd $target_dir"
|
||||
log_info " 2. claude (start Claude Code)"
|
||||
log_info " 3. Reference .claude-agents/XX-name.md in your prompts"
|
||||
}
|
||||
|
||||
# ── Install Claude Desktop Skills ────────────────────────────────
|
||||
|
||||
install_desktop_skills() {
|
||||
if ! $INSTALL_DESKTOP; then return; fi
|
||||
|
||||
log_step "Claude Desktop Skills (desktop/SKILL.md)"
|
||||
|
||||
# Claude Desktop skills are stored as project knowledge files.
|
||||
# They are loaded when the user opens a project that includes them.
|
||||
|
||||
local skills_target="$HOME/.claude/skills"
|
||||
|
||||
if $DRY_RUN; then
|
||||
log_info "[DRY-RUN] Would create skill directory: $skills_target"
|
||||
for entry in "${SKILLS[@]}"; do
|
||||
IFS='|' read -r num name desc <<< "$entry"
|
||||
log_info "[DRY-RUN] Would symlink: ${num}-${name}/desktop/ → $skills_target/${num}-${name}/"
|
||||
done
|
||||
return
|
||||
fi
|
||||
|
||||
mkdir -p "$skills_target"
|
||||
|
||||
for entry in "${SKILLS[@]}"; do
|
||||
IFS='|' read -r num name desc <<< "$entry"
|
||||
local src="$SKILLS_ROOT/${num}-${name}/desktop"
|
||||
local dest="$skills_target/${name}"
|
||||
|
||||
if [[ -d "$src" ]]; then
|
||||
# Remove existing symlink/dir if present
|
||||
rm -rf "$dest"
|
||||
ln -sf "$src" "$dest"
|
||||
log_success "#${num} ${name} → $dest"
|
||||
else
|
||||
log_warn "#${num} ${name}: no desktop/ directory"
|
||||
fi
|
||||
done
|
||||
|
||||
# Symlink shared references
|
||||
ln -sf "$SHARED_DIR/references" "$skills_target/dintel-references"
|
||||
log_success "Shared references → $skills_target/dintel-references"
|
||||
|
||||
# Create an index file
|
||||
cat > "$skills_target/dintel-index.md" <<EOF
|
||||
# D.intelligence Agent Corps — Claude Desktop Skills
|
||||
|
||||
Installed by \`dintel-shared/install.sh v${VERSION}\`.
|
||||
Source: \`${SKILLS_ROOT}\`
|
||||
|
||||
## Available Skills
|
||||
|
||||
| # | Skill | Description |
|
||||
|---|-------|-------------|
|
||||
EOF
|
||||
|
||||
for entry in "${SKILLS[@]}"; do
|
||||
IFS='|' read -r num name desc <<< "$entry"
|
||||
echo "| ${num} | ${name} | ${desc} |" >> "$skills_target/INDEX.md"
|
||||
done
|
||||
|
||||
cat >> "$skills_target/INDEX.md" <<EOF
|
||||
|
||||
## Usage in Claude Desktop
|
||||
|
||||
Add skill files as Project Knowledge when creating a new Claude Desktop project:
|
||||
1. Open Claude Desktop → Settings → Projects
|
||||
2. Create or open a D.intelligence project
|
||||
3. Skills are auto-discovered from \`~/.claude/skills/dintel-*/SKILL.md\`
|
||||
|
||||
## Shared References
|
||||
|
||||
\`dintel-references/\` contains:
|
||||
- \`dintelligence_brand_guide.md\` — Writing style guide
|
||||
- \`design-system-2025.md\` — Visual identity system
|
||||
- \`pricing-reference.md\` — Service pricing tables
|
||||
- \`notion-schema-reference.md\` — Notion database schemas
|
||||
EOF
|
||||
|
||||
log_success "Skill index created at $skills_target/INDEX.md"
|
||||
echo ""
|
||||
log_info "To use skills in Claude Desktop:"
|
||||
log_info " 1. Open Claude Desktop → Projects"
|
||||
log_info " 2. Skills are auto-registered as slash commands in Claude Code"
|
||||
}
|
||||
|
||||
# ── Uninstall ────────────────────────────────────────────────────
|
||||
|
||||
uninstall() {
|
||||
log_step "Uninstalling D.intelligence Agent Corps"
|
||||
|
||||
local skills_target="$HOME/.claude/skills"
|
||||
local venv_dir="$SHARED_DIR/.venv"
|
||||
|
||||
if $DRY_RUN; then
|
||||
log_info "[DRY-RUN] Would remove: $skills_target"
|
||||
log_info "[DRY-RUN] Would remove: $venv_dir"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ -d "$skills_target" ]]; then
|
||||
rm -rf "$skills_target"
|
||||
log_success "Removed $skills_target"
|
||||
else
|
||||
log_info "No Desktop skills installed"
|
||||
fi
|
||||
|
||||
if [[ -d "$venv_dir" ]]; then
|
||||
rm -rf "$venv_dir"
|
||||
log_success "Removed Python venv at $venv_dir"
|
||||
else
|
||||
log_info "No Python venv found"
|
||||
fi
|
||||
|
||||
# Check for .claude-agents symlinks
|
||||
# Don't auto-remove — user may have customized
|
||||
if [[ -d ".claude-agents" ]]; then
|
||||
log_warn "Found .claude-agents/ in current directory — remove manually if desired"
|
||||
fi
|
||||
|
||||
log_success "Uninstall complete"
|
||||
}
|
||||
|
||||
# ── Summary ──────────────────────────────────────────────────────
|
||||
|
||||
show_summary() {
|
||||
log_step "Installation Summary"
|
||||
|
||||
echo ""
|
||||
echo -e " ${BOLD}D.intelligence Agent Corps v${VERSION}${NC}"
|
||||
echo -e " ─────────────────────────────────────────"
|
||||
echo ""
|
||||
|
||||
if $INSTALL_CODE; then
|
||||
echo -e " ${GREEN}✓${NC} Claude Code skills installed"
|
||||
fi
|
||||
if $INSTALL_DESKTOP; then
|
||||
echo -e " ${GREEN}✓${NC} Claude Desktop skills installed"
|
||||
fi
|
||||
if [[ -n "$PYTHON_CMD" ]]; then
|
||||
echo -e " ${GREEN}✓${NC} Python environment ready (dintel package)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e " ${BOLD}Agents:${NC}"
|
||||
for entry in "${SKILLS[@]}"; do
|
||||
IFS='|' read -r num name desc <<< "$entry"
|
||||
echo -e " ${CYAN}#${num}${NC} ${name} — ${desc}"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo -e " ${BOLD}Shared Infrastructure:${NC}"
|
||||
echo -e " ${CYAN}dintel-shared/${NC}"
|
||||
echo " src/dintel/{brand,document,excel,notion}.py"
|
||||
echo " references/{brand_guide,pricing,notion_schema,design_system}"
|
||||
echo ""
|
||||
echo -e " ${BOLD}Source:${NC} ${SKILLS_ROOT}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# ── Main ─────────────────────────────────────────────────────────
|
||||
|
||||
main() {
|
||||
parse_args "$@"
|
||||
|
||||
echo ""
|
||||
echo -e "${BOLD}╔══════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${BOLD}║ D.intelligence Agent Corps — Skill Installer ║${NC}"
|
||||
echo -e "${BOLD}║ v${VERSION} • 9 Agents + Shared Infrastructure ║${NC}"
|
||||
echo -e "${BOLD}╚══════════════════════════════════════════════════════════╝${NC}"
|
||||
|
||||
if $DRY_RUN; then
|
||||
echo -e "\n ${YELLOW}── DRY RUN MODE — No changes will be made ──${NC}\n"
|
||||
fi
|
||||
|
||||
# Pre-flight
|
||||
preflight
|
||||
|
||||
if $UNINSTALL; then
|
||||
uninstall
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Interactive selection if no flags
|
||||
interactive_prompt
|
||||
|
||||
# Install steps
|
||||
install_python_env
|
||||
install_code_skills
|
||||
install_desktop_skills
|
||||
|
||||
# Summary
|
||||
if ! $DRY_RUN; then
|
||||
show_summary
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
33
custom-skills/dintel-shared/pyproject.toml
Normal file
33
custom-skills/dintel-shared/pyproject.toml
Normal file
@@ -0,0 +1,33 @@
|
||||
[project]
|
||||
name = "dintel"
|
||||
version = "0.1.0"
|
||||
description = "D.intelligence Agent Corps — shared Python utilities"
|
||||
requires-python = ">=3.12"
|
||||
license = "MIT"
|
||||
authors = [
|
||||
{ name = "Andrew Yim", email = "andrew.yim@dintelligence.co.kr" },
|
||||
]
|
||||
dependencies = [
|
||||
"python-docx>=1.1.0",
|
||||
"python-pptx>=0.6.23",
|
||||
"openpyxl>=3.1.2",
|
||||
"fpdf2>=2.7.9",
|
||||
"Pillow>=10.3.0",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"pytest>=8.0",
|
||||
"ruff>=0.4",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools>=68.0", "wheel"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["src"]
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 100
|
||||
target-version = "py312"
|
||||
169
custom-skills/dintel-shared/references/design-system-2025.md
Normal file
169
custom-skills/dintel-shared/references/design-system-2025.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# D.intelligence Design System 2025
|
||||
|
||||
> **Source**: `D.intelligence_Design_System_2025.pdf`
|
||||
> **Updated**: 2025 Edition (2022 → 2025 migration)
|
||||
|
||||
---
|
||||
|
||||
## 1. Logo & Logomark
|
||||
|
||||
### Primary Logo
|
||||
Pentagon/arrow logomark with "think forward" + wordmark.
|
||||
|
||||
### Clear Space
|
||||
Minimum clear space = height of the "D." element on all sides.
|
||||
|
||||
### Logo Variants
|
||||
| Variant | File | Usage |
|
||||
|---------|------|-------|
|
||||
| Horizontal | `D.intelligence_logo_horizontal.svg/.png` | Standard use |
|
||||
| Horizontal White | `D.intelligence_logo_horizontal_white.png` | Dark backgrounds |
|
||||
| Vertical | `D.intelligence_logo_vertical.png` | Narrow spaces |
|
||||
| Vertical White | `D.intelligence_logo_vertical_white.svg/.png` | Dark BG narrow |
|
||||
| Wordtype | `D.intelligence_logo_wordtype.svg/.png` | Text-only contexts |
|
||||
| Wordtype White | `D.intelligence_logo_wordtype_white.png` | Dark BG text-only |
|
||||
| Square | `D.intelligence_logo_square.png` | Social/profile images |
|
||||
| Motto | `D.intelligence_logo_motto.svg/.png` | With tagline |
|
||||
| Motto White | `D.intelligence_logo_motto_white.svg/.png` | Dark BG with tagline |
|
||||
|
||||
### Logo Files Location
|
||||
`Source Files/디자인 가이드/` and `Source Files/로고/`
|
||||
|
||||
---
|
||||
|
||||
## 2. Color System
|
||||
|
||||
### Primary Palette
|
||||
|
||||
| Name | Hex | RGB | Usage |
|
||||
|------|-----|-----|-------|
|
||||
| **D Beige** | `#E5E1D2` | R229 G225 B210 | **NEW — Primary BG** (cover, section dividers) |
|
||||
| **D Olive** | `#CEDC00` | R206 G220 B0 | **Accent only** (circles, highlights, Venn overlaps) |
|
||||
| **D Brown** | `#231815` | R35 G24 B21 | **Primary text** / Dark BG |
|
||||
| **D Black** | `#000000` | R0 G0 B0 | Dark BG / Text |
|
||||
|
||||
### Secondary Palette
|
||||
|
||||
| Name | Hex | RGB | Usage |
|
||||
|------|-----|-----|-------|
|
||||
| **D Gray** | `#727171` | R114 G113 B113 | Secondary text, subtitles, captions |
|
||||
| **D Light Gray** | `#F2F2F2` | R242 G242 B242 | Card / BG |
|
||||
| **D Blue** | `#0075C0` | R0 G117 B192 | **Digital accent only** — diagrams, data visualizations |
|
||||
| **D Border** | `#BFBFBF` | R191 G191 B191 | Border 0.5pt |
|
||||
| **Warm Gray** | `#C8C4B8` | R200 G196 B184 | Header bar, vertical line accent |
|
||||
|
||||
### Color Usage Rules
|
||||
|
||||
| Element | Color |
|
||||
|---------|-------|
|
||||
| Cover & Section Divider BG | D Beige `#E5E1D2` |
|
||||
| Content Slide BG | White `#FFFFFF` |
|
||||
| Closing / Dark slides | D Brown `#231815` |
|
||||
| D Olive `#CEDC00` | **Accent only** — circles, highlights, Venn overlaps |
|
||||
| D Blue `#0075C0` | **Digital/web accent only** — diagrams, data viz |
|
||||
| Borders | 0.5pt, D Border `#BFBFBF` |
|
||||
| Text (primary) | D Brown `#231815` or D Black `#000000` |
|
||||
| Text (secondary) | D Gray `#727171` |
|
||||
|
||||
### 2022 → 2025 Key Change
|
||||
**D Olive (#CEDC00) demoted from dominant background color to accent-only.** New warm D Beige (#E5E1D2) conveys a more mature, consultancy-grade aesthetic.
|
||||
|
||||
---
|
||||
|
||||
## 3. Typography
|
||||
|
||||
### Font Families
|
||||
|
||||
| Language | Font | Weights |
|
||||
|----------|------|---------|
|
||||
| **Korean** | Apple SD Gothic Neo | Regular, Bold, ExtraBold, Heavy, Light, Medium |
|
||||
| **English** | DM Sans | Regular, Medium, Bold (+Italic variants) |
|
||||
|
||||
### Type Scale
|
||||
|
||||
| Element | Size | Weight | Color |
|
||||
|---------|------|--------|-------|
|
||||
| Display Title (Section Divider) | 54-72pt | Bold / Black | D Brown `#231815` |
|
||||
| Slide Title | 28-36pt | Bold | D Brown `#231815` |
|
||||
| Subtitle / Caption | 14-16pt | Regular | D Gray `#727171` |
|
||||
| Body Text | 11-14pt | Regular | D Brown `#231815` |
|
||||
| Footnote / Page Info | 8-10pt | Regular | D Gray `#727171` |
|
||||
| Header Bar (Top-left) | 10pt | Regular | Warm Gray `#C8C4B8` |
|
||||
|
||||
---
|
||||
|
||||
## 4. Layout Motifs & Grid
|
||||
|
||||
### Three Visual Signatures
|
||||
|
||||
| Motif | Description | Usage |
|
||||
|-------|-------------|-------|
|
||||
| **Vertical Line Accent** | Thin vertical line (`#C8C4B8`) on left side of section dividers | Height varies with title |
|
||||
| **Three-Dot Motif** | `• • •` in upper-right corner | Cover and featured content slides |
|
||||
| **Footer Convention** | "Analysis, Treatment & Growth" + page number | Bottom of all content slides |
|
||||
|
||||
### Spacing & Margins
|
||||
- Minimum margins: **0.5 inches** on all sides
|
||||
- Generous whitespace maintained throughout
|
||||
- Left-alignment for body text
|
||||
|
||||
---
|
||||
|
||||
## 5. Slide Templates
|
||||
|
||||
### Cover Slide
|
||||
- D Beige background
|
||||
- Three-dot motif (• • •) upper-right
|
||||
- "D.intelligence" logo
|
||||
- Title area
|
||||
- "- Analysis, Treatment & Growth -" subtitle
|
||||
|
||||
### Section Divider
|
||||
- D Beige background
|
||||
- Vertical line accent (left)
|
||||
- Large display title (54-72pt, Bold)
|
||||
- "DATA INTELLIGENCE" or section keyword
|
||||
|
||||
### Content Slide
|
||||
- White background
|
||||
- Slide title (28-36pt, Bold, D Brown)
|
||||
- Body text area (11-14pt)
|
||||
- Visual/chart placeholder
|
||||
- Footer: "Analysis, Treatment & Growth" + page number
|
||||
|
||||
### Closing Slide
|
||||
- D Brown `#231815` background (dark)
|
||||
- "Thank You" / "Think Forward"
|
||||
- Company info footer
|
||||
|
||||
---
|
||||
|
||||
## 6. Do's & Don'ts
|
||||
|
||||
### DO
|
||||
- Use D Beige for cover and section dividers
|
||||
- Maintain vertical line accent on section slides
|
||||
- Keep body text 11-14pt for readability
|
||||
- Use D Brown (#231815) as primary text colour
|
||||
- Include "Analysis, Treatment & Growth" footer
|
||||
- Use D Olive sparingly as accent only
|
||||
- Maintain generous whitespace (0.5" margins min)
|
||||
|
||||
### DON'T
|
||||
- Use D Olive as full slide background (2022 style)
|
||||
- Mix D Blue and D Olive as equal-weight colours
|
||||
- Use text smaller than 8pt anywhere
|
||||
- Place logo on every content slide
|
||||
- Use gradients or drop shadows on text
|
||||
- Stretch or distort the logomark
|
||||
- Use colours outside the defined palette
|
||||
|
||||
---
|
||||
|
||||
## Company Info (Footer)
|
||||
|
||||
```
|
||||
(주)디인텔리전스
|
||||
경기도 성남시 수정구 창업로 43 판교글로벌비즈센터 업무동 1층 36호 | 13449
|
||||
T. 82. 70. 5118. 5582 | W. https://dintelligence.co.kr | E. info@dintelligence.co.kr
|
||||
```
|
||||
@@ -0,0 +1,439 @@
|
||||
# D.intelligence 브랜드 한국어 라이팅 스타일 가이드
|
||||
|
||||
> Source: [Notion — D.intelligence Brand Guide](https://www.notion.so/dintelligence/Review-D-intelligence-Brand-Guide-31c581e58a1e805eb980cf01ccc9a8d4)
|
||||
|
||||
---
|
||||
|
||||
## Mission & Vision
|
||||
|
||||
- **Mission**: 데이터 기반 의사결정으로 기업의 지속가능한 성장을 실현하는 Marketing Intelligence 파트너
|
||||
- **Vision**: AI 기반 마케팅 인텔리전스 서비스 플랫폼
|
||||
|
||||
## Brand Definition (최종안)
|
||||
|
||||
> D.intelligence는 디지털 마케팅과 데이터 분석의 경계를 허물고, 고객의 지속가능한 성장을 이끄는 **Marketing Intelligence 파트너**이다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 브랜드 개요
|
||||
|
||||
D.intelligence는 데이터 인텔리전스 기반의 마케팅 전략 진단 및 컨설팅 서비스를 제공하는 브랜드이다.
|
||||
**"SMART Marketing Clinic"**이라는 콘셉트 아래 데이터 분석, 진단, 교육 서비스를 운영하며, 전문성과 신뢰감을 핵심 브랜드 가치로 전달한다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 톤 & 보이스 (Tone & Voice)
|
||||
|
||||
### 2.1 전체 톤
|
||||
|
||||
| 항목 | 특성 | 설명 |
|
||||
|------|------|------|
|
||||
| 전문성 | ★★★★★ | 업계 전문 용어와 기술적 표현을 적극 활용 |
|
||||
| 격식 | ★★★★☆ | 존칭체와 간결한 서술체를 문맥에 따라 혼용 |
|
||||
| 권위감 | ★★★★☆ | 데이터와 논리에 기반한 단정적 서술 |
|
||||
| 친근감 | ★★☆☆☆ | 감정적, 구어적 표현은 최소화 |
|
||||
| 실용성 | ★★★★★ | 구체적 사례, 실천 과제 중심의 서술 |
|
||||
|
||||
### 2.2 문체 유형별 톤 구분
|
||||
|
||||
#### (1) 서비스 소개 및 회사 소개 페이지 — ~합니다 존칭 서술체
|
||||
|
||||
예시: "D.intelligence는 데이터 기반의 사용자 경험 여정 진단을 통해 디지털 광고, 콘텐츠 마케팅, 검색 최적화, 웹 & 앱 최적화 서비스를 제공하며, 이를 통해 비즈니스 성과 중심의 마케팅 솔루션을 함께하는 성장 파트너입니다."
|
||||
|
||||
#### (2) Magazine D. (블로그/아티클) — ~다 간결 서술체
|
||||
|
||||
예시: "디지털 마케팅 전략의 핵심은, 데이터를 기반으로 한 의사 결정 과정에 있다."
|
||||
예시: "이런 세분화된 접근 방식은 마케팅 메시지의 관련성을 높이고, 전환율을 증가시키는 데 중요한 역할을 한다."
|
||||
|
||||
#### (3) 교육/워크숍 페이지 — ~합니다/~세요 안내체 혼용
|
||||
|
||||
예시: "한 주에 하나씩 업무에 바로쓰는 마케팅 애널리틱스 완전정복"
|
||||
예시: "레슨은 진행 과정과 상관없이 관심 주제별로 언제든 참여하실 수 있습니다."
|
||||
|
||||
#### (4) 상담문의 페이지 — ~주시면/~드리겠습니다 정중한 요청체
|
||||
|
||||
예시: "기대 사항 등을 남겨주시면, 최선을 다해 구체적이고 명료한 검토의견을 드리도록하겠습니다."
|
||||
|
||||
---
|
||||
|
||||
## 3. 문장 구조 및 문법 규칙
|
||||
|
||||
### 3.1 문장 길이
|
||||
|
||||
- 평균 40~80자 내외의 중장문 위주
|
||||
- 쉼표(,)로 절을 구분하여 가독성 유지
|
||||
- 논리적 흐름을 갖춘 복문 구조 선호
|
||||
- 지나치게 짧은 문장은 지양
|
||||
|
||||
예시 (복문 구조): "특정 행동을 보인 사용자 그룹에게만 타겟팅하여 광고를 전달함으로써, 광고 비용 대비 효율을 크게 높일 수 있다."
|
||||
|
||||
### 3.2 접속 표현 패턴
|
||||
|
||||
| 표현 | 용도 | 빈도 |
|
||||
|------|------|------|
|
||||
| ~을 통해 | 수단, 방법 제시 | ★★★★★ |
|
||||
| ~함으로써 | 결과, 효과 연결 | ★★★★☆ |
|
||||
| ~에 기여한다 | 성과 강조 | ★★★★☆ |
|
||||
| ~하는 데 있다 | 핵심 포인트 강조 | ★★★★☆ |
|
||||
| ~의 관점에서 | 시각 제시 | ★★★☆☆ |
|
||||
| 이를 통해 | 앞 내용과 연결 | ★★★★★ |
|
||||
| 따라서 | 논리적 귀결 | ★★★★☆ |
|
||||
| 결론적으로 | 마무리 요약 | ★★★☆☆ |
|
||||
|
||||
### 3.3 문장 종결 패턴
|
||||
|
||||
**Magazine D. 아티클 종결:**
|
||||
~다 / ~한다 / ~할 수 있다 / ~에 기여한다 / ~역할을 한다 / ~중요하다 / ~필요하다
|
||||
|
||||
예시: "이는 광고 캠페인의 효과를 최적화하고 불필요한 광고 지출을 줄이는 데 도움이 된다."
|
||||
|
||||
**서비스 및 회사 소개 종결:**
|
||||
~입니다 / ~파트너입니다 / ~서비스입니다 / ~돕는 ...입니다 / ~드리겠습니다
|
||||
|
||||
예시: "D.intelligence는 생산적인 데이터 활용을 위한 개인 역량과 조직 문화 차원의 데이터 리터러시 증진을 돕는 엑셀러레이터입니다."
|
||||
|
||||
---
|
||||
|
||||
## 4. 어휘 및 용어 사용 규칙
|
||||
|
||||
### 4.1 외래어 및 영문 용어 병기 원칙
|
||||
|
||||
한글과 영문을 적극적으로 병기하는 것이 브랜드의 핵심 특징이다.
|
||||
|
||||
**규칙 1: 업계 표준 용어는 영문 그대로 사용**
|
||||
|
||||
| 사용 | 지양 |
|
||||
|------|------|
|
||||
| Google Analytics 4 | 구글 분석 도구 4 |
|
||||
| KPI | 핵심 성과 지표(만 단독 사용) |
|
||||
| SEO | 검색 엔진 최적화(만 단독 사용) |
|
||||
| ROI | 투자 수익률(만 단독 사용) |
|
||||
| Technical SEO | 기술적 검색 최적화 |
|
||||
|
||||
**규칙 2: 첫 등장 시 한글(영문) 또는 영문(한글) 형태로 병기**
|
||||
|
||||
예시: "핵심 성과 지표(KPI) 설정"
|
||||
예시: "프로덕트 애널리틱스 Product Analytics"
|
||||
예시: "사용자 행동 속성(Behaviors)과 사용자 정보(Demographics)"
|
||||
|
||||
**규칙 3: 제품명 및 서비스명은 원어 그대로 표기**
|
||||
|
||||
예시: Mixpanel, Google Analytics 4, Meta ADs, Looker Studio
|
||||
|
||||
### 4.2 브랜드 고유 핵심 용어 사전
|
||||
|
||||
| 용어 | 설명 | 사용 맥락 |
|
||||
|------|------|----------|
|
||||
| SMART Marketing Clinic | 브랜드 핵심 콘셉트 | 서비스 총칭 |
|
||||
| 데이터 인텔리전스 | 데이터 기반 마케팅 분석 | 브랜드 정체성 |
|
||||
| Data Intelligence Counselor | 전문 역할 명칭 | About 페이지 |
|
||||
| Marketing Data Translator | 데이터 통역사 | About 페이지 |
|
||||
| Data Literacy Enabler | 데이터 리터러시 촉진자 | About 페이지 |
|
||||
| 검토의견 | 컨설팅 결과 전달물 | 상담문의 |
|
||||
| 성장 파트너 | 고객과의 관계 정의 | 서비스 설명 |
|
||||
| 데이터 기반 의사 결정 | 핵심 가치 | 전 페이지 공통 |
|
||||
| 마케팅 인텔리전스 | 마케팅 분석 총칭 | 서비스 설명 |
|
||||
| 사용자 경험 여정 | 고객 여정 분석 | 서비스 설명 |
|
||||
|
||||
### 4.3 한자어 전문 어휘 사용 경향
|
||||
|
||||
브랜드는 한자어 기반의 격식 있는 전문 어휘를 선호한다.
|
||||
|
||||
| 선호 표현 | 비선호 표현 |
|
||||
|----------|----------|
|
||||
| 극대화 | 최대한 늘리기 |
|
||||
| 세분화 | 나누기, 쪼개기 |
|
||||
| 도출 | 끌어내기 |
|
||||
| 수립 | 세우기 |
|
||||
| 진단 | 살펴보기 |
|
||||
| 구축 | 만들기 |
|
||||
| 증진 | 높이기 |
|
||||
| 배분 | 나누기 |
|
||||
| 활용 | 쓰기 |
|
||||
| 준수 | 지키기 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 구두점 및 표기법
|
||||
|
||||
### 5.1 쉼표(,)
|
||||
문장 내 절 구분과 항목 나열 시 적극 활용한다.
|
||||
예시: "디지털 광고, 콘텐츠 마케팅, 검색 최적화, 웹 & 앱 최적화 서비스를 제공하며"
|
||||
|
||||
### 5.2 마침표(.)
|
||||
모든 서술 문장은 마침표로 종결한다. 제목과 헤딩에는 생략한다.
|
||||
|
||||
### 5.3 파이프(|) 기호
|
||||
유사한 개념을 병렬 표기할 때 사용한다.
|
||||
예시: "문의 | 상담 요청 사항"
|
||||
예시: "디지털 애널리틱스 진단 | 설정 문의"
|
||||
|
||||
### 5.4 괄호
|
||||
영문 용어 병기 또는 보충 설명 시 소괄호를 사용한다.
|
||||
예시: "핵심 성과 지표(KPI)"
|
||||
예시: "기기 기반 식별자(Device ID)"
|
||||
|
||||
### 5.5 대괄호([])
|
||||
Magazine D. 기사 제목에서 카테고리 태그로 사용한다.
|
||||
예시: "[Google Analytics 4] 잠재고객, 무엇이고 왜 설정해야 할까?"
|
||||
예시: "[Meta ADs] 광고예산을 효율적으로 결정하는 방법"
|
||||
|
||||
### 5.6 작은따옴표
|
||||
강조하고자 하는 핵심 단어에 사용한다.
|
||||
예시: "'필수 요소'다"
|
||||
|
||||
---
|
||||
|
||||
## 6. 콘텐츠 구조 패턴
|
||||
|
||||
### 6.1 서비스 소개 페이지 구조
|
||||
|
||||
[영문 서비스명 (헤딩)]
|
||||
[한국어 서비스 부제 또는 설명 한 줄]
|
||||
[상세 설명 문단 — 무엇을, 왜, 어떻게의 순서]
|
||||
|
||||
예시:
|
||||
- H3: SMART Measurement & Audit
|
||||
- P: 디지털 마케팅 성과를 극대화하기 위한 핵심 성과 지표(KPI) 설정, 성과 측정 계획 수립, 채널 퍼포먼스 리포팅...데이터 기반 의사 결정을 지원하는 진단, 컨설팅 서비스
|
||||
|
||||
### 6.2 Magazine D. 아티클 구조
|
||||
|
||||
[대괄호 카테고리] 제목 — 질문형 또는 화제 제시형
|
||||
도입: 주제의 배경 및 중요성 서술
|
||||
본론 1: 핵심 개념 설명 (첫째, 둘째 등 순서 표현)
|
||||
본론 2: 구체적 사례 및 활용법 제시
|
||||
결론: '결론적으로' 시작, 핵심 메시지 요약
|
||||
참고 링크: [출처명] 제목 형식
|
||||
|
||||
### 6.3 제목(헤딩) 작성 규칙
|
||||
|
||||
**아티클 제목 패턴:**
|
||||
- 질문형: "~무엇이고 왜 설정해야 할까?"
|
||||
- 방법 제시형: "~효율적으로 결정하는 방법"
|
||||
- 주의점 제시형: "~어떻게 사용해야 할까? 사용 시 주의점은?"
|
||||
|
||||
**서비스 헤딩 패턴:**
|
||||
- 영문 헤딩 + 한국어 부제 조합
|
||||
|
||||
**교육 헤딩 패턴:**
|
||||
- 캐치프레이즈 + 부제 조합
|
||||
- 예시: "마케터를 위한 애널리틱스 트리트먼트 하루에 한 가지!"
|
||||
- 예시: "1 Insight per Day"
|
||||
|
||||
---
|
||||
|
||||
## 7. 자주 사용하는 표현 및 구문 패턴
|
||||
|
||||
### 7.1 가치 제안 구문
|
||||
|
||||
| 패턴 | 예시 |
|
||||
|------|------|
|
||||
| ~을 통해 ~을 돕는 [역할]입니다 | "성장을 돕는 SMART Marketing Clinic입니다" |
|
||||
| ~을 위한 ~을 지원하는 서비스 | "데이터 기반 의사 결정을 지원하는 진단, 컨설팅 서비스" |
|
||||
| ~의 효율성을 극대화하고 | "마케팅 캠페인의 효율성을 극대화하고" |
|
||||
| ~에 크게 기여한다 | "효과적으로 배분하는 데 크게 기여한다" |
|
||||
|
||||
### 7.2 논리 전개 구문
|
||||
|
||||
| 패턴 | 예시 |
|
||||
|------|------|
|
||||
| 첫째. / 둘째. | "첫째. 잠재고객 설정을 통해..." |
|
||||
| ~라고 가정해보자 | "제품을 구매하지 않은 사용자가 있다고 가정해보자" |
|
||||
| 결론적으로, | "결론적으로, GA4에서 잠재고객 설정은..." |
|
||||
| 예를 들어, | "예를 들어, 가격이 높아 관여도 역시 높은..." |
|
||||
| 이런 관점에서 | "이런 관점에서, GA4 잠재고객 설정은..." |
|
||||
|
||||
### 7.3 나열 구문
|
||||
|
||||
명사구 나열 시 쉼표 구분 후 마지막에 동사구로 마무리한다.
|
||||
|
||||
예시: "핵심 성과 지표(KPI) 설정, 성과 측정 계획 수립, 채널 퍼포먼스 리포팅, 사용자 경험 모델링, 성과 관리 체계 디자인까지"
|
||||
|
||||
---
|
||||
|
||||
## 8. 피해야 할 표현
|
||||
|
||||
| 피해야 할 표현 | 대신 사용할 표현 | 이유 |
|
||||
|-------------|-------------|------|
|
||||
| ~해요 / ~이에요 | ~합니다 / ~입니다 | 구어체 지양 |
|
||||
| 엄청 / 진짜 / 너무 | 매우 / 크게 / 상당히 | 격식 유지 |
|
||||
| 쉽게 말하면 | 구체적으로 | 전문성 유지 |
|
||||
| 꿀팁 / 꿀정보 | 핵심 포인트 / 주요 사항 | 브랜드 격식 유지 |
|
||||
| ㅎㅎ / ㅋㅋ / 이모지 | (사용하지 않음) | 전문 브랜드 톤 |
|
||||
| ~거든요 / ~잖아요 | ~이기 때문이다 / ~이므로 | 논리적 서술체 유지 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 참고 링크 표기법
|
||||
|
||||
Magazine D. 아티클 하단 참고 자료 표기 형식:
|
||||
|
||||
참고 링크
|
||||
[출처명] 제목 또는 설명
|
||||
|
||||
예시:
|
||||
- [Meta Business] 어드밴티지+ 타겟 정보
|
||||
- [Jon Loomer] How Advantage+ Audience Works
|
||||
- [madgicx] The Advantages and Disadvantages of Meta Advantage+ Tools
|
||||
|
||||
---
|
||||
|
||||
## 10. 웹 카피라이팅 세트 (Web Copywriting Set)
|
||||
|
||||
### 10.1 브랜드 슬로건 및 태그라인
|
||||
|
||||
| 구분 | 카피 | 사용 위치 |
|
||||
|------|------|----------|
|
||||
| 브랜드 슬로건 | Think Forward | 홈페이지 히어로 섹션 |
|
||||
| 브랜드 키워드 | Context, Content, Connection | 홈페이지 가치 제안 |
|
||||
| 서비스 태그라인 | Analysis, Treatment & Growth | 홈페이지 서비스 소개 상단 |
|
||||
| 서비스 서브 태그라인 | Data Intelligence Audit, Digital Analytics Consulting & Data Storytelling | SMART Marketing Clinic 섹션 |
|
||||
|
||||
### 10.2 역할 타이틀 (Role Titles)
|
||||
|
||||
| 타이틀 | 한국어 설명 | 사용 위치 |
|
||||
|--------|----------|----------|
|
||||
| Data Intelligence Counselor | 데이터 인텔리전스 기반 진단 파트너 | 홈페이지, About |
|
||||
| Marketing Data Translator | 마케팅-데이터-IT 간 데이터 통역사 | 홈페이지, About |
|
||||
| Data Literacy Enabler | 데이터 리터러시 증진 엑셀러레이터 | 홈페이지, About |
|
||||
| D.Mentor | Magazine D. 필진 프로필 명칭 | Magazine D. |
|
||||
| Data Analytics Consultant | 필진 직책 표기 | Magazine D. |
|
||||
| Data Analyst & Marketing Intelligence Advisor | 필진 전문분야 표기 | Magazine D. |
|
||||
|
||||
### 10.3 서비스명 (Service Titles)
|
||||
|
||||
모든 서비스명은 영문으로 작성하며, 아래에 한국어 설명을 부제로 배치한다.
|
||||
|
||||
| 서비스명 (영문) | 한국어 부제 |
|
||||
|-------------|----------|
|
||||
| SMART Measurement & Audit | KPI 설정, 성과 측정 계획 수립, 성과 관리 체계 디자인 |
|
||||
| Marketing Intelligence Audit | 디지털 마케팅 채널 성과 진단, 사용자 여정 분석 |
|
||||
| Data Analytics Consulting | 디지털 애널리틱스 진단, 설정, 최적화 컨설팅 |
|
||||
| Performance Dashboard Design | 퍼포먼스 대시보드 설계, 구축, 자동화 |
|
||||
| Data Storytelling Design | 데이터 시각화, 인터랙티브 프레젠테이션 디자인 |
|
||||
| Data Literacy Training | 데이터 리터러시 교육, 워크숍 운영 |
|
||||
|
||||
### 10.4 교육 프로그램명 및 캐치프레이즈
|
||||
|
||||
| 프로그램명 | 캐치프레이즈 |
|
||||
|----------|----------|
|
||||
| GA4 코어 트레이닝 캠프 | (별도 캐치프레이즈 없음) |
|
||||
| 마케팅 애널리틱스 1Day 챌린지 | 1 Insight per Day |
|
||||
| | 마케터를 위한 애널리틱스 트리트먼트 하루에 한 가지! |
|
||||
| | Google Analytics 4 기본부터 고급 활용 테크닉 완전 정복! |
|
||||
|
||||
**교육 페이지 라벨:**
|
||||
|
||||
| 영문 라벨 | 사용 위치 |
|
||||
|---------|----------|
|
||||
| 1 DAY TREATMENT | 교육 단위 설명 |
|
||||
| 3 STEP APPROACH | 학습 방법론 |
|
||||
| 8 WEEKS PER ANALYTICS | 교육 기간 안내 |
|
||||
| Course Content | 커리큘럼 섹션 제목 |
|
||||
| NOT ENROLLED | 수강 상태 표시 |
|
||||
| Get Started | CTA 버튼 |
|
||||
| Take this Course | CTA 버튼 |
|
||||
|
||||
### 10.5 섹션 라벨 (Section Labels)
|
||||
|
||||
| 라벨 | 사용 위치 | 역할 |
|
||||
|------|----------|------|
|
||||
| ABOUT D.INTELLIGENCE | 홈페이지 상단 | 브랜드 소개 섹션 식별자 |
|
||||
| WHAT WE DO | 홈페이지 서비스 섹션 | 서비스 소개 섹션 식별자 |
|
||||
| Fact Sheet | About 페이지 | 회사 기본 정보 섹션 |
|
||||
| Location | About 페이지 | 위치 안내 섹션 |
|
||||
| D.intelligence Sector Magazine | Magazine D. 페이지 | 매거진 섹션 식별자 |
|
||||
| Current Status | 교육 페이지 | 수강 상태 섹션 |
|
||||
| Price | 교육 페이지 | 가격 정보 섹션 |
|
||||
|
||||
### 10.6 네비게이션 메뉴명
|
||||
|
||||
| 메뉴명 | 언어 | 비고 |
|
||||
|--------|------|------|
|
||||
| About | 영문 | 회사 소개 |
|
||||
| SMART Marketing Clinic | 영문 | 서비스 소개 |
|
||||
| Data Intelligence Workshop | 영문 | 교육 프로그램 |
|
||||
| Magazine D. | 영문 | 블로그/매거진 |
|
||||
| 상담문의 | 한국어 | CTA 버튼 (강조색 배경) |
|
||||
|
||||
### 10.7 Magazine D. 기사 제목 카테고리 태그
|
||||
|
||||
| 태그 | 사용 예시 |
|
||||
|------|----------|
|
||||
| [Google Analytics 4] | [Google Analytics 4] 잠재고객, 무엇이고 왜 설정해야 할까? |
|
||||
| [Meta ADs] | [Meta ADs] 어드밴티지+ 타겟, 어떻게 사용해야 할까? |
|
||||
| [Mixpanel] | Mixpanel 소개 및 기본 기능: Google Analytics 4과 비교하여 |
|
||||
|
||||
### 10.8 웹 카피라이팅 작성 규칙
|
||||
|
||||
**규칙 1: 영문-한국어 이중 구조 (Bilingual Layering)**
|
||||
브랜드의 웹 카피는 영문 타이틀 + 한국어 설명의 이중 구조를 기본으로 한다.
|
||||
|
||||
예시:
|
||||
- 영문: "Data Storytelling Design"
|
||||
- 한국어: "발견된 데이터 인사이트를 목표 청중에게 효과적으로 전달하여, 공통의 문제의식과 실천의 방향을 제시하는 데이터 시각화, 인터랙티브 프레젠테이션 디자인"
|
||||
|
||||
**규칙 2: 영문 타이틀 스타일**
|
||||
- Title Case 사용 (각 단어의 첫 글자 대문자)
|
||||
- 관사(a, an, the)와 전치사는 소문자 유지
|
||||
- 앰퍼샌드(&) 사용 (and 대신)
|
||||
- 간결한 명사구 중심 (3~5단어)
|
||||
|
||||
올바른 예시: Analysis, Treatment & Growth / SMART Measurement & Audit
|
||||
|
||||
**규칙 3: 섹션 라벨 스타일**
|
||||
- ALL CAPS (전체 대문자) 사용
|
||||
- 간결한 명사구 (1~3단어)
|
||||
|
||||
올바른 예시: ABOUT D.INTELLIGENCE / WHAT WE DO
|
||||
|
||||
**규칙 4: 캐치프레이즈 스타일**
|
||||
- 짧고 임팩트 있는 구문
|
||||
- 느낌표(!)로 종결하여 행동 유도
|
||||
- 영문과 한국어 혼용 가능
|
||||
|
||||
올바른 예시: "Think Forward" / "1 Insight per Day" / "마케터를 위한 애널리틱스 트리트먼트 하루에 한 가지!"
|
||||
|
||||
**규칙 5: CTA(Call to Action) 버튼 스타일**
|
||||
- 교육/워크숍 CTA는 영문 사용: "Get Started", "Take this Course"
|
||||
- 상담/문의 CTA는 한국어 사용: "상담문의", "문의하기"
|
||||
- CTA 버튼은 강조색(노란색/라임) 배경으로 시각적 차별화
|
||||
|
||||
**규칙 6: 푸터(Footer) 정보 표기**
|
||||
- 회사명: 영문 로고 "D.intelligence" 사용
|
||||
- 연락처, 주소 등 기본 정보는 한국어로 표기
|
||||
- 저작권 표기: 영문 형식 사용
|
||||
|
||||
### 10.9 웹 카피 톤 매트릭스
|
||||
|
||||
| 페이지 유형 | 영문 카피 톤 | 한국어 카피 톤 |
|
||||
|-----------|-----------|-------------|
|
||||
| 홈페이지 히어로 | 임팩트, 비전 제시 | 브랜드 가치 서술 |
|
||||
| 서비스 소개 | 전문적, 간결 | 상세 설명, 존칭체 |
|
||||
| 교육 프로그램 | 동기부여, 행동 유도 | 안내, 설명체 |
|
||||
| Magazine D. | 카테고리 태깅 | 논리적 서술체 |
|
||||
| About | 포지셔닝, 역할 정의 | 비전 서술, 존칭체 |
|
||||
| 상담문의 | (사용 안 함) | 정중한 요청체 |
|
||||
|
||||
---
|
||||
|
||||
## 11. 체크리스트: 브랜드 톤 적합성 검증
|
||||
|
||||
- [ ] 전문 용어는 영문 병기가 되어 있는가?
|
||||
- [ ] 문장이 논리적 흐름(배경, 설명, 사례, 결론)을 따르는가?
|
||||
- [ ] 구어체가 사용되지 않았는가?
|
||||
- [ ] 한자어 기반 격식 어휘를 사용했는가?
|
||||
- [ ] 서비스 페이지는 존칭체, 아티클은 서술체로 통일되었는가?
|
||||
- [ ] 쉼표로 적절히 절을 구분했는가?
|
||||
- [ ] 제목에 [카테고리] 태그가 포함되었는가? (Magazine D.)
|
||||
- [ ] 브랜드 특유의 접속 표현을 활용했는가?
|
||||
- [ ] 결론부에 결론적으로 로 시작하는 요약이 있는가? (아티클)
|
||||
- [ ] 감정적, 과장된 표현 없이 데이터와 논리에 기반한 서술인가?
|
||||
- [ ] 영문 타이틀은 Title Case로 작성되었는가?
|
||||
- [ ] 섹션 라벨은 ALL CAPS로 표기되었는가?
|
||||
- [ ] CTA 버튼이 적절한 언어(교육=영문, 문의=한국어)로 표기되었는가?
|
||||
- [ ] 영문-한국어 이중 구조가 올바르게 적용되었는가?
|
||||
|
||||
---
|
||||
|
||||
이 스타일 가이드는 [dintelligence.co.kr](http://dintelligence.co.kr/) 웹사이트의 전체 페이지 (About, SMART Marketing Clinic, Data Intelligence Workshop, Magazine D., 상담문의) 콘텐츠를 분석하여 작성되었습니다.
|
||||
@@ -0,0 +1,140 @@
|
||||
# D.intelligence Notion Database Schema Reference
|
||||
|
||||
> **Last verified**: 2026-03-08
|
||||
> **Update policy**: Check and update schema when writing to Notion tasks. Structure rarely changes.
|
||||
|
||||
---
|
||||
|
||||
## DB1: Client Service Tasks Dashboard
|
||||
|
||||
- **ID**: `2c0581e58a1e816d9948c3f3591c372c`
|
||||
- **Collection**: `collection://2c0581e5-8a1e-8178-aa9a-000b44537e0a`
|
||||
- **Purpose**: Unified task tracker across all clients
|
||||
|
||||
### Schema
|
||||
|
||||
| Property | Type | Options/Notes |
|
||||
|----------|------|---------------|
|
||||
| Task Name | title | |
|
||||
| Task Status | status | Not Started, Planning, In Progress, In Review, Waiting, Done, On Hold, Archived |
|
||||
| Client Code | select | JHR, JAM, SLA, SHR, OurDigital |
|
||||
| Client | relation | → Client DB (`collection://ac212daf-4eda-4a99-8c97-89699c846331`) |
|
||||
| Priority | select | A1, A2, A3, B1, B2, B3, C1, C2, C3 |
|
||||
| Service Line | select | SEO, Local SEO, Digital Ads, Content Marketing, Growth Package, AI Literacy, Data Literacy, Data Analytics, GTM/Tagging, Web Dev |
|
||||
| Category | multi_select | SEO, 데이터 분석, 광고, 콘텐츠, 웹사이트, 리포트, 회의, 리서치, 교육, 프롬프트, 프로젝트 관리, 기타 |
|
||||
| Type | select | Task, Audit, Report, Billing, Meeting, Project, Analysis, Research, Guide, Editorial, Ad Management |
|
||||
| Tags | multi_select | SEO, Looker Studio, WordPress, Google Analytics, Google Tag Manager, Way of Working, Workshop, D.intelligence Services, WPForms, Membership, Infra, Policy, Transaction, D.intel, R&D, Research |
|
||||
| Due Date | date | |
|
||||
| Start Date | date | |
|
||||
| Effort (hrs) | number | |
|
||||
| Billable | checkbox | |
|
||||
| Billing Month | date | |
|
||||
| Assignee | person | |
|
||||
| Notes | text | |
|
||||
| Source DB | select | JHR-Original, JAM-Original, SLA-Original, New |
|
||||
| URL | url | |
|
||||
| Daily Work Plans | relation | → `collection://2ef581e5-8a1e-80b9-81cb-000b121910d3` |
|
||||
| Google Drive File | relation | → `collection://2d0581e5-8a1e-8096-8577-000b5152a9f2` |
|
||||
| JHR Related Tasks | relation | → JHR DB |
|
||||
| JAM Related Tasks | relation | → JAM DB |
|
||||
| SLA Related Tasks | relation | → SLA DB |
|
||||
|
||||
---
|
||||
|
||||
## DB2: Client Reference Library
|
||||
|
||||
- **ID**: `f0508d67b26042c1a0c7f2283f87eab4`
|
||||
- **Collection**: `collection://b8ddab91-d3a7-4b84-86d7-35e46711598c`
|
||||
- **Purpose**: Knowledge base of client-related references
|
||||
|
||||
### Schema
|
||||
|
||||
| Property | Type | Options/Notes |
|
||||
|----------|------|---------------|
|
||||
| Title | title | |
|
||||
| Account Code | select | D.intelligence, JHR, JAM, SLA, SHR, OurDigital |
|
||||
| Category | select | SEO, Data Analytics, Content Marketing, Digital Ads, etc. |
|
||||
| AI Summary | text | Brief summary of key points (3-5 sentences) |
|
||||
|
||||
---
|
||||
|
||||
## DB3: 조선호텔앤리조트 디지털마케팅 (JHR)
|
||||
|
||||
- **ID**: `529587363fe04a8da588337e8eb1aa0b`
|
||||
- **Collection**: `collection://931a663c-4b76-4903-858c-f801b973a1aa`
|
||||
- **Purpose**: JHR client-specific task board
|
||||
|
||||
### Schema
|
||||
|
||||
| Property | Type | Options/Notes |
|
||||
|----------|------|---------------|
|
||||
| Task Name | title | |
|
||||
| Task Status | status | Not Started, Planning, In Progress, In Review, Waiting, Done, On Hold, Archived |
|
||||
| Account Code | select | JHR, JAM, SLA, SHR |
|
||||
| Assign | person | |
|
||||
| Billable | checkbox | |
|
||||
| Blocked by | relation | self-referential |
|
||||
| Blocking | relation | self-referential |
|
||||
| Service Line | select | |
|
||||
| AI summary | text | |
|
||||
|
||||
---
|
||||
|
||||
## DB4: The Shilla Hotels & Resorts SEO & Data Intelligence (SLA)
|
||||
|
||||
- **ID**: `1e0581e58a1e80e28802d19bf8d468c7`
|
||||
- **Collection**: `collection://1e0581e5-8a1e-8070-96b0-000bd2aacc88`
|
||||
- **Purpose**: SLA client-specific task board
|
||||
|
||||
### Schema
|
||||
|
||||
| Property | Type | Options/Notes |
|
||||
|----------|------|---------------|
|
||||
| Task Name | title | |
|
||||
| Task Status | status | Not Started, Planning, In Progress, In Review, Waiting, Done, On Hold, Archived |
|
||||
| Account Code | select | |
|
||||
| Assign | person | |
|
||||
| Billable | checkbox | |
|
||||
| Backup Start Date | date | Backup before reset |
|
||||
| Backup End Date | date | Backup before reset |
|
||||
| Backup Task Status | status | Backup before reset |
|
||||
| Service Line | select | |
|
||||
|
||||
---
|
||||
|
||||
## DB5: 제이미성형외과 디지털 마케팅 (JAM)
|
||||
|
||||
- **ID**: `4d76fb5bb4134e81883c21a8c4aa80c1`
|
||||
- **Collection**: `collection://9f183ecb-9364-410e-91a7-a41a20455272`
|
||||
- **Purpose**: JAM client-specific task board
|
||||
|
||||
### Schema
|
||||
|
||||
| Property | Type | Options/Notes |
|
||||
|----------|------|---------------|
|
||||
| Task Name | title | |
|
||||
| Account Code | select | JHR, JAM, SLA, SHR |
|
||||
| Assign | person | |
|
||||
| Billable | checkbox | |
|
||||
| Billing Month | select | Jan-Dec |
|
||||
| AI 요약 | text | |
|
||||
|
||||
---
|
||||
|
||||
## Cross-Reference Map
|
||||
|
||||
```
|
||||
Client Service Tasks Dashboard (central hub)
|
||||
├── → Client DB (ac212daf)
|
||||
├── → Daily Work Plans (2ef581e5)
|
||||
├── → Google Drive Files (2d0581e5)
|
||||
├── ↔ JHR DB (931a663c) via JHR Related Tasks
|
||||
├── ↔ JAM DB (9f183ecb) via JAM Related Tasks
|
||||
└── ↔ SLA DB (1e0581e5) via SLA Related Tasks
|
||||
```
|
||||
|
||||
## Meeting Library Hub
|
||||
|
||||
- **Location**: Notion (exact DB ID to be confirmed on first use)
|
||||
- **Purpose**: All meeting minutes and notes
|
||||
- **Workflow**: Account Manager auto-posts meeting notes → optional Slack share
|
||||
82
custom-skills/dintel-shared/references/pricing-reference.md
Normal file
82
custom-skills/dintel-shared/references/pricing-reference.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# Pricing Quick Reference
|
||||
|
||||
> D.intelligence Service Module Pricing | VAT 별도
|
||||
|
||||
---
|
||||
|
||||
## Individual Module Pricing
|
||||
|
||||
### Analysis (진단) -- Phase 1
|
||||
|
||||
| Code | Module | Duration | Price Range |
|
||||
|------|--------|----------|-------------|
|
||||
| A1 | 비즈니스·브랜드 진단 | 2--3주 | 300--500만원 |
|
||||
| A2 | 고객·소비자 분석 | 3--4주 | 400--700만원 |
|
||||
| A3 | 데이터 분석 (웹·앱) | 3--5주 | 400--800만원 |
|
||||
| A4 | 디지털 마케팅 진단 | 2--4주 | 300--600만원 |
|
||||
| A5 | 퍼포먼스 마케팅 진단 | 2--3주 | 300--500만원 |
|
||||
| A6 | 운영·관리 진단 | 2--3주 | 200--400만원 |
|
||||
|
||||
### Treatment (처방) -- Phase 2
|
||||
|
||||
| Code | Module | Duration | Price Range |
|
||||
|------|--------|----------|-------------|
|
||||
| T1 | 브랜드 스토리텔링 & 가이드 | 4--8주 | 500--1,200만원 |
|
||||
| T2 | 고객 접점 경험 최적화 | 4--6주 | 400--800만원 |
|
||||
| T3 | 디지털 자산 통합관리 | 4--8주 | 600--1,500만원 |
|
||||
| T4 | 콘텐츠 마케팅 | 4--8주 | 400--1,000만원 |
|
||||
| T5 | 광고·전환 최적화 | 3--6주 | 400--800만원 |
|
||||
| T6 | Brand Visibility Treatment | 4--12주 | 500--1,500만원 |
|
||||
| T7 | 운영 시스템·자동화 | 4--8주 | 400--1,000만원 |
|
||||
|
||||
### Growth (성장) -- Phase 3
|
||||
|
||||
| Code | Module | Duration | Price Range |
|
||||
|------|--------|----------|-------------|
|
||||
| G1 | 퍼포먼스 마케팅 | 월간 | 200--500만원/월 |
|
||||
| G2 | 콘텐츠 마케팅 대행 | 월간 | 300--600만원/월 |
|
||||
| G3 | 모니터링·이슈관리 | 월간 | 200--400만원/월 |
|
||||
| G4 | 연간 계약·운영 | 12개월 | 별도 협의 |
|
||||
|
||||
---
|
||||
|
||||
## Complexity Pricing Position
|
||||
|
||||
| Tier | Percentile in Range | Multiplier (hours) |
|
||||
|------|--------------------|--------------------|
|
||||
| Standard | 30th percentile | 1.0x |
|
||||
| Complex | 60th percentile | 1.5x |
|
||||
| Enterprise | 90th percentile | 2.0x |
|
||||
|
||||
---
|
||||
|
||||
## Discount Policies
|
||||
|
||||
| Condition | Discount | Stackable |
|
||||
|-----------|----------|-----------|
|
||||
| 3개 모듈 이상 동시 계약 | 15% | No (base) |
|
||||
| Analysis -> Treatment 연계 | 20% | No (base) |
|
||||
| Full cycle (Analysis -> Treatment -> Growth) | 25% | No (base) |
|
||||
| G4 연간 계약 | 월 단가 20% 할인 | No (base) |
|
||||
| 재계약 (기존 고객) | 10% 추가 할인 | Yes (stacks on base) |
|
||||
|
||||
**Rule**: Apply the single highest base discount. 재계약 stacks on top. Max total discount: 35%.
|
||||
|
||||
---
|
||||
|
||||
## Pre-built Packages
|
||||
|
||||
| Package | Modules | Price Range | Discount |
|
||||
|---------|---------|-------------|----------|
|
||||
| Starter | A3 + A4 + A5 | 800--1,500만원 | 15% |
|
||||
| Standard | Starter + T3/T5/T6 택1 | 1,500--2,800만원 | 20% |
|
||||
| Premium | Starter + 2 Treatment + 1 Growth (3개월) | 3,000--5,000만원 | 25% |
|
||||
| SEO Intensive | A3 + T6 + G2 (3개월) | 2,000--3,500만원 | 20% |
|
||||
|
||||
---
|
||||
|
||||
## Standard Terms
|
||||
|
||||
- **Payment**: 착수금 50% / 완료 후 50%
|
||||
- **Validity**: 견적 유효기간 30일
|
||||
- **VAT**: 별도 (10%)
|
||||
3
custom-skills/dintel-shared/src/dintel/__init__.py
Normal file
3
custom-skills/dintel-shared/src/dintel/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
"""D.intelligence Agent Corps — shared utilities."""
|
||||
|
||||
__version__ = "0.1.0"
|
||||
132
custom-skills/dintel-shared/src/dintel/brand.py
Normal file
132
custom-skills/dintel-shared/src/dintel/brand.py
Normal file
@@ -0,0 +1,132 @@
|
||||
"""Brand constants and identity for D.intelligence."""
|
||||
|
||||
# ── Brand Core ──────────────────────────────────────────────────
|
||||
BRAND_NAME = "D.intelligence"
|
||||
BRAND_CONCEPT = "SMART Marketing Clinic"
|
||||
TAGLINE = "Analysis, Treatment & Growth"
|
||||
MOTTO = "Think Forward"
|
||||
MISSION = "데이터 기반 의사결정으로 기업의 지속가능한 성장을 실현하는 전문 파트너"
|
||||
WEBSITE = "https://dintelligence.co.kr"
|
||||
|
||||
CORE_VALUES = {
|
||||
"Scientific": "과학적 방법론, 검증, 데이터 기반 판단",
|
||||
"Practical": "실행 가능하고 현실적인 해법",
|
||||
"Outcome": "측정 가능한 성과 중심",
|
||||
"Insights": "복잡한 문제를 분명한 인사이트로 전환",
|
||||
}
|
||||
|
||||
# ── Brand Colors — 2025 Design System ───────────────────────────
|
||||
# Source: D.intelligence_Design_System_2025.pdf
|
||||
|
||||
# Primary palette (RGB)
|
||||
COLOR_D_BEIGE = (229, 225, 210) # #E5E1D2 — Cover/Section BG (NEW primary BG)
|
||||
COLOR_D_OLIVE = (206, 220, 0) # #CEDC00 — Accent only (demoted from 2022 BG)
|
||||
COLOR_D_BROWN = (35, 24, 21) # #231815 — Primary text / Dark BG
|
||||
COLOR_D_BLACK = (0, 0, 0) # #000000 — Dark BG / Text
|
||||
|
||||
# Secondary palette (RGB)
|
||||
COLOR_D_GRAY = (114, 113, 113) # #727171 — Secondary text
|
||||
COLOR_D_LIGHT_GRAY = (242, 242, 242) # #F2F2F2 — Card / BG
|
||||
COLOR_D_BLUE = (0, 117, 192) # #0075C0 — Digital accent (diagrams, data viz)
|
||||
COLOR_D_BORDER = (191, 191, 191) # #BFBFBF — Border 0.5pt
|
||||
COLOR_D_WARM_GRAY = (200, 196, 184) # #C8C4B8 — Header bar, vertical line accent
|
||||
|
||||
COLOR_WHITE = (255, 255, 255)
|
||||
|
||||
# Hex versions
|
||||
HEX_D_BEIGE = "#E5E1D2"
|
||||
HEX_D_OLIVE = "#CEDC00"
|
||||
HEX_D_BROWN = "#231815"
|
||||
HEX_D_BLACK = "#000000"
|
||||
HEX_D_GRAY = "#727171"
|
||||
HEX_D_LIGHT_GRAY = "#F2F2F2"
|
||||
HEX_D_BLUE = "#0075C0"
|
||||
HEX_D_BORDER = "#BFBFBF"
|
||||
HEX_D_WARM_GRAY = "#C8C4B8"
|
||||
|
||||
# Semantic aliases (for backward compatibility)
|
||||
COLOR_PRIMARY = COLOR_D_BROWN # Primary text color
|
||||
COLOR_ACCENT = COLOR_D_OLIVE # Accent (sparingly)
|
||||
COLOR_TEXT = COLOR_D_BROWN # Body text
|
||||
COLOR_BG = COLOR_D_BEIGE # Cover/section background
|
||||
COLOR_SECONDARY = COLOR_D_GRAY # Secondary text
|
||||
HEX_PRIMARY = HEX_D_BROWN
|
||||
HEX_ACCENT = HEX_D_OLIVE
|
||||
HEX_TEXT = HEX_D_BROWN
|
||||
HEX_BG = HEX_D_BEIGE
|
||||
HEX_SECONDARY = HEX_D_GRAY
|
||||
|
||||
# ── Typography — 2025 Design System ─────────────────────────────
|
||||
FONT_KR = "Apple SD Gothic Neo"
|
||||
FONT_EN = "DM Sans"
|
||||
FONT_FALLBACK_KR = "Apple SD Gothic Neo"
|
||||
FONT_FALLBACK_EN = "DM Sans"
|
||||
|
||||
# Type Scale
|
||||
TYPE_SCALE = {
|
||||
"display_title": {"size_pt": (54, 72), "weight": "Bold", "color": "D_BROWN"},
|
||||
"slide_title": {"size_pt": (28, 36), "weight": "Bold", "color": "D_BROWN"},
|
||||
"subtitle": {"size_pt": (14, 16), "weight": "Regular", "color": "D_GRAY"},
|
||||
"body": {"size_pt": (11, 14), "weight": "Regular", "color": "D_BROWN"},
|
||||
"footnote": {"size_pt": (8, 10), "weight": "Regular", "color": "D_GRAY"},
|
||||
"header_bar": {"size_pt": (10, 10), "weight": "Regular", "color": "WARM_GRAY"},
|
||||
}
|
||||
|
||||
# ── Layout Motifs — 2025 Design System ──────────────────────────
|
||||
LAYOUT = {
|
||||
"vertical_line_accent": {"color": "WARM_GRAY", "note": "Thin vertical line on left of section dividers"},
|
||||
"three_dot_motif": {"symbol": "• • •", "position": "upper-right corner of cover/featured slides"},
|
||||
"footer_tagline": "Analysis, Treatment & Growth",
|
||||
"min_margin": "0.5 inches",
|
||||
"border_weight": "0.5pt",
|
||||
}
|
||||
|
||||
# ── Service Architecture ────────────────────────────────────────
|
||||
SERVICE_PHASES = {
|
||||
"Analysis": {"kr": "진단", "modules": ["A1", "A2", "A3", "A4", "A5", "A6"]},
|
||||
"Treatment": {"kr": "처방", "modules": ["T1", "T2", "T3", "T4", "T5", "T6", "T7"]},
|
||||
"Growth": {"kr": "성장", "modules": ["G1", "G2", "G3", "G4"]},
|
||||
}
|
||||
|
||||
SERVICE_MODULES = {
|
||||
"A1": "비즈니스·브랜드 진단",
|
||||
"A2": "고객·소비자 분석",
|
||||
"A3": "데이터 분석 — 웹·앱",
|
||||
"A4": "디지털 마케팅 진단",
|
||||
"A5": "퍼포먼스 마케팅 진단",
|
||||
"A6": "운영·관리 진단",
|
||||
"T1": "브랜드 스토리텔링 & 가이드",
|
||||
"T2": "고객 접점 경험 최적화",
|
||||
"T3": "디지털 자산 통합관리",
|
||||
"T4": "콘텐츠 마케팅",
|
||||
"T5": "광고·전환 최적화",
|
||||
"T6": "Brand Visibility Treatment",
|
||||
"T7": "운영 시스템·자동화",
|
||||
"G1": "퍼포먼스 마케팅",
|
||||
"G2": "콘텐츠 마케팅 대행",
|
||||
"G3": "모니터링·이슈관리",
|
||||
"G4": "연간 계약·운영",
|
||||
}
|
||||
|
||||
SERVICE_CATEGORIES = {
|
||||
"DI": "Data Intelligence",
|
||||
"MD": "Measurement Design",
|
||||
"MPO": "Marketing Performance Optimization",
|
||||
"BVT": "Brand Visibility Treatment",
|
||||
}
|
||||
|
||||
# ── Client Codes ────────────────────────────────────────────────
|
||||
CLIENT_CODES = {
|
||||
"JHR": "조선호텔앤리조트",
|
||||
"JAM": "제이미성형외과",
|
||||
"SLA": "신라호텔",
|
||||
"SHR": "SHR",
|
||||
"OurDigital": "OurDigital",
|
||||
}
|
||||
|
||||
# ── Prohibited Expressions ──────────────────────────────────────
|
||||
PROHIBITED_WORDS = [
|
||||
"획기적", "혁신적", "놀라운", "독보적", "최고의",
|
||||
"반드시", "확실히", "무조건", "100%", "보장",
|
||||
"대행사", "에이전시", "바이럴",
|
||||
]
|
||||
91
custom-skills/dintel-shared/src/dintel/document.py
Normal file
91
custom-skills/dintel-shared/src/dintel/document.py
Normal file
@@ -0,0 +1,91 @@
|
||||
"""Document generation utilities for D.intelligence branded outputs."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from docx import Document
|
||||
from docx.shared import Inches, Pt, RGBColor
|
||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||
|
||||
from dintel.brand import (
|
||||
BRAND_NAME,
|
||||
COLOR_PRIMARY,
|
||||
COLOR_SECONDARY,
|
||||
COLOR_TEXT,
|
||||
FONT_FALLBACK_EN,
|
||||
FONT_FALLBACK_KR,
|
||||
TAGLINE,
|
||||
)
|
||||
|
||||
|
||||
def create_branded_doc(
|
||||
title: str,
|
||||
subtitle: str = "",
|
||||
author: str = "D.intelligence",
|
||||
) -> Document:
|
||||
"""Create a new DOCX document with D.intelligence branding."""
|
||||
doc = Document()
|
||||
|
||||
# Core properties
|
||||
doc.core_properties.author = author
|
||||
doc.core_properties.title = title
|
||||
doc.core_properties.created = datetime.datetime.now()
|
||||
|
||||
# Default style
|
||||
style = doc.styles["Normal"]
|
||||
font = style.font
|
||||
font.name = FONT_FALLBACK_EN
|
||||
font.size = Pt(10)
|
||||
font.color.rgb = RGBColor(*COLOR_TEXT)
|
||||
|
||||
# Title
|
||||
heading = doc.add_heading(title, level=0)
|
||||
for run in heading.runs:
|
||||
run.font.color.rgb = RGBColor(*COLOR_PRIMARY)
|
||||
|
||||
if subtitle:
|
||||
p = doc.add_paragraph(subtitle)
|
||||
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
for run in p.runs:
|
||||
run.font.color.rgb = RGBColor(*COLOR_SECONDARY)
|
||||
run.font.size = Pt(12)
|
||||
|
||||
# Tagline footer
|
||||
p = doc.add_paragraph(f"{BRAND_NAME} — {TAGLINE}")
|
||||
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
for run in p.runs:
|
||||
run.font.size = Pt(8)
|
||||
run.font.color.rgb = RGBColor(*COLOR_SECONDARY)
|
||||
|
||||
doc.add_paragraph("") # spacer
|
||||
return doc
|
||||
|
||||
|
||||
def add_section_heading(doc: Document, text: str, level: int = 1) -> None:
|
||||
"""Add a branded section heading."""
|
||||
heading = doc.add_heading(text, level=level)
|
||||
for run in heading.runs:
|
||||
run.font.color.rgb = RGBColor(*COLOR_PRIMARY)
|
||||
|
||||
|
||||
def add_bilingual_heading(
|
||||
doc: Document, en_text: str, kr_text: str, level: int = 2
|
||||
) -> None:
|
||||
"""Add a bilingual heading (English + Korean subtitle)."""
|
||||
heading = doc.add_heading(en_text, level=level)
|
||||
for run in heading.runs:
|
||||
run.font.color.rgb = RGBColor(*COLOR_PRIMARY)
|
||||
p = doc.add_paragraph(kr_text)
|
||||
for run in p.runs:
|
||||
run.font.color.rgb = RGBColor(*COLOR_SECONDARY)
|
||||
run.font.size = Pt(10)
|
||||
|
||||
|
||||
def save_doc(doc: Document, output_path: str | Path) -> Path:
|
||||
"""Save document and return the path."""
|
||||
output_path = Path(output_path)
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
doc.save(str(output_path))
|
||||
return output_path
|
||||
71
custom-skills/dintel-shared/src/dintel/excel.py
Normal file
71
custom-skills/dintel-shared/src/dintel/excel.py
Normal file
@@ -0,0 +1,71 @@
|
||||
"""Excel utilities for D.intelligence branded spreadsheets."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from openpyxl import Workbook
|
||||
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
|
||||
|
||||
from dintel.brand import (
|
||||
BRAND_NAME,
|
||||
HEX_PRIMARY,
|
||||
HEX_SECONDARY,
|
||||
HEX_ACCENT,
|
||||
HEX_TEXT,
|
||||
)
|
||||
|
||||
# ── Style Constants ─────────────────────────────────────────────
|
||||
HEADER_FILL = PatternFill(start_color=HEX_PRIMARY.lstrip("#"), end_color=HEX_PRIMARY.lstrip("#"), fill_type="solid")
|
||||
HEADER_FONT = Font(name="Arial", size=10, bold=True, color="FFFFFF")
|
||||
SUBHEADER_FILL = PatternFill(start_color=HEX_SECONDARY.lstrip("#"), end_color=HEX_SECONDARY.lstrip("#"), fill_type="solid")
|
||||
SUBHEADER_FONT = Font(name="Arial", size=10, bold=True, color="FFFFFF")
|
||||
ACCENT_FONT = Font(name="Arial", size=10, bold=True, color=HEX_ACCENT.lstrip("#"))
|
||||
BODY_FONT = Font(name="Arial", size=10, color=HEX_TEXT.lstrip("#"))
|
||||
THIN_BORDER = Border(
|
||||
left=Side(style="thin"),
|
||||
right=Side(style="thin"),
|
||||
top=Side(style="thin"),
|
||||
bottom=Side(style="thin"),
|
||||
)
|
||||
CENTER_ALIGN = Alignment(horizontal="center", vertical="center", wrap_text=True)
|
||||
LEFT_ALIGN = Alignment(horizontal="left", vertical="center", wrap_text=True)
|
||||
RIGHT_ALIGN = Alignment(horizontal="right", vertical="center")
|
||||
|
||||
|
||||
def create_branded_workbook(title: str = "D.intelligence") -> Workbook:
|
||||
"""Create an openpyxl Workbook with brand defaults."""
|
||||
wb = Workbook()
|
||||
wb.properties.title = title
|
||||
wb.properties.creator = BRAND_NAME
|
||||
return wb
|
||||
|
||||
|
||||
def style_header_row(ws, row: int = 1, col_start: int = 1, col_end: int = 10) -> None:
|
||||
"""Apply header styling to a row."""
|
||||
for col in range(col_start, col_end + 1):
|
||||
cell = ws.cell(row=row, column=col)
|
||||
cell.fill = HEADER_FILL
|
||||
cell.font = HEADER_FONT
|
||||
cell.alignment = CENTER_ALIGN
|
||||
cell.border = THIN_BORDER
|
||||
|
||||
|
||||
def style_body_cell(cell, align: str = "left") -> None:
|
||||
"""Apply body styling to a cell."""
|
||||
cell.font = BODY_FONT
|
||||
cell.border = THIN_BORDER
|
||||
if align == "center":
|
||||
cell.alignment = CENTER_ALIGN
|
||||
elif align == "right":
|
||||
cell.alignment = RIGHT_ALIGN
|
||||
else:
|
||||
cell.alignment = LEFT_ALIGN
|
||||
|
||||
|
||||
def save_workbook(wb: Workbook, output_path: str | Path) -> Path:
|
||||
"""Save workbook and return the path."""
|
||||
output_path = Path(output_path)
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
wb.save(str(output_path))
|
||||
return output_path
|
||||
50
custom-skills/dintel-shared/src/dintel/notion.py
Normal file
50
custom-skills/dintel-shared/src/dintel/notion.py
Normal file
@@ -0,0 +1,50 @@
|
||||
"""Notion database IDs and helper constants for D.intelligence."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
# ── Database IDs ────────────────────────────────────────────────
|
||||
DB_TASKS_DASHBOARD = "2c0581e58a1e816d9948c3f3591c372c"
|
||||
DB_CLIENT_REFERENCE = "f0508d67b26042c1a0c7f2283f87eab4"
|
||||
DB_JHR = "529587363fe04a8da588337e8eb1aa0b"
|
||||
DB_SLA = "1e0581e58a1e80e28802d19bf8d468c7"
|
||||
DB_JAM = "4d76fb5bb4134e81883c21a8c4aa80c1"
|
||||
|
||||
# ── Collection IDs ──────────────────────────────────────────────
|
||||
COLLECTION_TASKS = "2c0581e5-8a1e-8178-aa9a-000b44537e0a"
|
||||
COLLECTION_CLIENT_REF = "b8ddab91-d3a7-4b84-86d7-35e46711598c"
|
||||
COLLECTION_JHR = "931a663c-4b76-4903-858c-f801b973a1aa"
|
||||
COLLECTION_SLA = "1e0581e5-8a1e-8070-96b0-000bd2aacc88"
|
||||
COLLECTION_JAM = "9f183ecb-9364-410e-91a7-a41a20455272"
|
||||
|
||||
# ── Related Collections ─────────────────────────────────────────
|
||||
COLLECTION_CLIENT_DB = "ac212daf-4eda-4a99-8c97-89699c846331"
|
||||
COLLECTION_DAILY_WORK = "2ef581e5-8a1e-80b9-81cb-000b121910d3"
|
||||
COLLECTION_GDRIVE_FILES = "2d0581e5-8a1e-8096-8577-000b5152a9f2"
|
||||
|
||||
# ── Task Status Options ─────────────────────────────────────────
|
||||
TASK_STATUSES = [
|
||||
"Not Started", "Planning", "In Progress", "In Review",
|
||||
"Waiting", "Done", "On Hold", "Archived",
|
||||
]
|
||||
|
||||
# ── Priority Codes ──────────────────────────────────────────────
|
||||
PRIORITY_CODES = [
|
||||
"A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3",
|
||||
]
|
||||
|
||||
# ── Client Codes for Notion ─────────────────────────────────────
|
||||
NOTION_CLIENT_CODES = ["JHR", "JAM", "SLA", "SHR", "OurDigital"]
|
||||
|
||||
# ── Service Lines ───────────────────────────────────────────────
|
||||
SERVICE_LINES = [
|
||||
"SEO", "Local SEO", "Digital Ads", "Content Marketing",
|
||||
"Growth Package", "AI Literacy", "Data Literacy",
|
||||
"Data Analytics", "GTM/Tagging", "Web Dev",
|
||||
]
|
||||
|
||||
# ── DB Mapping (client code → database ID) ──────────────────────
|
||||
CLIENT_DB_MAP = {
|
||||
"JHR": DB_JHR,
|
||||
"JAM": DB_JAM,
|
||||
"SLA": DB_SLA,
|
||||
}
|
||||
Reference in New Issue
Block a user