Replace ActivityPub metadata JSON with fields #180

Closed
opened 2026-06-21 16:17:17 -05:00 by erik · 3 comments
Owner

Goal

Replace the raw ActivityPub profile metadata JSON textarea with a user-friendly settings interface for profile fields and image uploads.

Requirements

  • Replace the Profile metadata JSON textarea on /settings/activitypub with explicit controls for imageUrl, bannerUrl, pronouns, location, and website.
  • Allow users to choose avatar (imageUrl) and banner (bannerUrl) images from their machine and upload them from the ActivityPub settings screen.
  • Store uploaded image URLs in the actor profile metadata using the existing imageUrl and bannerUrl keys.
  • Preserve existing saved metadata values when rendering the form and when saving changes.
  • Validate user-entered website values as URLs and keep existing metadata JSON object validation behavior at the storage boundary.
  • Do not expose private upload details or raw JSON to non-admin users.

Acceptance criteria

  • /settings/activitypub shows explicit fields for avatar image, banner image, pronouns, location, and website instead of a raw profile metadata JSON textarea.
  • Avatar and banner fields allow selecting an image file from the local machine and upload it successfully.
  • Uploaded avatar and banner URLs are saved as imageUrl and bannerUrl in ActivityPub actor profile metadata.
  • Existing imageUrl, bannerUrl, pronouns, location, and website metadata values are shown when editing an existing actor.
  • Saving the form preserves supported metadata fields and rejects invalid website values with a clear error.
  • ActivityPub actor output continues to publish avatar and banner images from imageUrl and bannerUrl.

Dependencies

  • None
## Goal Replace the raw ActivityPub profile metadata JSON textarea with a user-friendly settings interface for profile fields and image uploads. ## Requirements - Replace the `Profile metadata JSON` textarea on `/settings/activitypub` with explicit controls for `imageUrl`, `bannerUrl`, `pronouns`, `location`, and `website`. - Allow users to choose avatar (`imageUrl`) and banner (`bannerUrl`) images from their machine and upload them from the ActivityPub settings screen. - Store uploaded image URLs in the actor profile metadata using the existing `imageUrl` and `bannerUrl` keys. - Preserve existing saved metadata values when rendering the form and when saving changes. - Validate user-entered website values as URLs and keep existing metadata JSON object validation behavior at the storage boundary. - Do not expose private upload details or raw JSON to non-admin users. ## Acceptance criteria - [ ] `/settings/activitypub` shows explicit fields for avatar image, banner image, pronouns, location, and website instead of a raw profile metadata JSON textarea. - [ ] Avatar and banner fields allow selecting an image file from the local machine and upload it successfully. - [ ] Uploaded avatar and banner URLs are saved as `imageUrl` and `bannerUrl` in ActivityPub actor profile metadata. - [ ] Existing `imageUrl`, `bannerUrl`, `pronouns`, `location`, and `website` metadata values are shown when editing an existing actor. - [ ] Saving the form preserves supported metadata fields and rejects invalid website values with a clear error. - [ ] ActivityPub actor output continues to publish avatar and banner images from `imageUrl` and `bannerUrl`. ## Dependencies - None
Author
Owner

Synced from todu comment by @todu on 2026-06-21T21:23:49.399Z

PR Review

PR: #181

Review result: approved

Acceptance criteria: 6 total, 6 met, 0 missing.

Blocking issues: 0
Warnings: 0

Verification:

  • ./scripts/pre-pr.sh passed.
  • CI status for commit 5512acb8d66f018d3f2dd85e9ab775736e4fe10f is success.

Next gate: waiting for explicit human merge approval.

_Synced from todu comment by @todu on 2026-06-21T21:23:49.399Z_ ## PR Review PR: https://forge.caradoc.com/erik/slugkit/pulls/181 Review result: approved Acceptance criteria: 6 total, 6 met, 0 missing. Blocking issues: 0 Warnings: 0 Verification: - `./scripts/pre-pr.sh` passed. - CI status for commit `5512acb8d66f018d3f2dd85e9ab775736e4fe10f` is `success`. Next gate: waiting for explicit human merge approval.
erik 2026-06-21 17:45:05 -05:00
Author
Owner

Synced from todu comment by @todu on 2026-06-21T22:42:21.728Z

Task Close Gate

Task: Replace ActivityPub metadata JSON with fields

Acceptance criteria:

  • met — Actor settings now show explicit avatar, banner, pronouns, location, and website fields instead of the raw Profile metadata JSON textarea. Final route is /settings/actor per IA decision; /settings/activitypub is intentionally removed and covered by tests.
  • met — Avatar and banner fields support local file selection and upload through existing media storage.
  • met — Uploaded avatar/banner URLs are saved in actor profile metadata as imageUrl and bannerUrl.
  • met — Existing imageUrl, bannerUrl, pronouns, location, and website values are rendered when editing an existing actor.
  • met — Form save preserves supported metadata and rejects invalid website values with a clear error while storage-boundary JSON object validation remains intact.
  • met — ActivityPub actor output continues publishing avatar/banner images from imageUrl/bannerUrl.

Verification:

  • PR merged: #181
  • Merge commit on origin/main: 29645b7
  • ./scripts/pre-pr.sh passed before merge.
  • CI passed on commit f7a7f522e7d4ae983c5b63d74872eb603737f6ff.

Readiness: READY

Task closed.

_Synced from todu comment by @todu on 2026-06-21T22:42:21.728Z_ ## Task Close Gate Task: Replace ActivityPub metadata JSON with fields Acceptance criteria: - met — Actor settings now show explicit avatar, banner, pronouns, location, and website fields instead of the raw `Profile metadata JSON` textarea. Final route is `/settings/actor` per IA decision; `/settings/activitypub` is intentionally removed and covered by tests. - met — Avatar and banner fields support local file selection and upload through existing media storage. - met — Uploaded avatar/banner URLs are saved in actor profile metadata as `imageUrl` and `bannerUrl`. - met — Existing `imageUrl`, `bannerUrl`, `pronouns`, `location`, and `website` values are rendered when editing an existing actor. - met — Form save preserves supported metadata and rejects invalid website values with a clear error while storage-boundary JSON object validation remains intact. - met — ActivityPub actor output continues publishing avatar/banner images from `imageUrl`/`bannerUrl`. Verification: - PR merged: https://forge.caradoc.com/erik/slugkit/pulls/181 - Merge commit on `origin/main`: `29645b7` - `./scripts/pre-pr.sh` passed before merge. - CI passed on commit `f7a7f522e7d4ae983c5b63d74872eb603737f6ff`. Readiness: READY Task closed.
Author
Owner

Synced from todu comment by @todu on 2026-06-21T22:40:15.243Z

PR Review

PR: #181

Review result: approved

Acceptance criteria: 6 total, 6 met, 0 missing.

Blocking issues: 0
Warnings: 0

Verification:

  • ./scripts/pre-pr.sh passed.
  • CI status for commit f7a7f522e7d4ae983c5b63d74872eb603737f6ff is success.

Notes:

  • Public actor settings now live at /settings/actor.
  • /settings remains focused on the logged-in site user account and appearance.
  • Old /settings/activitypub is intentionally not kept.

Next gate: waiting for explicit human merge approval.

_Synced from todu comment by @todu on 2026-06-21T22:40:15.243Z_ ## PR Review PR: https://forge.caradoc.com/erik/slugkit/pulls/181 Review result: approved Acceptance criteria: 6 total, 6 met, 0 missing. Blocking issues: 0 Warnings: 0 Verification: - `./scripts/pre-pr.sh` passed. - CI status for commit `f7a7f522e7d4ae983c5b63d74872eb603737f6ff` is `success`. Notes: - Public actor settings now live at `/settings/actor`. - `/settings` remains focused on the logged-in site user account and appearance. - Old `/settings/activitypub` is intentionally not kept. Next gate: waiting for explicit human merge approval.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
erik/slugkit#180
No description provided.