# Conference Notes — Event Deployment Guide

Version 1.14.0 · 11 September 2026

## The operating model

Use one maintained Conference Notes codebase and create a separate attendee folder for each conference. Plumed Duck keeps the organiser workspace; attendees receive only the built event folder and its QR code.

| Organiser workspace | Attendee deployment |
|---|---|
| Imports and reviews PDF programs | Opens with the reviewed program already loaded |
| Can clear or replace a full program | Has no program import or clear-program controls |
| Creates the event JSON | Shows conference name, venue, colour and optional logo |
| Runs the event build tool | Stores plans, notes and photos for that event only |

The attendee app remains local-first: there is no personal account, analytics or server-side note store. The hosted files provide the program and app shell; attendee notes and photos stay on the attendee's device until they choose to export them.

## What to request from the conference organiser

Ask for these together:

1. The final program as a text-based PDF, spreadsheet or structured export. Avoid a scan of a printed page where possible.
2. Event name, venue/city and event dates.
3. Organisation name and attendee support contact.
4. Logo as PNG, JPG or SVG, preferably with a transparent or white background.
5. Brand accent colour as a six-digit hex value, for example `#BD4431`.
6. The intended public web address, for example `https://events.plumedduck.com.au/biosecurity-unlocked-2026/`.
7. Written approval of the reviewed program before the QR is released.

Keep the supplied source and approval record with the event project. Treat last-minute program changes as a new reviewed version, not an informal edit.

## Step 1 — Prepare and review the program

1. Deploy or open the master repository in organiser mode. Its `event-config.json` has `"mode": "organiser"`.
2. Open **Help → Conference schedule**.
3. Choose **Import a program (PDF)**. The PDF is read locally and is not uploaded by Conference Notes.
4. Check the preview count, then choose **Use this schedule**.
5. Review every day in the Schedule tab. Check dates, start/end times, rooms, session titles, talk titles and speakers against the source.
6. If the PDF uses unusual columns, floating text, images or a scanned page, do not approve a partly correct import. Prepare a cleaner schedule JSON or correct the source and import again.
7. Test overlapping sessions in My Plan so that clash behaviour reflects the real timetable.

The Biosecurity Unlocked sample format is supported, but any PDF parser can be defeated by a sufficiently unusual layout. Human review is the release gate.

## Step 2 — Create the event file

In **Help → Prepare an attendee event**:

1. Enter the event name.
2. Enter a stable event ID/folder name in lowercase words separated by hyphens, such as `biosecurity-unlocked-2026`. Never reuse an ID for a different conference.
3. Add venue, organiser and support details.
4. Add the accent colour.
5. If using a logo, enter its filename, such as `organiser-logo.png`. Save the logo beside the downloaded event JSON before building.
6. Choose **Download attendee event file (.json)**.

The event file contains the reviewed program. Keep it as the editable event source of truth.

## Step 3 — Build the attendee folder and branded QR

The build requires Node.js 20 or newer. From the repository folder run:

```bash
node tools/build-event.mjs path/to/event-file.json https://events.plumedduck.com.au/event-id/ path/to/logo.png
```

The logo argument is optional:

```bash
node tools/build-event.mjs path/to/event-file.json https://events.plumedduck.com.au/event-id/
```

The tool creates `dist/event-id/` containing:

- the attendee app and offline guide;
- an attendee `event-config.json` with the reviewed program;
- an event-specific web-app manifest and service-worker cache;
- the optional logo;
- `event-id-qr.svg`, headed with the event name and labelled “Powered by Plumed Duck”;
- `DEPLOYMENT-CHECKLIST.txt`.

The public URL encoded in the QR must exactly match the folder's final HTTPS address, including its trailing slash. If the address changes, rebuild the QR.

## Step 4 — Deploy

Upload the contents of `dist/event-id/` to the exact HTTPS event path. Suitable static hosts include an existing Plumed Duck site, Cloudflare Pages or GitHub Pages. Keep each event in its own folder/path.

Do not upload the master organiser workspace as the attendee event. The built attendee folder deliberately excludes the PDF parsing library and organiser source files.

Recommended address pattern:

```text
https://events.plumedduck.com.au/event-id/
```

Keep the address stable until attendees have had time to export their records. A new deployment at a new path creates a separate browser workspace.

## Step 5 — Release test before sharing the QR

Test the deployed URL, not a local file preview.

### Program and branding

- Event name, venue, logo, colour and support details are correct.
- Every date, session, room, talk and speaker matches the approved source.
- There is no attendee PDF import, schedule URL field or clear-program button.
- The QR opens the exact deployed event.

### Phone workflow

- iPhone Safari: open, add to Home Screen, relaunch.
- Android Chrome: open, install, relaunch.
- Create a plan with overlapping and non-overlapping talks.
- Add, edit and delete a test note; attach and enlarge a photo.
- Export JSON backup, plan text, HTML report, Word RTF and photos ZIP.
- Restore the backup and confirm it adds the test note.
- Check every screen in both light and dark mode, including destructive controls, form fields, disabled states and status messages.

### Offline and update behaviour

- Open once online, close, enable airplane mode and reopen from the Home Screen.
- Confirm the program, Help guide, notes and photos still work.
- Reconnect, deploy a harmless test update and confirm the app refreshes without losing the plan or notes.

Release the QR only after the checklist passes on both phone families. Keep the tested output folder unchanged.

## Updating a live event program

1. Start from the saved event JSON.
2. Make and review the program change.
3. Keep the same event ID and public URL.
4. Change `programVersion` to the new approval date or revision.
5. Rebuild and redeploy the same folder.
6. Test online refresh, offline relaunch and preservation of an existing note.
7. Tell attendees to reconnect and reopen the app once to receive the update.

When the hosted program changes, schedule-linked plan choices and running-late adjustments are cleared because they may no longer identify the same talks. Notes and photos are kept.

## Handover to the organiser

Provide:

- the branded QR SVG and, if useful, a PNG/PDF placed into their artwork;
- the short HTTPS link in plain text;
- iPhone and Android install instructions;
- the statement that the first launch must be online and an airplane-mode test is recommended;
- the attendee privacy/storage statement;
- the support route for program corrections;
- the deadline for final program changes.

Place the event name above the QR and “Powered by Plumed Duck” below it. Keep a clear white quiet zone around the QR; do not place a logo over the QR modules. Test the final printed artwork at its real size before distribution.

## Why OCR is not part of the attendee product

The previous browser OCR was improved with cropping, contrast normalisation, thresholding, inversion and low-confidence warnings. It still could not reliably handle the conditions that matter most at a conference: small projected text, camera angle, motion blur, low light and diagram-heavy slides. A custom browser model would add download size, battery/memory use and ongoing model testing without removing those capture limitations.

Conference Notes therefore keeps the original photo as the trustworthy record and removes the text-scanning control. Reconsider OCR only if real-device acceptance tests establish a defined accuracy target on representative conference photos. Native Apple Vision or Google ML Kit would be a separate native-app product decision, not a drop-in improvement for this offline cross-platform PWA.

## Event close-out

After the conference:

1. Keep the approved event JSON and exact deployed folder as the release record.
2. Keep the URL live for the agreed access period so attendees can reopen and export.
3. Do not delete or replace the path with a different event.
4. Record issues and source-format exceptions before preparing the next event.

