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
Commit
04b8794b3aefc6bcf22d653a2356c837fdbfad1e5635cb9d821e0422a2d632e0
Parent
6272677ca26ac7f…
11 files changed
+30
+97
+156
+12
+123
+39
+54
+58
+82
+82
+
.github/workflows/docs.yml
+
docs/architecture.md
+
docs/assets/css/custom.css
+
docs/assets/images/conflict-logo.svg
+
docs/assets/images/favicon.png
+
docs/cli-reference.md
+
docs/getting-started/configuration.md
+
docs/getting-started/installation.md
+
docs/getting-started/quickstart.md
+
docs/index.md
+
mkdocs.yml
| --- 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 |
+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/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 | ``` |
+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/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> |
Binary file
+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/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 | ``` |
+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 © 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 © 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 © 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 © 2026 CONFLICT LLC |