Skip to content

feat: launch handler#118

Closed
ThaUnknown wants to merge 102 commits intostylessh:mainfrom
ThaUnknown:link-capturing
Closed

feat: launch handler#118
ThaUnknown wants to merge 102 commits intostylessh:mainfrom
ThaUnknown:link-capturing

Conversation

@ThaUnknown
Copy link
Copy Markdown
Contributor

Summary

adds a launch_handler, and a lanchqueue consumer

the goal of this is to have new URLs opened externally [or internally], create new tabs in the already open client, rather than open a new one, for example: some1 on discord sends a github link, extension catches it, opens diffkit, but instead it opens it as a new tab, or some1 on discord sends a diffkit link directly, then the browser handles that directly

More details in the spec: https://github.com/WICG/web-app-launch/blob/main/launch_handler.md

not familiar with the codebase so this maybe could be done better? idk

there are ways to do this without the launchqueue, via serviceworkers, but that's effort, and would require actually writing react code, which I'm 50/50 on

Test Plan

Creates dummy launch queue, since it's a native api

Screenshots

Not applicable

This was like 70% AI coded with supervision, because React, and god I hate React, feel free to deny the PR for that, but the general idea is there.

stylessh added 30 commits April 7, 2026 10:32
Integrate ultracite as the Biome configuration preset across the
monorepo, replacing manual biome.json configs with extends-based
biome.jsonc files. Set up husky pre-commit hook with lint-staged
to auto-fix staged files on commit.
…tylessh#9)

- Create @quickhub/icons package wrapping @hugeicons/react with stable aliases
- Add horizontal topbar with user avatar dropdown, nav tabs, and theme switcher
- Establish layout shell: muted background surface with rounded content card
- Add surface tokens (surface-0/1/2) for layered background levels
- Tune typography: 13px body at weight 450, 500 for interactive elements
- Configure dark mode with inverted surface hierarchy and elevated popovers
- Update button, dropdown, and select components for consistent radius and transitions
- Move dashboard route from /dashboard to / with protected layout wrapper
* Share local D1 state across worktrees

* Only share local D1 state in worktrees
* Redesign overview page with metric cards and PR comment preview

Rebuild the overview page with a contained max-w-3xl layout featuring
Luma-style metric cards (open PRs, issues, review requests), a recent
pull requests list with state-colored icons and inline comment preview,
and a shared GitHub Flavored Markdown renderer in the UI package.

* Extract PullRequestRow component and add custom scrollbar

Move PullRequestRow into #/components/pulls/ for feature-based
organization. Add custom scrollbar styles with stable gutter, thumb-only
rendering, and auto-hide on inactivity. Add welcome header to overview.

* Fix markdown images breaking inline flow in table cells
Build detail pages at /$owner/$repo/pull/$id and /$owner/$repo/issues/$id
with two-column layout: content on the left (header, description, activity
timeline with comments, comment box) and metadata sidebar on the right
(reviewers, participants, assignees, milestones, details). PR view includes
merge status card with CI checks, review state, branch status, and update
branch action. Stacked participant avatars with tooltips. Smaller tooltip
styling globally. Issue rows now link internally instead of to GitHub.
* Improve dashboard caching and preloading

* Refine dashboard detail route loading
… polish (stylessh#24)

- Add shiki-based syntax highlighting to markdown code blocks with custom Vercel
  light/dark themes, copy button, and React Suspense for flash-free rendering
- Move issue labels to sidebar with theme-aware label pill styling
- Add icons to PR detail sidebar rows (calendar, clock, message, file, commit)
- Restructure PR header layout with copyable branch badges
- Add diff boxes visualization to PR stats bar
- Darken green-500 in light mode, switch to Geist Mono variable font
* Add PR review page with diff viewer, inline comments, and file tree

Introduces a dedicated code review page at /$owner/$repo/review/$pullId
powered by @pierre/diffs for syntax-highlighted diffs with multi-line
comment support via gutter drag selection. Includes resizable file tree
sidebar, review submission (Comment/Approve/Request Changes), and proper
dark/light theme integration.

* Fix CF Workers deployment: exclude shiki from server bundle

Shiki's bundled language grammars (~1.5 MB) were being included in the
server bundle via @pierre/diffs and markdown.tsx, pushing the worker
over the 3 MiB free plan limit.

- Add Vite plugin to stub shiki in SSR environment
- Lazy-load PatchDiff component to avoid SSR import chain to shiki
- Guard shiki highlighter initialization to client-only in markdown.tsx
stylessh and others added 24 commits April 12, 2026 19:33
…tension (stylessh#85)

* Smooth side panel transition using CSS grid animation

Replace flex layout with CSS grid and animate gridTemplateColumns
so the main content card resizes smoothly when navigating between
pages with and without a side panel. Avoids Framer Motion layout
prop which distorts inner children via scale transforms.

- Convert parent flex container to grid with spring-animated columns
- Clone removed portal content into ghost div for exit animation
- Add useMediaQuery hook to gate panel column on xl breakpoint

* feat: launch prep — alpha notice, extension prompt, legal pages, redirect extension

- README alpha warning; one-time alpha welcome modal on dashboard load
- Extension install chip in bottom bar with 30-day dismiss cooldown and
  optional hide when browser extension marks document (dashboard-presence.js)
- Public /privacy and /terms with shared layout; @tailwindcss/typography for prose
- siteConfig.browserExtensionInstallUrl; logo-128.png for store assets
- Extension: repo overview + profile redirect rules; v0.1.1; diff-kit.com presence script
…lessh#86)

* Smooth side panel transition using CSS grid animation

Replace flex layout with CSS grid and animate gridTemplateColumns
so the main content card resizes smoothly when navigating between
pages with and without a side panel. Avoids Framer Motion layout
prop which distorts inner children via scale transforms.

- Convert parent flex container to grid with spring-animated columns
- Clone removed portal content into ghost div for exit animation
- Add useMediaQuery hook to gate panel column on xl breakpoint

* feat: launch prep — alpha notice, extension prompt, legal pages, redirect extension

- README alpha warning; one-time alpha welcome modal on dashboard load
- Extension install chip in bottom bar with 30-day dismiss cooldown and
  optional hide when browser extension marks document (dashboard-presence.js)
- Public /privacy and /terms with shared layout; @tailwindcss/typography for prose
- siteConfig.browserExtensionInstallUrl; logo-128.png for store assets
- Extension: repo overview + profile redirect rules; v0.1.1; diff-kit.com presence script

* feat: browser-specific extension store links; Firefox manifest AMO fields

- getExtensionStoreInstallUrl: Firefox AMO vs Chrome Web Store from userAgent
- siteConfig: chrome + firefox listing URLs
- Extension v0.1.3: data_collection_permissions (none), gecko_android min, min FF 140 / Fennec 142
- README: packaging and Firefox notes
)

* Markdown comment box with @mentions, review fixes, and OAuth error handling

- Add reusable MarkdownEditor with Write/Preview tabs, toolbar, and @mention support
- Wire up Send button on PR/issue comment boxes with proper cache invalidation
- Fix submit review flow: async handling, error feedback, and OAuth org restriction warnings
- Add edit mode for pending review comments and redesign comment bubble styling
- Prioritize involved users (author, reviewers, commenters) in mention suggestions

* Add MarkdownEditor component and caret coordinates utility
…GraphQL migration (stylessh#90)

Migrate core search queries (pulls, issues, reviews) from REST to GraphQL for
lower rate-limit cost. Cache GitHub App installation tokens in memory and KV with
automatic refresh. Add rate-limit header logging, expand webhook revalidation
signals, and simplify client-side refresh to a signal-based hook.
…ylessh#91)

Detect GitHub FORBIDDEN errors from organizations with OAuth App access
restrictions and surface them as dismissible bottom-bar warnings prompting
the user to configure access, instead of silently dropping data.
Move OAuth owner exclusion to after successful installation context
creation so failed sources don't poison the fallback query. Remove
blanket organization exclusion that hid PRs/issues from orgs without
the app installed. Add merge strategy to list cache so partial refetch
results preserve previously cached items instead of replacing them.
Add a new issue creation page at /$owner/$repo/issues/new with title input,
markdown body editor with @mention support, and sidebar with label and
assignee pickers matching the PR detail sidebar pattern. Wire up a createIssue
server function and add a "+" CTA icon to the Issues activity card header.
Adds /$owner/$repo/issues and /$owner/$repo/pulls pages with URL-driven
filtering, sorting, search, and pagination via nuqs. Reuses the existing
FilterBar with a new useRepoListFilters hook that keeps all state in the
URL. Includes keepPreviousData for smooth page transitions and throttled
URL params to reduce API calls.
…ylessh#98)

* Add real-time webhook revalidation via Durable Objects and WebSockets

Replace the one-shot polling system (useGitHubSignalRefresh + SSE endpoint)
with a persistent WebSocket connection backed by a Cloudflare Durable Object.
When a GitHub webhook arrives, the signal is broadcast to all connected clients,
which then invalidate only the matching React Query caches instantly.

* Keep WebSocket connected when tab loses focus

Removes the visibility change listener that disconnected/reconnected
the signal stream on tab blur/focus, preventing missed webhook updates.
…stylessh#99)

- Define CHROME_EXTENSION_STORE_URL / FIREFOX_EXTENSION_STORE_URL in extension-store-url
- getExtensionStoreInstallUrl reads those constants only (avoids stale README URLs)
- siteConfig re-exports same constants; detect FxiOS for Firefox iOS
…sh#100)

* Add 5-minute polling fallback for webhook signal revalidation

The WebSocket-based signal stream can miss events if the connection drops
momentarily. This adds a polling fallback that checks signal timestamps
on the server every 5 minutes and invalidates stale queries if any
signals were missed.

* Update generated route tree
…hecks (stylessh#101)

issues.tsx acted as an unintended layout parent for issues.$issueId.tsx
due to TanStack Router dot-notation, but never rendered <Outlet />, so
child routes had nowhere to mount — the URL changed but content froze.
Renamed to issues.index.tsx to make it a sibling index route. Also added
defaultPendingComponent for immediate loading feedback on all transitions
and cached the _protected beforeLoad auth result to eliminate redundant
server round-trips on every in-app navigation.
stylessh#103)

- Fix table top spacing by adding flex container to suppress whitespace nodes
- Add not-prose to Markdown wrapper to prevent Tailwind Typography overrides
- Fix plain code block contrast in light mode with text-foreground
- Increase list item gap from 0.5 to 1.5 for better spacing
- Add GitHub-flavored alert support (NOTE, TIP, WARNING, etc.) via remark plugin
- Wire up topbar more-actions button as dropdown with repo, issue, and X links
- Add XLogo brand icon
- Improve file tree row hover visibility in dark mode (surface-0 → surface-1)
…stylessh#102)

Google Safe Browsing flagged the production site as phishing due to
the OAuth login flow on a newer domain. Add HSTS, X-Content-Type-Options,
X-Frame-Options, Referrer-Policy, and Permissions-Policy headers to all
responses from the worker entry point.
Restructure README getting-started into numbered steps with field-by-field
instructions, move reference tables into collapsible sections, and add
detailed comments to .dev.vars.example for each credential group.
…on (stylessh#110)

- Create custom QuickHub light/dark themes for @pierre/diffs, replacing
  color override unsafeCSS hacks with proper theme registration
- Add threaded comment containers with reply forms and inline reply CTA
  for both PR detail activity and review diff pages
- Add comment more-menu dropdown (copy link, copy markdown, edit, hide,
  delete) with author-only destructive actions
- Add resolve/unresolve thread support via GraphQL mutations with
  collapse-on-resolve behavior and toggle icon in file headers
- Add icon+spinner loading pattern to reply and send CTAs
…ssh#111)

* Group timeline events and show conflicting files in merge card

- Group consecutive label add/remove events by same actor into single timeline entries
- Group consecutive review request events the same way
- Detect and display conflicting file paths in PR merge status card
- Conflicts section uses collapsible pattern matching checks section

* Fix fork PR support: CI triggers, head branch label, and repo tab query pruning

- Run CI checks on fork PRs via pull_request_target with explicit activity types
- Show username:branch for fork PR head refs in detail header
- Add repo tab matching to prevent tree queries from being pruned mid-flight
* Fix README image asset URLs

* add more edge cases

---------

Co-authored-by: Prem Sathisha Etagi <premsathisha@users.noreply.github.com>
Co-authored-by: Alan Daniel <stylesshjs@gmail.com>
…tylessh#112)

* Add comment reply action, thread rendering, and fix timeline date sorting

- Add inline reply form for issue/PR comments with quoted parent context
- Detect and render comment threads via blockquote pattern matching
- Fix reviewed events missing timestamps by reading submitted_at fallback

* Simplify CI to single pull_request trigger with no conditional guards

* Deduplicate check runs by name in merge status card

When a workflow re-runs, GitHub creates new check run entries with the
same name but a new id. Keep only the latest run (highest id) per name
so the checks list doesn't show stale skipped/cancelled duplicates.
@ThaUnknown
Copy link
Copy Markdown
Contributor Author

I overall heavily dislike the current manifest.json situation, imho it shouldn't be an asset, but instead be generated at runtime, for things such as theme colors, and other PWA features which require the origin to be specified

@stylessh
Copy link
Copy Markdown
Owner

this is interesting, i will revisit this feature once i get some free time

@ThaUnknown
Copy link
Copy Markdown
Contributor Author

what happened here...

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.

3 participants