#!/usr/bin/env python3 """ D.intelligence Company Credential Generator Brand-compliant DOCX following the D.intelligence Korean Writing Style Guide. Tone: ~합니다 존칭 서술체 (service/company intro style) Agent #71 (dintel-brand-editor) v1.1.0 — D.intelligence Agent Corps Shared brand constants: dintel-shared/src/dintel/brand.py """ from docx import Document from docx.shared import Inches, Pt, Cm, RGBColor from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT from docx.oxml.ns import qn import os # ── Brand Colors ────────────────────────────────────── # See also: dintel-shared/src/dintel/brand.py for canonical values BRAND_DARK = RGBColor(0x1A, 0x1A, 0x2E) # Dark navy BRAND_PRIMARY = RGBColor(0x2D, 0x2D, 0x44) # Primary text BRAND_ACCENT = RGBColor(0xC8, 0xD6, 0x2C) # Lime/yellow accent BRAND_GRAY = RGBColor(0x66, 0x66, 0x66) # Body text gray BRAND_LIGHT_BG = RGBColor(0xF5, 0xF5, 0xF0) # Light background BRAND_WHITE = RGBColor(0xFF, 0xFF, 0xFF) OUTPUT_PATH = os.path.expanduser("~/Documents/D.intelligence_Company_Credential.docx") def set_cell_shading(cell, color_hex): """Set cell background color.""" shading = cell._element.get_or_add_tcPr() shading_elem = shading.makeelement(qn('w:shd'), { qn('w:fill'): color_hex, qn('w:val'): 'clear', }) shading.append(shading_elem) def add_section_label(doc, label_text): """Add ALL CAPS section label (brand rule: section labels in ALL CAPS).""" p = doc.add_paragraph() p.space_before = Pt(24) p.space_after = Pt(4) run = p.add_run(label_text.upper()) run.font.size = Pt(9) run.font.color.rgb = BRAND_ACCENT run.font.bold = True run.font.name = "Arial" def add_heading_bilingual(doc, en_title, kr_subtitle=None): """Add bilingual heading: English Title Case + Korean subtitle (brand rule: bilingual layering).""" h = doc.add_heading(level=2) h.space_before = Pt(4) h.space_after = Pt(8) run = h.add_run(en_title) run.font.size = Pt(16) run.font.color.rgb = BRAND_DARK run.font.bold = True run.font.name = "Arial" if kr_subtitle: p = doc.add_paragraph() p.space_before = Pt(0) p.space_after = Pt(12) run = p.add_run(kr_subtitle) run.font.size = Pt(10) run.font.color.rgb = BRAND_GRAY run.font.name = "Malgun Gothic" def add_body(doc, text, bold_phrases=None): """Add body paragraph in 존칭 서술체 with brand formatting.""" p = doc.add_paragraph() p.space_after = Pt(10) p.paragraph_format.line_spacing = Pt(20) if bold_phrases: remaining = text for phrase in bold_phrases: if phrase in remaining: before, _, after = remaining.partition(phrase) if before: run = p.add_run(before) run.font.size = Pt(10) run.font.color.rgb = BRAND_PRIMARY run.font.name = "Malgun Gothic" run = p.add_run(phrase) run.font.size = Pt(10) run.font.color.rgb = BRAND_PRIMARY run.font.bold = True run.font.name = "Malgun Gothic" remaining = after if remaining: run = p.add_run(remaining) run.font.size = Pt(10) run.font.color.rgb = BRAND_PRIMARY run.font.name = "Malgun Gothic" else: run = p.add_run(text) run.font.size = Pt(10) run.font.color.rgb = BRAND_PRIMARY run.font.name = "Malgun Gothic" def add_service_table(doc, services): """Add service table with brand styling.""" table = doc.add_table(rows=1, cols=2) table.alignment = WD_TABLE_ALIGNMENT.CENTER # Header hdr = table.rows[0].cells for i, text in enumerate(["Service", "Description"]): hdr[i].text = text for paragraph in hdr[i].paragraphs: for run in paragraph.runs: run.font.size = Pt(9) run.font.bold = True run.font.color.rgb = BRAND_WHITE run.font.name = "Arial" set_cell_shading(hdr[i], "1A1A2E") # Rows for en_name, kr_desc in services: row = table.add_row().cells # English service name p0 = row[0].paragraphs[0] run0 = p0.add_run(en_name) run0.font.size = Pt(9) run0.font.bold = True run0.font.color.rgb = BRAND_DARK run0.font.name = "Arial" # Korean description p1 = row[1].paragraphs[0] run1 = p1.add_run(kr_desc) run1.font.size = Pt(9) run1.font.color.rgb = BRAND_GRAY run1.font.name = "Malgun Gothic" doc.add_paragraph() # spacer def build_credential(): doc = Document() # ── Page setup ── section = doc.sections[0] section.page_width = Cm(21) section.page_height = Cm(29.7) section.top_margin = Cm(2.5) section.bottom_margin = Cm(2.5) section.left_margin = Cm(2.5) section.right_margin = Cm(2.5) # ── Default font ── style = doc.styles["Normal"] font = style.font font.name = "Malgun Gothic" font.size = Pt(10) font.color.rgb = BRAND_PRIMARY # ════════════════════════════════════════════════════ # COVER PAGE # ════════════════════════════════════════════════════ for _ in range(6): doc.add_paragraph() # Brand name title = doc.add_paragraph() title.alignment = WD_ALIGN_PARAGRAPH.CENTER run = title.add_run("D.intelligence") run.font.size = Pt(36) run.font.color.rgb = BRAND_DARK run.font.bold = True run.font.name = "Arial" # Slogan slogan = doc.add_paragraph() slogan.alignment = WD_ALIGN_PARAGRAPH.CENTER slogan.space_before = Pt(8) run = slogan.add_run("Think Forward") run.font.size = Pt(14) run.font.color.rgb = BRAND_ACCENT run.font.italic = True run.font.name = "Arial" # Tagline tagline = doc.add_paragraph() tagline.alignment = WD_ALIGN_PARAGRAPH.CENTER tagline.space_before = Pt(24) run = tagline.add_run("Analysis, Treatment & Growth") run.font.size = Pt(11) run.font.color.rgb = BRAND_GRAY run.font.name = "Arial" # Subtitle subtitle = doc.add_paragraph() subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER subtitle.space_before = Pt(8) run = subtitle.add_run("Company Credential") run.font.size = Pt(12) run.font.color.rgb = BRAND_GRAY run.font.name = "Arial" # Date date_p = doc.add_paragraph() date_p.alignment = WD_ALIGN_PARAGRAPH.CENTER date_p.space_before = Pt(36) run = date_p.add_run("2026") run.font.size = Pt(10) run.font.color.rgb = BRAND_GRAY run.font.name = "Arial" # ── Page break ── doc.add_page_break() # ════════════════════════════════════════════════════ # ABOUT D.INTELLIGENCE # ════════════════════════════════════════════════════ add_section_label(doc, "ABOUT D.INTELLIGENCE") add_heading_bilingual(doc, "Brand Overview", "브랜드 소개") add_body( doc, "D.intelligence는 디지털 마케팅과 데이터 분석의 경계를 허물고, " "고객의 지속가능한 성장을 이끄는 Marketing Intelligence 파트너입니다.", bold_phrases=["Marketing Intelligence 파트너"] ) add_body( doc, "데이터 인텔리전스 기반의 마케팅 전략 진단 및 컨설팅 서비스를 제공하며, " "\"SMART Marketing Clinic\"이라는 콘셉트 아래 데이터 분석, 진단, 교육 서비스를 운영합니다. " "이를 통해 전문성과 신뢰감을 핵심 브랜드 가치로 전달합니다.", bold_phrases=["SMART Marketing Clinic"] ) # Mission & Vision add_section_label(doc, "MISSION & VISION") add_heading_bilingual(doc, "Mission") add_body( doc, "데이터 기반 의사결정으로 기업의 지속가능한 성장을 실현하는 " "Marketing Intelligence 파트너입니다." ) add_heading_bilingual(doc, "Vision") add_body( doc, "AI 기반 마케팅 인텔리전스 서비스 플랫폼을 구축하여, " "고객사의 데이터 활용 역량을 극대화하고, " "마케팅 의사결정의 정확성과 속도를 혁신하는 것을 목표로 합니다." ) # Brand Keywords add_section_label(doc, "BRAND KEYWORDS") kw_p = doc.add_paragraph() kw_p.alignment = WD_ALIGN_PARAGRAPH.CENTER kw_p.space_before = Pt(16) kw_p.space_after = Pt(16) for i, kw in enumerate(["Context", "Content", "Connection"]): run = kw_p.add_run(kw) run.font.size = Pt(18) run.font.color.rgb = BRAND_DARK run.font.bold = True run.font.name = "Arial" if i < 2: sep = kw_p.add_run(" | ") sep.font.size = Pt(18) sep.font.color.rgb = BRAND_ACCENT sep.font.name = "Arial" doc.add_page_break() # ════════════════════════════════════════════════════ # WHAT WE DO — Services # ════════════════════════════════════════════════════ add_section_label(doc, "WHAT WE DO") add_heading_bilingual( doc, "SMART Marketing Clinic", "Data Intelligence Audit, Digital Analytics Consulting & Data Storytelling" ) add_body( doc, "D.intelligence는 데이터 기반의 사용자 경험 여정(User Experience Journey) 진단을 통해 " "디지털 광고, 콘텐츠 마케팅, 검색 최적화(SEO), 웹 & 앱 최적화 서비스를 제공하며, " "이를 통해 비즈니스 성과 중심의 마케팅 솔루션을 함께하는 성장 파트너입니다.", bold_phrases=["사용자 경험 여정(User Experience Journey)", "성장 파트너"] ) add_service_table(doc, [ ( "SMART Measurement & Audit", "핵심 성과 지표(KPI) 설정, 성과 측정 계획 수립, 채널 퍼포먼스 리포팅, " "사용자 경험 모델링, 성과 관리 체계 디자인" ), ( "Marketing Intelligence Audit", "디지털 마케팅 채널 성과 진단, 사용자 여정 분석을 통한 " "마케팅 전략의 효율성 극대화 및 개선 방향 도출" ), ( "Data Analytics Consulting", "Google Analytics 4, Mixpanel 등 디지털 애널리틱스 도구의 진단, 설정, " "최적화를 지원하는 전문 컨설팅 서비스" ), ( "Performance Dashboard Design", "퍼포먼스 대시보드 설계, 구축, 자동화를 통해 " "데이터 기반 의사 결정을 지원하는 시각화 서비스" ), ( "Data Storytelling Design", "발견된 데이터 인사이트를 목표 청중에게 효과적으로 전달하여, " "공통의 문제의식과 실천의 방향을 제시하는 데이터 시각화, 인터랙티브 프레젠테이션 디자인" ), ( "Data Literacy Training", "생산적인 데이터 활용을 위한 개인 역량과 조직 문화 차원의 " "데이터 리터러시 증진을 돕는 교육, 워크숍 운영" ), ]) doc.add_page_break() # ════════════════════════════════════════════════════ # OUR ROLE — Positioning # ════════════════════════════════════════════════════ add_section_label(doc, "OUR ROLE") add_heading_bilingual(doc, "Core Positioning", "핵심 역할 정의") roles = [ ("Data Intelligence Counselor", "데이터 인텔리전스 기반의 마케팅 전략 진단 파트너로서, 고객사의 디지털 마케팅 성과를 정밀하게 분석하고, 데이터에 기반한 실행 가능한 전략을 수립합니다."), ("Marketing Data Translator", "마케팅, 데이터, IT 부서 간의 언어적 장벽을 해소하는 데이터 통역사로서, 각 부서의 요구사항을 데이터의 관점에서 해석하고 연결합니다."), ("Data Literacy Enabler", "조직 내 데이터 리터러시 증진을 이끄는 엑셀러레이터로서, 구성원 개개인의 데이터 활용 역량을 강화하고, 데이터 기반 의사결정 문화를 구축합니다."), ] for en_title, kr_desc in roles: h = doc.add_heading(level=3) h.space_before = Pt(16) h.space_after = Pt(4) run = h.add_run(en_title) run.font.size = Pt(12) run.font.color.rgb = BRAND_DARK run.font.bold = True run.font.name = "Arial" add_body(doc, kr_desc) doc.add_page_break() # ════════════════════════════════════════════════════ # DATA INTELLIGENCE WORKSHOP # ════════════════════════════════════════════════════ add_section_label(doc, "DATA INTELLIGENCE WORKSHOP") add_heading_bilingual(doc, "Training & Education", "교육 프로그램") add_body( doc, "D.intelligence는 실무 중심의 데이터 리터러시 교육 프로그램을 운영합니다. " "Google Analytics 4 기본부터 고급 활용 테크닉까지, 마케팅 실무자의 데이터 역량 강화를 " "체계적으로 지원합니다." ) programs = [ ("GA4 코어 트레이닝 캠프", "Google Analytics 4의 핵심 기능을 집중적으로 학습하는 실무 트레이닝 프로그램입니다."), ("마케팅 애널리틱스 1Day 챌린지", "\"1 Insight per Day\" — 마케터를 위한 애널리틱스 트리트먼트 하루에 한 가지! 한 주에 하나씩 업무에 바로 활용할 수 있는 마케팅 애널리틱스 완전정복 프로그램입니다."), ] for name, desc in programs: h = doc.add_heading(level=3) h.space_before = Pt(12) h.space_after = Pt(4) run = h.add_run(name) run.font.size = Pt(11) run.font.color.rgb = BRAND_DARK run.font.bold = True run.font.name = "Malgun Gothic" add_body(doc, desc) # Approach add_section_label(doc, "3 STEP APPROACH") approach_p = doc.add_paragraph() approach_p.space_before = Pt(8) for i, (step_en, step_kr) in enumerate([ ("Analysis", "현황 진단 및 데이터 분석"), ("Treatment", "맞춤형 솔루션 설계 및 적용"), ("Growth", "지속적 성과 관리 및 성장 지원"), ], 1): run = approach_p.add_run(f" {i}. {step_en} ") run.font.size = Pt(10) run.font.bold = True run.font.color.rgb = BRAND_DARK run.font.name = "Arial" run = approach_p.add_run(f"— {step_kr}") run.font.size = Pt(10) run.font.color.rgb = BRAND_GRAY run.font.name = "Malgun Gothic" if i < 3: approach_p.add_run("\n") doc.add_page_break() # ════════════════════════════════════════════════════ # WHY D.INTELLIGENCE — Differentiators # ════════════════════════════════════════════════════ add_section_label(doc, "WHY D.INTELLIGENCE") add_heading_bilingual(doc, "Core Differentiators", "핵심 차별화 요소") differentiators = [ ("데이터 기반 의사 결정 체계 수립", "단편적인 보고서 제공을 넘어, 고객사의 비즈니스 목표에 부합하는 " "핵심 성과 지표(KPI) 설정부터 성과 관리 체계 디자인까지, " "데이터 기반 의사 결정의 전 과정을 체계적으로 지원합니다."), ("마케팅-데이터-IT 간 통합 커뮤니케이션", "마케팅 부서의 전략적 요구와 데이터 부서의 기술적 역량, " "IT 부서의 인프라 환경을 유기적으로 연결함으로써, " "조직 내 데이터 활용의 효율성을 극대화합니다."), ("실무 중심의 교육 및 역량 강화", "이론에 그치지 않는 실무 중심의 교육 커리큘럼을 통해, " "마케팅 실무자가 데이터를 직접 분석하고 활용할 수 있는 역량을 구축합니다."), ("엔드투엔드(End-to-End) 서비스 제공", "진단, 컨설팅, 대시보드 구축, 데이터 스토리텔링, 교육에 이르기까지, " "마케팅 인텔리전스의 전 영역을 아우르는 통합 서비스를 제공합니다."), ] for title, desc in differentiators: h = doc.add_heading(level=3) h.space_before = Pt(12) h.space_after = Pt(4) run = h.add_run(title) run.font.size = Pt(11) run.font.color.rgb = BRAND_DARK run.font.bold = True run.font.name = "Malgun Gothic" add_body(doc, desc) doc.add_page_break() # ════════════════════════════════════════════════════ # CONTACT — Inquiry # ════════════════════════════════════════════════════ add_section_label(doc, "CONTACT") add_heading_bilingual(doc, "상담문의", "Get in Touch") add_body( doc, "D.intelligence의 서비스에 관심을 가져주셔서 감사합니다. " "디지털 마케팅 성과 진단, 데이터 애널리틱스 컨설팅, 대시보드 구축, " "데이터 리터러시 교육 등에 관한 문의 사항이나 기대 사항을 남겨주시면, " "최선을 다해 구체적이고 명료한 검토의견을 드리도록 하겠습니다." ) # Contact info doc.add_paragraph() contact_items = [ ("Website", "dintelligence.co.kr"), ("Email", "contact@dintelligence.co.kr"), ] for label, value in contact_items: p = doc.add_paragraph() p.space_after = Pt(4) run = p.add_run(f"{label}: ") run.font.size = Pt(10) run.font.bold = True run.font.color.rgb = BRAND_DARK run.font.name = "Arial" run = p.add_run(value) run.font.size = Pt(10) run.font.color.rgb = BRAND_GRAY run.font.name = "Arial" # Footer doc.add_paragraph() doc.add_paragraph() footer_p = doc.add_paragraph() footer_p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = footer_p.add_run("D.intelligence") run.font.size = Pt(9) run.font.color.rgb = BRAND_GRAY run.font.name = "Arial" copyright_p = doc.add_paragraph() copyright_p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = copyright_p.add_run("Copyright 2026 D.intelligence. All rights reserved.") run.font.size = Pt(8) run.font.color.rgb = BRAND_GRAY run.font.name = "Arial" # ── Save ── doc.save(OUTPUT_PATH) print(f"Credential saved: {OUTPUT_PATH}") if __name__ == "__main__": build_credential()