Decision: attachment / photo upload mechanics via Outline #11

Closed
opened 2026-07-23 14:46:26 +02:00 by cloudbot · 1 comment
Collaborator

Decision / spike — how does a photo field upload to Outline, and how does the app reference the result?

The photo field type (#6) and the Person Info sheet's document thumbnails (#9) both need to put an image into Outline and get a stable reference back. The mechanics aren't yet nailed down and need verifying against the actual Outline API.

What needs establishing

  1. Upload path — Outline exposes an attachments API (attachments.create → an upload/redirect URL → attachments.redirect?id=…). Confirm the exact call sequence to push a captured/picked image and receive an attachment id + URL.
  2. Referencing in a document — how the uploaded attachment is embedded so it renders (markdown image ![](…/api/attachments.redirect?id=…)) and how the app later re-locates it (by id) for the Stream/entry and Info-sheet thumbnails.
  3. Auth & size — the upload uses the member's own API key (per-user Keystore token); confirm any size/type limits and how failures surface.
  4. Offline — how a pending photo is queued in the Room cache and uploaded on the next sync tick, consistent with the create-once-then-replace model (§7).

What to decide / produce

A confirmed upload+reference recipe (endpoints, payloads, the markdown embed shape) the entry sheet and sync engine can build against.

Blocks: the photo field (#6) and the attachment/thumbnail source for the Person Info sheet (#9).

Recommendation: spike the Outline attachments API directly (the family Outline already stores attachments this way — see the ID scans on the canonical notes) and standardise on the attachments.redirect?id=… markdown-embed form the notes already use, so app-created photos are indistinguishable from ones added by hand in Outline.

Source: Solution Design — Family App v1 §5–§6, §12 (doc vpBNbG4TsV); related: #6, #9.

**Decision / spike — how does a `photo` field upload to Outline, and how does the app reference the result?** The `photo` field type (#6) and the Person Info sheet's document thumbnails (#9) both need to put an image into Outline and get a stable reference back. The mechanics aren't yet nailed down and need verifying against the actual Outline API. ### What needs establishing 1. **Upload path** — Outline exposes an attachments API (`attachments.create` → an upload/redirect URL → `attachments.redirect?id=…`). Confirm the exact call sequence to push a captured/picked image and receive an attachment id + URL. 2. **Referencing in a document** — how the uploaded attachment is embedded so it renders (markdown image `![](…/api/attachments.redirect?id=…)`) and how the app later re-locates it (by id) for the Stream/entry and Info-sheet thumbnails. 3. **Auth & size** — the upload uses the member's own API key (per-user Keystore token); confirm any size/type limits and how failures surface. 4. **Offline** — how a pending photo is queued in the Room cache and uploaded on the next sync tick, consistent with the create-once-then-replace model (§7). ### What to decide / produce A confirmed upload+reference recipe (endpoints, payloads, the markdown embed shape) the entry sheet and sync engine can build against. **Blocks:** the `photo` field (#6) and the attachment/thumbnail source for the Person Info sheet (#9). **Recommendation:** spike the Outline attachments API directly (the family Outline already stores attachments this way — see the ID scans on the canonical notes) and standardise on the `attachments.redirect?id=…` markdown-embed form the notes already use, so app-created photos are indistinguishable from ones added by hand in Outline. **Source:** Solution Design — Family App v1 §5–§6, §12 ([doc vpBNbG4TsV](https://outline.marquezkeenan.family/doc/solution-design-family-app-v1-vpBNbG4TsV)); related: #6, #9.
Owner

Images are fully cached offline and are uploaded using whatever API call is the most practical. The spike is approved, and should be tasked up. They are presented inline on the outline document but are shown in a gallery grid in the order they appear in the document.

Images are fully cached offline and are uploaded using whatever API call is the most practical. The spike is approved, and should be tasked up. They are presented inline on the outline document but are shown in a gallery grid in the order they appear in the document.
ben closed this issue 2026-07-23 17:24:57 +02:00
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
utilities/Logbook#11
No description provided.