Skip to content

experiment: app launcher#5817

Draft
arthyn wants to merge 13 commits into
developfrom
hm/app-launcher
Draft

experiment: app launcher#5817
arthyn wants to merge 13 commits into
developfrom
hm/app-launcher

Conversation

@arthyn
Copy link
Copy Markdown
Member

@arthyn arthyn commented May 4, 2026

Summary

Changes

How did I test?

Risks and impact

  • Safe to rollback without consulting PR author? (Yes | No)
  • Affects important code area:
    • Onboarding
    • State / providers
    • Message sync
    • Channel display
    • Notifications
    • Other:

Rollback plan

Screenshots / videos

arthyn and others added 7 commits May 2, 2026 09:52
Lets the user open any installed Urbit desk inside Tlon via webview, with
sidebar tabs for switched-to apps. The notes integration's iframe host is
generalized into a reusable AppWebView, with %docket charges driving a
launcher grid (landscape-style title pills with mix-blend-hard-light) and a
session-scoped open-apps store powering the desktop sidebar tabs. Leap is
extended to surface active tabs at the top, an "App launcher" entry by
default, and individual matching apps when querying.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a generic recents log (scope/kind/target_id/last_visited_at/count)
populated from AppViewer + ChannelScreen on focus and from contact
mention selection in BareChatInput. Leap surfaces the visit log as a
"Recents" section above the launcher entry, falling back to per-app
matches once the user types.

Also smooths out a few rough edges around the embedded webviews:
RAF-throttles the iframe layout sync to avoid main-thread thrashing
during drawer transitions, pauses the iframe entirely when AppViewer
loses focus, defers Leap-driven navigation by a frame so unmount and
mount don't share a commit, and lazy-mounts the FlashList one frame
after the panel paints. Also fixes the Apps sidebar icon to navigate
explicitly to AppLauncher (popping any open AppViewer) so its highlight
state matches what's rendered.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a real loading overlay for the embedded app iframe via a react-dom
portal mounted directly on <body>, sized to the slot via
getBoundingClientRect, kept visible on the first paint by running the
setup in useLayoutEffect, and held for a 400ms minimum. The iframe
itself is opacity:0 until its load event so the spinner isn't covered
by the embedded app's blank-document paint. Theme tokens are resolved
upstream and passed in as plain colors so the portal contents don't
depend on the tamagui theme being reachable.

Drives the desktop sidebar's active-tab highlight from a focusedDesk
field on the open-apps store, set by AppViewerScreen's useFocusEffect.
This is more reliable than reading the drawer's nested state, which
doesn't always reflect navigations issued from outside the drawer
(e.g., launching from Leap).

Captures Cmd/Ctrl+K inside the embedded app's document via a capture-
phase keydown listener and re-fires it on the host document so the
embedded app's own Cmd+K binding never sees the event.

Bumps the desk glob to 0v7.g6a9p.0jabl.udi37.8ni1d.cedah.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Moves the sigil/contacts entry into the bottom sidebar group where the
top-level invite-friend icon used to live, drops the top-level invite
icon, and adds a left-aligned invite-friend button to the contacts
sidebar header. The PersonalInviteSheet stays mounted at the desktop
top-level drawer; inner sidebars open it via a small zustand store.

Pushes per-screen browser titles through navigation.setOptions so the
documentTitle formatter in tlon-web honors them: AppLauncher reports
"Apps" and AppViewer reports the embedded document's title (with the
charge title and desk slug as fallbacks). The formatters in app.tsx
now check options.title first before falling back to the friendly
route name, which fixes the previous "App Viewer" override.

Bumps the desk glob to 0v2.1esln.ce9af.n51qq.i247a.dd3d4.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts:
#	packages/shared/src/db/migrations/0000_lonely_tarantula.sql
#	packages/shared/src/db/migrations/0000_reflective_slayback.sql
#	packages/shared/src/db/migrations/0000_soft_lockjaw.sql
#	packages/shared/src/db/migrations/meta/0000_snapshot.json
#	packages/shared/src/db/migrations/meta/_journal.json
#	packages/shared/src/db/migrations/migrations.js
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Base automatically changed from hm/integrate-notes to develop May 11, 2026 16:24
arthyn and others added 4 commits May 11, 2026 11:29
# Conflicts:
#	desk/desk.docket-0
#	packages/app/ui/components/NotesChannel/NotesWebView.tsx
#	packages/app/ui/components/NotesChannel/notesIframeHost.web.ts
# Conflicts:
#	desk/desk.docket-0
#	packages/app/navigation/desktop/ProfileNavigator.tsx
#	packages/shared/src/db/migrations/0000_famous_tomorrow_man.sql
#	packages/shared/src/db/migrations/0000_lonely_tarantula.sql
#	packages/shared/src/db/migrations/0000_lovely_solo.sql
#	packages/shared/src/db/migrations/meta/0000_snapshot.json
#	packages/shared/src/db/migrations/meta/_journal.json
#	packages/shared/src/db/migrations/migrations.js
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants