Fork as presentato-mf: Acme Camera deck, pr.gmp.io, forge CI

091184f · Gabriel Morell · 2026-10-13 17:19

26 files +249 -229
Message
{commit_body(@commit)}

Files changed

added .forgejo/workflows/image.yml
+67 −0
@@ -0,0 +1,67 @@
1 +# Builds the site image and pushes it to the forge's own OCI registry on
2 +# every push to master: the old .gitlab-ci.yml kaniko job, ported. Same
3 +# Dockerfile (Zola build → static-web-server), and keel polls the :master
4 +# tag for the rollout (argo-01-bos/presentato-mf).
5 +#
6 +# No secrets. The per-job token is accepted by the registry's /v2/token
7 +# endpoint and authorized to push this repository's own image path.
8 +name: image
9 +on:
10 + push:
11 + branches: [master]
12 +
13 +jobs:
14 + image:
15 + runs-on: self-hosted
16 + steps:
17 + - uses: actions/checkout@v4
18 +
19 + - uses: docker/setup-buildx-action@v3
20 +
21 + # An unset CI_REGISTRY resolves to the empty string, and
22 + # login-action then silently defaults to docker.io while
23 + # metadata-action builds a nonsense "/owner/repo" reference. Say
24 + # what is missing instead.
25 + - name: Check the registry variable is set
26 + env:
27 + CI_REGISTRY: ${{ vars.CI_REGISTRY }}
28 + run: |
29 + set -euo pipefail
30 + if [ -z "${CI_REGISTRY:-}" ]; then
31 + echo "CI_REGISTRY is not set for this repository." >&2
32 + echo "Set it as an Actions variable on the repo or its owner" >&2
33 + echo "(the registry hostname, ggr.neiam.co)." >&2
34 + exit 1
35 + fi
36 + echo "pushing to $CI_REGISTRY"
37 +
38 + # The username is ignored by the token endpoint but login-action
39 + # requires it to be non-empty.
40 + - uses: docker/login-action@v3
41 + with:
42 + registry: ${{ vars.CI_REGISTRY }}
43 + username: ci
44 + password: ${{ github.token }}
45 +
46 + # Push to the job's OWN repo path (<registry>/<owner>/<repo>); the
47 + # per-job token only grants push there.
48 + - uses: docker/metadata-action@v5
49 + id: meta
50 + with:
51 + images: ${{ vars.CI_REGISTRY }}/${{ github.repository }}
52 + tags: |
53 + type=sha,format=long
54 + type=ref,event=branch
55 + # Unconditional: `{{is_default_branch}}` evaluates false on this
56 + # forge. The workflow only runs on master anyway.
57 + type=raw,value=latest
58 +
59 + - uses: docker/build-push-action@v6
60 + with:
61 + context: .
62 + file: ./Dockerfile
63 + push: true
64 + tags: ${{ steps.meta.outputs.tags }}
65 + labels: ${{ steps.meta.outputs.labels }}
66 + cache-from: type=registry,ref=${{ vars.CI_REGISTRY }}/${{ github.repository }}:buildcache
67 + cache-to: type=registry,ref=${{ vars.CI_REGISTRY }}/${{ github.repository }}:buildcache,mode=max
deleted .gitlab-ci.yml
+0 −22
@@ -1,22 +0,0 @@
1 −stages:
2 − - build
3 −
4 −variables:
5 − IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
6 − IMAGE_LATEST: $CI_REGISTRY_IMAGE:latest
7 −
8 −build:
9 − stage: build
10 − image:
11 − name: gcr.io/kaniko-project/executor:debug
12 − entrypoint: [""]
13 − script:
14 − - mkdir -p /kaniko/.docker
15 − - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
16 − - /kaniko/executor
17 − --context "${CI_PROJECT_DIR}"
18 − --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
19 − --destination "${IMAGE_TAG}"
20 − --destination "${IMAGE_LATEST}"
21 − only:
22 − - master
modified README.md
+14 −1
@@ -4,7 +4,10 @@ A [Zola](https://www.getzola.org/) site that serves markdown-backed
4 4 [reveal.js](https://revealjs.com/) presentations, themed to match
5 5 [neiam.co](https://neiam.co).
6 6
7 −Deployed at <https://p.neiam.org>.
7 +Deployed at <https://pr.gmp.io>. Every push to `master` builds the image
8 +(`.forgejo/workflows/image.yml`) into the forge's registry as
9 +`ggr.neiam.co/gabe/presentato-mf:master`; keel rolls it out from there. The
10 +Argo app is `presentato-mf/` in `argo-01-bos`.
8 11
9 12 ## Running
10 13
@@ -114,6 +117,10 @@ The six neiam.co schemes — `her`, `afterdark`, `forest`, `sky`, `clays`,
114 117 `stones` — are ported verbatim from `../neiam-co/sass/main.scss` into
115 118 `sass/_tokens.scss`, as `[data-theme="…"]` blocks of oklch custom properties.
116 119
120 +Alongside them are `light` (🤍) and `dark` (🖤), copied from Diogramos'
121 +own pair in `../Diogramos/assets/css/app.css`. `light` is the only light
122 +scheme.
123 +
117 124 Both the site chrome and the decks read those same tokens, so switching is a
118 125 single attribute change on `<html>` — no stylesheet swap, no reload:
119 126
@@ -127,6 +134,12 @@ neiam.co uses, so a visitor's pick carries across both sites. `default_theme`
127 134 in `zola.toml` (or `theme` in a deck's `[extra]`) only sets the starting point;
128 135 a saved choice always wins.
129 136
137 +Embedded [Diogramos](https://diogramos.neiam.co) diagrams follow the deck:
138 +it posts `{type: "diogramos:set-theme", theme}` to every iframe when the
139 +scheme changes, and to each embed that reports `diogramos:ready` on load. All
140 +eight scheme names exist in Diogramos too, so the diagram's palette matches
141 +the slide's.
142 +
130 143 Decks are styled by loading reveal's `black.css` for structure and then
131 144 `reveal-neiam.css`, which re-points every `--r-*` variable at the active
132 145 palette. Per-deck `reveal_theme` is *not* a thing here — use `theme` instead.
added content/presentations/acme-camera.md
+105 −0
@@ -0,0 +1,105 @@
1 ++++
2 +title = "Acme Camera"
3 +description = ""
4 +date = 2026-10-13
5 +
6 +[extra]
7 +reveal_theme = "black"
8 +reveal_transition = "slide"
9 ++++
10 +
11 +# Acme Camera
12 +
13 +## A Proposal
14 +
15 +---
16 +
17 +# Product Overview
18 +
19 +A wireless security system architecture supporting long operational life
20 +
21 +---
22 +
23 +# Hardware Design
24 +
25 +<iframe src="https://diogramos.neiam.co/embed/pALTi3kzd8C0LQoFug4SJ3XS?mode=frame"
26 + width="900" height="500" style="border:0" loading="lazy"
27 + ></iframe>
28 +
29 +&nbsp;
30 +
31 +---
32 +
33 +# SOC + MCU
34 +
35 +--
36 +
37 +## MCU
38 +
39 +ultra-low power attached to motion sensors, lighting, and power control
40 +
41 +## SOC
42 +
43 +attached to camera/storage and spends most of its' time in deep sleep
44 +
45 +--
46 +
47 +## MCU Candidates
48 +
49 +- nRF54L
50 +- nRF52840
51 +
52 +## SOC Candidates
53 +
54 +- Rockchip RV1106
55 +- Ingenic T41
56 +- Ambarella CV7
57 +
58 +---
59 +
60 +# Motion
61 +
62 +Configurable
63 +
64 +## PIR
65 +
66 +plus
67 +
68 +## MMWave
69 +
70 +Note: Power Efficient Setup, PIR is used to wake the SOC and then mmwave is used to determine if people are present
71 +
72 +---
73 +
74 +# LED Driver
75 +
76 +to support Infrared and Visible Spots for lighting areas for improved visibility
77 +
78 +---
79 +
80 +# Power Subsystem
81 +
82 +nPM1300 PMIC
83 +
84 +- Battery Charge Controller
85 +
86 +<iframe src="https://diogramos.neiam.co/embed/oUXMw7KPyT-jBwSnzi-s3QGE?mode=frame"
87 + width="900" height="500" style="border:0" loading="lazy"
88 + ></iframe>
89 +
90 +--
91 +
92 +## Solar Charge Controller
93 +
94 +- TI bq25504
95 +- e-peas AEM10941 / AEM13920:
96 +
97 +<iframe src="https://diogramos.neiam.co/embed/iAf4qL8hy2kxJPB3gPSjOeo7?mode=frame"
98 + width="900" height="500" style="border:0" loading="lazy"
99 + ></iframe>
100 +
101 +Note: nPM1300 does not provide the MPP support for the solar cells so we need an external IC to properly do it
102 +
103 +---
104 +
105 +# Software Design
deleted content/presentations/ppp.md
+0 −201
@@ -1,201 +0,0 @@
1 −+++
2 −title = "Power Point Party"
3 −description = "Today"
4 −date = 2026-08-27
5 −
6 −[extra]
7 −reveal_theme = "black"
8 −reveal_transition = "slide"
9 −+++
10 −
11 −# GABE! @
12 −
13 −Powerpoint Party
14 −
15 −What I've been upto this summer
16 −
17 −---
18 −
19 −# A Theme
20 −
21 −![diagram](/img/signal-2026-08-27-19-02-00-921_002.jpg)
22 −
23 −---
24 −
25 −## party²
26 −
27 −## Dank Macro Stash
28 −
29 −## Apollo's Crib
30 −
31 −## Rosin Hunter 3000
32 −
33 −## Movie Monster
34 −
35 −## Tower Forever
36 −
37 −---
38 −
39 −## party²
40 −
41 −Party Planning Tool
42 −
43 −--
44 −
45 −## party²
46 −
47 −- multi-event events
48 −- looking for testers
49 −
50 −[party2.party](https://party2.party)
51 −
52 −--
53 −
54 −<div class="cols">
55 −
56 −![diagram](/img/Screenshot_20260823-113118.png)
57 −
58 −</div>
59 −
60 −
61 −
62 −
63 −---
64 −
65 −## Dank Macro Stash
66 −
67 −find an image based on a keyword
68 −
69 −--
70 −
71 −## Imagine
72 −
73 −- Your friends are have posted something funnny
74 −- Your friends are sad
75 −
76 −### You need the perfect reaction image at hand!
77 −
78 −--
79 −
80 −<div class="cols">
81 −
82 −![diagram](/img/Screenshot_20260827-174420.png)
83 −
84 −![diagram](/img/Screenshot_20260827-174434.png)
85 −
86 −![diagram](/img/Screenshot_20260827-174925.png)
87 −
88 −</div>
89 −
90 −--
91 −
92 −https://github.com/neiam/dms
93 −
94 −---
95 −
96 −## Apollo's Crib
97 −
98 −Ambient Data
99 −
100 −Here
101 −
102 −Now
103 −
104 −--
105 −
106 −## Every Data Source
107 −
108 −- GTFS <!-- .element: class="fragment" -->
109 −- GBFS <!-- .element: class="fragment" -->
110 −- Air Quality <!-- .element: class="fragment" -->
111 −- Calendaring <!-- .element: class="fragment" -->
112 −- Lunar <!-- .element: class="fragment" -->
113 −- Tidal <!-- .element: class="fragment" -->
114 −- Weather <!-- .element: class="fragment" -->
115 −- Clocks <!-- .element: class="fragment" -->
116 −- Gitlab Runners <!-- .element: class="fragment" -->
117 −- Github Actions <!-- .element: class="fragment" -->
118 −- Package Tracking <!-- .element: class="fragment" -->
119 −
120 −--
121 −
122 −## Now With
123 −
124 −- Drought <!-- .element: class="fragment" -->
125 −- Pollen <!-- .element: class="fragment" -->
126 −- Aircraft Tracking <!-- .element: class="fragment" -->
127 −- Mailbox Tracking <!-- .element: class="fragment" -->
128 −- Exchange Rates <!-- .element: class="fragment" -->
129 −- Markets <!-- .element: class="fragment" -->
130 −
131 −--
132 −
133 −## Demo
134 −
135 −<!-- .slide: data-background-iframe="https://ac.neiam.org/p/p/Hackspace" data-background-interactive -->
136 −
137 −[ac.neiam.org/p/p/Hackspace](https://ac.neiam.org/p/p/Hackspace)
138 −
139 −
140 −---
141 −
142 −## Rosin Hunter 3000
143 −
144 −Answering the question, who has the best value in cannabis today
145 −
146 −--
147 −
148 −## The Hunt is On
149 −
150 −![diagram](/img/Screenshot_20260827-175754.png)
151 −
152 −---
153 −
154 −## Movie Monster
155 −
156 −Every Movie, Every Theater, One Place
157 −
158 −--
159 −
160 −<div class="cols">
161 −
162 −![diagram](/img/Screenshot_20260827-180051.png)
163 −
164 −![diagram](/img/Screenshot_20260827-180103.png)
165 −
166 −![diagram](/img/Screenshot_20260827-180121.png)
167 −
168 −</div>
169 −
170 −--
171 −
172 −Live at https://monster.neiam.org
173 −
174 −
175 −---
176 −
177 −# Tower Forever
178 −
179 −
180 −### 3D
181 −
182 −### Multiplayer
183 −
184 −## Simtower
185 −
186 −
187 −--
188 −
189 −DEMO at https://towerforever.com
190 −
191 −---
192 −
193 −# fin
194 −
195 −## questions?
196 −
197 −#### please find me employment
198 −
199 −### gmp@gmp.io
200 −
201 −---
modified sass/_tokens.scss
+46 −2

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

modified static/themes.js
+3 −1

Click to load diff…

modified templates/presentation.html
+12 −0

Click to load diff…

modified zola.toml
+2 −2

Click to load diff…

Parents: 750a818