Prd/docs/onboarding.md
Lucy Doupalů be9f14ce34 Helpdesk - operator console + patched GrapheneOS Dialer for call handling
A small helpdesk system: an office Pixel running a patched GrapheneOS Dialer
answers technician calls, records both call legs as separate channels, and a
Ruby backend transcribes them through Whisper and files an AI summary against
the caller.

Squashed to a single commit for sharing. No credentials are included; secrets
live outside the repo in /etc/helpdesk/env on the server or a gitignored
.claude/env.local locally. See .claude/env.local.example for the shape.

Start at README.md, then docs/architecture.md.
2026-07-27 18:50:32 +02:00

65 lines
2.4 KiB
Markdown

# Onboarding
What a new person needs to work on this.
## Run it locally, no infrastructure
Ruby 3.2+ is all you need. From the repo root:
```
ruby components/backend/server.rb
```
The console is at http://127.0.0.1:4000. This uses a JSON file for storage and built-in dev
credentials, so there's nothing to configure. To run on PostgreSQL instead, see the README.
Run the tests from `components/backend` with `make test` (or any `test/*.rb` file directly). To watch a
full call without a phone, start the server and run `ruby sim/simulator.rb`.
## GitLab access
The repo is https://gitlab.vmin.cz/vm/helpdesk. Ask an owner to add you to the `vm` group, then clone
over SSH (vmin git is SSH-only):
```
git clone git@gitlab.vmin.cz:vm/helpdesk.git
```
The pipeline (lint, tests, e2e) runs on every push. We own this repo and push straight to `master`;
branches are for work you want to park, not ceremony. Production only changes when someone clicks the
manual deploy job on a green pipeline - see `docs/operations.md`.
## SSH with a yubikey
vmin git and servers authenticate with your OpenPGP-card SSH key, which gpg-agent hands to ssh. Check
it's loaded:
```
ssh-add -L # shows your "cardno:" key
```
Every push and server login needs a physical touch on the key. If a push fails with "agent refused
operation", your PIN cache has expired: run any ssh once, enter the PIN, touch the key, then retry.
## The operator certificate
Operators reach the console over mutual TLS with a vmin client certificate (the same PKI as
whisper.cajk.org). You need it installed in your browser to open https://moje.al.army. Ask for a vmin
cert if you don't have one. On iOS, use Safari - Brave on iOS can't present client certificates.
If your `.p12` is old enough that OpenSSL 3 refuses to read it ("unsupported algorithm" or a bare
"Error outputting keys and certificates"), re-export it once:
```
openssl pkcs12 -legacy -in old.p12 -nodes -out tmp.pem # asks for the p12 passphrase
openssl pkcs12 -export -in tmp.pem -out new.p12 # set a passphrase for the new file
shred -u tmp.pem # tmp.pem holds the key unencrypted
```
Import `new.p12` into the browser and delete the intermediates.
## Next
- `docs/architecture.md` - how it fits together.
- `docs/operations.md` - the server and the pipeline.
- `docs/device-api.md` - the phone-to-backend contract, if you're touching either side of it.