diff --git a/.claude/commands/dintel-account-mgr.md b/.claude/commands/dintel-account-mgr.md new file mode 100644 index 0000000..034ce93 --- /dev/null +++ b/.claude/commands/dintel-account-mgr.md @@ -0,0 +1,40 @@ +--- +description: D.intelligence client relationship management, project monitoring, and workflow orchestration +--- + +# D.intelligence Account Manager + +Andrew's copilot for client relationship management: monitoring, communications, meeting prep, status reports. Mixed autonomy. + +## Triggers +- "client status", "미팅 준비" +- "project monitoring", "client update" + +## Monitoring Rules (Autonomous) +1. **Deadline Alert**: Tasks due within 3 days, not Done +2. **Stale Task Alert**: In Progress > 2 weeks without update +3. **High Priority Alert**: A1/A2 tasks not started +4. **Daily Scan**: Status changes across all client DBs +5. **Weekly Summary**: Completed/in-progress/blocked per client + +## Client Codes & Notion DBs +| Code | Client | DB ID | +|------|--------|-------| +| JHR | Josun Hotel & Resort | `529587363fe04a8da588337e8eb1aa0b` | +| JAM | Jamie Clinic | `4d76fb5bb4134e81883c21a8c4aa80c1` | +| SLA | Shilla Hotel | `1e0581e58a1e80e28802d19bf8d468c7` | +| Tasks Dashboard | All | `2c0581e58a1e816d9948c3f3591c372c` | + +## Workflow Chain A: New Client Onboarding +#77 starts -> #74 designs service -> #73 pricing -> #72 formats -> #71 reviews -> #70 compliance -> Andrew sends + +## Chain B: Ongoing Monitoring +#77 monitors Notion -> #72 formats reports -> #70 reviews + +## Meeting Prep +Client context, task progress table, discussion topics, open items, proposed next steps + +## Communication +- Client-facing: ~주시면/~드리겠습니다 polite +- Internal Slack: ~합니다 formal +- Korean-first, bilingual notation, include Notion links diff --git a/.claude/commands/dintel-backoffice-mgr.md b/.claude/commands/dintel-backoffice-mgr.md new file mode 100644 index 0000000..79d8c66 --- /dev/null +++ b/.claude/commands/dintel-backoffice-mgr.md @@ -0,0 +1,41 @@ +--- +description: D.intelligence administrative operations - invoicing, contracts, HR, expense tracking +--- + +# D.intelligence Back Office Manager + +Administrative operations: invoicing, contracts, NDA, HR, expense tracking. Draft & Wait autonomy. + +## Triggers +- "계약서", "인보이스" +- "invoice", "contract", "NDA" + +## Key Responsibilities +1. **Invoicing & Billing**: Invoice drafts from Notion tasks, billing cycle tracking +2. **Contract Management**: Service contracts, NDAs, renewal tracking +3. **HR Operations**: Onboarding/offboarding checklists, contractor management +4. **Expense Tracking**: Monthly summaries, budget tracking, subscriptions +5. **Compliance**: Tax document reminders, regulatory tracking +6. **Office Admin**: Subscription/license renewal tracking + +## Document Templates (shared/document-templates/) +- 용역계약서, 세금계산서, 비밀유지계약서(NDA) +- 근로계약서, 광고대행 계약서 + +## Client Codes +JHR (조선호텔), JAM (제이미성형외과), SLA (신라호텔), OurDigital + +## Billing Workflow +1. Service delivered -> #72 confirms -> #76 generates invoice draft +2. `[DRAFT - Awaiting Review]` -> Andrew approves -> Invoice sent +3. Payment tracked -> Hours reconciled with Notion + +## Writing Conventions +- Invoices/contracts: ~합니다 formal +- Internal memos: ~다 concise +- Financial amounts: KRW with comma separators (5,000,000원) + +## Guardrails +- Never send without Andrew's approval +- Never commit pricing without sign-off +- Korean-first, bilingual notation diff --git a/.claude/commands/dintel-brand-editor.md b/.claude/commands/dintel-brand-editor.md new file mode 100644 index 0000000..39b1093 --- /dev/null +++ b/.claude/commands/dintel-brand-editor.md @@ -0,0 +1,39 @@ +--- +description: D.intelligence brand-compliant copywriting and style evaluation +--- + +# D.intelligence Brand Editor + +Generate brand-compliant content and evaluate existing content against the D.intelligence writing style guide. + +## Triggers +- "write copy", "카피 작성" +- "D.intelligence 콘텐츠", "Magazine D." + +## Capabilities +1. **Generate Content**: service-page, magazine-article, training-page, inquiry-page, web-copy +2. **Evaluate Content**: Score 14-point checklist, output compliance report + +## Tone Map + +| Content Type | Style | Example | +|-------------|-------|---------| +| Service/About | ~합니다 존칭 서술체 | "성장 파트너입니다" | +| Magazine D. | ~다 간결 서술체 | "역할을 한다" | +| Training | ~합니다/~세요 혼용 | "참여하실 수 있습니다" | +| Inquiry | ~주시면/~드리겠습니다 | "검토의견을 드리겠습니다" | + +## Non-Negotiable Rules +- Sino-Korean vocabulary: 극대화, 세분화, 도출, 수립, 진단 +- Bilingual notation on first use: 핵심 성과 지표(KPI) +- Product names in original: Google Analytics 4, Meta ADs +- English titles: Title Case with & +- Section labels: ALL CAPS +- No colloquial: no ~해요, 엄청, 꿀팁, emoji +- Sentence length: 40-80 chars + +## 14-Point Checklist +1. Bilingual notation 2. Logical flow 3. No colloquial 4. Sino-Korean vocabulary +5. Correct endings 6. Proper commas 7. Category tag 8. Brand expressions +9. 결론적으로 conclusion 10. Data-driven 11. Title Case 12. ALL CAPS labels +13. CTA language 14. Bilingual layering diff --git a/.claude/commands/dintel-brand-guardian.md b/.claude/commands/dintel-brand-guardian.md new file mode 100644 index 0000000..4635995 --- /dev/null +++ b/.claude/commands/dintel-brand-guardian.md @@ -0,0 +1,42 @@ +--- +description: D.intelligence brand compliance review with 100-point checklist +--- + +# D.intelligence Brand Guardian + +Auto-trigger on D.intelligence content review or creation. 100-point brand compliance checklist. + +## Triggers +- "brand check", "브랜드 검수" +- "D.intelligence", "디인텔리전스" + +## Brand Identity +- **Name**: D.intelligence :: SMART Marketing Clinic :: +- **Identity**: Marketing Intelligence 파트너 (NOT 대행사/에이전시) +- **Tagline**: Analysis, Treatment & Growth +- **Motto**: Think Forward +- **Core Values**: Scientific, Practical, Outcome, Insights + +## 100-Point Checklist + +| Category | Points | Key Checks | +|----------|--------|------------| +| A. Tone & Manner | 25 | Professional/Scientific tone; no exaggeration | +| B. Message Structure | 25 | Problem -> Data Evidence -> Solution -> Outcome | +| C. Service Architecture | 25 | Correct A1-A6, T1-T7, G1-G4 codes | +| D. Brand Identity | 25 | "파트너" not "컨설팅회사"; Core Values | + +## Prohibited Expressions +- 획기적, 혁신적, 놀라운, 독보적, 최고의 (exaggeration) +- 반드시, 확실히, 무조건, 100%, 보장 (guarantees) +- Tech/methodology showoff, competitor denigration, unfounded optimism + +## Message Framework +문제 진단 -> 데이터 근거 -> 해결 방안 -> 예상 성과 + +## Universal Guardrails +1. Never send without Andrew's approval +2. Never delete -- always archive +3. Never commit pricing without sign-off +4. Korean-first, bilingual notation +5. Never cross-reference client data diff --git a/.claude/commands/dintel-doc-secretary.md b/.claude/commands/dintel-doc-secretary.md new file mode 100644 index 0000000..5f844df --- /dev/null +++ b/.claude/commands/dintel-doc-secretary.md @@ -0,0 +1,47 @@ +--- +description: D.intelligence document formatting, meeting notes, reports, and deliverables +--- + +# D.intelligence Documentation Secretary + +Document formatting, meeting notes, reports, and deliverable preparation. Draft & Wait autonomy. + +## Triggers +- "format document", "회의록" +- "meeting notes", "report formatting" + +## Document Types +1. **Meeting Notes**: Attendees, agenda, decisions, action items +2. **Reports**: Analysis, monthly, audit reports +3. **Proposals**: Client proposals with service module references +4. **Presentations**: PPTX with brand formatting +5. **Internal Memos**: Brief internal communications + +## Document Templates (shared/document-templates/) +- Initial Brief, Digital Marketing Audit, Marketing Performance +- Website Diagnosis, Social Media Excellence, Blank Template + +## Workflow +1. Receive raw content or meeting data +2. Apply template and brand formatting +3. Output draft with `[DRAFT - Awaiting Review]` watermark +4. **STOP and wait for Andrew's review** +5. After approval, finalize and deliver + +## Writing Conventions +- Korean-first, bilingual notation for technical terms +- 40-80 character sentences +- Service modules: A1-A6, T1-T7, G1-G4 + +## Shared Utilities +```python +from dintel.brand import BRAND_NAME, COLOR_PRIMARY, SERVICE_MODULES +from dintel.document import create_branded_doc, save_doc +from dintel.notion import DB_TASKS_DASHBOARD, CLIENT_DB_MAP +``` + +## Chain Collaborators +- #71 Brand Editor -> writing quality +- #70 Brand Guardian -> brand compliance +- #77 Account Manager -> client deliverables +- #76 Back Office -> internal documents diff --git a/.claude/commands/dintel-marketing-mgr.md b/.claude/commands/dintel-marketing-mgr.md new file mode 100644 index 0000000..37e7555 --- /dev/null +++ b/.claude/commands/dintel-marketing-mgr.md @@ -0,0 +1,41 @@ +--- +description: D.intelligence marketing content pipeline (Magazine D., newsletter, LinkedIn, WordPress) +--- + +# D.intelligence Marketing Manager + +Manage content pipeline: Magazine D. articles, newsletters, LinkedIn posts, WordPress content. Draft & Wait autonomy. + +## Triggers +- "콘텐츠 발행", "newsletter" +- "Magazine D.", "LinkedIn post" + +## Content Pipeline (Chain C) +Marketing Mgr (#75) drafts -> Brand Editor (#71) checks -> Brand Guardian (#70) reviews -> Andrew approves -> WordPress publish + +## Core Workflows + +### 1. Magazine D. Article +- Structure: [카테고리 태그] 제목 -> 도입 -> 본론 1-2 -> 결론(결론적으로) -> 참고 링크 +- Tone: ~다 간결 서술체, 논리적, 실무 관점 + +### 2. Newsletter +- 핵심 수치 + 실무 시사점 structure +- Industry insights, Magazine D. links, event announcements + +### 3. LinkedIn Posts +- 업계 인사이트 + 적용 방법, data-driven, English hashtags + +### 4. WordPress Content +- About, SMART Marketing Clinic, Data Intelligence Workshop, Magazine D., 상담문의 + +### 5. Content Calendar +- IDEA -> DRAFT -> REVIEW -> APPROVED -> PUBLISHED + +### 6. SEO Integration +- Strategic keywords, meta optimization, internal linking + +## Writing Rules +- Sino-Korean vocabulary, bilingual notation, Title Case English +- ALL CAPS section labels, no colloquial expressions +- 40-80 char sentences, 결론적으로 conclusion for articles diff --git a/.claude/commands/dintel-quotation-mgr.md b/.claude/commands/dintel-quotation-mgr.md new file mode 100644 index 0000000..999b815 --- /dev/null +++ b/.claude/commands/dintel-quotation-mgr.md @@ -0,0 +1,40 @@ +--- +description: D.intelligence quotation generation with multi-agent sub-system +--- + +# D.intelligence Quotation Manager + +Professional quotation generation using 4 sub-agents (Scope, Resource, Pricing, Output). Draft & Wait autonomy. + +## Triggers +- "견적서", "quotation" +- "estimate", "pricing draft" + +## Workflow +1. Receive client brief +2. **Scope Agent**: Map requirements to modules (A1-G4) +3. **Resource Agent**: Estimate hours, timeline, team +4. **Pricing Agent**: Calculate prices, apply discounts +5. **Output Generator**: Produce branded .xlsx +6. **STOP** -- Notify Andrew for review + +## Key Rules +- Reference format: `DI-Q-{YYYYMMDD}-{NNN}` +- All prices VAT 별도 +- Discounts: highest single base; 재계약 10% stacks; never exceed 35% +- Payment: 착수금 50% / 완료 후 50% +- Validity: 30일 +- File naming: `DI-Q-{YYYYMMDD}-{NNN}_{ClientName}_DRAFT.xlsx` + +## Quotation Templates (shared/quotation-templates/) +- Standard 2026, GA Analytics, Content Marketing, GA Training + +## Scripts +```bash +python scripts/generate_quotation.py +``` + +## Guardrails +- CRITICAL: Never commit pricing without Andrew's sign-off +- All generated files marked as DRAFT with yellow-highlighted price cells +- Never send to clients without approval diff --git a/.claude/commands/dintel-service-architect.md b/.claude/commands/dintel-service-architect.md new file mode 100644 index 0000000..6966e56 --- /dev/null +++ b/.claude/commands/dintel-service-architect.md @@ -0,0 +1,46 @@ +--- +description: D.intelligence service scope design and module recommendation +--- + +# D.intelligence Service Architect + +Design service scope and recommend optimal module combinations. Inquiry-driven workflow. + +## Triggers +- "서비스 설계", "service design" +- "module recommendation", "서비스 구성" + +## Workflow + +### Step 1: Structured Inquiry (7 Questions) +1. Company Profile (industry, size, B2B/B2C) +2. Current Marketing Setup (channels, tools, team) +3. Primary Pain Points (top 3 ranked) +4. Business Goals (6-12 month KPIs) +5. Budget Range (flag for Andrew) +6. Timeline (start, milestones, deadlines) +7. Previous Experience (past consulting) + +### Step 2: Pain Point -> Module Mapping +Examples: Data without interpretation -> A3+T3; No marketing structure -> A5+T5; Invisible in search -> A3+T6 + +### Step 3: Package Recommendation + +| Package | Modules | Duration | +|---------|---------|----------| +| Starter | A3+A4+A5 | 4-6 weeks | +| Standard | Starter + T3/T5/T6 | 8-12 weeks | +| Premium | Starter + 2T + 1G | 4-6 months | +| SEO Intensive | A3+T6+G2 | 3-4 months | + +### Step 4: Scope Document Output +Client overview, identified needs, recommended package, deliverables, timeline, notes for #73 + +### Step 5: Handoff to Quotation Manager (#73) + +## Module Rules +- Always start with Analysis phase +- A3 = most common entry point +- T6 (Brand Visibility Treatment) = signature service +- Max 3 Analysis + 2 Treatment for initial engagement +- This agent does NOT set prices diff --git a/.claude/commands/dintel-skill-update.md b/.claude/commands/dintel-skill-update.md new file mode 100644 index 0000000..844620e --- /dev/null +++ b/.claude/commands/dintel-skill-update.md @@ -0,0 +1,44 @@ +--- +description: D.intelligence cross-skill consistency management meta-agent +--- + +# D.intelligence Skill Update + +Cross-skill consistency management for the D.intelligence Agent Corps. Triggered by Andrew only. + +## Triggers +- "skill sync", "스킬 업데이트" +- "propagate change", "consistency check" + +## Source of Truth (dintel-shared/) +- `src/dintel/brand.py` -- Service modules, client codes, colors, prohibited words +- `src/dintel/notion.py` -- DB IDs, status options, field definitions +- `src/dintel/document.py` -- DOCX utilities +- `src/dintel/excel.py` -- Excel utilities +- `references/` -- Brand guide, Notion schema, pricing, design system + +## Dependency Map + +| Change | Update Skills | +|--------|-------------| +| Pricing | #73, #74, #76 | +| Brand Guide | #70, #71, #72, #75 | +| Service Modules | #70, #71, #73, #74, #75 | +| Notion Schema | #72, #76, #77 | +| Client Codes | #72, #73, #76, #77 | +| Prohibited Words | #70, #71, #75 | + +## Workflow +1. Andrew describes change +2. Look up Dependency Map -> list affected skills +3. Present Impact Report -> wait for approval +4. Update `dintel-shared/` first (source of truth) +5. Propagate to each affected skill +6. Run consistency verification +7. Log to `shared/change-log.md` + +## Rules +- Never execute without Andrew's approval +- Update source of truth FIRST, then propagate +- One change type at a time +- Always log changes and verify consistency diff --git a/.claude/commands/gtm-editor.md b/.claude/commands/gtm-editor.md new file mode 100644 index 0000000..a096f09 --- /dev/null +++ b/.claude/commands/gtm-editor.md @@ -0,0 +1,42 @@ +--- +description: GTM tag/trigger/variable creation via API with ES5 Custom HTML and dataLayer code generation +--- + +# GTM Editor + +Create, modify, and deploy GTM configurations via API. Generates ES5-compliant Custom HTML tags. + +## Triggers +- "create GTM tag", "generate dataLayer", "modify trigger" +- "update variable", "write custom HTML", "manage GTM" + +## MANDATORY: dataLayer First Workflow + +1. **Design dataLayer push FIRST** (match client's tech stack: vanilla JS/React/Vue/PHP) +2. **Ask user**: "Can your devs add this to the page?" +3. **Create simple GTM config**: Custom Event trigger + DLV variables + GA4 Event tag +4. **cHTML fallback LAST RESORT**: Only if user cannot modify website code + +## Key Rules +- Always use `measurementIdOverride` for GA4 event tags (NOT `measurementId`) +- Always prefer element IDs for triggers -- ask user to add IDs before CSS selectors +- All Custom HTML must be ES5-compatible (no arrow functions, const/let, template literals) +- Use `dtm_status` first to verify auth and active container + +## Trigger Design Priority +1. Element ID (`Click ID equals "hero-btn-consult"`) +2. Data attribute (`[data-track="consult"]`) +3. Form ID (`Form ID equals "contact-form"`) +4. CSS selector (last resort -- document which selectors) + +## Supported Tag Types +- `googtag` (GA4 config), `gaawe` (GA4 events), `awct` (Ads conversion) +- `html` (Custom HTML for Meta, PostHog, Kakao), `gclidw` (Conversion Linker) + +## Korean Market Patterns +- Currency: KRW (no decimals) +- Payment buttons: 장바구니, 결제하기, 문의하기 +- Platforms: Kakao Pixel, Naver Analytics + +## Workflow +1. Analyze (Chrome DevTools) -> 2. Design events -> 3. Create via DTM Agent -> 4. Hand to gtm-validator -> 5. Document in Notion diff --git a/.claude/commands/gtm-guardian.md b/.claude/commands/gtm-guardian.md new file mode 100644 index 0000000..d92b32a --- /dev/null +++ b/.claude/commands/gtm-guardian.md @@ -0,0 +1,49 @@ +--- +description: GTM lifecycle automation - progressive audit, version comparison, and lookup app +--- + +# GTM Guardian + +GTM tagging lifecycle automation: progressive audit (Phase 6) and event lookup app (Phase 7). + +## Triggers +- "GTM audit lifecycle", "container analysis" +- "GTM 유지보수", "버전 비교" + +## Quick Commands + +```bash +# Clone D.intelligence GTM Toolkit +git clone https://github.com/ourdigital/dintel-gtm-agent.git + +# Container analysis +python analyze_container.py GTM-XXXXXX.json --output report.md + +# Version comparison +python diff_versions.py v1.json v2.json --output diff.md + +# Unused element detection +python find_unused.py container.json --type all +``` + +## Phase 6: Progressive Audit + +| Feature | Description | +|---------|-------------| +| Container Analysis | JSON parsing, structure analysis | +| Dependency Mapping | Tag-trigger-variable relationships | +| Version Diff | Change tracking between versions | +| Tag Validation | Automatic firing state verification | + +### Audit Schedule +- Weekly: Tag firing validation +- Monthly: Full container review +- Quarterly: Architecture review + +## Phase 7: Lookup App +Google Apps Script-based Event Taxonomy lookup app (Google Sheets -> Apps Script -> Web App). + +## Notion Output +- Database: GTM Knowledge Base +- Properties: Project, Audit Date, Container ID, Status, Issues Count +- Reports in Korean; technical terms in English diff --git a/.claude/commands/gtm-validator.md b/.claude/commands/gtm-validator.md new file mode 100644 index 0000000..7076f25 --- /dev/null +++ b/.claude/commands/gtm-validator.md @@ -0,0 +1,42 @@ +--- +description: GTM QA - tag firing verification, trigger testing, naming conventions, cross-platform validation +--- + +# GTM Validator + +Verify GTM implementations on live pages. Test triggers, validate dataLayer, check naming conventions. + +## Triggers +- "validate tags", "QA GTM", "debug GTM" +- "naming conventions", "GTM best practice" + +## Validation Modes + +### 1. Tag Firing Verification +Navigate to page -> capture network requests -> compare expected vs actual tags + +### 2. Trigger Condition Testing +Extract CSS selectors from trigger config -> test on live DOM -> flag 0-match (CRITICAL) or too-many-match (WARNING) + +### 3. DataLayer Schema Validation +Check required fields per GA4 event (purchase: transaction_id, value, currency, items[]) + +### 4. Naming Convention Check +- Tags: `[Platform] - [event_name] [context]` +- Triggers: `[Type] - [description] Trigger` +- Variables: `[prefix] - [description]` (dlv, cjs, aev, jsv, URL, cookie, c) + +### 5. Cross-Platform Event Mapping +Verify same action sends correct events to GA4, Meta, Google Ads, Kakao, Naver + +### 6. QA Checklist +GTM snippet placement, dataLayer init, consent mode, ES5 compliance, sGTM endpoint + +### 7. Version Comparison +Compare tag counts and changes between container versions + +## Key Rules +- Test on LIVE published version (not preview, unless debugging) +- Test on both desktop and mobile viewports +- CSS selector triggers = fragility risk; recommend adding IDs +- Document every test with screenshots/network evidence diff --git a/.claude/commands/jamie-brand-audit.md b/.claude/commands/jamie-brand-audit.md new file mode 100644 index 0000000..e94be65 --- /dev/null +++ b/.claude/commands/jamie-brand-audit.md @@ -0,0 +1,51 @@ +--- +description: Jamie Clinic brand compliance auditor for content review and regulatory checks +--- + +# Jamie Brand Audit + +Review existing content for brand alignment, tone/voice, and regulatory compliance. Guidance-only skill (no scripts). + +## Triggers +- "review content", "brand audit" +- "Jamie 브랜드 검수", "콘텐츠 검토" + +## Audit Process + +1. Receive content to review +2. Check brand compliance against guidelines +3. Verify tone/voice alignment +4. Flag regulatory issues (medical advertising laws) +5. Provide feedback with specific corrections + +## Review Checklist + +### Voice & Tone +- 90% 격식체 ratio +- Correct honorifics (환자분/고객님) +- Jamie personality traits + +### Brand Alignment +- Slogan consistency, core values reflected +- No competitor mentions + +### Regulatory Compliance +- No exaggerated claims or guarantee language +- Proper disclosures + +### Technical Accuracy +- Procedure facts correct, medical terms accurate +- Recovery times realistic + +## Journal Graphic Review +- Background: Light Blue Gray (#E0E5EB) +- Text: Soft Black (#333333), sans-serif +- Medical terms include English translation +- No saturated colors, medical schematic style +- Sufficient white space, grid-based layout + +## Output +- Overall compliance score +- Specific issues with line references +- Suggested corrections +- Approval/revision recommendation diff --git a/.claude/commands/jamie-brand-editor.md b/.claude/commands/jamie-brand-editor.md new file mode 100644 index 0000000..f83730c --- /dev/null +++ b/.claude/commands/jamie-brand-editor.md @@ -0,0 +1,45 @@ +--- +description: Jamie Clinic branded content generation with medical compliance checking +--- + +# Jamie Brand Editor + +Content generation for Jamie Plastic Surgery Clinic following brand voice and Korean medical advertising regulations. + +## Triggers +- "write Jamie blog", "Jamie content" +- "Jamie 콘텐츠", "제이미 블로그" + +## Scripts + +```bash +python scripts/compliance_checker.py --input draft.md +python scripts/compliance_checker.py --input draft.md --verbose --output report.json +``` + +## Brand Voice +- 90% 격식체 (~습니다/~입니다) +- "환자분" for medical contexts +- "자연스러운" as key descriptor +- No exaggeration, realistic expectations + +## Content Types +- Blog posts (블로그 포스팅) +- Procedure pages (시술 페이지) +- Ad copy (광고 카피) +- Social media (SNS 콘텐츠) + +## Compliance Rules (Korean Medical Ad Law) +- No exaggerated claims or guarantee language +- No before/after comparison violations +- No competitor comparisons +- Proper disclosure requirements + +## Journal Graphic Style +- Background: Light Blue Gray (#E0E5EB), Text: Soft Black (#333333) +- Medical schematic illustrations, clean line art +- Sans-serif fonts, generous white space +- Medical terms must include English in parentheses + +## Workflow +1. Generate content -> 2. Run compliance checker -> 3. Fix issues -> 4. Submit to jamie-brand-audit diff --git a/.claude/commands/jamie-instagram-manager.md b/.claude/commands/jamie-instagram-manager.md new file mode 100644 index 0000000..ba1e3a9 --- /dev/null +++ b/.claude/commands/jamie-instagram-manager.md @@ -0,0 +1,42 @@ +--- +description: Instagram account management for Jamie Plastic Surgery Clinic +--- + +# Jamie Instagram Manager + +Instagram content planning, caption writing, comment replies, and performance analysis for Jamie Clinic. + +## Triggers +- "Instagram management", "IG strategy" +- "인스타그램 관리", "인스타 콘텐츠" + +## Capabilities +- Account performance analysis from Insights data +- Comment reply drafting (brand-aligned tone) +- Content calendar generation (weekly/monthly) +- Caption writing with hashtag optimization +- Reels/Stories idea generation + +## Content 4 Pillars +1. **Q&A Reels (40%)**: YouTube Q&A -> 30-60s reels, Dark theme +2. **Daily Life (30%)**: Hospital atmosphere, staff, meals; photo-centric +3. **Card News (20%)**: Procedure info summaries, carousel 5-7 slides +4. **Patient Episodes (10%)**: Real model stories with disclaimer + +## Brand Voice +- 해요체 60% + 습니다체 40% (friendly but restrained) +- "여러분" preferred; Max 1-2 soft emoji +- Slogan: "티안나게 수술하고, 티나게 예뻐지는" + +## Posting Schedule +- Feed: 2-3x/week (1080x1350px) +- Stories: Daily 1-2x +- Reels: 1-2x/week (30-60s) +- Best times: 9AM, 12PM, 7PM + +## DM Conversion Funnel +Instagram -> DM -> KakaoTalk -> Consultation -> Booking (30% target) + +## Medical Compliance +- No price disclosure, no testimonial quotes, no competitor comparison +- B&A posts require disclaimer diff --git a/.claude/commands/jamie-youtube-manager.md b/.claude/commands/jamie-youtube-manager.md new file mode 100644 index 0000000..0ef5d78 --- /dev/null +++ b/.claude/commands/jamie-youtube-manager.md @@ -0,0 +1,39 @@ +--- +description: YouTube SEO auditor and content manager for Jamie Plastic Surgery Clinic +--- + +# Jamie YouTube Manager + +YouTube SEO audit, metadata optimization, schema generation, and API batch updates for Jamie Clinic (18 videos). + +## Triggers +- "YouTube SEO", "YT optimization" +- "Jamie 유튜브", "영상 최적화" + +## API Scripts + +```bash +cd ~/Project/our-claude-skills/custom-skills/43-jamie-youtube-manager/code/scripts +source venv/bin/activate + +python jamie_youtube_api_test.py # Test connection +python jamie_video_info.py https://youtu.be/ID -v # Get video info +python jamie_channel_status.py # Channel status +python jamie_youtube_batch_update.py --dry-run # Preview batch update +python jamie_youtube_batch_update.py --execute # Execute update +``` + +## Capabilities +- Video SEO Audit (score /100): title, description, chapters, captions, schema readiness +- Metadata Optimization: title formula `[시술명] + [핵심 베네핏] | 제이미성형외과` +- Description Generation with timestamps, CTA, contact info, disclaimers +- Chapter/Timestamp Generation from transcripts +- VideoObject Schema (JSON-LD) with Clip schema for chapters +- Shorts Optimization checklist +- Batch metadata update via YouTube API + +## Medical Compliance +- Educational explanations allowed; testimonials/guarantees prohibited +- Required disclaimer: `※ 본 영상은 정보 제공 목적이며, 개인에 따라 결과가 다를 수 있습니다.` + +## i18n Priority: Korean (required) > English (high) > Japanese/Chinese (medium) diff --git a/.claude/commands/jamie-youtube-subtitle-checker.md b/.claude/commands/jamie-youtube-subtitle-checker.md new file mode 100644 index 0000000..94ad24f --- /dev/null +++ b/.claude/commands/jamie-youtube-subtitle-checker.md @@ -0,0 +1,50 @@ +--- +description: YouTube SBV subtitle correction and metadata generation for Jamie Clinic +--- + +# Jamie YouTube Subtitle Checker + +SBV subtitle file typo correction and YouTube metadata generation. + +## Triggers +- "check subtitles", "subtitle QA" +- "자막 교정", "SBV 파일" + +## Quick Commands + +```bash +# SBV typo correction +python scripts/sbv_corrector.py --input "subtitle.sbv" --output "subtitle_corrected.sbv" + +# Chapter extraction +python scripts/chapter_extractor.py --input "subtitle.sbv" + +# Full workflow (correction + chapters + metadata) +python scripts/process_subtitle.py --input "subtitle.sbv" --output-dir "./output" +``` + +## Workflow +1. SBV parsing and text extraction +2. Typo auto-correction (typo_dictionary.json) +3. Medical terminology standardization +4. Chapter timestamp extraction +5. YouTube metadata generation + +## Key Typo Patterns + +| Category | Wrong | Correct | +|----------|-------|---------| +| Brand | 데이미, 재이미 | 제이미 | +| Procedure | 쌍거풀, 쌍커풀 | 쌍꺼풀 | +| Medical | 절계, 절게 | 절개 | + +## Output Files +- `{filename}_corrected.sbv` -- Corrected subtitles +- `youtube_video_info.md` -- YouTube metadata (title, chapters, description, hashtags) +- `correction_report.md` -- Typo change log + +## Quality Checklist +- Brand name "제이미성형외과" correct +- Procedure names use official terminology +- Chapters include 0:00 intro +- 3-5 hashtags included diff --git a/.claude/commands/our-settings-audit.md b/.claude/commands/our-settings-audit.md new file mode 100644 index 0000000..480638f --- /dev/null +++ b/.claude/commands/our-settings-audit.md @@ -0,0 +1,55 @@ +--- +description: Claude Code settings optimization and token audit +--- + +# Claude Code Settings Optimizer + +Self-audit and optimize Claude Code configuration for maximum token efficiency and performance. + +## Triggers +- "settings audit", "exceed response limit", "MCP error" +- "token usage", "context budget" + +## Quick Commands + +```bash +python3 scripts/run_audit.py +python3 scripts/analyze_tokens.py +python3 scripts/auto_fix.py --apply +``` + +## Audit Scope + +### Token Budget Targets + +| Component | Target | Max | +|-----------|--------|-----| +| CLAUDE.md | 2,000 | 3,000 | +| MCP Servers | 5,000 | 10,000 | +| Skills metadata | 500 | 1,000 | +| Working space | >140,000 | -- | + +### MCP Server Strategy + +| Strategy | Criteria | +|----------|----------| +| `always` | Essential for daily work (Playwright, Notion) | +| `lazy` | Occasionally needed (GitHub, Slack) | +| `disable` | Rarely used or token-heavy | + +Every MCP server MUST have `serverInstructions` for Tool Search. + +### CLAUDE.md Health Checks +- Line count (warn >200), token estimate (warn >3,000) +- Structure quality, redundant info, unnecessary repetition + +### Auto-Fix (safe, with backup) +- Add `serverInstructions` to MCP servers +- Add frontmatter to commands missing it +- Suggest CLAUDE.md compression + +## Output Report +- Token budget breakdown and percentages +- Health status (Good/Needs Attention/Critical) +- Findings (Critical/Warnings/Passing) +- Prioritized recommendations diff --git a/.claude/commands/ourdigital-ad-manager.md b/.claude/commands/ourdigital-ad-manager.md new file mode 100644 index 0000000..5f448ed --- /dev/null +++ b/.claude/commands/ourdigital-ad-manager.md @@ -0,0 +1,38 @@ +--- +description: Ad copywriting and keyword research for OurDigital marketing +--- + +# OurDigital Ad Manager + +Automated ad copywriting and keyword research. Activated with "ourdigital" keyword. + +## Triggers +- "ourdigital ad copy", "ourdigital 광고 카피" +- "ourdigital keyword", "ourdigital 키워드" + +## Scripts + +```bash +# Generate Google Ads copy +python code/scripts/generate_ads.py --product "SEO 컨설팅" --platform google --variations 3 + +# Keyword research +python code/scripts/keyword_research.py --seed "데이터 분석" --market korea + +# Bulk ad generation +python code/scripts/generate_ads.py --input keywords.csv --platform naver --output ads.csv +``` + +## Platform Specs + +| Platform | Headline | Description | +|----------|----------|-------------| +| Google | 30x3 chars | 90x2 chars | +| Naver | 25 chars | 45 chars | +| Meta | 40 chars | 125 chars | + +## Capabilities +- Single/bulk ad copy generation with USP and CTA +- Keyword volume research with competitor analysis +- Competitor ad analysis +- Output: JSON, CSV (bulk upload), Markdown report diff --git a/.claude/commands/ourdigital-backoffice.md b/.claude/commands/ourdigital-backoffice.md new file mode 100644 index 0000000..3ae108a --- /dev/null +++ b/.claude/commands/ourdigital-backoffice.md @@ -0,0 +1,39 @@ +--- +description: Business document creation (quotes, proposals, cost analysis) for OurDigital +--- + +# OurDigital Backoffice + +Business document generation with pricing automation. Activated with "ourdigital" keyword. + +## Triggers +- "ourdigital quote", "ourdigital 견적서" +- "ourdigital proposal", "ourdigital 제안서" + +## Scripts + +```bash +# Generate quote +python code/scripts/generate_quote.py --client "ABC Company" --services "seo_audit,gtm_setup" + +# Create proposal +python code/scripts/create_proposal.py --client "XYZ Corp" --project "마케팅 자동화" --duration "3months" + +# Cost analysis +python code/scripts/cost_analysis.py --project "GTM 구축" --investment 5000000 --period 12months +``` + +## Service Codes & Base Prices + +| Code | Service | Price | +|------|---------|-------| +| `seo_audit` | SEO Technical Audit | 4,000,000 | +| `seo_monthly` | SEO Monthly | 2,000,000/월 | +| `gtm_setup` | GTM Setup | 3,000,000 | +| `ga4_setup` | GA4 Implementation | 2,000,000 | +| `dashboard` | Dashboard Dev | 4,000,000 | +| `consulting` | Consulting Day | 1,500,000/일 | +| `workshop` | Workshop | 1,500,000/회 | + +## Output Formats +- Markdown (default), PDF, DOCX diff --git a/.claude/commands/ourdigital-blog.md b/.claude/commands/ourdigital-blog.md new file mode 100644 index 0000000..31261fc --- /dev/null +++ b/.claude/commands/ourdigital-blog.md @@ -0,0 +1,42 @@ +--- +description: Korean blog drafting for blog.ourdigital.org with Ghost CMS integration +--- + +# OurDigital Blog + +Korean blog draft creation for blog.ourdigital.org. Activated with "ourdigital" keyword. + +## Triggers +- "ourdigital blog", "ourdigital 블로그" +- "ourdigital 한국어 포스트" + +## Channel Profile + +- URL: blog.ourdigital.org +- Language: Korean (영문 전문용어 병기) +- Tone: Analytical, Educational +- Platform: Ghost CMS +- Length: 1,500-3,000자 + +## Workflow + +1. **Topic Clarification**: 주제, 타겟 독자, 깊이 수준 +2. **Draft Structure**: 도입부(Hook) -> 본론(3-5 포인트) -> 결론(Summary + 열린 질문) +3. **Writing Style**: 분석적+개인적 톤, 한글 기본 영문 병기, 관찰->분석->함의 +4. **SEO Metadata**: title(60자), meta_description(155자), slug, tags +5. **Output**: Markdown with YAML frontmatter + +## Scripts + +```bash +python shared/scripts/export_blog.py --output ulysses +python shared/scripts/ghost_publish.py --draft +``` + +## Export Options +1. Ulysses -> `$ULYSSES_EXPORT_PATH` +2. Ghost Draft -> API push +3. Local -> `./output/blog/` + +## Brand Compliance +- 분석적 톤, 기술+인간적 함의, 전문용어 영문 병기, 1,500-3,000자 diff --git a/.claude/commands/ourdigital-document.md b/.claude/commands/ourdigital-document.md new file mode 100644 index 0000000..bea3aee --- /dev/null +++ b/.claude/commands/ourdigital-document.md @@ -0,0 +1,47 @@ +--- +description: Notion-to-presentation workflow for OurDigital branded documents +--- + +# OurDigital Document + +Automated Notion-to-presentation pipeline with brand styling. + +## Triggers +- "ourdigital document", "ourdigital 문서" +- "ourdigital presentation", "ourdigital 프레젠테이션" + +## Pipeline + +``` +extract_notion.py -> synthesize_content.py -> apply_brand.py + | | | + research.json synthesis.json presentation.pptx +``` + +## Quick Start + +```bash +python scripts/run_workflow.py --notion-url [URL] --output presentation.pptx + +# Step-by-step +python scripts/extract_notion.py [URL] > research.json +python scripts/synthesize_content.py research.json > synthesis.json +python scripts/apply_brand.py synthesis.json --output presentation.pptx +``` + +## Scripts + +| Script | Purpose | +|--------|---------| +| `run_workflow.py` | Orchestrate full pipeline | +| `extract_notion.py` | Extract content from Notion | +| `synthesize_content.py` | Analyze and structure | +| `apply_brand.py` | Apply corporate styling | + +## Output Formats +- PowerPoint (.pptx) +- Figma (via API) +- HTML preview + +## Brand Configuration +See `code/assets/brand_config.json` for logo, colors (OurDigital palette), fonts (Poppins/Lora), slide templates. diff --git a/.claude/commands/ourdigital-journal.md b/.claude/commands/ourdigital-journal.md new file mode 100644 index 0000000..0b6d027 --- /dev/null +++ b/.claude/commands/ourdigital-journal.md @@ -0,0 +1,44 @@ +--- +description: English essay creation for journal.ourdigital.org with Ghost CMS integration +--- + +# OurDigital Journal + +English essay and article creation for journal.ourdigital.org. Activated with "ourdigital" keyword. + +## Triggers +- "ourdigital journal", "ourdigital essay" +- "ourdigital English article" + +## Channel Profile + +- URL: journal.ourdigital.org +- Language: English +- Tone: Conversational, Poetic, Reflective +- Platform: Ghost CMS +- Length: 1,000-2,000 words + +## Workflow + +1. **Topic Exploration**: Angle, audience, depth level +2. **Essay Structure**: Opening (evocative) -> Exploration (3-4 observations) -> Synthesis -> Closing (open-ended) +3. **Writing Style**: First-person reflective, philosophical-technical hybrid, epistemic humility, cultural bridging +4. **Output**: Markdown with YAML frontmatter (title, meta_description, slug, tags) + +## Content Types + +| Type | Length | +|------|--------| +| Personal Essay | 1,000-1,500 words | +| Cultural Observation | 1,500-2,000 words | +| Industry Insight | 1,200-1,800 words | + +## Scripts + +```bash +python shared/scripts/ghost_publish.py --file essay.md --channel journal --draft +``` + +## Export Options +1. Ghost Draft -> API push +2. Local -> `./output/journal/` diff --git a/.claude/commands/ourdigital-skill-creator.md b/.claude/commands/ourdigital-skill-creator.md new file mode 100644 index 0000000..17247e2 --- /dev/null +++ b/.claude/commands/ourdigital-skill-creator.md @@ -0,0 +1,39 @@ +--- +description: Meta skill for creating new OurDigital Claude Skills with scaffolding +--- + +# OurDigital Skill Creator + +Create and manage OurDigital Claude Skills with automated scaffolding and Notion sync. + +## Triggers +- "ourdigital 스킬 만들기", "ourdigital skill creator" +- "create ourdigital skill", "new ourdigital skill" + +## Quick Start + +```bash +python shared/scripts/init_skill.py {skill-name} --number XX +python shared/scripts/validate_skill.py XX-ourdigital-{skill-name} +python shared/scripts/sync_notion.py XX-ourdigital-{skill-name} --action=create +``` + +## Workflow + +1. **Suitability Check**: Clear trigger, focused scope, reusable resources, no overlap (>=3 passes) +2. **Requirements Q&A**: Purpose, trigger, tools, output, environment +3. **Generate Structure**: `mkdir -p XX-ourdigital-{name}/{code,desktop,shared/{references,templates,scripts},docs/logs}` +4. **YAML Frontmatter**: Standard template with name, description, triggers, features +5. **Validation**: Directory structure, SKILL.md in both versions, content 800-1,200 words +6. **Notion Sync**: Record to Working with AI database + +## Skill Categories + +| Number | Category | +|--------|----------| +| 01-09 | OurDigital Core | +| 10 | Meta (this skill) | +| 11-19 | SEO | +| 20-29 | GTM/Analytics | +| 31-39 | Notion | +| 40-49 | Jamie Clinic | diff --git a/.claude/commands/ourdigital-trainer.md b/.claude/commands/ourdigital-trainer.md new file mode 100644 index 0000000..0a98c7f --- /dev/null +++ b/.claude/commands/ourdigital-trainer.md @@ -0,0 +1,42 @@ +--- +description: Training material creation and workshop planning for OurDigital +--- + +# OurDigital Trainer + +Training material generation with template-based curriculum and evaluation forms. + +## Triggers +- "ourdigital training", "ourdigital 교육" +- "ourdigital workshop", "ourdigital 워크샵" + +## Scripts + +```bash +# Generate curriculum +python code/scripts/generate_curriculum.py --topic "데이터 리터러시" --duration "4hours" --audience "마케터" + +# Create workshop agenda +python code/scripts/create_workshop.py --topic "AI 활용법" --format "half-day" --participants 20 + +# Generate evaluation form +python code/scripts/create_evaluation.py --training "SEO 기초" --type "pre-post" +``` + +## Workshop Formats + +| Format | Duration | Modules | +|--------|----------|---------| +| mini | 2 hours | 2 | +| half-day | 4 hours | 3-4 | +| full-day | 8 hours | 5-6 | +| series | Multiple | Custom | + +## Evaluation Types +- pre-post: 학습 전후 비교 +- satisfaction: 만족도 조사 +- knowledge: 지식 평가 +- application: 현업 적용도 + +## Output Formats +- Markdown (default), JSON, Google Slides export diff --git a/.claude/commands/seo-comprehensive-audit.md b/.claude/commands/seo-comprehensive-audit.md new file mode 100644 index 0000000..e2afe60 --- /dev/null +++ b/.claude/commands/seo-comprehensive-audit.md @@ -0,0 +1,40 @@ +--- +description: Unified 6-stage SEO audit orchestrator with weighted health score +--- + +# SEO Comprehensive Audit + +Runs 6 sub-skill audits, merges results into unified report with weighted health score (0-100), pushes to Notion. + +## Triggers +- "comprehensive SEO", "full SEO audit" +- "종합 SEO 감사" + +## Quick Start + +```bash +python scripts/seo_audit_orchestrator.py --url https://example.com +python scripts/seo_audit_orchestrator.py --url https://example.com --skip-local --skip-gsc +python scripts/seo_audit_orchestrator.py --url https://example.com --json +``` + +## Pipeline (6 Stages) + +| Stage | Audit | Weight | +|-------|-------|--------| +| 1 | Technical SEO (robots, sitemap) | 20% | +| 2 | On-Page SEO (meta, headings, links) | 20% | +| 3 | Core Web Vitals (LCP, CLS, INP) | 25% | +| 4 | Schema Validation | 15% | +| 5 | Local SEO (GBP, Naver, NAP) | 10% | +| 6 | Search Console (rankings, CTR) | 10% | + +## Stage 5: Local SEO Key Requirements +- Business Identity extraction is MANDATORY first step +- Korean market: GBP and Naver Smart Place = Critical; Kakao Map = High +- GBP/Naver Map are JS-rendered; report unfound as "not discoverable via web search" + +## Notion Output +- Database ID: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef` +- Report in Korean; technical English terms as-is +- Audit ID format: COMP-YYYYMMDD-NNN diff --git a/.claude/commands/seo-core-web-vitals.md b/.claude/commands/seo-core-web-vitals.md new file mode 100644 index 0000000..8451580 --- /dev/null +++ b/.claude/commands/seo-core-web-vitals.md @@ -0,0 +1,45 @@ +--- +description: Core Web Vitals analyzer using PageSpeed Insights API (LCP, CLS, INP, FID) +--- + +# SEO Core Web Vitals + +PageSpeed Insights API client for CWV measurement and recommendations. + +## Triggers +- "Core Web Vitals", "page speed" +- "LCP", "CLS", "INP", "performance audit" + +## Quick Start + +```bash +export PAGESPEED_API_KEY=your_api_key +python scripts/pagespeed_client.py --url https://example.com +python scripts/pagespeed_client.py --url https://example.com --strategy both +python scripts/pagespeed_client.py --urls urls.txt --output results.json +``` + +## CWV Thresholds + +| Metric | Good | Poor | +|--------|------|------| +| LCP | <=2.5s | >4s | +| FID | <=100ms | >300ms | +| CLS | <=0.1 | >0.25 | +| INP | <=200ms | >500ms | + +## Common Fixes + +| Issue | Fix | +|-------|-----| +| Large LCP | Optimize images, preload critical resources | +| High CLS | Set image dimensions, avoid injected content | +| Poor INP | Reduce JavaScript, optimize event handlers | +| Slow TTFB | Improve server response, use CDN | + +## Rate Limits +- No API key: 25/day; With key: 25,000/day + +## Notion Output +- Database: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef` +- Korean report, Audit ID: [TYPE]-YYYYMMDD-NNN diff --git a/.claude/commands/seo-local-audit.md b/.claude/commands/seo-local-audit.md new file mode 100644 index 0000000..e71b90f --- /dev/null +++ b/.claude/commands/seo-local-audit.md @@ -0,0 +1,42 @@ +--- +description: Local SEO audit for Korean-market businesses (GBP, Naver Place, NAP, citations) +--- + +# SEO Local Audit + +Korean-market local SEO: business identity, GBP, Naver Smart Place, Kakao Map, NAP consistency, citations, LocalBusiness schema. + +## Triggers +- "local SEO", "Google Business Profile" +- "Naver Place", "NAP consistency" + +## Workflow (7 Steps) + +1. **Business Identity (MANDATORY FIRST)**: Extract from JSON-LD, contact page, footer +2. **Website NAP Extraction**: Establish canonical NAP baseline +3. **GBP Verification**: Layered discovery (provided URL -> website -> WebSearch fallback) +4. **Naver Smart Place**: Layered discovery with Korean search queries +5. **Kakao Map Verification**: Check website links, then WebSearch +6. **Citation Discovery**: Industry directories (강남언니, 바비톡, 굿닥, etc.) +7. **LocalBusiness Schema Validation**: JSON-LD completeness check + +## Scoring Weights + +| Component | Weight | +|-----------|--------| +| NAP Consistency | 20% | +| GBP Optimization | 20% | +| Naver Smart Place | 20% | +| LocalBusiness Schema | 15% | +| Kakao Map | 10% | +| Citations | 10% | +| Business Identity | 5% | + +## Key Rules +- GBP and Naver Map are JS-rendered -- use WebSearch for discovery +- "Not discoverable via web search" != "does not exist" +- Korean market: Naver Smart Place is as important as GBP + +## Notion Output +- Database: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef` +- Category: Local SEO, Audit ID: LOCAL-YYYYMMDD-NNN diff --git a/.claude/commands/seo-on-page-audit.md b/.claude/commands/seo-on-page-audit.md new file mode 100644 index 0000000..63dc31b --- /dev/null +++ b/.claude/commands/seo-on-page-audit.md @@ -0,0 +1,40 @@ +--- +description: On-page SEO analyzer for meta tags, headings, links, images, and Open Graph +--- + +# SEO On-Page Audit + +Single-page optimization analysis: meta tags, heading structure, links, images, OG data. + +## Triggers +- "on-page SEO", "meta tags" +- "heading analysis", "page SEO check" + +## Quick Start + +```bash +python scripts/page_analyzer.py --url https://example.com +python scripts/page_analyzer.py --url https://example.com --json +python scripts/page_analyzer.py --urls urls.txt +``` + +## Analysis Categories +- **Meta Tags**: Title (length, keywords), description, canonical, robots +- **Heading Structure**: H1 presence/count, hierarchy validation, keyword placement +- **Links**: Internal/external count, broken links, nofollow distribution +- **Images**: Alt attributes, file sizes, lazy loading +- **Open Graph**: OG title/description/image, Twitter Cards + +## Common Issues + +| Issue | Severity | +|-------|----------| +| Missing H1 | High | +| Title too long (>60) | Medium | +| No meta description | High | +| Images without alt | Medium | +| Multiple H1 tags | Medium | + +## Notion Output +- Database: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef` +- Korean report, Audit ID: [TYPE]-YYYYMMDD-NNN diff --git a/.claude/commands/seo-search-console.md b/.claude/commands/seo-search-console.md new file mode 100644 index 0000000..ecee715 --- /dev/null +++ b/.claude/commands/seo-search-console.md @@ -0,0 +1,42 @@ +--- +description: Google Search Console data retrieval (rankings, CTR, impressions, sitemaps) +--- + +# SEO Search Console + +GSC API client for search analytics, sitemap status, and index coverage. + +## Triggers +- "Search Console", "rankings" +- "GSC data", "search performance" + +## Quick Start + +```bash +python scripts/gsc_client.py --site sc-domain:example.com --action summary +python scripts/gsc_client.py --site sc-domain:example.com --action queries --limit 100 +python scripts/gsc_client.py --site sc-domain:example.com --action pages +``` + +## Configuration + +- Credentials: `~/.credential/ourdigital-seo-agent.json` +- Service account: `ourdigital-seo-agent@ourdigital-insights.iam.gserviceaccount.com` + +## Actions + +| Action | Description | +|--------|-------------| +| `summary` | Clicks, impressions, CTR, position overview | +| `queries` | Top search queries | +| `pages` | Top pages by clicks | +| `sitemaps` | Sitemap submission status | +| `coverage` | Index coverage issues | + +## Site Property Formats +- Domain: `sc-domain:example.com` +- URL prefix: `https://www.example.com/` + +## Notion Output +- Database: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef` +- Korean report, Audit ID: [TYPE]-YYYYMMDD-NNN diff --git a/.claude/commands/seo-technical-audit.md b/.claude/commands/seo-technical-audit.md new file mode 100644 index 0000000..53d6fd0 --- /dev/null +++ b/.claude/commands/seo-technical-audit.md @@ -0,0 +1,44 @@ +--- +description: Technical SEO audit for robots.txt, XML sitemap, and URL crawlability +--- + +# SEO Technical Audit + +Crawlability fundamentals: robots.txt validation, XML sitemap analysis, URL accessibility checking. + +## Triggers +- "technical SEO", "crawlability" +- "robots.txt", "sitemap validation" + +## Quick Start + +```bash +python scripts/robots_checker.py --url https://example.com +python scripts/sitemap_validator.py --url https://example.com/sitemap.xml +python scripts/sitemap_crawler.py --sitemap https://example.com/sitemap.xml +``` + +## Scripts + +| Script | Purpose | +|--------|---------| +| `robots_checker.py` | Parse robots.txt, test URL rules | +| `sitemap_validator.py` | Validate XML structure, URL count, lastmod | +| `sitemap_crawler.py` | Async check URL accessibility, HTTP status | + +## Common Issues Detected + +| Issue | Severity | +|-------|----------| +| Missing sitemap declaration | Medium | +| Blocking CSS/JS resources | High | +| URLs returning 404 | High | +| Exceeds 50,000 URL limit | High | +| Non-canonical URLs included | Medium | + +## Config +- `CRAWL_DELAY=1.0`, `MAX_CONCURRENT=20`, `REQUEST_TIMEOUT=30` + +## Notion Output +- Database: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef` +- Korean report, Audit ID: [TYPE]-YYYYMMDD-NNN diff --git a/AGENTS.md b/AGENTS.md index 105a761..f266512 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -224,7 +224,7 @@ For long-running tasks, use `run_in_background: true`: ``` # Good candidates for background execution: -- Full skill audit across all 52 skills +- Full skill audit across all 62 skills - Running Python tests on multiple skills - Generating comprehensive documentation diff --git a/CLAUDE.md b/CLAUDE.md index 8edf28a..c8f2c42 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -7,7 +7,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co **GitHub**: https://github.com/ourdigital/our-claude-skills This is a Claude Skills collection repository containing: -- **custom-skills/**: 62 custom skills for OurDigital workflows, SEO, GTM, Jamie Brand, NotebookLM, Notion, D.intelligence Agent Corps, Reference Curation, Mac Optimizer, and Multi-Agent Collaboration +- **custom-skills/**: 62 custom skills for OurDigital workflows, SEO, GTM, Jamie Brand, NotebookLM, Notion, D.intelligence Agent Corps, Reference Curation, Mac Optimizer, TUI Designer, and Multi-Agent Collaboration - **example-skills/**: Reference examples from Anthropic's official skills repository - **official-skills/**: Notion integration skills (3rd party) - **reference/**: Skill format requirements documentation @@ -85,7 +85,6 @@ This is a Claude Skills collection repository containing: |---|-------|---------|---------| | 40 | jamie-brand-editor | Branded content generation | "write Jamie blog", "Jamie content" | | 41 | jamie-brand-audit | Content review/compliance | "review content", "brand audit" | -| 42 | jamie-journal-editor | Clinic journal editing | "Jamie journal", "진료 일지" | | 43 | jamie-youtube-manager | YouTube SEO audit & management | "YouTube SEO", "YT optimization" | | 44 | jamie-youtube-subtitle-checker | YouTube subtitle validation | "check subtitles", "subtitle QA" | | 45 | jamie-instagram-manager | Instagram account management | "Instagram management", "IG strategy" | @@ -121,11 +120,12 @@ This is a Claude Skills collection repository containing: **User Guide:** `custom-skills/dintel-shared/USER-GUIDE.md` -### System Tools (92) +### System & Design Tools (92-93) | # | Skill | Purpose | Trigger | |---|-------|---------|---------| | 92 | mac-optimizer | macOS system health audit & optimization (Claude Code only) | "audit my mac", "system health", "clean up caches", "check security", "update packages" | +| 93 | tui-designer | TUI wizard interface design (Norton Commander / Gopher style, Rich) | "build TUI", "CLI wizard", "terminal UI", "Rich TUI" | ### Reference Curator & Multi-Agent (90-91) @@ -253,15 +253,14 @@ our-claude-skills/ │ ├── 34-seo-reporting-dashboard/ │ │ │ ├── 60-gtm-audit/ -│ ├── 61-gtm-manager/ -│ ├── 62-gtm-guardian/ +│ ├── 61-gtm-editor/ +│ ├── 62-gtm-validator/ │ │ │ ├── 31-notion-organizer/ │ ├── 32-notion-writer/ │ │ │ ├── 40-jamie-brand-editor/ │ ├── 41-jamie-brand-audit/ -│ ├── 42-jamie-journal-editor/ │ ├── 43-jamie-youtube-manager/ │ ├── 44-jamie-youtube-subtitle-checker/ │ ├── 45-jamie-instagram-manager/ @@ -298,6 +297,8 @@ our-claude-skills/ │ │ │ ├── 92-mac-optimizer/ # macOS system health toolkit (Claude Code only) │ │ +│ ├── 93-tui-designer/ # TUI wizard design (Rich, Norton Commander style) +│ │ │ └── 99_archive/ │ ├── example-skills/skills-main/ diff --git a/README.md b/README.md index 65a06f2..7eb9aa9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > **Internal R&D Repository** - This repository is restricted for internal use only. -A collection of **64 custom Claude Skills** for OurDigital workflows, D.intelligence Agent Corps (9-agent business operations suite), Jamie Plastic Surgery Clinic brand management, SEO/GTM tools, NotebookLM automation, Notion integrations, reference documentation curation, macOS system optimization, and multi-agent collaboration. +A collection of **62 custom Claude Skills** for OurDigital workflows, D.intelligence Agent Corps (9-agent business operations suite), Jamie Plastic Surgery Clinic brand management, SEO/GTM tools, NotebookLM automation, Notion integrations, reference documentation curation, macOS system optimization, TUI wizard design, and multi-agent collaboration. ## Quick Install @@ -105,7 +105,6 @@ cd our-claude-skills/custom-skills/_ourdigital-shared |---|-------|---------| | 40 | `jamie-brand-editor` | Branded content generation | | 41 | `jamie-brand-audit` | Content review/compliance | -| 42 | `jamie-journal-editor` | Clinic journal editing | | 43 | `jamie-youtube-manager` | YouTube SEO audit & management | | 44 | `jamie-youtube-subtitle-checker` | YouTube subtitle validation | | 45 | `jamie-instagram-manager` | Instagram account management | @@ -121,11 +120,12 @@ cd our-claude-skills/custom-skills/_ourdigital-shared **Prerequisites:** `pip install notebooklm-py && playwright install chromium && notebooklm login` -### System Tools (92) +### System & Design Tools (92-93) | # | Skill | Purpose | |---|-------|---------| | 92 | `mac-optimizer` | macOS system health audit & optimization (Claude Code only) | +| 93 | `tui-designer` | TUI wizard interface design (Norton Commander / Gopher style, Rich) | ### Reference Curator & Multi-Agent (90-91) @@ -184,6 +184,7 @@ our-claude-skills/ │ ├── 90-reference-curator/ │ ├── 91-multi-agent-guide/ │ ├── 92-mac-optimizer/ +│ ├── 93-tui-designer/ │ └── 99_archive/ │ ├── example-skills/ # Anthropic reference examples diff --git a/custom-skills/11-seo-comprehensive-audit/code/gotcha/JHR-josunhotel.md b/custom-skills/11-seo-comprehensive-audit/code/gotcha/JHR-josunhotel.md new file mode 100644 index 0000000..01d1ddc --- /dev/null +++ b/custom-skills/11-seo-comprehensive-audit/code/gotcha/JHR-josunhotel.md @@ -0,0 +1,28 @@ +# JHR — josunhotel.com Gotchas + +Client: **JHR** (Josun Hotels & Resorts / 조선호텔앤리조트) +Domain: josunhotel.com + subdomains (gjb, gjj, jpg, grp) + +--- + +## 1. Intentionally Truncated Directory Names in robots.txt + +**Date discovered**: 2026-03-20 +**Audit ID**: COMP-20260320-001 + +The following `Disallow` paths in robots.txt look like typos but are **intentional directory names** on the server: + +| robots.txt path | Looks like it should be | Actual status | +|-----------------|------------------------|---------------| +| `/cnfirm` | `/confirm` | **Intentional** — real directory name | +| `/mber` | `/member` | **Intentional** — real directory name | + +**Do NOT recommend renaming these** in audit reports. The server-side application uses these truncated names by design. + +### Context + +The josunhotel.com backend (Java/.do endpoints) uses shortened directory names for certain internal paths. This is likely a legacy naming convention from the original application architecture. + +### Audit Impact + +When running Technical SEO audits (Stage 1), skip the "typo in Disallow paths" finding for `/cnfirm` and `/mber`. These are valid paths that correctly block crawler access to confirmation and member-related pages. diff --git a/custom-skills/11-seo-comprehensive-audit/code/gotcha/JHR-lescapehotel.md b/custom-skills/11-seo-comprehensive-audit/code/gotcha/JHR-lescapehotel.md new file mode 100644 index 0000000..04f1eec --- /dev/null +++ b/custom-skills/11-seo-comprehensive-audit/code/gotcha/JHR-lescapehotel.md @@ -0,0 +1,30 @@ +# JHR — lescapehotel.com Gotchas + +Client: **JHR** (Josun Hotels & Resorts) +Domain: lescapehotel.com → les.josunhotel.com (migrated) + +--- + +## 1. Domain Migration Complete — Monitor Redirects & Link Juice + +**Date discovered**: 2025-12-14 +**Updated**: 2026-03-20 +**Status**: Migration COMPLETE + +The L'Escape Hotel domain migration from `lescapehotel.com` to `les.josunhotel.com` has been completed. + +### What to Monitor (Watchtower) + +- **301 redirects**: Verify all old lescapehotel.com URLs still 301 to correct les.josunhotel.com counterparts +- **Link juice preservation**: Check that backlinks from external sites pointing to lescapehotel.com are passing authority through redirects +- **Redirect chains**: Watch for double redirects (lescapehotel.com → old intermediate → les.josunhotel.com) +- **GSC coverage**: Monitor les.josunhotel.com indexing in Google Search Console +- **Referring domains**: Track referring domain count in Ahrefs/GSC to ensure backlink equity is maintained + +### Audit Checklist (Run Periodically) + +1. Sample 10-20 old lescapehotel.com URLs — verify 301 status +2. Check for any 404s on les.josunhotel.com that should have redirects +3. Compare organic traffic trends pre/post migration +4. Verify old sitemap URLs are all redirecting properly +5. Check Naver Search Advisor for indexing status diff --git a/custom-skills/11-seo-comprehensive-audit/code/gotcha/SLA-shillahotels.md b/custom-skills/11-seo-comprehensive-audit/code/gotcha/SLA-shillahotels.md new file mode 100644 index 0000000..064459a --- /dev/null +++ b/custom-skills/11-seo-comprehensive-audit/code/gotcha/SLA-shillahotels.md @@ -0,0 +1,40 @@ +# SLA — shillahotels.com Gotchas + +Client: **SLA** (Shilla Hotels & Resorts / 신라호텔) +Domain: shillahotels.com + +--- + +## 1. www1 / www2 Are Dev/Stage Hosts, NOT Production + +**Date discovered**: 2026-03-20 +**Context**: SLA new integrated website under construction + +The Shilla Hotels domain uses numbered subdomains for development environments: + +| Subdomain | Purpose | Status | +|-----------|---------|--------| +| `www1.shillahotels.com` | Development | Active — deployed intermittently | +| `www2.shillahotels.com` | Staging | Active — deployed intermittently | +| `www.shillahotels.com` | Production (current) | Live | +| TBD (new integrated site) | Production (future) | **Target launch: end of June 2026** | + +**Do NOT run technical SEO audits against www1 or www2** unless specifically instructed. These are pre-production environments and will have: +- No robots.txt +- No XML sitemap +- Incomplete meta tags +- Missing canonical/hreflang tags + +These are expected states for dev/stage, not audit findings. + +### When to Scan + +The client will notify when www1/www2 need technical SEO element checks. Do NOT proactively audit these subdomains. + +## 2. No robots.txt or Sitemap on Dev/Stage Hosts + +**Date discovered**: 2026-03-20 + +robots.txt and sitemap.xml are intentionally not deployed to www1 and www2. This is expected for pre-production environments. Do NOT flag as issues. + +Wait for client instruction before scanning technical SEO elements on these hosts.