gabe /presentato-mf
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
Log in to mark this repository.
Fork as presentato-mf: Acme Camera deck, pr.gmp.io, forge CI
091184f · Gabriel Morell · 2026-10-13 17:19
Message
{commit_body(@commit)}
Files changed
added
.forgejo/workflows/image.yml
+67
−0
| 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 | −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 | 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 | 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 | 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
| 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 | + | |
| 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 | −+++ | |
| 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 | − | |
| 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 | − | |
| 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 | − | |
| 83 | − | |
| 84 | − | |
| 85 | − | |
| 86 | − | |
| 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 | − | |
| 151 | − | |
| 152 | −--- | |
| 153 | − | |
| 154 | −## Movie Monster | |
| 155 | − | |
| 156 | −Every Movie, Every Theater, One Place | |
| 157 | − | |
| 158 | −-- | |
| 159 | − | |
| 160 | −<div class="cols"> | |
| 161 | − | |
| 162 | − | |
| 163 | − | |
| 164 | − | |
| 165 | − | |
| 166 | − | |
| 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