Files
wellnessWheel/build_onepager_docx.py
T

166 lines
7.5 KiB
Python

#!/usr/bin/env python3
"""One-pager: Wheel of Wellness proposal for HELPipedia."""
from docx import Document
from docx.shared import Pt, Inches, Cm, RGBColor, Emu
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
# ── Colors ──────────────────────────────────────────────────
TEAL = '2E7D6F'
CORAL = 'E8835C'
DARK = '2D3436'
LIGHT_TEAL = 'E8F5F1'
ALT_ROW = 'F2F2F2'
WHITE = 'FFFFFF'
def set_cell_shading(cell, color):
shading = OxmlElement('w:shd')
shading.set(qn('w:fill'), color)
shading.set(qn('w:val'), 'clear')
cell._tc.get_or_add_tcPr().append(shading)
def set_cell_margins(cell, top=40, bottom=40, left=80, right=80):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
tcMar = OxmlElement('w:tcMar')
for side, val in [('top', top), ('bottom', bottom), ('left', left), ('right', right)]:
el = OxmlElement(f'w:{side}')
el.set(qn('w:w'), str(val))
el.set(qn('w:type'), 'dxa')
tcMar.append(el)
tcPr.append(tcMar)
def add_run(p, text, size=9, bold=False, color=DARK, italic=False):
r = p.add_run(text)
r.font.size = Pt(size)
r.font.color.rgb = RGBColor(*bytes.fromhex(color))
r.bold = bold
r.italic = italic
return r
# ── Document ────────────────────────────────────────────────
doc = Document()
# Tight margins for one-pager
for section in doc.sections:
section.top_margin = Cm(1.5)
section.bottom_margin = Cm(1.2)
section.left_margin = Cm(1.8)
section.right_margin = Cm(1.8)
# ── HEADER BAR (using a single-cell table with shading) ─────
header_table = doc.add_table(rows=1, cols=1)
header_table.alignment = WD_TABLE_ALIGNMENT.CENTER
cell = header_table.rows[0].cells[0]
set_cell_shading(cell, TEAL)
set_cell_margins(cell, top=100, bottom=100, left=150, right=150)
p = cell.paragraphs[0]
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
add_run(p, 'Wheel of Wellness Resource Connector', size=18, bold=True, color=WHITE)
p2 = cell.add_paragraph()
p2.alignment = WD_ALIGN_PARAGRAPH.CENTER
add_run(p2, 'A Proposal for HELPipedia / SpecialNeeds.help | Kayla Newkirk, M.S.Ed., MHC-LP | Week of June 16, 2026', size=9, color=WHITE)
# Remove table borders
tbl = header_table._tbl
tblPr = tbl.tblPr if tbl.tblPr is not None else OxmlElement('w:tblPr')
borders = OxmlElement('w:tblBorders')
for edge in ('top', 'left', 'bottom', 'right', 'insideH', 'insideV'):
el = OxmlElement(f'w:{edge}')
el.set(qn('w:val'), 'none')
el.set(qn('w:sz'), '0')
el.set(qn('w:space'), '0')
el.set(qn('w:color'), 'auto')
borders.append(el)
tblPr.append(borders)
doc.add_paragraph() # small spacer
# ── THE PROBLEM ─────────────────────────────────────────────
p = doc.add_paragraph()
add_run(p, 'THE PROBLEM ', size=10, bold=True, color=CORAL)
add_run(p, 'Families navigating disability and caregiving often do not know what they need until someone asks the right questions. A directory is powerful when you know what to search for. An assessment tool is powerful when you do not.', size=9)
# ── THE SOLUTION ────────────────────────────────────────────
p = doc.add_paragraph()
add_run(p, 'THE SOLUTION ', size=10, bold=True, color=CORAL)
add_run(p, 'An interactive, web-based Wheel of Wellness Assessment that asks caregivers and individuals with disabilities targeted questions across six wellness dimensions, scores each area, and automatically maps their needs to resources in the SpecialNeeds.help directory. Users arrive unsure of what they need. They leave with a personalized resource plan.', size=9)
# ── THE SIX DIMENSIONS TABLE ────────────────────────────────
p = doc.add_paragraph()
add_run(p, 'THE SIX DIMENSIONS', size=10, bold=True, color=TEAL)
dims = [
['Physical', 'Rest, movement, nutrition, medical care', 'Respite care, medical providers, adaptive recreation'],
['Emotional', 'Naming feelings, coping, support', 'Counseling referrals, caregiver support groups, crisis lines'],
['Social', 'Connection, understanding, community', 'Parent mentors, local support networks, peer matching'],
['Practical', 'Finances, advocacy, schedules, systems', 'IEP advocates, legal aid, benefits navigation'],
['Purpose', 'Meaning, identity, values, hope', 'Faith communities, disability-affirming organizations'],
['Growth', 'Learning, creativity, becoming', 'Training, conferences, podcasts, creative programs'],
]
t = doc.add_table(rows=1 + len(dims), cols=3)
t.alignment = WD_TABLE_ALIGNMENT.CENTER
t.style = 'Table Grid'
# Header
for i, h in enumerate(['Dimension', 'Focus', 'Resource Connections']):
cell = t.rows[0].cells[i]
cell.text = ''
p = cell.paragraphs[0]
add_run(p, h, size=8, bold=True, color=WHITE)
set_cell_shading(cell, TEAL)
set_cell_margins(cell, top=30, bottom=30, left=60, right=60)
# Data
for ri, row_data in enumerate(dims):
for ci, val in enumerate(row_data):
cell = t.rows[ri + 1].cells[ci]
cell.text = ''
p = cell.paragraphs[0]
add_run(p, val, size=8, bold=(ci == 0), color=DARK)
set_cell_margins(cell, top=20, bottom=20, left=60, right=60)
if ri % 2 == 1:
set_cell_shading(cell, ALT_ROW)
# Set column widths
for row in t.rows:
row.cells[0].width = Cm(2.5)
row.cells[1].width = Cm(6)
row.cells[2].width = Cm(8)
doc.add_paragraph()
# ── WHY IT MATTERS ──────────────────────────────────────────
p = doc.add_paragraph()
add_run(p, 'WHY IT MATTERS', size=10, bold=True, color=TEAL)
bullets = [
('Mission alignment: ', 'Bridges the gap between knowledge and opportunity'),
('Differentiator: ', 'No other disability directory offers a clinically grounded needs assessment'),
('Engagement: ', 'Personalized entry point increases return visits and directory use'),
('Data insight: ', 'Anonymous aggregate data reveals community needs for content and fundraising'),
('Scalable: ', 'Works for any new resource area added to SpecialNeeds.help'),
('Measurable: ', 'Completion rates, click-through, referrals all trackable'),
]
for bold_part, rest in bullets:
p = doc.add_paragraph()
p.paragraph_format.space_before = Pt(1)
p.paragraph_format.space_after = Pt(1)
add_run(p, bold_part, size=8, bold=True, color=DARK)
add_run(p, rest, size=8)
# ── Footer ──────────────────────────────────────────────────
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
p.paragraph_format.space_before = Pt(6)
add_run(p, 'Kayla Newkirk, M.S.Ed., MHC-LP | Doctoral Candidate, Counselor Education & Supervision, Waynesburg University | kcordone30@gmail.com', size=7, color='888888')
# ── Save ────────────────────────────────────────────────────
out = '/home/newkirk/Documents/Career/WheelOfWellnessOnePager.docx'
doc.save(out)
print(f'Saved: {out}')