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.
- akceo-0.1.0/.gitignore +20 -0
- akceo-0.1.0/CHANGELOG.md +45 -0
- akceo-0.1.0/LICENSE +21 -0
- akceo-0.1.0/PKG-INFO +184 -0
- akceo-0.1.0/README.md +156 -0
- akceo-0.1.0/docs/RELEASING.md +97 -0
- akceo-0.1.0/docs/branding.md +22 -0
- akceo-0.1.0/docs/how-it-works.md +456 -0
- akceo-0.1.0/docs/speaker-notes.md +108 -0
- akceo-0.1.0/docs/syntax.md +230 -0
- akceo-0.1.0/examples/demo/deck.md +107 -0
- akceo-0.1.0/examples/demo/flow.mmd +5 -0
- akceo-0.1.0/examples/demo/flow.svg +29 -0
- akceo-0.1.0/examples/demo/speaker-notes.md +44 -0
- akceo-0.1.0/pyproject.toml +87 -0
- akceo-0.1.0/scripts/update_mermaid.py +269 -0
- akceo-0.1.0/src/akceo/__init__.py +1 -0
- akceo-0.1.0/src/akceo/__main__.py +3 -0
- akceo-0.1.0/src/akceo/assets/base.css +64 -0
- akceo-0.1.0/src/akceo/assets/deck.js +33 -0
- akceo-0.1.0/src/akceo/assets/diagrams.js +60 -0
- akceo-0.1.0/src/akceo/assets/md-viewer.html +257 -0
- akceo-0.1.0/src/akceo/assets/mermaid-shims.js +76 -0
- akceo-0.1.0/src/akceo/assets/page.html +27 -0
- akceo-0.1.0/src/akceo/assets/vendor/mermaid/LICENSE +21 -0
- akceo-0.1.0/src/akceo/assets/vendor/mermaid/README.md +56 -0
- akceo-0.1.0/src/akceo/assets/vendor/mermaid/THIRD_PARTY_NOTICES +4872 -0
- akceo-0.1.0/src/akceo/assets/vendor/mermaid/manifest.json +8 -0
- akceo-0.1.0/src/akceo/assets/vendor/mermaid/mermaid.min.js +4376 -0
- akceo-0.1.0/src/akceo/cli.py +92 -0
- akceo-0.1.0/src/akceo/errors.py +2 -0
- akceo-0.1.0/src/akceo/files.py +17 -0
- akceo-0.1.0/src/akceo/images.py +42 -0
- akceo-0.1.0/src/akceo/mermaid.py +388 -0
- akceo-0.1.0/src/akceo/parse.py +348 -0
- akceo-0.1.0/src/akceo/render.py +247 -0
- akceo-0.1.0/src/akceo/themes/midnight.css +14 -0
- akceo-0.1.0/src/akceo/themes/paper.css +14 -0
- akceo-0.1.0/src/akceo/themes.py +70 -0
- akceo-0.1.0/tests/test_cli.py +185 -0
- akceo-0.1.0/tests/test_images.py +85 -0
- akceo-0.1.0/tests/test_mermaid.py +306 -0
- akceo-0.1.0/tests/test_parse.py +347 -0
- akceo-0.1.0/tests/test_render.py +193 -0
- akceo-0.1.0/tests/test_themes.py +82 -0
- akceo-0.1.0/tests/test_update_mermaid.py +134 -0
- akceo-0.1.0/uv.lock +372 -0
akceo-0.1.0/.gitignore
ADDED
akceo-0.1.0/CHANGELOG.md
ADDED
|
@@ -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.
|