akceo 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. akceo-0.1.0/.gitignore +20 -0
  2. akceo-0.1.0/CHANGELOG.md +45 -0
  3. akceo-0.1.0/LICENSE +21 -0
  4. akceo-0.1.0/PKG-INFO +184 -0
  5. akceo-0.1.0/README.md +156 -0
  6. akceo-0.1.0/docs/RELEASING.md +97 -0
  7. akceo-0.1.0/docs/branding.md +22 -0
  8. akceo-0.1.0/docs/how-it-works.md +456 -0
  9. akceo-0.1.0/docs/speaker-notes.md +108 -0
  10. akceo-0.1.0/docs/syntax.md +230 -0
  11. akceo-0.1.0/examples/demo/deck.md +107 -0
  12. akceo-0.1.0/examples/demo/flow.mmd +5 -0
  13. akceo-0.1.0/examples/demo/flow.svg +29 -0
  14. akceo-0.1.0/examples/demo/speaker-notes.md +44 -0
  15. akceo-0.1.0/pyproject.toml +87 -0
  16. akceo-0.1.0/scripts/update_mermaid.py +269 -0
  17. akceo-0.1.0/src/akceo/__init__.py +1 -0
  18. akceo-0.1.0/src/akceo/__main__.py +3 -0
  19. akceo-0.1.0/src/akceo/assets/base.css +64 -0
  20. akceo-0.1.0/src/akceo/assets/deck.js +33 -0
  21. akceo-0.1.0/src/akceo/assets/diagrams.js +60 -0
  22. akceo-0.1.0/src/akceo/assets/md-viewer.html +257 -0
  23. akceo-0.1.0/src/akceo/assets/mermaid-shims.js +76 -0
  24. akceo-0.1.0/src/akceo/assets/page.html +27 -0
  25. akceo-0.1.0/src/akceo/assets/vendor/mermaid/LICENSE +21 -0
  26. akceo-0.1.0/src/akceo/assets/vendor/mermaid/README.md +56 -0
  27. akceo-0.1.0/src/akceo/assets/vendor/mermaid/THIRD_PARTY_NOTICES +4872 -0
  28. akceo-0.1.0/src/akceo/assets/vendor/mermaid/manifest.json +8 -0
  29. akceo-0.1.0/src/akceo/assets/vendor/mermaid/mermaid.min.js +4376 -0
  30. akceo-0.1.0/src/akceo/cli.py +92 -0
  31. akceo-0.1.0/src/akceo/errors.py +2 -0
  32. akceo-0.1.0/src/akceo/files.py +17 -0
  33. akceo-0.1.0/src/akceo/images.py +42 -0
  34. akceo-0.1.0/src/akceo/mermaid.py +388 -0
  35. akceo-0.1.0/src/akceo/parse.py +348 -0
  36. akceo-0.1.0/src/akceo/render.py +247 -0
  37. akceo-0.1.0/src/akceo/themes/midnight.css +14 -0
  38. akceo-0.1.0/src/akceo/themes/paper.css +14 -0
  39. akceo-0.1.0/src/akceo/themes.py +70 -0
  40. akceo-0.1.0/tests/test_cli.py +185 -0
  41. akceo-0.1.0/tests/test_images.py +85 -0
  42. akceo-0.1.0/tests/test_mermaid.py +306 -0
  43. akceo-0.1.0/tests/test_parse.py +347 -0
  44. akceo-0.1.0/tests/test_render.py +193 -0
  45. akceo-0.1.0/tests/test_themes.py +82 -0
  46. akceo-0.1.0/tests/test_update_mermaid.py +134 -0
  47. akceo-0.1.0/uv.lock +372 -0
akceo-0.1.0/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ .claude/
2
+
3
+ # Python
4
+ __pycache__/
5
+ *.py[cod]
6
+ *.egg-info/
7
+ build/
8
+ dist/
9
+
10
+ # Virtual envs
11
+ .venv/
12
+ .env
13
+
14
+ # Tooling caches
15
+ .pytest_cache/
16
+ .ruff_cache/
17
+ .pyright/
18
+
19
+ # Built example decks
20
+ examples/**/*.html
@@ -0,0 +1,45 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
+
6
+ ## [Unreleased]
7
+
8
+ ## [0.1.0] - 2026-09-24
9
+
10
+ The first release.
11
+
12
+ ### Added
13
+
14
+ - Published on PyPI: `uv tool install akceo` or `pipx install akceo`.
15
+ - `akceo build` renders a Markdown deck into one self-contained HTML file.
16
+ - `akceo themes` lists the built-in themes.
17
+ - Six layouts: `title`, `bullets`, `split`, `steps`, `table` and `image`.
18
+ - Built-in `midnight` and `paper` themes. Custom themes are CSS files that set akceo's tokens.
19
+ - PNG, JPEG and WebP images are shrunk and embedded; SVG is embedded as-is.
20
+ - Mermaid diagrams: `image: flow.mmd` is drawn as SVG when the page opens. akceo includes
21
+ Mermaid, so there's nothing else to install. The build checks each diagram with Mermaid's own
22
+ parser and stops on a syntax error, naming the line in the `.mmd` file. It also stops on a
23
+ diagram that would load or link to anything outside the deck, and on one longer than Mermaid's
24
+ 50,000-character limit. A deck with a diagram grows by about 5.6 MB.
25
+ - The built page carries a Content-Security-Policy, so the browser refuses to load anything from
26
+ outside the file. A web font or `@import` in a custom theme doesn't load; use installed fonts,
27
+ or embed one as a `data:` URI.
28
+ - `akceo check deck.md` runs every check a build runs, diagrams included, without writing a file.
29
+ - Per-slide style overrides: `style-h1`, `style-h2`, `style-lead`, `style-ul`, `style-ol` and
30
+ `style-sub` add inline CSS to that element, for one-off spacing fixes. They can't reference
31
+ files or URLs.
32
+ - `image-frame: no`, for the whole deck or one slide, drops the white panel behind images.
33
+ Mermaid diagrams without a frame are drawn in the deck theme's colors.
34
+ - Deck errors name the file, line and slide; theme and image errors name the file. Content a
35
+ layout doesn't use is reported with the list of what that layout takes.
36
+ - The URL hash tracks the current slide: `deck.html#4` opens slide 4, and a reload stays put.
37
+ - Author notes: a line starting with `//` is dropped from the page, so reminders can sit next to
38
+ the slide they're about.
39
+ - A `split` slide with no `image:` line builds with a dashed placeholder box, so a slide can be
40
+ set up before its image exists.
41
+ - `akceo viewer` writes `md-viewer.html`, a speaker-notes viewer for a second browser tab. In
42
+ Chrome and Edge it refreshes live when the notes file changes.
43
+ - Example speaker notes for the demo deck.
44
+ - Docs: the speaker-notes setup, and how Akceo works (plain terms, user experience, internals),
45
+ with Mermaid diagrams.
akceo-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Chris Colinsky
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
akceo-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,184 @@
1
+ Metadata-Version: 2.5
2
+ Name: akceo
3
+ Version: 0.1.0
4
+ Summary: Build self-contained HTML slide decks from Markdown.
5
+ Project-URL: Repository, https://github.com/LunarCommand/akceo
6
+ Project-URL: Documentation, https://github.com/LunarCommand/akceo/blob/main/docs/syntax.md
7
+ Project-URL: Changelog, https://github.com/LunarCommand/akceo/blob/main/CHANGELOG.md
8
+ Project-URL: Issues, https://github.com/LunarCommand/akceo/issues
9
+ Author-email: Chris Colinsky <chris@lunarcommand.xyz>
10
+ License-Expression: MIT AND Apache-2.0 AND BSD-3-Clause AND ISC AND EPL-2.0 AND (MPL-2.0 OR Apache-2.0) AND Unlicense
11
+ License-File: LICENSE
12
+ License-File: src/akceo/assets/vendor/mermaid/LICENSE
13
+ License-File: src/akceo/assets/vendor/mermaid/THIRD_PARTY_NOTICES
14
+ Keywords: cli,html,markdown,mermaid,presentation,slides
15
+ Classifier: Development Status :: 3 - Alpha
16
+ Classifier: Environment :: Console
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Topic :: Multimedia :: Graphics :: Presentation
24
+ Requires-Python: >=3.12
25
+ Requires-Dist: mini-racer>=0.14.1
26
+ Requires-Dist: pillow>=10.0
27
+ Description-Content-Type: text/markdown
28
+
29
+ # Akceo
30
+
31
+ Build self-contained HTML slide decks from Markdown.
32
+
33
+ You write slides in one Markdown file and run one command. You get a single HTML file with every
34
+ image embedded in it. Large PNG, JPEG and WebP images are shrunk first. Mermaid `.mmd` diagrams
35
+ are checked at build time and drawn when the page opens, with a copy of Mermaid that akceo
36
+ includes, so there's nothing else to install. The file has no external assets, so it opens
37
+ straight from disk, works offline, and survives being emailed or copied anywhere.
38
+
39
+ ## Install
40
+
41
+ Needs Python 3.12 or newer. Install the `akceo` command from PyPI with
42
+ [uv](https://docs.astral.sh/uv/) or [pipx](https://pipx.pypa.io/):
43
+
44
+ ```sh
45
+ uv tool install akceo
46
+ pipx install akceo
47
+ ```
48
+
49
+ To try changes that aren't released yet, install from the repository instead:
50
+
51
+ ```sh
52
+ uv tool install git+https://github.com/LunarCommand/akceo
53
+ ```
54
+
55
+ To work on akceo itself, install your checkout in editable mode so the `akceo` command always
56
+ runs your latest source:
57
+
58
+ ```sh
59
+ git clone https://github.com/LunarCommand/akceo.git
60
+ uv tool install --editable ./akceo
61
+ ```
62
+
63
+ ## Quickstart
64
+
65
+ Write `deck.md`:
66
+
67
+ ```markdown
68
+ title: Q3 Review
69
+ theme: midnight
70
+
71
+ ---
72
+
73
+ layout: title
74
+ kicker: Q3 review
75
+ meta: Platform team · September 2026
76
+
77
+ # Shipping faster
78
+
79
+ ---
80
+
81
+ kicker: The problem
82
+
83
+ ## Builds take too long
84
+
85
+ - **Full rebuilds** on every change.
86
+ - CI queues back up at ==peak hours==.
87
+ ```
88
+
89
+ Build it:
90
+
91
+ ```sh
92
+ akceo build deck.md # writes deck.html next to deck.md
93
+ akceo build deck.md -o talk.html --theme paper
94
+ akceo check deck.md # runs every check, diagrams included, and writes nothing
95
+ ```
96
+
97
+ Open `deck.html` in a browser to present:
98
+
99
+ | Key | Action |
100
+ | --- | --- |
101
+ | `→`, `Space`, `PageDown`, click right half | Next slide |
102
+ | `←`, `PageUp`, click left half | Previous slide |
103
+ | `Home`, `End` | First, last slide |
104
+ | `F` | Toggle full screen |
105
+
106
+ A click while text is selected doesn't change slides, so you can copy text from a slide.
107
+
108
+ The address bar shows the current slide as `#N`, so `deck.html#4` opens on slide 4 and a reload
109
+ stays on the slide you were on.
110
+
111
+ `examples/demo/deck.md` uses every layout and markup feature. Build it with
112
+ `akceo build examples/demo/deck.md`.
113
+
114
+ ## Layouts
115
+
116
+ | Layout | For | Content |
117
+ | --- | --- | --- |
118
+ | `title` | Opening and section slides | `#` heading, kicker, meta line |
119
+ | `bullets` | Most slides (the default) | `##` heading, lead, list, paragraph |
120
+ | `split` | A diagram with commentary | image, `##` heading, phases, lists, note |
121
+ | `steps` | A sequence | `##` heading, paragraph, numbered list |
122
+ | `table` | Comparisons | `##` heading, table |
123
+ | `image` | A diagram on its own | image, kicker |
124
+
125
+ The full format is in [docs/syntax.md](docs/syntax.md). It covers config keys, slide keys, blocks
126
+ and inline markup.
127
+
128
+ ## Themes
129
+
130
+ ```sh
131
+ akceo themes # list the built-in themes
132
+ akceo build deck.md --theme paper # a built-in theme
133
+ akceo build deck.md --theme brand.css # your own theme
134
+ ```
135
+
136
+ A deck can also set `theme:` in its config block. The `--theme` flag overrides it.
137
+
138
+ `midnight` (dark, the default) and `paper` (light) are built in. A custom theme is a CSS file
139
+ that sets akceo's color and font tokens. The simplest start is a copy of
140
+ [`src/akceo/themes/midnight.css`](src/akceo/themes/midnight.css). The token list is in
141
+ [docs/syntax.md](docs/syntax.md#themes).
142
+
143
+ ## Speaker notes
144
+
145
+ Keep your notes in a Markdown file and read them in a second browser tab, while you share only
146
+ the deck tab in your call.
147
+
148
+ ```sh
149
+ akceo viewer # writes md-viewer.html into the current folder
150
+ ```
151
+
152
+ Open `md-viewer.html` next to your deck, for example with Chrome's split view, and open your
153
+ notes file in it. In Chrome and Edge it refreshes by itself when you save the notes.
154
+ `examples/demo/speaker-notes.md` goes with the demo deck. The setup is in
155
+ [docs/speaker-notes.md](docs/speaker-notes.md).
156
+
157
+ ## How it works
158
+
159
+ [docs/how-it-works.md](docs/how-it-works.md) explains Akceo at three levels: in plain terms,
160
+ from the user's side, and under the hood. It has diagrams of the build pipeline, the data model
161
+ and the notes viewer.
162
+
163
+ ## Development
164
+
165
+ ```sh
166
+ uv sync
167
+ uv run pytest
168
+ uv run ruff check . && uv run ruff format --check .
169
+ uv run pyright
170
+ uv run pre-commit install # optional: run these checks on every commit
171
+ ```
172
+
173
+ Releases are published to PyPI by pushing a version tag; [docs/RELEASING.md](docs/RELEASING.md)
174
+ has the steps.
175
+
176
+ ## Branding
177
+
178
+ Akceo comes from the Latin *actio*, "the act of doing". The spelling ends in *ceo* to tie it to
179
+ the executives who give so many decks: executive action. The full naming rationale is in
180
+ [docs/branding.md](docs/branding.md). The domain is akceo.ai.
181
+
182
+ ## License
183
+
184
+ MIT. See [LICENSE](LICENSE).
akceo-0.1.0/README.md ADDED
@@ -0,0 +1,156 @@
1
+ # Akceo
2
+
3
+ Build self-contained HTML slide decks from Markdown.
4
+
5
+ You write slides in one Markdown file and run one command. You get a single HTML file with every
6
+ image embedded in it. Large PNG, JPEG and WebP images are shrunk first. Mermaid `.mmd` diagrams
7
+ are checked at build time and drawn when the page opens, with a copy of Mermaid that akceo
8
+ includes, so there's nothing else to install. The file has no external assets, so it opens
9
+ straight from disk, works offline, and survives being emailed or copied anywhere.
10
+
11
+ ## Install
12
+
13
+ Needs Python 3.12 or newer. Install the `akceo` command from PyPI with
14
+ [uv](https://docs.astral.sh/uv/) or [pipx](https://pipx.pypa.io/):
15
+
16
+ ```sh
17
+ uv tool install akceo
18
+ pipx install akceo
19
+ ```
20
+
21
+ To try changes that aren't released yet, install from the repository instead:
22
+
23
+ ```sh
24
+ uv tool install git+https://github.com/LunarCommand/akceo
25
+ ```
26
+
27
+ To work on akceo itself, install your checkout in editable mode so the `akceo` command always
28
+ runs your latest source:
29
+
30
+ ```sh
31
+ git clone https://github.com/LunarCommand/akceo.git
32
+ uv tool install --editable ./akceo
33
+ ```
34
+
35
+ ## Quickstart
36
+
37
+ Write `deck.md`:
38
+
39
+ ```markdown
40
+ title: Q3 Review
41
+ theme: midnight
42
+
43
+ ---
44
+
45
+ layout: title
46
+ kicker: Q3 review
47
+ meta: Platform team · September 2026
48
+
49
+ # Shipping faster
50
+
51
+ ---
52
+
53
+ kicker: The problem
54
+
55
+ ## Builds take too long
56
+
57
+ - **Full rebuilds** on every change.
58
+ - CI queues back up at ==peak hours==.
59
+ ```
60
+
61
+ Build it:
62
+
63
+ ```sh
64
+ akceo build deck.md # writes deck.html next to deck.md
65
+ akceo build deck.md -o talk.html --theme paper
66
+ akceo check deck.md # runs every check, diagrams included, and writes nothing
67
+ ```
68
+
69
+ Open `deck.html` in a browser to present:
70
+
71
+ | Key | Action |
72
+ | --- | --- |
73
+ | `→`, `Space`, `PageDown`, click right half | Next slide |
74
+ | `←`, `PageUp`, click left half | Previous slide |
75
+ | `Home`, `End` | First, last slide |
76
+ | `F` | Toggle full screen |
77
+
78
+ A click while text is selected doesn't change slides, so you can copy text from a slide.
79
+
80
+ The address bar shows the current slide as `#N`, so `deck.html#4` opens on slide 4 and a reload
81
+ stays on the slide you were on.
82
+
83
+ `examples/demo/deck.md` uses every layout and markup feature. Build it with
84
+ `akceo build examples/demo/deck.md`.
85
+
86
+ ## Layouts
87
+
88
+ | Layout | For | Content |
89
+ | --- | --- | --- |
90
+ | `title` | Opening and section slides | `#` heading, kicker, meta line |
91
+ | `bullets` | Most slides (the default) | `##` heading, lead, list, paragraph |
92
+ | `split` | A diagram with commentary | image, `##` heading, phases, lists, note |
93
+ | `steps` | A sequence | `##` heading, paragraph, numbered list |
94
+ | `table` | Comparisons | `##` heading, table |
95
+ | `image` | A diagram on its own | image, kicker |
96
+
97
+ The full format is in [docs/syntax.md](docs/syntax.md). It covers config keys, slide keys, blocks
98
+ and inline markup.
99
+
100
+ ## Themes
101
+
102
+ ```sh
103
+ akceo themes # list the built-in themes
104
+ akceo build deck.md --theme paper # a built-in theme
105
+ akceo build deck.md --theme brand.css # your own theme
106
+ ```
107
+
108
+ A deck can also set `theme:` in its config block. The `--theme` flag overrides it.
109
+
110
+ `midnight` (dark, the default) and `paper` (light) are built in. A custom theme is a CSS file
111
+ that sets akceo's color and font tokens. The simplest start is a copy of
112
+ [`src/akceo/themes/midnight.css`](src/akceo/themes/midnight.css). The token list is in
113
+ [docs/syntax.md](docs/syntax.md#themes).
114
+
115
+ ## Speaker notes
116
+
117
+ Keep your notes in a Markdown file and read them in a second browser tab, while you share only
118
+ the deck tab in your call.
119
+
120
+ ```sh
121
+ akceo viewer # writes md-viewer.html into the current folder
122
+ ```
123
+
124
+ Open `md-viewer.html` next to your deck, for example with Chrome's split view, and open your
125
+ notes file in it. In Chrome and Edge it refreshes by itself when you save the notes.
126
+ `examples/demo/speaker-notes.md` goes with the demo deck. The setup is in
127
+ [docs/speaker-notes.md](docs/speaker-notes.md).
128
+
129
+ ## How it works
130
+
131
+ [docs/how-it-works.md](docs/how-it-works.md) explains Akceo at three levels: in plain terms,
132
+ from the user's side, and under the hood. It has diagrams of the build pipeline, the data model
133
+ and the notes viewer.
134
+
135
+ ## Development
136
+
137
+ ```sh
138
+ uv sync
139
+ uv run pytest
140
+ uv run ruff check . && uv run ruff format --check .
141
+ uv run pyright
142
+ uv run pre-commit install # optional: run these checks on every commit
143
+ ```
144
+
145
+ Releases are published to PyPI by pushing a version tag; [docs/RELEASING.md](docs/RELEASING.md)
146
+ has the steps.
147
+
148
+ ## Branding
149
+
150
+ Akceo comes from the Latin *actio*, "the act of doing". The spelling ends in *ceo* to tie it to
151
+ the executives who give so many decks: executive action. The full naming rationale is in
152
+ [docs/branding.md](docs/branding.md). The domain is akceo.ai.
153
+
154
+ ## License
155
+
156
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,97 @@
1
+ # Releasing Akceo
2
+
3
+ Pushing a version tag, such as `v0.1.0`, runs `.github/workflows/release.yml`. It tests the
4
+ package, builds it, publishes it to PyPI as `akceo`, and creates a GitHub Release whose notes are
5
+ that version's section of `CHANGELOG.md`.
6
+
7
+ ## One-time setup
8
+
9
+ 1. **PyPI trusted publisher.** On PyPI, add a trusted publisher for the project `akceo`. Before the
10
+ first release the project doesn't exist yet, so add it as a *pending* publisher under your
11
+ account's publishing settings. Use these values:
12
+
13
+ | Field | Value |
14
+ | --- | --- |
15
+ | Owner | `LunarCommand` |
16
+ | Repository | `akceo` |
17
+ | Workflow | `release.yml` |
18
+ | Environment | `pypi` |
19
+
20
+ PyPI then trusts that workflow, so no API token is stored in GitHub.
21
+
22
+ 2. **GitHub environment.** In the repository settings, create an environment named `pypi`. Adding
23
+ yourself as a required reviewer is optional; it makes every publish wait for your approval.
24
+
25
+ ## Release steps
26
+
27
+ 1. **Bring the changelog up to date.** Every change since the last release that a user would
28
+ notice belongs in the `Unreleased` section of `CHANGELOG.md`. Compare with
29
+ `git log --oneline <last tag>..main`.
30
+
31
+ 2. **Check the docs.** For each change in the release, search the docs for the old wording, file
32
+ names and option descriptions, and update them: `README.md`, `docs/syntax.md`,
33
+ `docs/how-it-works.md`, `docs/speaker-notes.md` and the `--help` text in `src/akceo/cli.py`.
34
+
35
+ 3. **Set the version and date**, on a branch, in one commit:
36
+ - `pyproject.toml`: `version = "0.2.0"`. This is the only place the version is set; `akceo
37
+ --version` reads it from the installed package.
38
+ - `CHANGELOG.md`: rename `## [Unreleased]` to `## [0.2.0] - YYYY-MM-DD` with the date you'll tag
39
+ on, and add a new empty `## [Unreleased]` above it.
40
+ - Run `uv lock`, so `uv.lock` records the new version.
41
+
42
+ 4. **Review what's about to ship.** Before merging, look at the full change since the last
43
+ release (`git diff <last tag>..HEAD`) next to the new changelog section. Then merge to `main`.
44
+
45
+ 5. **Tag and push**, from the merged `main`:
46
+
47
+ ```sh
48
+ git checkout main && git pull
49
+ git tag v0.2.0
50
+ git push origin v0.2.0
51
+ ```
52
+
53
+ The tag must match the version in `pyproject.toml`. If the changelog date isn't today, fix it
54
+ before tagging.
55
+
56
+ 6. **The workflow does the rest:**
57
+ - checks that the tag matches `pyproject.toml` and that `CHANGELOG.md` has a section for it,
58
+ dated within a day of the tag
59
+ - runs ruff, pyright and pytest
60
+ - builds the sdist and the wheel
61
+ - publishes both to PyPI, waiting for approval if the `pypi` environment requires it
62
+ - creates the GitHub Release with the changelog section as its notes and the files attached
63
+
64
+ ## Checking a release
65
+
66
+ - PyPI: <https://pypi.org/project/akceo/>
67
+ - GitHub: the repository's Releases page
68
+ - A clean install: `uv tool install akceo==0.2.0`, then `akceo --version` and a build of
69
+ `examples/demo/deck.md`
70
+
71
+ ## Versions
72
+
73
+ Akceo follows semantic versioning. While the version is below 1.0, a minor release (0.x.0) may
74
+ change the deck format or the command line; a patch release (0.1.x) only fixes bugs.
75
+
76
+ ## Troubleshooting
77
+
78
+ **The workflow didn't start.** The tag has to match `v[0-9]*.[0-9]*.[0-9]*` and be pushed to
79
+ GitHub. A tag created only locally does nothing.
80
+
81
+ **"tag … doesn't match version …".** The tag and `pyproject.toml` disagree. Delete the tag
82
+ (`git tag -d v0.2.0 && git push origin :refs/tags/v0.2.0`), fix the version on `main`, and tag
83
+ again.
84
+
85
+ **"CHANGELOG.md has no '## [0.2.0] - YYYY-MM-DD' heading".** Step 3 was missed, or the heading
86
+ isn't exactly that form. Same fix as above.
87
+
88
+ **"the 0.2.0 heading is dated …; date it the day you tag".** The changelog date has to be the
89
+ release day, give or take one day for time zones. Fix the date on `main`, delete the tag and tag
90
+ again.
91
+
92
+ **The publish step fails.** Check that the PyPI trusted publisher's owner, repository, workflow file
93
+ and environment exactly match the values in the setup table, and that the `pypi` environment exists.
94
+
95
+ **A version was published with a mistake.** PyPI never lets a version number be used twice, even
96
+ after deleting it. Fix the mistake and release the next patch version. If needed, yank the bad one
97
+ on PyPI, which hides it from new installs without breaking pinned ones.
@@ -0,0 +1,22 @@
1
+ # Branding
2
+
3
+ - **Name:** Akceo. The command is `akceo`.
4
+ - **Domain:** akceo.ai
5
+
6
+ ## Naming rationale
7
+
8
+ The name moves through three steps.
9
+
10
+ - **Actio** is "the act of doing, a driving force, or delivery". It is grounded in movement and
11
+ physical execution.
12
+ - **Akcio** is a sharp, geometric spelling of Actio that looks like a cutting-edge AI or automated
13
+ tool.
14
+ - **Akceo**: changing that one vowel does something incredibly powerful for a software brand: it
15
+ instantly connects your rapid deck builder to the Chief Executive Officer (CEO). Since
16
+ presentation decks are the ultimate tool for corporate leaders, startup founders, and pitch
17
+ masters, Akceo subtly tells the user: "This tool makes your slides look like they were built by
18
+ a high-level executive."
19
+
20
+ By shifting from Akcio to Akceo, you also change the physical meaning. Instead of just meaning
21
+ "action" or "delivery," it now means "Executive Action" or "Commanding Delivery." It sounds
22
+ prestigious, fast, and highly authoritative.