Hugoifier

docs: add MkDocs site with CONFLICT branding + GitHub Actions deploy workflow Matches PlanOpticon styling (Material theme, conflict-logo, custom.css). Deploys to hugoifier.dev via gh-deploy on push to main. Closes #10

lmata 2026-03-12 21:57 trunk
Commit 04b8794b3aefc6bcf22d653a2356c837fdbfad1e5635cb9d821e0422a2d632e0
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,30 @@
1
+name: Deploy Docs
2
+
3
+on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - "docs/**"
8
+ - "mkdocs.yml"
9
+
10
+permissions:
11
+ contents: write
12
+ pages: write
13
+ id-token: write
14
+
15
+jobs:
16
+ deploy:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.12"
24
+
25
+ - name: Install dependencies
26
+ run: |
27
+ pip install mkdocs-material pymdown-extensions
28
+
29
+ - name: Build and deploy
30
+ run: mkdocs gh-deploy --force
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,30 @@
1 name: Deploy Docs
2
3 on:
4 push:
5 branches: [main]
6 paths:
7 - "docs/**"
8 - "mkdocs.yml"
9
10 permissions:
11 contents: write
12 pages: write
13 id-token: write
14
15 jobs:
16 deploy:
17 runs-on: ubuntu-latest
18 steps:
19 - uses: actions/checkout@v4
20
21 - uses: actions/setup-python@v5
22 with:
23 python-version: "3.12"
24
25 - name: Install dependencies
26 run: |
27 pip install mkdocs-material pymdown-extensions
28
29 - name: Build and deploy
30 run: mkdocs gh-deploy --force
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -0,0 +1,97 @@
1
+# Architecture
2
+
3
+## Pipeline
4
+
5
+```mermaid
6
+flowchart TD
7
+ A[Input path] --> B{Hugo theme?}
8
+ B -- Yes --> C[find_hugo_theme]
9
+ B -- No --> D[find_raw_html_files]
10
+
11
+ C --> E[Copy theme → themes/name/]
12
+ E --> F[Copy exampleSite content/data/static]
13
+ F --> G[Write hugo.toml]
14
+ G --> H[patch_theme + patch_config]
15
+ H --> I[decapify]
16
+
17
+ D --> J[hugoify_html via AI]
18
+ J --> K[Write layouts/]
19
+ K --> L[Copy CSS/JS/images]
20
+ L --> M[Write minimal hugo.toml]
21
+ M --> I
22
+
23
+ I --> N[output/theme-name/]
24
+```
25
+
26
+## Module Map
27
+
28
+| Module | Responsibility |
29
+|--------|---------------|
30
+| `src/cli.py` | Argument parsing, logging setup, error handling |
31
+| `src/config.py` | Multi-backend AI routing (`call_ai`) |
32
+| `src/utils/complete.py` | Full pipeline orchestration |
33
+| `src/utils/theme_finder.py` | Locate Hugo theme + exampleSite within messy extracted directories |
34
+| `src/utils/hugoify.py` | AI-powered HTML → Hugo layout conversion |
35
+| `src/utils/decapify.py` | Generate Decap CMS `index.html` + `config.yml` |
36
+| `src/utils/theme_patcher.py` | Patch deprecated Hugo APIs in layout files and config |
37
+| `src/utils/analyze.py` | Theme structure reporting + AI-powered HTML analysis |
38
+| `src/utils/translate.py` | AI content translation |
39
+| `src/utils/deploy.py` | Cloudflare deployment _(stub)_ |
40
+| `src/utils/cloudflare.py` | Cloudflare configuration _(stub)_ |
41
+| `src/utils/parser.py` | HTML/CSS linting _(stub)_ |
42
+
43
+## AI Backends
44
+
45
+All AI calls route through a single `call_ai(prompt, system)` function in `src/config.py`. Switch backends via `HUGOIFIER_BACKEND`:
46
+
47
+| Backend | Default Model | Env Var |
48
+|---------|--------------|---------|
49
+| `anthropic` (default) | `claude-sonnet-4-6` | `ANTHROPIC_API_KEY` |
50
+| `openai` | `gpt-4-turbo` | `OPENAI_API_KEY` |
51
+| `google` | `gemini-1.5-pro` | `GOOGLE_API_KEY` |
52
+
53
+## Hugo API Patching
54
+
55
+`theme_patcher.py` handles breaking changes in Hugo ≥ v0.128:
56
+
57
+**Template patches:**
58
+
59
+| Old | New |
60
+|-----|-----|
61
+| `.Site.DisqusShortname` | `.Site.Config.Services.Disqus.Shortname` |
62
+| `.Site.GoogleAnalytics` | `.Site.Config.Services.GoogleAnalytics.ID` |
63
+
64
+**Config patches (`hugo.toml`):**
65
+
66
+| Old | New |
67
+|-----|-----|
68
+| `paginate = N` | `[pagination] pagerSize = N` |
69
+| `googleAnalytics = "UA-..."` | `[services.googleAnalytics] id = "UA-..."` |
70
+| `disqusShortname = "..."` | `[services.disqus] shortname = "..."` |
71
+
72
+## Decap CMS Generation
73
+
74
+`decapify.py` introspects `content/` to build Decap collections:
75
+
76
+- **Folder collection** — subdirectory with `.md` files at any depth (blog, posts, etc.)
77
+- **File collection** — subdirectory with only `_index.md` (about, contact, etc.)
78
+
79
+Field types are inferred from YAML frontmatter values: `string`, `text`, `datetime`, `image`, `list`, `boolean`, `number`, `markdown`.
80
+
81
+## Output Structure
82
+
83
+```
84
+output/{theme-name}/
85
+├── hugo.toml # Site config (modernized)
86
+├── content/ # From exampleSite or minimal stub
87
+├── data/ # From exampleSite (if present)
88
+├── static/
89
+│ └── admin/
90
+│ ├── index.html # Decap CMS UI
91
+│ └── config.yml # Decap collections config
92
+└── themes/
93
+ └── {theme-name}/ # Patched Hugo theme
94
+ ├── layouts/
95
+ ├── static/
96
+ └── archetypes/
97
+```
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -0,0 +1,97 @@
1 # Architecture
2
3 ## Pipeline
4
5 ```mermaid
6 flowchart TD
7 A[Input path] --> B{Hugo theme?}
8 B -- Yes --> C[find_hugo_theme]
9 B -- No --> D[find_raw_html_files]
10
11 C --> E[Copy theme → themes/name/]
12 E --> F[Copy exampleSite content/data/static]
13 F --> G[Write hugo.toml]
14 G --> H[patch_theme + patch_config]
15 H --> I[decapify]
16
17 D --> J[hugoify_html via AI]
18 J --> K[Write layouts/]
19 K --> L[Copy CSS/JS/images]
20 L --> M[Write minimal hugo.toml]
21 M --> I
22
23 I --> N[output/theme-name/]
24 ```
25
26 ## Module Map
27
28 | Module | Responsibility |
29 |--------|---------------|
30 | `src/cli.py` | Argument parsing, logging setup, error handling |
31 | `src/config.py` | Multi-backend AI routing (`call_ai`) |
32 | `src/utils/complete.py` | Full pipeline orchestration |
33 | `src/utils/theme_finder.py` | Locate Hugo theme + exampleSite within messy extracted directories |
34 | `src/utils/hugoify.py` | AI-powered HTML → Hugo layout conversion |
35 | `src/utils/decapify.py` | Generate Decap CMS `index.html` + `config.yml` |
36 | `src/utils/theme_patcher.py` | Patch deprecated Hugo APIs in layout files and config |
37 | `src/utils/analyze.py` | Theme structure reporting + AI-powered HTML analysis |
38 | `src/utils/translate.py` | AI content translation |
39 | `src/utils/deploy.py` | Cloudflare deployment _(stub)_ |
40 | `src/utils/cloudflare.py` | Cloudflare configuration _(stub)_ |
41 | `src/utils/parser.py` | HTML/CSS linting _(stub)_ |
42
43 ## AI Backends
44
45 All AI calls route through a single `call_ai(prompt, system)` function in `src/config.py`. Switch backends via `HUGOIFIER_BACKEND`:
46
47 | Backend | Default Model | Env Var |
48 |---------|--------------|---------|
49 | `anthropic` (default) | `claude-sonnet-4-6` | `ANTHROPIC_API_KEY` |
50 | `openai` | `gpt-4-turbo` | `OPENAI_API_KEY` |
51 | `google` | `gemini-1.5-pro` | `GOOGLE_API_KEY` |
52
53 ## Hugo API Patching
54
55 `theme_patcher.py` handles breaking changes in Hugo ≥ v0.128:
56
57 **Template patches:**
58
59 | Old | New |
60 |-----|-----|
61 | `.Site.DisqusShortname` | `.Site.Config.Services.Disqus.Shortname` |
62 | `.Site.GoogleAnalytics` | `.Site.Config.Services.GoogleAnalytics.ID` |
63
64 **Config patches (`hugo.toml`):**
65
66 | Old | New |
67 |-----|-----|
68 | `paginate = N` | `[pagination] pagerSize = N` |
69 | `googleAnalytics = "UA-..."` | `[services.googleAnalytics] id = "UA-..."` |
70 | `disqusShortname = "..."` | `[services.disqus] shortname = "..."` |
71
72 ## Decap CMS Generation
73
74 `decapify.py` introspects `content/` to build Decap collections:
75
76 - **Folder collection** — subdirectory with `.md` files at any depth (blog, posts, etc.)
77 - **File collection** — subdirectory with only `_index.md` (about, contact, etc.)
78
79 Field types are inferred from YAML frontmatter values: `string`, `text`, `datetime`, `image`, `list`, `boolean`, `number`, `markdown`.
80
81 ## Output Structure
82
83 ```
84 output/{theme-name}/
85 ├── hugo.toml # Site config (modernized)
86 ├── content/ # From exampleSite or minimal stub
87 ├── data/ # From exampleSite (if present)
88 ├── static/
89 │ └── admin/
90 │ ├── index.html # Decap CMS UI
91 │ └── config.yml # Decap collections config
92 └── themes/
93 └── {theme-name}/ # Patched Hugo theme
94 ├── layouts/
95 ├── static/
96 └── archetypes/
97 ```
--- a/docs/assets/css/custom.css
+++ b/docs/assets/css/custom.css
@@ -0,0 +1,156 @@
1
+/* CONFLICT brand overrides for MkDocs Material */
2
+
3
+:root {
4
+ --conflict-red: #DB394C;
5
+ --conflict-dark-red: #9C2633;
6
+ --conflict-pink: #FF1D5D;
7
+ --conflict-black: #1D1D1D;
8
+ --conflict-black-2: #282828;
9
+ --conflict-gray: #A8A8A7;
10
+ --conflict-light: #ECEFF5;
11
+}
12
+
13
+/* Dark scheme (default) */
14
+[data-md-color-scheme="slate"] {
15
+ --md-primary-fg-color: var(--conflict-black);
16
+ --md-primary-bg-color: #fff;
17
+ --md-accent-fg-color: var(--conflict-red);
18
+ --md-default-bg-color: var(--conflict-black);
19
+ --md-typeset-a-color: var(--conflict-red);
20
+}
21
+
22
+[data-md-color-scheme="slate"] .md-header {
23
+ background-color: var(--conflict-black);
24
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
25
+}
26
+
27
+[data-md-color-scheme="slate"] .md-tabs {
28
+ background-color: var(--conflict-black-2);
29
+}
30
+
31
+/* Light scheme */
32
+[data-md-color-scheme="default"] {
33
+ --md-primary-fg-color: #fff;
34
+ --md-primary-bg-color: var(--conflict-black);
35
+ --md-accent-fg-color: var(--conflict-red);
36
+ --md-typeset-a-color: var(--conflict-red);
37
+}
38
+
39
+[data-md-color-scheme="default"] .md-header {
40
+ background-color: #fff;
41
+ border-bottom: 1px solid var(--conflict-light);
42
+ color: var(--conflict-black);
43
+}
44
+
45
+[data-md-color-scheme="default"] .md-header .md-header__topic,
46
+[data-md-color-scheme="default"] .md-header .md-header__title,
47
+[data-md-color-scheme="default"] .md-header .md-ellipsis {
48
+ color: var(--conflict-black);
49
+}
50
+
51
+[data-md-color-scheme="default"] .md-tabs {
52
+ background-color: #fafafa;
53
+ border-bottom: 1px solid var(--conflict-light);
54
+}
55
+
56
+[data-md-color-scheme="default"] .md-tabs__link {
57
+ color: var(--conflict-black-2);
58
+}
59
+
60
+[data-md-color-scheme="default"] .md-tabs__link--active,
61
+[data-md-color-scheme="default"] .md-tabs__link:hover {
62
+ color: var(--conflict-red);
63
+}
64
+
65
+[data-md-color-scheme="default"] .md-search__input {
66
+ background-color: var(--conflict-light);
67
+}
68
+
69
+/* Links */
70
+.md-typeset a:hover {
71
+ color: var(--conflict-pink);
72
+}
73
+
74
+/* Nav active items */
75
+.md-nav__link--active,
76
+.md-nav__link:hover {
77
+ color: var(--conflict-red) !important;
78
+}
79
+
80
+/* Code blocks */
81
+[data-md-color-scheme="slate"] .md-typeset code {
82
+ background-color: rgba(255, 255, 255, 0.06);
83
+}
84
+
85
+[data-md-color-scheme="slate"] .highlight pre {
86
+ background-color: #141414 !important;
87
+ border: 1px solid rgba(255, 255, 255, 0.06);
88
+ border-radius: 8px;
89
+}
90
+
91
+[data-md-color-scheme="default"] .highlight pre {
92
+ border: 1px solid var(--conflict-light);
93
+ border-radius: 8px;
94
+}
95
+
96
+/* Tables */
97
+.md-typeset table:not([class]) th {
98
+ background-color: var(--conflict-red);
99
+ color: #fff;
100
+}
101
+
102
+[data-md-color-scheme="default"] .md-typeset table:not([class]) th {
103
+ background-color: var(--conflict-red);
104
+ color: #fff;
105
+}
106
+
107
+/* Buttons / admonitions */
108
+.md-typeset .admonition,
109
+.md-typeset details {
110
+ border-radius: 8px;
111
+}
112
+
113
+/* Footer */
114
+.md-footer {
115
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
116
+}
117
+
118
+[data-md-color-scheme="slate"] .md-footer {
119
+ background-color: var(--conflict-black);
120
+}
121
+
122
+/* Header logo sizing */
123
+.md-header__button.md-logo img,
124
+.md-header__button.md-logo svg {
125
+ height: 1.4rem;
126
+ width: auto;
127
+}
128
+
129
+/* Scrollbar styling for dark mode */
130
+[data-md-color-scheme="slate"] ::-webkit-scrollbar {
131
+ width: 8px;
132
+}
133
+
134
+[data-md-color-scheme="slate"] ::-webkit-scrollbar-track {
135
+ background: var(--conflict-black);
136
+}
137
+
138
+[data-md-color-scheme="slate"] ::-webkit-scrollbar-thumb {
139
+ background: var(--conflict-black-2);
140
+ border-radius: 4px;
141
+}
142
+
143
+[data-md-color-scheme="slate"] ::-webkit-scrollbar-thumb:hover {
144
+ background: #3a3a3a;
145
+}
146
+
147
+/* Content max width for readability */
148
+.md-grid {
149
+ max-width: 1220px;
150
+}
151
+
152
+/* Hero-style heading on index */
153
+.md-typeset h1 {
154
+ font-weight: 700;
155
+ letter-spacing: -0.02em;
156
+}
--- a/docs/assets/css/custom.css
+++ b/docs/assets/css/custom.css
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/assets/css/custom.css
+++ b/docs/assets/css/custom.css
@@ -0,0 +1,156 @@
1 /* CONFLICT brand overrides for MkDocs Material */
2
3 :root {
4 --conflict-red: #DB394C;
5 --conflict-dark-red: #9C2633;
6 --conflict-pink: #FF1D5D;
7 --conflict-black: #1D1D1D;
8 --conflict-black-2: #282828;
9 --conflict-gray: #A8A8A7;
10 --conflict-light: #ECEFF5;
11 }
12
13 /* Dark scheme (default) */
14 [data-md-color-scheme="slate"] {
15 --md-primary-fg-color: var(--conflict-black);
16 --md-primary-bg-color: #fff;
17 --md-accent-fg-color: var(--conflict-red);
18 --md-default-bg-color: var(--conflict-black);
19 --md-typeset-a-color: var(--conflict-red);
20 }
21
22 [data-md-color-scheme="slate"] .md-header {
23 background-color: var(--conflict-black);
24 border-bottom: 1px solid rgba(255, 255, 255, 0.08);
25 }
26
27 [data-md-color-scheme="slate"] .md-tabs {
28 background-color: var(--conflict-black-2);
29 }
30
31 /* Light scheme */
32 [data-md-color-scheme="default"] {
33 --md-primary-fg-color: #fff;
34 --md-primary-bg-color: var(--conflict-black);
35 --md-accent-fg-color: var(--conflict-red);
36 --md-typeset-a-color: var(--conflict-red);
37 }
38
39 [data-md-color-scheme="default"] .md-header {
40 background-color: #fff;
41 border-bottom: 1px solid var(--conflict-light);
42 color: var(--conflict-black);
43 }
44
45 [data-md-color-scheme="default"] .md-header .md-header__topic,
46 [data-md-color-scheme="default"] .md-header .md-header__title,
47 [data-md-color-scheme="default"] .md-header .md-ellipsis {
48 color: var(--conflict-black);
49 }
50
51 [data-md-color-scheme="default"] .md-tabs {
52 background-color: #fafafa;
53 border-bottom: 1px solid var(--conflict-light);
54 }
55
56 [data-md-color-scheme="default"] .md-tabs__link {
57 color: var(--conflict-black-2);
58 }
59
60 [data-md-color-scheme="default"] .md-tabs__link--active,
61 [data-md-color-scheme="default"] .md-tabs__link:hover {
62 color: var(--conflict-red);
63 }
64
65 [data-md-color-scheme="default"] .md-search__input {
66 background-color: var(--conflict-light);
67 }
68
69 /* Links */
70 .md-typeset a:hover {
71 color: var(--conflict-pink);
72 }
73
74 /* Nav active items */
75 .md-nav__link--active,
76 .md-nav__link:hover {
77 color: var(--conflict-red) !important;
78 }
79
80 /* Code blocks */
81 [data-md-color-scheme="slate"] .md-typeset code {
82 background-color: rgba(255, 255, 255, 0.06);
83 }
84
85 [data-md-color-scheme="slate"] .highlight pre {
86 background-color: #141414 !important;
87 border: 1px solid rgba(255, 255, 255, 0.06);
88 border-radius: 8px;
89 }
90
91 [data-md-color-scheme="default"] .highlight pre {
92 border: 1px solid var(--conflict-light);
93 border-radius: 8px;
94 }
95
96 /* Tables */
97 .md-typeset table:not([class]) th {
98 background-color: var(--conflict-red);
99 color: #fff;
100 }
101
102 [data-md-color-scheme="default"] .md-typeset table:not([class]) th {
103 background-color: var(--conflict-red);
104 color: #fff;
105 }
106
107 /* Buttons / admonitions */
108 .md-typeset .admonition,
109 .md-typeset details {
110 border-radius: 8px;
111 }
112
113 /* Footer */
114 .md-footer {
115 border-top: 1px solid rgba(255, 255, 255, 0.08);
116 }
117
118 [data-md-color-scheme="slate"] .md-footer {
119 background-color: var(--conflict-black);
120 }
121
122 /* Header logo sizing */
123 .md-header__button.md-logo img,
124 .md-header__button.md-logo svg {
125 height: 1.4rem;
126 width: auto;
127 }
128
129 /* Scrollbar styling for dark mode */
130 [data-md-color-scheme="slate"] ::-webkit-scrollbar {
131 width: 8px;
132 }
133
134 [data-md-color-scheme="slate"] ::-webkit-scrollbar-track {
135 background: var(--conflict-black);
136 }
137
138 [data-md-color-scheme="slate"] ::-webkit-scrollbar-thumb {
139 background: var(--conflict-black-2);
140 border-radius: 4px;
141 }
142
143 [data-md-color-scheme="slate"] ::-webkit-scrollbar-thumb:hover {
144 background: #3a3a3a;
145 }
146
147 /* Content max width for readability */
148 .md-grid {
149 max-width: 1220px;
150 }
151
152 /* Hero-style heading on index */
153 .md-typeset h1 {
154 font-weight: 700;
155 letter-spacing: -0.02em;
156 }
--- a/docs/assets/images/conflict-logo.svg
+++ b/docs/assets/images/conflict-logo.svg
@@ -0,0 +1,12 @@
1
+<svg width="141" height="37" viewBox="0 0 141 37" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+<path d="M7.76011 3.9038C5.92786 3.74184 4.10895 4.35124 2.69056 5.6021C2.11733 6.19678 1.66843 6.91459 1.37363 7.70833C1.07884 8.50207 0.944757 9.35363 0.980235 10.2068V25.8829C0.944276 26.744 1.08103 27.6033 1.38128 28.4032C1.68152 29.203 2.13834 29.9249 2.72104 30.5204C4.16802 31.7349 5.9866 32.3289 7.82125 32.186C9.65242 32.3376 11.4679 31.7295 12.8909 30.4878C13.4641 29.8931 13.9129 29.1752 14.2077 28.3814C14.5025 27.5877 14.6366 26.7361 14.6011 25.8829V22.911H10.5088V25.8829C10.5269 26.1963 10.4816 26.5101 10.3763 26.8031C10.2709 27.0962 10.1077 27.3615 9.89795 27.5811C9.29929 28.0511 8.56102 28.2717 7.82125 28.2016C7.06115 28.2882 6.29829 28.0668 5.68342 27.5811C5.47026 27.3642 5.30488 27.0992 5.19924 26.8055C5.0936 26.5118 5.05041 26.1967 5.07267 25.8829V10.2068C5.05065 9.89591 5.09096 9.58361 5.19104 9.29072C5.29111 8.99783 5.44865 8.73115 5.65294 8.50864C6.25972 8.0309 7.01016 7.80989 7.76011 7.88813C8.52022 7.80157 9.28308 8.023 9.89795 8.50864C10.1077 8.72828 10.2709 8.99361 10.3763 9.28663C10.4816 9.57966 10.5269 9.89349 10.5088 10.2068V14.7464H14.6011V10.2068C14.6348 9.34798 14.4939 8.49156 14.1881 7.69657C13.8823 6.90158 13.4188 6.18702 12.8298 5.6021C11.4067 4.3604 9.59128 3.7522 7.76011 3.9038Z" fill="white"/>
3
+<path d="M55.2655 21.0496L48.4551 4.52451H44.7598V31.631H48.8521V15.0732L55.632 31.631H59.3579V4.52451H55.2655V21.0496Z" fill="white"/>
4
+<path d="M64.1953 31.631H68.2877V19.8739H74.3346V15.8896H68.2877V8.47617H75.8005V4.52451H64.1953V31.631Z" fill="white"/>
5
+<path d="M84.731 4.52451H80.6387V31.631H91.4498V27.6466H84.731V4.52451Z" fill="white"/>
6
+<path d="M96.2871 8.47617H98.1195V27.6466H96.2871V31.631H104.044V27.6466H102.212V8.47617H104.044V4.52451H96.2871V8.47617Z" fill="white"/>
7
+<path d="M115.64 3.90374C113.817 3.74697 112.01 4.35626 110.601 5.60204C110.022 6.19287 109.57 6.91008 109.275 7.70478C108.98 8.49948 108.849 9.35285 108.89 10.2068V25.8829C108.854 26.7439 108.991 27.6032 109.291 28.4031C109.592 29.203 110.048 29.9248 110.631 30.5203C112.075 31.7406 113.896 32.3352 115.731 32.1859C117.562 32.3375 119.378 31.7294 120.801 30.4877C121.374 29.893 121.823 29.1751 122.118 28.3814C122.412 27.5876 122.547 26.7361 122.511 25.8829V22.9109H118.419V25.8829C118.437 26.1962 118.392 26.51 118.286 26.8031C118.181 27.0961 118.018 27.3614 117.808 27.5811C117.209 28.051 116.471 28.2716 115.731 28.2016C114.971 28.2881 114.208 28.0667 113.593 27.5811C113.38 27.3641 113.215 27.0992 113.109 26.8055C113.004 26.5118 112.96 26.1966 112.983 25.8829V10.2068C112.961 9.89584 113.001 9.58355 113.101 9.29066C113.201 8.99777 113.359 8.73109 113.563 8.50858C114.162 8.0386 114.9 7.818 115.64 7.88806C116.41 7.79306 117.185 8.01491 117.808 8.50858C118.018 8.72822 118.181 8.99354 118.286 9.28657C118.392 9.5796 118.437 9.89342 118.419 10.2068V14.7463H122.511V10.2068C122.545 9.34791 122.404 8.4915 122.098 7.69651C121.792 6.90152 121.329 6.18696 120.74 5.60204C119.307 4.35529 117.481 3.74697 115.64 3.90374Z" fill="white"/>
8
+<path d="M127.354 4.52451V8.47617H132.118V31.631H136.21V8.47617H140.974V4.52451H127.354Z" fill="white"/>
9
+<path d="M19.3984 36.1741H26.9709V32.4944H22.9871V3.85375H27.0368V0.174088H19.3984V36.1741Z" fill="#DB394C"/>
10
+<path d="M32.2717 0.174088V3.85375H36.2884V32.4944H32.2388V36.1741H39.8771V0.174088H32.2717Z" fill="#DB394C"/>
11
+<path d="M31.4486 10.5303H27.827V25.5524H31.4486V10.5303Z" fill="#DB394C"/>
12
+</svg>
--- a/docs/assets/images/conflict-logo.svg
+++ b/docs/assets/images/conflict-logo.svg
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/assets/images/conflict-logo.svg
+++ b/docs/assets/images/conflict-logo.svg
@@ -0,0 +1,12 @@
1 <svg width="141" height="37" viewBox="0 0 141 37" fill="none" xmlns="http://www.w3.org/2000/svg">
2 <path d="M7.76011 3.9038C5.92786 3.74184 4.10895 4.35124 2.69056 5.6021C2.11733 6.19678 1.66843 6.91459 1.37363 7.70833C1.07884 8.50207 0.944757 9.35363 0.980235 10.2068V25.8829C0.944276 26.744 1.08103 27.6033 1.38128 28.4032C1.68152 29.203 2.13834 29.9249 2.72104 30.5204C4.16802 31.7349 5.9866 32.3289 7.82125 32.186C9.65242 32.3376 11.4679 31.7295 12.8909 30.4878C13.4641 29.8931 13.9129 29.1752 14.2077 28.3814C14.5025 27.5877 14.6366 26.7361 14.6011 25.8829V22.911H10.5088V25.8829C10.5269 26.1963 10.4816 26.5101 10.3763 26.8031C10.2709 27.0962 10.1077 27.3615 9.89795 27.5811C9.29929 28.0511 8.56102 28.2717 7.82125 28.2016C7.06115 28.2882 6.29829 28.0668 5.68342 27.5811C5.47026 27.3642 5.30488 27.0992 5.19924 26.8055C5.0936 26.5118 5.05041 26.1967 5.07267 25.8829V10.2068C5.05065 9.89591 5.09096 9.58361 5.19104 9.29072C5.29111 8.99783 5.44865 8.73115 5.65294 8.50864C6.25972 8.0309 7.01016 7.80989 7.76011 7.88813C8.52022 7.80157 9.28308 8.023 9.89795 8.50864C10.1077 8.72828 10.2709 8.99361 10.3763 9.28663C10.4816 9.57966 10.5269 9.89349 10.5088 10.2068V14.7464H14.6011V10.2068C14.6348 9.34798 14.4939 8.49156 14.1881 7.69657C13.8823 6.90158 13.4188 6.18702 12.8298 5.6021C11.4067 4.3604 9.59128 3.7522 7.76011 3.9038Z" fill="white"/>
3 <path d="M55.2655 21.0496L48.4551 4.52451H44.7598V31.631H48.8521V15.0732L55.632 31.631H59.3579V4.52451H55.2655V21.0496Z" fill="white"/>
4 <path d="M64.1953 31.631H68.2877V19.8739H74.3346V15.8896H68.2877V8.47617H75.8005V4.52451H64.1953V31.631Z" fill="white"/>
5 <path d="M84.731 4.52451H80.6387V31.631H91.4498V27.6466H84.731V4.52451Z" fill="white"/>
6 <path d="M96.2871 8.47617H98.1195V27.6466H96.2871V31.631H104.044V27.6466H102.212V8.47617H104.044V4.52451H96.2871V8.47617Z" fill="white"/>
7 <path d="M115.64 3.90374C113.817 3.74697 112.01 4.35626 110.601 5.60204C110.022 6.19287 109.57 6.91008 109.275 7.70478C108.98 8.49948 108.849 9.35285 108.89 10.2068V25.8829C108.854 26.7439 108.991 27.6032 109.291 28.4031C109.592 29.203 110.048 29.9248 110.631 30.5203C112.075 31.7406 113.896 32.3352 115.731 32.1859C117.562 32.3375 119.378 31.7294 120.801 30.4877C121.374 29.893 121.823 29.1751 122.118 28.3814C122.412 27.5876 122.547 26.7361 122.511 25.8829V22.9109H118.419V25.8829C118.437 26.1962 118.392 26.51 118.286 26.8031C118.181 27.0961 118.018 27.3614 117.808 27.5811C117.209 28.051 116.471 28.2716 115.731 28.2016C114.971 28.2881 114.208 28.0667 113.593 27.5811C113.38 27.3641 113.215 27.0992 113.109 26.8055C113.004 26.5118 112.96 26.1966 112.983 25.8829V10.2068C112.961 9.89584 113.001 9.58355 113.101 9.29066C113.201 8.99777 113.359 8.73109 113.563 8.50858C114.162 8.0386 114.9 7.818 115.64 7.88806C116.41 7.79306 117.185 8.01491 117.808 8.50858C118.018 8.72822 118.181 8.99354 118.286 9.28657C118.392 9.5796 118.437 9.89342 118.419 10.2068V14.7463H122.511V10.2068C122.545 9.34791 122.404 8.4915 122.098 7.69651C121.792 6.90152 121.329 6.18696 120.74 5.60204C119.307 4.35529 117.481 3.74697 115.64 3.90374Z" fill="white"/>
8 <path d="M127.354 4.52451V8.47617H132.118V31.631H136.21V8.47617H140.974V4.52451H127.354Z" fill="white"/>
9 <path d="M19.3984 36.1741H26.9709V32.4944H22.9871V3.85375H27.0368V0.174088H19.3984V36.1741Z" fill="#DB394C"/>
10 <path d="M32.2717 0.174088V3.85375H36.2884V32.4944H32.2388V36.1741H39.8771V0.174088H32.2717Z" fill="#DB394C"/>
11 <path d="M31.4486 10.5303H27.827V25.5524H31.4486V10.5303Z" fill="#DB394C"/>
12 </svg>
--- a/docs/cli-reference.md
+++ b/docs/cli-reference.md
@@ -0,0 +1,123 @@
1
+# CLI Reference
2
+
3
+All commands are invoked via `python src/cli.py`.
4
+
5
+## Global Options
6
+
7
+```
8
+python src/cli.py [--backend {anthropic,openai,google}] <command> ...
9
+```
10
+
11
+| Flag | Description |
12
+|------|-------------|
13
+| `--backend` | Override `HUGOIFIER_BACKEND` env var for this run |
14
+
15
+---
16
+
17
+## `complete` — Full Pipeline
18
+
19
+Runs the full pipeline: detect → copy/convert → patch → decapify.
20
+
21
+```bash
22
+python src/cli.py complete <path> [options]
23
+```
24
+
25
+| Argument | Description |
26
+|----------|-------------|
27
+| `path` | Path to a Hugo theme directory or raw HTML directory |
28
+| `--output`, `-o` | Output directory (default: `output/{theme-name}`) |
29
+| `--cms-name` | Whitelabel CMS name shown in admin UI |
30
+| `--cms-logo` | URL to a logo image for the admin UI |
31
+| `--cms-color` | Hex color for the admin top bar (e.g. `#1a1a2e`) |
32
+
33
+**Examples:**
34
+
35
+```bash
36
+# Hugo theme with exampleSite
37
+python src/cli.py complete themes/revolve-hugo
38
+
39
+# Custom output path
40
+python src/cli.py complete themes/revolve-hugo --output /var/www/mysite
41
+
42
+# With whitelabel CMS
43
+python src/cli.py complete themes/revolve-hugo \
44
+ --cms-name "My Studio" \
45
+ --cms-color "#0d1117"
46
+```
47
+
48
+---
49
+
50
+## `analyze` — Inspect Theme Structure
51
+
52
+Analyzes a theme and reports its layout files, content types, and exampleSite location. For raw HTML, uses AI to suggest partials and Hugo template tags.
53
+
54
+```bash
55
+python src/cli.py analyze <path>
56
+```
57
+
58
+---
59
+
60
+## `hugoify` — HTML → Hugo Conversion
61
+
62
+Converts a raw HTML file or directory to Hugo layout files. For an existing Hugo theme, validates its structure.
63
+
64
+```bash
65
+python src/cli.py hugoify <path>
66
+```
67
+
68
+---
69
+
70
+## `decapify` — Add Decap CMS
71
+
72
+Adds Decap CMS to an already-assembled Hugo site. Introspects `content/` to auto-generate `static/admin/config.yml`.
73
+
74
+```bash
75
+python src/cli.py decapify <path> [options]
76
+```
77
+
78
+| Argument | Description |
79
+|----------|-------------|
80
+| `path` | Path to an assembled Hugo site (contains `hugo.toml`, `content/`, `themes/`) |
81
+| `--cms-name` | Whitelabel CMS name |
82
+| `--cms-logo` | Logo URL |
83
+| `--cms-color` | Top-bar hex color |
84
+
85
+---
86
+
87
+## `translate` — Translate Content
88
+
89
+Translates a content file to another language using the configured AI backend.
90
+
91
+```bash
92
+python src/cli.py translate <path> [--target-language LANGUAGE]
93
+```
94
+
95
+| Argument | Default | Description |
96
+|----------|---------|-------------|
97
+| `path` | — | Path to the content file |
98
+| `--target-language` | `Spanish` | Language to translate into |
99
+
100
+---
101
+
102
+## `deploy` — Deploy to Cloudflare _(stub)_
103
+
104
+```bash
105
+python src/cli.py deploy <path> <zone>
106
+```
107
+
108
+---
109
+
110
+## `cloudflare` — Configure Cloudflare _(stub)_
111
+
112
+```bash
113
+python src/cli.py cloudflare <path> <zone>
114
+```
115
+
116
+---
117
+
118
+## Exit Codes
119
+
120
+| Code | Meaning |
121
+|------|---------|
122
+| `0` | Success |
123
+| `1` | Error (bad input path, missing API key, etc.) — message printed to stderr |
--- a/docs/cli-reference.md
+++ b/docs/cli-reference.md
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/cli-reference.md
+++ b/docs/cli-reference.md
@@ -0,0 +1,123 @@
1 # CLI Reference
2
3 All commands are invoked via `python src/cli.py`.
4
5 ## Global Options
6
7 ```
8 python src/cli.py [--backend {anthropic,openai,google}] <command> ...
9 ```
10
11 | Flag | Description |
12 |------|-------------|
13 | `--backend` | Override `HUGOIFIER_BACKEND` env var for this run |
14
15 ---
16
17 ## `complete` — Full Pipeline
18
19 Runs the full pipeline: detect → copy/convert → patch → decapify.
20
21 ```bash
22 python src/cli.py complete <path> [options]
23 ```
24
25 | Argument | Description |
26 |----------|-------------|
27 | `path` | Path to a Hugo theme directory or raw HTML directory |
28 | `--output`, `-o` | Output directory (default: `output/{theme-name}`) |
29 | `--cms-name` | Whitelabel CMS name shown in admin UI |
30 | `--cms-logo` | URL to a logo image for the admin UI |
31 | `--cms-color` | Hex color for the admin top bar (e.g. `#1a1a2e`) |
32
33 **Examples:**
34
35 ```bash
36 # Hugo theme with exampleSite
37 python src/cli.py complete themes/revolve-hugo
38
39 # Custom output path
40 python src/cli.py complete themes/revolve-hugo --output /var/www/mysite
41
42 # With whitelabel CMS
43 python src/cli.py complete themes/revolve-hugo \
44 --cms-name "My Studio" \
45 --cms-color "#0d1117"
46 ```
47
48 ---
49
50 ## `analyze` — Inspect Theme Structure
51
52 Analyzes a theme and reports its layout files, content types, and exampleSite location. For raw HTML, uses AI to suggest partials and Hugo template tags.
53
54 ```bash
55 python src/cli.py analyze <path>
56 ```
57
58 ---
59
60 ## `hugoify` — HTML → Hugo Conversion
61
62 Converts a raw HTML file or directory to Hugo layout files. For an existing Hugo theme, validates its structure.
63
64 ```bash
65 python src/cli.py hugoify <path>
66 ```
67
68 ---
69
70 ## `decapify` — Add Decap CMS
71
72 Adds Decap CMS to an already-assembled Hugo site. Introspects `content/` to auto-generate `static/admin/config.yml`.
73
74 ```bash
75 python src/cli.py decapify <path> [options]
76 ```
77
78 | Argument | Description |
79 |----------|-------------|
80 | `path` | Path to an assembled Hugo site (contains `hugo.toml`, `content/`, `themes/`) |
81 | `--cms-name` | Whitelabel CMS name |
82 | `--cms-logo` | Logo URL |
83 | `--cms-color` | Top-bar hex color |
84
85 ---
86
87 ## `translate` — Translate Content
88
89 Translates a content file to another language using the configured AI backend.
90
91 ```bash
92 python src/cli.py translate <path> [--target-language LANGUAGE]
93 ```
94
95 | Argument | Default | Description |
96 |----------|---------|-------------|
97 | `path` | — | Path to the content file |
98 | `--target-language` | `Spanish` | Language to translate into |
99
100 ---
101
102 ## `deploy` — Deploy to Cloudflare _(stub)_
103
104 ```bash
105 python src/cli.py deploy <path> <zone>
106 ```
107
108 ---
109
110 ## `cloudflare` — Configure Cloudflare _(stub)_
111
112 ```bash
113 python src/cli.py cloudflare <path> <zone>
114 ```
115
116 ---
117
118 ## Exit Codes
119
120 | Code | Meaning |
121 |------|---------|
122 | `0` | Success |
123 | `1` | Error (bad input path, missing API key, etc.) — message printed to stderr |
--- a/docs/getting-started/configuration.md
+++ b/docs/getting-started/configuration.md
@@ -0,0 +1,39 @@
1
+# Configuration
2
+
3
+All configuration is via environment variables.
4
+
5
+## AI Backend
6
+
7
+| Variable | Default | Description |
8
+|----------|---------|-------------|
9
+| `HUGOIFIER_BACKEND` | `anthropic` | Backend to use: `anthropic`, `openai`, or `google` |
10
+| `ANTHROPIC_API_KEY` | — | Required when using Anthropic backend |
11
+| `OPENAI_API_KEY` | — | Required when using OpenAI backend |
12
+| `GOOGLE_API_KEY` | — | Required when using Google backend |
13
+| `ANTHROPIC_MODEL` | `claude-sonnet-4-6` | Anthropic model override |
14
+| `OPENAI_MODEL` | `gpt-4-turbo` | OpenAI model override |
15
+| `GOOGLE_MODEL` | `gemini-1.5-pro` | Google model override |
16
+| `HUGOIFIER_MAX_TOKENS` | `4096` | Max tokens for AI responses |
17
+
18
+## Decap CMS Defaults
19
+
20
+| Variable | Default | Description |
21
+|----------|---------|-------------|
22
+| `CMS_NAME` | `Content Manager` | Default CMS admin panel title |
23
+| `CMS_LOGO_URL` | _(empty)_ | Default logo URL for admin panel |
24
+| `CMS_COLOR` | `#2e3748` | Default top-bar hex color |
25
+
26
+These defaults apply when the corresponding CLI flags (`--cms-name`, `--cms-logo`, `--cms-color`) are not passed.
27
+
28
+## Example `.env`
29
+
30
+```bash
31
+HUGOIFIER_BACKEND=anthropic
32
+ANTHROPIC_API_KEY=sk-ant-...
33
+
34
+CMS_NAME=My Studio
35
+CMS_COLOR=#1a1a2e
36
+```
37
+
38
+!!! warning
39
+ Never commit `.env` to version control. It is listed in `.gitignore`.
--- a/docs/getting-started/configuration.md
+++ b/docs/getting-started/configuration.md
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/getting-started/configuration.md
+++ b/docs/getting-started/configuration.md
@@ -0,0 +1,39 @@
1 # Configuration
2
3 All configuration is via environment variables.
4
5 ## AI Backend
6
7 | Variable | Default | Description |
8 |----------|---------|-------------|
9 | `HUGOIFIER_BACKEND` | `anthropic` | Backend to use: `anthropic`, `openai`, or `google` |
10 | `ANTHROPIC_API_KEY` | — | Required when using Anthropic backend |
11 | `OPENAI_API_KEY` | — | Required when using OpenAI backend |
12 | `GOOGLE_API_KEY` | — | Required when using Google backend |
13 | `ANTHROPIC_MODEL` | `claude-sonnet-4-6` | Anthropic model override |
14 | `OPENAI_MODEL` | `gpt-4-turbo` | OpenAI model override |
15 | `GOOGLE_MODEL` | `gemini-1.5-pro` | Google model override |
16 | `HUGOIFIER_MAX_TOKENS` | `4096` | Max tokens for AI responses |
17
18 ## Decap CMS Defaults
19
20 | Variable | Default | Description |
21 |----------|---------|-------------|
22 | `CMS_NAME` | `Content Manager` | Default CMS admin panel title |
23 | `CMS_LOGO_URL` | _(empty)_ | Default logo URL for admin panel |
24 | `CMS_COLOR` | `#2e3748` | Default top-bar hex color |
25
26 These defaults apply when the corresponding CLI flags (`--cms-name`, `--cms-logo`, `--cms-color`) are not passed.
27
28 ## Example `.env`
29
30 ```bash
31 HUGOIFIER_BACKEND=anthropic
32 ANTHROPIC_API_KEY=sk-ant-...
33
34 CMS_NAME=My Studio
35 CMS_COLOR=#1a1a2e
36 ```
37
38 !!! warning
39 Never commit `.env` to version control. It is listed in `.gitignore`.
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -0,0 +1,54 @@
1
+# Installation
2
+
3
+## Prerequisites
4
+
5
+- **Python 3.11+**
6
+- **Hugo extended** — for building the generated site locally (`brew install hugo` on macOS)
7
+- **At least one AI API key**
8
+
9
+## From Source
10
+
11
+```bash
12
+git clone https://github.com/ConflictHQ/hugoifier.git
13
+cd hugoifier
14
+pip install -r requirements.txt
15
+```
16
+
17
+## Docker
18
+
19
+```bash
20
+git clone https://github.com/ConflictHQ/hugoifier.git
21
+cd hugoifier
22
+```
23
+
24
+Then run with your preferred backend:
25
+
26
+=== "Anthropic (default)"
27
+
28
+ ```bash
29
+ ANTHROPIC_API_KEY=your_key docker compose up
30
+ ```
31
+
32
+=== "OpenAI"
33
+
34
+ ```bash
35
+ OPENAI_API_KEY=your_key HUGOIFIER_BACKEND=openai docker compose up
36
+ ```
37
+
38
+=== "Google"
39
+
40
+ ```bash
41
+ GOOGLE_API_KEY=your_key HUGOIFIER_BACKEND=google docker compose up
42
+ ```
43
+
44
+## API Keys
45
+
46
+Set the key for your chosen backend:
47
+
48
+| Backend | Environment Variable | Model |
49
+|---------|---------------------|-------|
50
+| Anthropic (default) | `ANTHROPIC_API_KEY` | `claude-sonnet-4-6` |
51
+| OpenAI | `OPENAI_API_KEY` | `gpt-4-turbo` |
52
+| Google | `GOOGLE_API_KEY` | `gemini-1.5-pro` |
53
+
54
+Override the model with `ANTHROPIC_MODEL`, `OPENAI_MODEL`, or `GOOGLE_MODEL`.
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -0,0 +1,54 @@
1 # Installation
2
3 ## Prerequisites
4
5 - **Python 3.11+**
6 - **Hugo extended** — for building the generated site locally (`brew install hugo` on macOS)
7 - **At least one AI API key**
8
9 ## From Source
10
11 ```bash
12 git clone https://github.com/ConflictHQ/hugoifier.git
13 cd hugoifier
14 pip install -r requirements.txt
15 ```
16
17 ## Docker
18
19 ```bash
20 git clone https://github.com/ConflictHQ/hugoifier.git
21 cd hugoifier
22 ```
23
24 Then run with your preferred backend:
25
26 === "Anthropic (default)"
27
28 ```bash
29 ANTHROPIC_API_KEY=your_key docker compose up
30 ```
31
32 === "OpenAI"
33
34 ```bash
35 OPENAI_API_KEY=your_key HUGOIFIER_BACKEND=openai docker compose up
36 ```
37
38 === "Google"
39
40 ```bash
41 GOOGLE_API_KEY=your_key HUGOIFIER_BACKEND=google docker compose up
42 ```
43
44 ## API Keys
45
46 Set the key for your chosen backend:
47
48 | Backend | Environment Variable | Model |
49 |---------|---------------------|-------|
50 | Anthropic (default) | `ANTHROPIC_API_KEY` | `claude-sonnet-4-6` |
51 | OpenAI | `OPENAI_API_KEY` | `gpt-4-turbo` |
52 | Google | `GOOGLE_API_KEY` | `gemini-1.5-pro` |
53
54 Override the model with `ANTHROPIC_MODEL`, `OPENAI_MODEL`, or `GOOGLE_MODEL`.
--- a/docs/getting-started/quickstart.md
+++ b/docs/getting-started/quickstart.md
@@ -0,0 +1,58 @@
1
+# Quick Start
2
+
3
+## Convert a Hugo Theme
4
+
5
+Most Hugo themes include an `exampleSite/` directory. Hugoifier assembles a complete, working site from it:
6
+
7
+```bash
8
+export ANTHROPIC_API_KEY=your_key
9
+
10
+python src/cli.py complete themes/my-hugo-theme
11
+# → output/my-hugo-theme/
12
+```
13
+
14
+Then test it:
15
+
16
+```bash
17
+cd output/my-hugo-theme
18
+hugo serve
19
+# Open http://localhost:1313
20
+```
21
+
22
+The Decap CMS admin panel is automatically available at `http://localhost:1313/admin/`.
23
+
24
+## Convert Raw HTML
25
+
26
+For a plain HTML/CSS theme:
27
+
28
+```bash
29
+python src/cli.py complete path/to/html-theme/
30
+# → output/html-theme/
31
+```
32
+
33
+Hugoifier sends the main HTML file to the AI backend and converts it to Hugo layout files (`_default/baseof.html`, `partials/header.html`, etc.).
34
+
35
+## Custom Output Directory
36
+
37
+```bash
38
+python src/cli.py complete themes/my-theme --output /tmp/my-site
39
+```
40
+
41
+## Whitelabel Decap CMS
42
+
43
+```bash
44
+python src/cli.py complete themes/my-theme \
45
+ --cms-name "My CMS" \
46
+ --cms-color "#1a1a2e" \
47
+ --cms-logo "https://example.com/logo.png"
48
+```
49
+
50
+## Switch AI Backend
51
+
52
+```bash
53
+# Use OpenAI instead of Anthropic
54
+HUGOIFIER_BACKEND=openai OPENAI_API_KEY=your_key python src/cli.py complete themes/my-theme
55
+
56
+# Or via CLI flag
57
+python src/cli.py --backend openai complete themes/my-theme
58
+```
--- a/docs/getting-started/quickstart.md
+++ b/docs/getting-started/quickstart.md
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/getting-started/quickstart.md
+++ b/docs/getting-started/quickstart.md
@@ -0,0 +1,58 @@
1 # Quick Start
2
3 ## Convert a Hugo Theme
4
5 Most Hugo themes include an `exampleSite/` directory. Hugoifier assembles a complete, working site from it:
6
7 ```bash
8 export ANTHROPIC_API_KEY=your_key
9
10 python src/cli.py complete themes/my-hugo-theme
11 # → output/my-hugo-theme/
12 ```
13
14 Then test it:
15
16 ```bash
17 cd output/my-hugo-theme
18 hugo serve
19 # Open http://localhost:1313
20 ```
21
22 The Decap CMS admin panel is automatically available at `http://localhost:1313/admin/`.
23
24 ## Convert Raw HTML
25
26 For a plain HTML/CSS theme:
27
28 ```bash
29 python src/cli.py complete path/to/html-theme/
30 # → output/html-theme/
31 ```
32
33 Hugoifier sends the main HTML file to the AI backend and converts it to Hugo layout files (`_default/baseof.html`, `partials/header.html`, etc.).
34
35 ## Custom Output Directory
36
37 ```bash
38 python src/cli.py complete themes/my-theme --output /tmp/my-site
39 ```
40
41 ## Whitelabel Decap CMS
42
43 ```bash
44 python src/cli.py complete themes/my-theme \
45 --cms-name "My CMS" \
46 --cms-color "#1a1a2e" \
47 --cms-logo "https://example.com/logo.png"
48 ```
49
50 ## Switch AI Backend
51
52 ```bash
53 # Use OpenAI instead of Anthropic
54 HUGOIFIER_BACKEND=openai OPENAI_API_KEY=your_key python src/cli.py complete themes/my-theme
55
56 # Or via CLI flag
57 python src/cli.py --backend openai complete themes/my-theme
58 ```
--- a/docs/index.md
+++ b/docs/index.md
@@ -0,0 +1,82 @@
1
+# Hugoifier
2
+
3
+**AI-powered Hugo theme converter with Decap CMS integration.**
4
+
5
+Hugoifier converts any HTML/CSS theme into a production-ready Hugo site — complete with layouts, content structure, and a fully configured Decap CMS admin panel. Supports Anthropic Claude, OpenAI GPT-4, and Google Gemini as AI backends.
6
+
7
+---
8
+
9
+## Features
10
+
11
+- **HTML → Hugo** — AI converts raw HTML/CSS templates into valid Hugo Go template files with proper partials, blocks, and template variables
12
+- **Multi-backend AI** — Route to Anthropic (default), OpenAI, or Google Gemini via `HUGOIFIER_BACKEND`
13
+- **Decap CMS out of the box** — Auto-generates `static/admin/config.yml` by introspecting your content structure, including deeply nested collections
14
+- **Hugo API modernization** — Automatically patches deprecated Hugo APIs (`.Site.DisqusShortname`, `.Site.GoogleAnalytics`, `paginate`, etc.) for Hugo ≥ v0.128
15
+- **Whitelabel CMS** — Customize the Decap admin panel name, logo, and color per deployment
16
+- **Smart theme detection** — Handles messy zip-extracted directory structures, skips `__MACOSX` artifacts, detects `exampleSite` automatically
17
+- **Docker support** — Fully containerized with `docker-compose.yml`
18
+
19
+## Quick Start
20
+
21
+```bash
22
+# Install dependencies
23
+pip install -r requirements.txt
24
+
25
+# Set your AI backend key
26
+export ANTHROPIC_API_KEY=your_key_here
27
+
28
+# Convert a Hugo theme
29
+python src/cli.py complete themes/my-theme
30
+
31
+# Convert raw HTML
32
+python src/cli.py complete path/to/html-theme/
33
+
34
+# Output goes to output/{theme-name}/ by default
35
+cd output/my-theme && hugo serve
36
+```
37
+
38
+## Installation
39
+
40
+=== "From source"
41
+
42
+ ```bash
43
+ git clone https://github.com/ConflictHQ/hugoifier.git
44
+ cd hugoifier
45
+ pip install -r requirements.txt
46
+ ```
47
+
48
+=== "Docker"
49
+
50
+ ```bash
51
+ git clone https://github.com/ConflictHQ/hugoifier.git
52
+ cd hugoifier
53
+ ANTHROPIC_API_KEY=your_key docker compose up
54
+ ```
55
+
56
+## Requirements
57
+
58
+- Python 3.11+
59
+- At least one AI API key: `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, or `GOOGLE_API_KEY`
60
+- Hugo extended (for building the output site)
61
+
62
+## Pipeline Overview
63
+
64
+```
65
+Input (Hugo theme or raw HTML)
66
+
67
+[Theme Finder] — detect Hugo theme vs raw HTML
68
+
69
+[Hugoify] — AI converts HTML → Hugo layouts (raw HTML only)
70
+
71
+[Assemble] — copy theme + exampleSite, write hugo.toml
72
+
73
+[Theme Patcher] — fix deprecated Hugo APIs
74
+
75
+[Decapify] — generate Decap CMS config from content structure
76
+
77
+output/{theme-name}/ ← ready to run with hugo serve
78
+```
79
+
80
+## License
81
+
82
+MIT License — Copyright &copy; 2026 CONFLICT LLC. All rights reserved.
--- a/docs/index.md
+++ b/docs/index.md
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/docs/index.md
+++ b/docs/index.md
@@ -0,0 +1,82 @@
1 # Hugoifier
2
3 **AI-powered Hugo theme converter with Decap CMS integration.**
4
5 Hugoifier converts any HTML/CSS theme into a production-ready Hugo site — complete with layouts, content structure, and a fully configured Decap CMS admin panel. Supports Anthropic Claude, OpenAI GPT-4, and Google Gemini as AI backends.
6
7 ---
8
9 ## Features
10
11 - **HTML → Hugo** — AI converts raw HTML/CSS templates into valid Hugo Go template files with proper partials, blocks, and template variables
12 - **Multi-backend AI** — Route to Anthropic (default), OpenAI, or Google Gemini via `HUGOIFIER_BACKEND`
13 - **Decap CMS out of the box** — Auto-generates `static/admin/config.yml` by introspecting your content structure, including deeply nested collections
14 - **Hugo API modernization** — Automatically patches deprecated Hugo APIs (`.Site.DisqusShortname`, `.Site.GoogleAnalytics`, `paginate`, etc.) for Hugo ≥ v0.128
15 - **Whitelabel CMS** — Customize the Decap admin panel name, logo, and color per deployment
16 - **Smart theme detection** — Handles messy zip-extracted directory structures, skips `__MACOSX` artifacts, detects `exampleSite` automatically
17 - **Docker support** — Fully containerized with `docker-compose.yml`
18
19 ## Quick Start
20
21 ```bash
22 # Install dependencies
23 pip install -r requirements.txt
24
25 # Set your AI backend key
26 export ANTHROPIC_API_KEY=your_key_here
27
28 # Convert a Hugo theme
29 python src/cli.py complete themes/my-theme
30
31 # Convert raw HTML
32 python src/cli.py complete path/to/html-theme/
33
34 # Output goes to output/{theme-name}/ by default
35 cd output/my-theme && hugo serve
36 ```
37
38 ## Installation
39
40 === "From source"
41
42 ```bash
43 git clone https://github.com/ConflictHQ/hugoifier.git
44 cd hugoifier
45 pip install -r requirements.txt
46 ```
47
48 === "Docker"
49
50 ```bash
51 git clone https://github.com/ConflictHQ/hugoifier.git
52 cd hugoifier
53 ANTHROPIC_API_KEY=your_key docker compose up
54 ```
55
56 ## Requirements
57
58 - Python 3.11+
59 - At least one AI API key: `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, or `GOOGLE_API_KEY`
60 - Hugo extended (for building the output site)
61
62 ## Pipeline Overview
63
64 ```
65 Input (Hugo theme or raw HTML)
66
67 [Theme Finder] — detect Hugo theme vs raw HTML
68
69 [Hugoify] — AI converts HTML → Hugo layouts (raw HTML only)
70
71 [Assemble] — copy theme + exampleSite, write hugo.toml
72
73 [Theme Patcher] — fix deprecated Hugo APIs
74
75 [Decapify] — generate Decap CMS config from content structure
76
77 output/{theme-name}/ ← ready to run with hugo serve
78 ```
79
80 ## License
81
82 MIT License — Copyright &copy; 2026 CONFLICT LLC. All rights reserved.
+82
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -0,0 +1,82 @@
1
+site_name: Hugoifier
2
+site_url: https://hugoifier.dev
3
+site_description: AI-powered Hugo theme converter with Decap CMS integration
4
+site_author: CONFLICT LLC
5
+repo_url: https://github.com/ConflictHQ/hugoifier
6
+repo_name: ConflictHQ/hugoifier
7
+
8
+theme:
9
+ name: material
10
+ logo: assets/images/conflict-logo.svg
11
+ favicon: assets/images/favicon.png
12
+ font:
13
+ text: Roboto
14
+ code: Roboto Mono
15
+ palette:
16
+ - media: "(prefers-color-scheme: dark)"
17
+ scheme: slate
18
+ primary: custom
19
+ accent: custom
20
+ toggle:
21
+ icon: material/brightness-4
22
+ name: Switch to light mode
23
+ - media: "(prefers-color-scheme: light)"
24
+ scheme: default
25
+ primary: custom
26
+ accent: custom
27
+ toggle:
28
+ icon: material/brightness-7
29
+ name: Switch to dark mode
30
+ features:
31
+ - navigation.instant
32
+ - navigation.tabs
33
+ - navigation.sections
34
+ - navigation.expand
35
+ - navigation.top
36
+ - search.suggest
37
+ - search.highlight
38
+ - content.code.copy
39
+ - content.tabs.link
40
+ - header.autohide
41
+ icon:
42
+ repo: fontawesome/brands/github
43
+
44
+extra_css:
45
+ - assets/css/custom.css
46
+
47
+plugins:
48
+ - search
49
+
50
+markdown_extensions:
51
+ - admonition
52
+ - pymdownx.details
53
+ - pymdownx.superfences:
54
+ custom_fences:
55
+ - name: mermaid
56
+ class: mermaid
57
+ format: !!python/name:pymdownx.superfences.fence_code_format
58
+ - pymdownx.tabbed:
59
+ alternate_style: true
60
+ - pymdownx.highlight:
61
+ anchor_linenums: true
62
+ - pymdownx.inlinehilite
63
+ - pymdownx.snippets
64
+ - attr_list
65
+ - md_in_html
66
+ - toc:
67
+ permalink: true
68
+
69
+nav:
70
+ - Home: index.md
71
+ - Getting Started:
72
+ - Installation: getting-started/installation.md
73
+ - Quick Start: getting-started/quickstart.md
74
+ - Configuration: getting-started/configuration.md
75
+ - CLI Reference: cli-reference.md
76
+ - Arc
77
+extra:
78
+ social:
79
+ - icon: fontawesome/brands/github
80
+ link: https://github.com/ConflictHQ/hugoifier
81
+
82
+copyright: Copyright &copy; 2026 CONFLICT LLC
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -0,0 +1,82 @@
1 site_name: Hugoifier
2 site_url: https://hugoifier.dev
3 site_description: AI-powered Hugo theme converter with Decap CMS integration
4 site_author: CONFLICT LLC
5 repo_url: https://github.com/ConflictHQ/hugoifier
6 repo_name: ConflictHQ/hugoifier
7
8 theme:
9 name: material
10 logo: assets/images/conflict-logo.svg
11 favicon: assets/images/favicon.png
12 font:
13 text: Roboto
14 code: Roboto Mono
15 palette:
16 - media: "(prefers-color-scheme: dark)"
17 scheme: slate
18 primary: custom
19 accent: custom
20 toggle:
21 icon: material/brightness-4
22 name: Switch to light mode
23 - media: "(prefers-color-scheme: light)"
24 scheme: default
25 primary: custom
26 accent: custom
27 toggle:
28 icon: material/brightness-7
29 name: Switch to dark mode
30 features:
31 - navigation.instant
32 - navigation.tabs
33 - navigation.sections
34 - navigation.expand
35 - navigation.top
36 - search.suggest
37 - search.highlight
38 - content.code.copy
39 - content.tabs.link
40 - header.autohide
41 icon:
42 repo: fontawesome/brands/github
43
44 extra_css:
45 - assets/css/custom.css
46
47 plugins:
48 - search
49
50 markdown_extensions:
51 - admonition
52 - pymdownx.details
53 - pymdownx.superfences:
54 custom_fences:
55 - name: mermaid
56 class: mermaid
57 format: !!python/name:pymdownx.superfences.fence_code_format
58 - pymdownx.tabbed:
59 alternate_style: true
60 - pymdownx.highlight:
61 anchor_linenums: true
62 - pymdownx.inlinehilite
63 - pymdownx.snippets
64 - attr_list
65 - md_in_html
66 - toc:
67 permalink: true
68
69 nav:
70 - Home: index.md
71 - Getting Started:
72 - Installation: getting-started/installation.md
73 - Quick Start: getting-started/quickstart.md
74 - Configuration: getting-started/configuration.md
75 - CLI Reference: cli-reference.md
76 - Arc
77 extra:
78 social:
79 - icon: fontawesome/brands/github
80 link: https://github.com/ConflictHQ/hugoifier
81
82 copyright: Copyright &copy; 2026 CONFLICT LLC

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button