Skip to content

Add organization logo controls and read-only domains - #406

Merged
mintuhouse merged 4 commits into
mainfrom
mintuhouse/organization-logo-settings
Oct 29, 2026
Merged

mintuhouse merged 4 commits into
mainfrom
mintuhouse/organization-logo-settings

Conversation

@mintuhouse

Copy link
Copy Markdown
Member
  • Add organization logo upload, removal, and refresh controls using the existing storage and background workflow services.
  • Store a required, read-only organization domain from email addresses and backfill existing organizations in one SQL migration without a database default.
  • Use “Organization slug” consistently in settings and organization creation.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-29T04:21:39.037313Z 2ea81bd New commits
🔒 Security Review ✅ Completed 2026-10-29T03:43:04.784926Z 72b8e60 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
website-astralbeam-ai 2ea81bd Commit Preview URL

Branch Preview URL
Oct 29 2026, 04:21 AM

mintuhouse commented Oct 29, 2026 •

Copy link
Copy Markdown
Member Author

Validation results for 2ea81bd9b86380260a5b14777ebdfd1bc9817e27:

  • Logo UX now follows the existing avatar control: click the image/initials to upload, or use the labeled Change logo menu. Remove is disabled while empty; Refresh is available only while empty.
  • Seeded logo browser flow: 2 passed in 28.1 seconds, including sign-in setup. Verified placeholder upload, persistence after reload, read-only domain API protection, removal through the menu, and queuing Refresh through the menu.
  • Lint, formatting, and diff checks: passed.
  • The updated avatar-style logo recording is attached and playback was verified.
  • Platform browser suite: 14 passed, 1 failed during a disposable-account sign-in because Cloudflare Turnstile siteverify returned ECONNRESET. The upload and logo checks in that test had passed. The failure report is preserved at /tmp/astralbeam-logo-avatar-ux-p5wTZHUY/platform-first-failure-report/index.html; the focused rerun passed: 4 tests in 1.8 minutes, covering preflight, journey, and profile-file checks. No code change was needed.
  • Todos deterministic browser suite: 66 passed in 2.2 minutes.
  • All GitHub checks passed.
  • Server code is unchanged since aeeea9c04, where all 4 profile/logo integration tests, build, and native binary smoke check passed.
  • The full ready gate passed at 72b8e6033 (552 tests passed, 143 skipped).
  • The real new/existing organization background-fetch proof remains applicable to the unchanged backend.

The live-refresh polling suggestion remains open with the enqueue-only tradeoff documented. Refresh requests background work; the imported logo appears on the next settings reload.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 72b8e60335

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +70 to +71
await refreshOrganizationLogo({ data: { organizationSlug } })
toast.add({ title: "Logo refresh requested", type: "success" })

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update the displayed logo after the refresh workflow completes

When a refresh successfully imports a logo, this page continues showing the initials fallback and the Refresh button because organization.logoFileId comes from the settings route loader, and this handler neither reloads that data nor polls for workflow completion. refreshOrganizationLogo only queues the workflow with discard: true, so even an immediate invalidation would race the import. Observe completion and then invalidate the loader and organization queries so the new logo and Remove action appear without requiring a manual page reload.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Retaining the enqueue-only behavior requested for this change. Refresh submits a best-effort background job and explicitly reports “Logo refresh requested”; the imported logo appears when settings next reloads. Live completion updates would require polling or additional job-status handling, so that UX expansion is intentionally deferred. Leaving this thread open to make the tradeoff visible.

@mintuhouse

Copy link
Copy Markdown
Member Author

Walkthrough with disposable seed data: create an organization, inspect its read-only domain, upload a logo, confirm persistence after reload, remove it, and request a refresh.

video.webm

@mintuhouse

Copy link
Copy Markdown
Member Author

UI proof at aeeea9c04, using disposable local accounts and real background imports:

  • Create a new organization, then reload Settings to see its automatically imported logo.
  • Open an existing organization with an empty logo, click Refresh, see the queued-request confirmation, then reload to see the fetched logo.
  • Reload again to confirm both stored logos persist. Both images loaded at 128 pixels.
organization-logo-fetch-proof.webm

@mintuhouse

Copy link
Copy Markdown
Member Author

Updated logo UX at 2ea81bd9b, matching the avatar controls. The recording uses disposable seed data and shows clicking the empty initials to upload, persistence after reload, removing the logo through Change logo, and requesting a refresh from the menu while empty.

avatar-style-logo-upload.webm

@mintuhouse
mintuhouse merged commit 1c6e03f into main Oct 29, 2026
11 checks passed
@mintuhouse
mintuhouse deleted the mintuhouse/organization-logo-settings branch October 29, 2026 04:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant