feat(marketing): redesign website and product showcase - #4909

Closed
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website
Closed

feat(marketing): redesign website and product showcase#4909
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Redesigned the marketing homepage around the simpler visual system, shared atmospheric hero treatment, and updated product showcase.
  • Reworked the download page with a cleaner release-channel switch, ordered platform rows, mobile store links, and official store artwork.
  • Simplified the privacy and security pages to match the homepage, including quieter typography, white bullets, and streamlined navigation.
  • Added deterministic web-demo fixtures and screenshot tooling for marketing assets, along with mobile documentation and refreshed Open Graph imagery.
  • Linked the iOS and Android downloads directly from the README introduction, incorporating the README treatment from docs: link iOS and Android app store downloads #4902 alongside the dedicated mobile-app section.

Why

The marketing and legal surfaces had diverged visually, while the download experience mixed oversized store actions, icon-heavy release controls, and inconsistent page chrome. This brings those surfaces into one restrained design system and makes the product itself the focus.

UI Changes

Each comparison uses the same 1440 × 900 viewport and a slow, eased full-page scroll. “Before” is the current live t3.codes page; “After” is this redesign.

PageBeforeAfter
Homepage
old-home.webm
new-home.webm
Download
old-download.webm
new-download.webm
Privacy
old-privacy.webm
new-privacy.webm
Security
old-security.webm
new-security.webm

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Validation:

  • pnpm --filter @t3tools/marketing typecheck
  • pnpm --filter @t3tools/web typecheck
  • pnpm --filter @t3tools/web test -- src/branding.test.ts (186 files, 1,666 tests)
  • pnpm exec vitest run apps/marketing/src/lib/releases.test.ts (2 tests)

Built with GPT-5.6 Sol via the T3 Code Codex harness.


Note

Medium Risk
Large marketing surface area and a workflow that pushes commits to the default branch with release-app credentials; marketing builds now depend on Chromium/Playwright and the web sidebar-demo build, increasing CI and local build time and failure modes.

Overview
Redesigns the marketing site around a shared layout with release-channel switching (Latest / Nightly / Dev), platform-aware behavior, Open Graph metadata, and a refreshed nav/footer.

The download page gains channel-specific GitHub release resolution (including nightly selection and macOS arch-aware asset URLs), a Dev “build from source” path, and clearer mobile store links. Legal pages can use a simplified layout without the on-page section nav.

Asset pipeline:dev/build now run the web sidebar demo build plus a Playwright capture script that produces feature crops and a WebGL-composited og-image.png. A CI job on the default branch copies dark mobile showcase screenshots into apps/marketing/public/mobile-states and auto-commits when they change.

README adds mobile app links and a mobile-app doc entry; store logos and mobile preview metadata are added under public/.

Reviewed by Cursor Bugbot for commit 47a4777. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Redesign marketing website with stage-aware downloads, live demo embed, and mobile app showcase

  • Rebuilds the homepage (index.astro) with a live interactive demo iframe, a dynamic hero section, a new Remote+mobile section with iOS/Android store links, an FAQ section, and a redesigned CTA; removes the old harnesses/Git/open-source sections.
  • Adds a release channel picker (Latest/Nightly/Dev) to the download page and homepage; download buttons resolve platform-specific asset URLs or copy a git clone command in Dev stage; selections persist via localStorage and sync across the page via a t3-marketing-stage-change custom event.
  • Overhauls Layout.astro with Open Graph/Twitter/canonical metadata, stage-aware favicons, a layered blur nav, an expanded three-column footer, and an inline script that sets data-stage/data-platform on <html> at load time.
  • Adds fetchNightlyRelease, findReleaseAssetUrl, selectNightlyRelease, and a 5-minute session cache to releases.ts to support nightly asset resolution.
  • Introduces a standalone sidebar demo build (vite.demo.config.ts) that emits into marketing/public/sidebar-demo, a Playwright screenshot capture script, and a CI workflow step that auto-publishes mobile screenshots to the repo.
  • Adds mobile app links to the Connections settings panel and user documentation.
  • Risk: dev and build scripts now run build:sidebar-demo and Playwright screenshot capture before Astro, increasing build time and adding a Playwright dependency.
📊 Macroscope summarized 47a4777. 37 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 33e670f6-8118-4cf1-b840-009f61ddca2a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/server.ts Outdated
@t3-code

t3-codeBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

maria confirmed this redesign already covers the app-store work in #4902: the shared store URLs, README mobile links, and mobile download section. #4902 should not be merged separately.

@maria-rcks
maria-rcks marked this pull request as ready for review July 30, 2026 02:44
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

5 blocking correctness issues found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from 3c56aec to 935e4d4CompareJuly 30, 2026 03:41
Comment threadapps/marketing/src/lib/releases.ts Outdated
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs Outdated
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from b901010 to 30dfba2CompareJuly 30, 2026 04:58
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seed.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the new Effect code in apps/web/src/demo/* (in-browser demo RPC backend, layers, fixtures, seeding) plus the touched web/marketing TypeScript against the Effect service conventions.

Namespace subpath imports, layer composition, WsRpcGroup.toLayer handler wiring, and the Effect.runFork(Layer.launch(...)) application boundary all look consistent with the conventions. One finding on error modeling at the dispatch boundary in apps/web/src/demo/server.ts.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seedState.ts
@StiensWout

Copy link
Copy Markdown
Contributor

looking good! I like the style :)

Comment threadapps/marketing/src/pages/download.astro Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/marketing/src/pages/index.astro
shivamhwp added a commit to shivamhwp/t3code that referenced this pull request Aug 3, 2026
- Drop the stage-colored background shift and the status-dot ping from
the T3 Connect section; dots and backdrop are now static.
- Remove the inbox showcase's How-threads-work link.
- Boot the hero demo at demo.html with no hash route, matching the
full interactive demo from the marketing redesign PR (pingdotgg#4909), which
lands on the new-thread composer instead of a dead thread route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maria-rcksand others added 20 commits August 14, 2026 22:01
Accept live server configs that only change the nightly/dev channel suffix so the hero demo stage art updates without a reload, and stub the RPC methods main added so the demo backend typechecks again.
Show the iPad and iPhone cards whenever the desktop demo is visible, and treat date-only nightly versions as the same release line so live channel switching still applies.
Only apply is-loaded when device preview images have actually loaded, and keep load listeners wired while the store is hidden so a narrow-to-wide resize no longer reveals empty full-color cards.
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from a32d658 to 47a4777CompareAugust 15, 2026 02:02
"description": "See every agent and clear finished work.",
"link": {
"label": "How threads work",
"href": "https://github.com/pingdotgg/t3code/blob/main/docs/reference/encyclopedia.md#thread-timeline"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumlib/showcase-spec.json:15

All four showcase help links lead to invalid documentation targets: the encyclopedia.md and source-control-providers.md paths 404, while keybindings.md#defaults lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the href values to existing documentation paths and anchors, such as docs/user/source-control.md, or add the referenced pages.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/marketing/src/lib/showcase-spec.json around line 15:
All four showcase help links lead to invalid documentation targets: the `encyclopedia.md` and `source-control-providers.md` paths 404, while `keybindings.md#defaults` lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the `href` values to existing documentation paths and anchors, such as `docs/user/source-control.md`, or add the referenced pages.

index 3f1c2aa..9e84b71 100644
--- a/apps/web/src/components/chat/ChatComposer.tsx
+++ b/apps/web/src/components/chat/ChatComposer.tsx
@@ -41,6 +41,9 @@ export function ChatComposer(props: ChatComposerProps) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/fixtures.ts:680

DEMO_COMPOSER_DIFF is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares -6 +9 but contains -3 +6 lines, the second declares -7 +16 but contains -2 +12, and the DropOverlay.tsx hunk declares +11 but contains +7; update the hunk counts or add the missing fixture lines.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/fixtures.ts around line 680:
`DEMO_COMPOSER_DIFF` is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares `-6 +9` but contains `-3 +6` lines, the second declares `-7 +16` but contains `-2 +12`, and the `DropOverlay.tsx` hunk declares `+11` but contains `+7`; update the hunk counts or add the missing fixture lines.

// scrollers, so the demo applies the gesture to the real element under the
// pointer. This remains user-driven and works for every scrollable app surface.
function installDemoWheelScrolling(): void {
document.addEventListener(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/main.tsx:56

The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe Window during capture, before this document listener is reached; register the handler on window instead so it runs at the window phase.

- document.addEventListener(+ window.addEventListener(
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/main.tsx around line 56:
The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe `Window` during capture, before this `document` listener is reached; register the handler on `window` instead so it runs at the window phase.

if-no-files-found: warn
retention-days: 14

publish_marketing_preview:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:82

Overlapping runs can commit stale screenshots and source.json to the default branch, regressing a newer preview. publish_marketing_preview checks out the branch after capture but never verifies that github.sha is still current, and git pull --rebase can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 82:
Overlapping runs can commit stale screenshots and `source.json` to the default branch, regressing a newer preview. `publish_marketing_preview` checks out the branch after capture but never verifies that `github.sha` is still current, and `git pull --rebase` can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

["ios-thread.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/thread.png"
["ios-terminal.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/terminal.png"
["ios-review.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/review.png"
["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:150

The publisher leaves threads-light.png and the four ios-*-light.png assets stale, so light-color-scheme visitors see outdated screenshots after a default appearance: both capture. preview_sources includes only dark paths; add the corresponding light mappings so both halves are refreshed.

 ["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"
+ ["threads-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/threads.png"+ ["ios-thread-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/thread.png"+ ["ios-terminal-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/terminal.png"+ ["ios-review-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/review.png"+ ["ios-environments-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/environments.png"
🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 150:
The publisher leaves `threads-light.png` and the four `ios-*-light.png` assets stale, so light-color-scheme visitors see outdated screenshots after a default `appearance: both` capture. `preview_sources` includes only `dark` paths; add the corresponding `light` mappings so both halves are refreshed.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

demoWindow.addEventListener("wheel", demoWheelHandler, {
capture: true,
passive: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Demo wheel hijacks inner scrolling

Medium Severity

The homepage attaches a capture-phase wheel listener on the demo iframe window that always calls preventDefault and stopImmediatePropagation, then scrolls the outer page. That runs before the demo’s own wheel handler, so sidebar, thread, and other inner surfaces never receive trackpad or mouse wheel input in the embedded hero.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

["android-thread.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/thread.png"
["android-terminal.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/terminal.png"
["android-review.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/review.png"
["android-environments.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Publish job skips light screenshots

Low Severity

publish_marketing_preview runs for dark and default both captures, but it only copies .../dark/... files into mobile-states. The homepage serves matching *-light.png assets in light mode, and those files are never refreshed by this job.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@maria-rcks@StiensWout@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(marketing): redesign website and product showcase - #4909

Closed
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website
Closed

feat(marketing): redesign website and product showcase#4909
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Redesigned the marketing homepage around the simpler visual system, shared atmospheric hero treatment, and updated product showcase.
  • Reworked the download page with a cleaner release-channel switch, ordered platform rows, mobile store links, and official store artwork.
  • Simplified the privacy and security pages to match the homepage, including quieter typography, white bullets, and streamlined navigation.
  • Added deterministic web-demo fixtures and screenshot tooling for marketing assets, along with mobile documentation and refreshed Open Graph imagery.
  • Linked the iOS and Android downloads directly from the README introduction, incorporating the README treatment from docs: link iOS and Android app store downloads #4902 alongside the dedicated mobile-app section.

Why

The marketing and legal surfaces had diverged visually, while the download experience mixed oversized store actions, icon-heavy release controls, and inconsistent page chrome. This brings those surfaces into one restrained design system and makes the product itself the focus.

UI Changes

Each comparison uses the same 1440 × 900 viewport and a slow, eased full-page scroll. “Before” is the current live t3.codes page; “After” is this redesign.

PageBeforeAfter
Homepage
old-home.webm
new-home.webm
Download
old-download.webm
new-download.webm
Privacy
old-privacy.webm
new-privacy.webm
Security
old-security.webm
new-security.webm

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Validation:

  • pnpm --filter @t3tools/marketing typecheck
  • pnpm --filter @t3tools/web typecheck
  • pnpm --filter @t3tools/web test -- src/branding.test.ts (186 files, 1,666 tests)
  • pnpm exec vitest run apps/marketing/src/lib/releases.test.ts (2 tests)

Built with GPT-5.6 Sol via the T3 Code Codex harness.


Note

Medium Risk
Large marketing surface area and a workflow that pushes commits to the default branch with release-app credentials; marketing builds now depend on Chromium/Playwright and the web sidebar-demo build, increasing CI and local build time and failure modes.

Overview
Redesigns the marketing site around a shared layout with release-channel switching (Latest / Nightly / Dev), platform-aware behavior, Open Graph metadata, and a refreshed nav/footer.

The download page gains channel-specific GitHub release resolution (including nightly selection and macOS arch-aware asset URLs), a Dev “build from source” path, and clearer mobile store links. Legal pages can use a simplified layout without the on-page section nav.

Asset pipeline:dev/build now run the web sidebar demo build plus a Playwright capture script that produces feature crops and a WebGL-composited og-image.png. A CI job on the default branch copies dark mobile showcase screenshots into apps/marketing/public/mobile-states and auto-commits when they change.

README adds mobile app links and a mobile-app doc entry; store logos and mobile preview metadata are added under public/.

Reviewed by Cursor Bugbot for commit 47a4777. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Redesign marketing website with stage-aware downloads, live demo embed, and mobile app showcase

  • Rebuilds the homepage (index.astro) with a live interactive demo iframe, a dynamic hero section, a new Remote+mobile section with iOS/Android store links, an FAQ section, and a redesigned CTA; removes the old harnesses/Git/open-source sections.
  • Adds a release channel picker (Latest/Nightly/Dev) to the download page and homepage; download buttons resolve platform-specific asset URLs or copy a git clone command in Dev stage; selections persist via localStorage and sync across the page via a t3-marketing-stage-change custom event.
  • Overhauls Layout.astro with Open Graph/Twitter/canonical metadata, stage-aware favicons, a layered blur nav, an expanded three-column footer, and an inline script that sets data-stage/data-platform on <html> at load time.
  • Adds fetchNightlyRelease, findReleaseAssetUrl, selectNightlyRelease, and a 5-minute session cache to releases.ts to support nightly asset resolution.
  • Introduces a standalone sidebar demo build (vite.demo.config.ts) that emits into marketing/public/sidebar-demo, a Playwright screenshot capture script, and a CI workflow step that auto-publishes mobile screenshots to the repo.
  • Adds mobile app links to the Connections settings panel and user documentation.
  • Risk: dev and build scripts now run build:sidebar-demo and Playwright screenshot capture before Astro, increasing build time and adding a Playwright dependency.
📊 Macroscope summarized 47a4777. 37 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 33e670f6-8118-4cf1-b840-009f61ddca2a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/server.ts Outdated
@t3-code

t3-codeBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

maria confirmed this redesign already covers the app-store work in #4902: the shared store URLs, README mobile links, and mobile download section. #4902 should not be merged separately.

@maria-rcks
maria-rcks marked this pull request as ready for review July 30, 2026 02:44
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

5 blocking correctness issues found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from 3c56aec to 935e4d4CompareJuly 30, 2026 03:41
Comment threadapps/marketing/src/lib/releases.ts Outdated
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs Outdated
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from b901010 to 30dfba2CompareJuly 30, 2026 04:58
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seed.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the new Effect code in apps/web/src/demo/* (in-browser demo RPC backend, layers, fixtures, seeding) plus the touched web/marketing TypeScript against the Effect service conventions.

Namespace subpath imports, layer composition, WsRpcGroup.toLayer handler wiring, and the Effect.runFork(Layer.launch(...)) application boundary all look consistent with the conventions. One finding on error modeling at the dispatch boundary in apps/web/src/demo/server.ts.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seedState.ts
@StiensWout

Copy link
Copy Markdown
Contributor

looking good! I like the style :)

Comment threadapps/marketing/src/pages/download.astro Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/marketing/src/pages/index.astro
shivamhwp added a commit to shivamhwp/t3code that referenced this pull request Aug 3, 2026
- Drop the stage-colored background shift and the status-dot ping from
the T3 Connect section; dots and backdrop are now static.
- Remove the inbox showcase's How-threads-work link.
- Boot the hero demo at demo.html with no hash route, matching the
full interactive demo from the marketing redesign PR (pingdotgg#4909), which
lands on the new-thread composer instead of a dead thread route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maria-rcksand others added 20 commits August 14, 2026 22:01
Accept live server configs that only change the nightly/dev channel suffix so the hero demo stage art updates without a reload, and stub the RPC methods main added so the demo backend typechecks again.
Show the iPad and iPhone cards whenever the desktop demo is visible, and treat date-only nightly versions as the same release line so live channel switching still applies.
Only apply is-loaded when device preview images have actually loaded, and keep load listeners wired while the store is hidden so a narrow-to-wide resize no longer reveals empty full-color cards.
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from a32d658 to 47a4777CompareAugust 15, 2026 02:02
"description": "See every agent and clear finished work.",
"link": {
"label": "How threads work",
"href": "https://github.com/pingdotgg/t3code/blob/main/docs/reference/encyclopedia.md#thread-timeline"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumlib/showcase-spec.json:15

All four showcase help links lead to invalid documentation targets: the encyclopedia.md and source-control-providers.md paths 404, while keybindings.md#defaults lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the href values to existing documentation paths and anchors, such as docs/user/source-control.md, or add the referenced pages.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/marketing/src/lib/showcase-spec.json around line 15:
All four showcase help links lead to invalid documentation targets: the `encyclopedia.md` and `source-control-providers.md` paths 404, while `keybindings.md#defaults` lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the `href` values to existing documentation paths and anchors, such as `docs/user/source-control.md`, or add the referenced pages.

index 3f1c2aa..9e84b71 100644
--- a/apps/web/src/components/chat/ChatComposer.tsx
+++ b/apps/web/src/components/chat/ChatComposer.tsx
@@ -41,6 +41,9 @@ export function ChatComposer(props: ChatComposerProps) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/fixtures.ts:680

DEMO_COMPOSER_DIFF is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares -6 +9 but contains -3 +6 lines, the second declares -7 +16 but contains -2 +12, and the DropOverlay.tsx hunk declares +11 but contains +7; update the hunk counts or add the missing fixture lines.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/fixtures.ts around line 680:
`DEMO_COMPOSER_DIFF` is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares `-6 +9` but contains `-3 +6` lines, the second declares `-7 +16` but contains `-2 +12`, and the `DropOverlay.tsx` hunk declares `+11` but contains `+7`; update the hunk counts or add the missing fixture lines.

// scrollers, so the demo applies the gesture to the real element under the
// pointer. This remains user-driven and works for every scrollable app surface.
function installDemoWheelScrolling(): void {
document.addEventListener(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/main.tsx:56

The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe Window during capture, before this document listener is reached; register the handler on window instead so it runs at the window phase.

- document.addEventListener(+ window.addEventListener(
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/main.tsx around line 56:
The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe `Window` during capture, before this `document` listener is reached; register the handler on `window` instead so it runs at the window phase.

if-no-files-found: warn
retention-days: 14

publish_marketing_preview:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:82

Overlapping runs can commit stale screenshots and source.json to the default branch, regressing a newer preview. publish_marketing_preview checks out the branch after capture but never verifies that github.sha is still current, and git pull --rebase can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 82:
Overlapping runs can commit stale screenshots and `source.json` to the default branch, regressing a newer preview. `publish_marketing_preview` checks out the branch after capture but never verifies that `github.sha` is still current, and `git pull --rebase` can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

["ios-thread.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/thread.png"
["ios-terminal.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/terminal.png"
["ios-review.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/review.png"
["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:150

The publisher leaves threads-light.png and the four ios-*-light.png assets stale, so light-color-scheme visitors see outdated screenshots after a default appearance: both capture. preview_sources includes only dark paths; add the corresponding light mappings so both halves are refreshed.

 ["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"
+ ["threads-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/threads.png"+ ["ios-thread-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/thread.png"+ ["ios-terminal-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/terminal.png"+ ["ios-review-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/review.png"+ ["ios-environments-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/environments.png"
🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 150:
The publisher leaves `threads-light.png` and the four `ios-*-light.png` assets stale, so light-color-scheme visitors see outdated screenshots after a default `appearance: both` capture. `preview_sources` includes only `dark` paths; add the corresponding `light` mappings so both halves are refreshed.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

demoWindow.addEventListener("wheel", demoWheelHandler, {
capture: true,
passive: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Demo wheel hijacks inner scrolling

Medium Severity

The homepage attaches a capture-phase wheel listener on the demo iframe window that always calls preventDefault and stopImmediatePropagation, then scrolls the outer page. That runs before the demo’s own wheel handler, so sidebar, thread, and other inner surfaces never receive trackpad or mouse wheel input in the embedded hero.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

["android-thread.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/thread.png"
["android-terminal.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/terminal.png"
["android-review.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/review.png"
["android-environments.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Publish job skips light screenshots

Low Severity

publish_marketing_preview runs for dark and default both captures, but it only copies .../dark/... files into mobile-states. The homepage serves matching *-light.png assets in light mode, and those files are never refreshed by this job.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@maria-rcks@StiensWout@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(marketing): redesign website and product showcase - #4909

Closed
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website
Closed

feat(marketing): redesign website and product showcase#4909
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Redesigned the marketing homepage around the simpler visual system, shared atmospheric hero treatment, and updated product showcase.
  • Reworked the download page with a cleaner release-channel switch, ordered platform rows, mobile store links, and official store artwork.
  • Simplified the privacy and security pages to match the homepage, including quieter typography, white bullets, and streamlined navigation.
  • Added deterministic web-demo fixtures and screenshot tooling for marketing assets, along with mobile documentation and refreshed Open Graph imagery.
  • Linked the iOS and Android downloads directly from the README introduction, incorporating the README treatment from docs: link iOS and Android app store downloads #4902 alongside the dedicated mobile-app section.

Why

The marketing and legal surfaces had diverged visually, while the download experience mixed oversized store actions, icon-heavy release controls, and inconsistent page chrome. This brings those surfaces into one restrained design system and makes the product itself the focus.

UI Changes

Each comparison uses the same 1440 × 900 viewport and a slow, eased full-page scroll. “Before” is the current live t3.codes page; “After” is this redesign.

PageBeforeAfter
Homepage
old-home.webm
new-home.webm
Download
old-download.webm
new-download.webm
Privacy
old-privacy.webm
new-privacy.webm
Security
old-security.webm
new-security.webm

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Validation:

  • pnpm --filter @t3tools/marketing typecheck
  • pnpm --filter @t3tools/web typecheck
  • pnpm --filter @t3tools/web test -- src/branding.test.ts (186 files, 1,666 tests)
  • pnpm exec vitest run apps/marketing/src/lib/releases.test.ts (2 tests)

Built with GPT-5.6 Sol via the T3 Code Codex harness.


Note

Medium Risk
Large marketing surface area and a workflow that pushes commits to the default branch with release-app credentials; marketing builds now depend on Chromium/Playwright and the web sidebar-demo build, increasing CI and local build time and failure modes.

Overview
Redesigns the marketing site around a shared layout with release-channel switching (Latest / Nightly / Dev), platform-aware behavior, Open Graph metadata, and a refreshed nav/footer.

The download page gains channel-specific GitHub release resolution (including nightly selection and macOS arch-aware asset URLs), a Dev “build from source” path, and clearer mobile store links. Legal pages can use a simplified layout without the on-page section nav.

Asset pipeline:dev/build now run the web sidebar demo build plus a Playwright capture script that produces feature crops and a WebGL-composited og-image.png. A CI job on the default branch copies dark mobile showcase screenshots into apps/marketing/public/mobile-states and auto-commits when they change.

README adds mobile app links and a mobile-app doc entry; store logos and mobile preview metadata are added under public/.

Reviewed by Cursor Bugbot for commit 47a4777. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Redesign marketing website with stage-aware downloads, live demo embed, and mobile app showcase

  • Rebuilds the homepage (index.astro) with a live interactive demo iframe, a dynamic hero section, a new Remote+mobile section with iOS/Android store links, an FAQ section, and a redesigned CTA; removes the old harnesses/Git/open-source sections.
  • Adds a release channel picker (Latest/Nightly/Dev) to the download page and homepage; download buttons resolve platform-specific asset URLs or copy a git clone command in Dev stage; selections persist via localStorage and sync across the page via a t3-marketing-stage-change custom event.
  • Overhauls Layout.astro with Open Graph/Twitter/canonical metadata, stage-aware favicons, a layered blur nav, an expanded three-column footer, and an inline script that sets data-stage/data-platform on <html> at load time.
  • Adds fetchNightlyRelease, findReleaseAssetUrl, selectNightlyRelease, and a 5-minute session cache to releases.ts to support nightly asset resolution.
  • Introduces a standalone sidebar demo build (vite.demo.config.ts) that emits into marketing/public/sidebar-demo, a Playwright screenshot capture script, and a CI workflow step that auto-publishes mobile screenshots to the repo.
  • Adds mobile app links to the Connections settings panel and user documentation.
  • Risk: dev and build scripts now run build:sidebar-demo and Playwright screenshot capture before Astro, increasing build time and adding a Playwright dependency.
📊 Macroscope summarized 47a4777. 37 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 33e670f6-8118-4cf1-b840-009f61ddca2a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/server.ts Outdated
@t3-code

t3-codeBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

maria confirmed this redesign already covers the app-store work in #4902: the shared store URLs, README mobile links, and mobile download section. #4902 should not be merged separately.

@maria-rcks
maria-rcks marked this pull request as ready for review July 30, 2026 02:44
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

5 blocking correctness issues found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from 3c56aec to 935e4d4CompareJuly 30, 2026 03:41
Comment threadapps/marketing/src/lib/releases.ts Outdated
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs Outdated
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from b901010 to 30dfba2CompareJuly 30, 2026 04:58
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seed.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the new Effect code in apps/web/src/demo/* (in-browser demo RPC backend, layers, fixtures, seeding) plus the touched web/marketing TypeScript against the Effect service conventions.

Namespace subpath imports, layer composition, WsRpcGroup.toLayer handler wiring, and the Effect.runFork(Layer.launch(...)) application boundary all look consistent with the conventions. One finding on error modeling at the dispatch boundary in apps/web/src/demo/server.ts.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seedState.ts
@StiensWout

Copy link
Copy Markdown
Contributor

looking good! I like the style :)

Comment threadapps/marketing/src/pages/download.astro Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/marketing/src/pages/index.astro
shivamhwp added a commit to shivamhwp/t3code that referenced this pull request Aug 3, 2026
- Drop the stage-colored background shift and the status-dot ping from
the T3 Connect section; dots and backdrop are now static.
- Remove the inbox showcase's How-threads-work link.
- Boot the hero demo at demo.html with no hash route, matching the
full interactive demo from the marketing redesign PR (pingdotgg#4909), which
lands on the new-thread composer instead of a dead thread route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maria-rcksand others added 20 commits August 14, 2026 22:01
Accept live server configs that only change the nightly/dev channel suffix so the hero demo stage art updates without a reload, and stub the RPC methods main added so the demo backend typechecks again.
Show the iPad and iPhone cards whenever the desktop demo is visible, and treat date-only nightly versions as the same release line so live channel switching still applies.
Only apply is-loaded when device preview images have actually loaded, and keep load listeners wired while the store is hidden so a narrow-to-wide resize no longer reveals empty full-color cards.
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from a32d658 to 47a4777CompareAugust 15, 2026 02:02
"description": "See every agent and clear finished work.",
"link": {
"label": "How threads work",
"href": "https://github.com/pingdotgg/t3code/blob/main/docs/reference/encyclopedia.md#thread-timeline"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumlib/showcase-spec.json:15

All four showcase help links lead to invalid documentation targets: the encyclopedia.md and source-control-providers.md paths 404, while keybindings.md#defaults lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the href values to existing documentation paths and anchors, such as docs/user/source-control.md, or add the referenced pages.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/marketing/src/lib/showcase-spec.json around line 15:
All four showcase help links lead to invalid documentation targets: the `encyclopedia.md` and `source-control-providers.md` paths 404, while `keybindings.md#defaults` lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the `href` values to existing documentation paths and anchors, such as `docs/user/source-control.md`, or add the referenced pages.

index 3f1c2aa..9e84b71 100644
--- a/apps/web/src/components/chat/ChatComposer.tsx
+++ b/apps/web/src/components/chat/ChatComposer.tsx
@@ -41,6 +41,9 @@ export function ChatComposer(props: ChatComposerProps) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/fixtures.ts:680

DEMO_COMPOSER_DIFF is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares -6 +9 but contains -3 +6 lines, the second declares -7 +16 but contains -2 +12, and the DropOverlay.tsx hunk declares +11 but contains +7; update the hunk counts or add the missing fixture lines.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/fixtures.ts around line 680:
`DEMO_COMPOSER_DIFF` is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares `-6 +9` but contains `-3 +6` lines, the second declares `-7 +16` but contains `-2 +12`, and the `DropOverlay.tsx` hunk declares `+11` but contains `+7`; update the hunk counts or add the missing fixture lines.

// scrollers, so the demo applies the gesture to the real element under the
// pointer. This remains user-driven and works for every scrollable app surface.
function installDemoWheelScrolling(): void {
document.addEventListener(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/main.tsx:56

The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe Window during capture, before this document listener is reached; register the handler on window instead so it runs at the window phase.

- document.addEventListener(+ window.addEventListener(
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/main.tsx around line 56:
The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe `Window` during capture, before this `document` listener is reached; register the handler on `window` instead so it runs at the window phase.

if-no-files-found: warn
retention-days: 14

publish_marketing_preview:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:82

Overlapping runs can commit stale screenshots and source.json to the default branch, regressing a newer preview. publish_marketing_preview checks out the branch after capture but never verifies that github.sha is still current, and git pull --rebase can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 82:
Overlapping runs can commit stale screenshots and `source.json` to the default branch, regressing a newer preview. `publish_marketing_preview` checks out the branch after capture but never verifies that `github.sha` is still current, and `git pull --rebase` can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

["ios-thread.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/thread.png"
["ios-terminal.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/terminal.png"
["ios-review.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/review.png"
["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:150

The publisher leaves threads-light.png and the four ios-*-light.png assets stale, so light-color-scheme visitors see outdated screenshots after a default appearance: both capture. preview_sources includes only dark paths; add the corresponding light mappings so both halves are refreshed.

 ["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"
+ ["threads-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/threads.png"+ ["ios-thread-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/thread.png"+ ["ios-terminal-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/terminal.png"+ ["ios-review-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/review.png"+ ["ios-environments-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/environments.png"
🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 150:
The publisher leaves `threads-light.png` and the four `ios-*-light.png` assets stale, so light-color-scheme visitors see outdated screenshots after a default `appearance: both` capture. `preview_sources` includes only `dark` paths; add the corresponding `light` mappings so both halves are refreshed.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

demoWindow.addEventListener("wheel", demoWheelHandler, {
capture: true,
passive: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Demo wheel hijacks inner scrolling

Medium Severity

The homepage attaches a capture-phase wheel listener on the demo iframe window that always calls preventDefault and stopImmediatePropagation, then scrolls the outer page. That runs before the demo’s own wheel handler, so sidebar, thread, and other inner surfaces never receive trackpad or mouse wheel input in the embedded hero.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

["android-thread.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/thread.png"
["android-terminal.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/terminal.png"
["android-review.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/review.png"
["android-environments.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Publish job skips light screenshots

Low Severity

publish_marketing_preview runs for dark and default both captures, but it only copies .../dark/... files into mobile-states. The homepage serves matching *-light.png assets in light mode, and those files are never refreshed by this job.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@maria-rcks@StiensWout@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(marketing): redesign website and product showcase - #4909

Closed
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website
Closed

feat(marketing): redesign website and product showcase#4909
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Redesigned the marketing homepage around the simpler visual system, shared atmospheric hero treatment, and updated product showcase.
  • Reworked the download page with a cleaner release-channel switch, ordered platform rows, mobile store links, and official store artwork.
  • Simplified the privacy and security pages to match the homepage, including quieter typography, white bullets, and streamlined navigation.
  • Added deterministic web-demo fixtures and screenshot tooling for marketing assets, along with mobile documentation and refreshed Open Graph imagery.
  • Linked the iOS and Android downloads directly from the README introduction, incorporating the README treatment from docs: link iOS and Android app store downloads #4902 alongside the dedicated mobile-app section.

Why

The marketing and legal surfaces had diverged visually, while the download experience mixed oversized store actions, icon-heavy release controls, and inconsistent page chrome. This brings those surfaces into one restrained design system and makes the product itself the focus.

UI Changes

Each comparison uses the same 1440 × 900 viewport and a slow, eased full-page scroll. “Before” is the current live t3.codes page; “After” is this redesign.

PageBeforeAfter
Homepage
old-home.webm
new-home.webm
Download
old-download.webm
new-download.webm
Privacy
old-privacy.webm
new-privacy.webm
Security
old-security.webm
new-security.webm

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Validation:

  • pnpm --filter @t3tools/marketing typecheck
  • pnpm --filter @t3tools/web typecheck
  • pnpm --filter @t3tools/web test -- src/branding.test.ts (186 files, 1,666 tests)
  • pnpm exec vitest run apps/marketing/src/lib/releases.test.ts (2 tests)

Built with GPT-5.6 Sol via the T3 Code Codex harness.


Note

Medium Risk
Large marketing surface area and a workflow that pushes commits to the default branch with release-app credentials; marketing builds now depend on Chromium/Playwright and the web sidebar-demo build, increasing CI and local build time and failure modes.

Overview
Redesigns the marketing site around a shared layout with release-channel switching (Latest / Nightly / Dev), platform-aware behavior, Open Graph metadata, and a refreshed nav/footer.

The download page gains channel-specific GitHub release resolution (including nightly selection and macOS arch-aware asset URLs), a Dev “build from source” path, and clearer mobile store links. Legal pages can use a simplified layout without the on-page section nav.

Asset pipeline:dev/build now run the web sidebar demo build plus a Playwright capture script that produces feature crops and a WebGL-composited og-image.png. A CI job on the default branch copies dark mobile showcase screenshots into apps/marketing/public/mobile-states and auto-commits when they change.

README adds mobile app links and a mobile-app doc entry; store logos and mobile preview metadata are added under public/.

Reviewed by Cursor Bugbot for commit 47a4777. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Redesign marketing website with stage-aware downloads, live demo embed, and mobile app showcase

  • Rebuilds the homepage (index.astro) with a live interactive demo iframe, a dynamic hero section, a new Remote+mobile section with iOS/Android store links, an FAQ section, and a redesigned CTA; removes the old harnesses/Git/open-source sections.
  • Adds a release channel picker (Latest/Nightly/Dev) to the download page and homepage; download buttons resolve platform-specific asset URLs or copy a git clone command in Dev stage; selections persist via localStorage and sync across the page via a t3-marketing-stage-change custom event.
  • Overhauls Layout.astro with Open Graph/Twitter/canonical metadata, stage-aware favicons, a layered blur nav, an expanded three-column footer, and an inline script that sets data-stage/data-platform on <html> at load time.
  • Adds fetchNightlyRelease, findReleaseAssetUrl, selectNightlyRelease, and a 5-minute session cache to releases.ts to support nightly asset resolution.
  • Introduces a standalone sidebar demo build (vite.demo.config.ts) that emits into marketing/public/sidebar-demo, a Playwright screenshot capture script, and a CI workflow step that auto-publishes mobile screenshots to the repo.
  • Adds mobile app links to the Connections settings panel and user documentation.
  • Risk: dev and build scripts now run build:sidebar-demo and Playwright screenshot capture before Astro, increasing build time and adding a Playwright dependency.
📊 Macroscope summarized 47a4777. 37 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 33e670f6-8118-4cf1-b840-009f61ddca2a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/server.ts Outdated
@t3-code

t3-codeBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

maria confirmed this redesign already covers the app-store work in #4902: the shared store URLs, README mobile links, and mobile download section. #4902 should not be merged separately.

@maria-rcks
maria-rcks marked this pull request as ready for review July 30, 2026 02:44
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

5 blocking correctness issues found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from 3c56aec to 935e4d4CompareJuly 30, 2026 03:41
Comment threadapps/marketing/src/lib/releases.ts Outdated
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs Outdated
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from b901010 to 30dfba2CompareJuly 30, 2026 04:58
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seed.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the new Effect code in apps/web/src/demo/* (in-browser demo RPC backend, layers, fixtures, seeding) plus the touched web/marketing TypeScript against the Effect service conventions.

Namespace subpath imports, layer composition, WsRpcGroup.toLayer handler wiring, and the Effect.runFork(Layer.launch(...)) application boundary all look consistent with the conventions. One finding on error modeling at the dispatch boundary in apps/web/src/demo/server.ts.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seedState.ts
@StiensWout

Copy link
Copy Markdown
Contributor

looking good! I like the style :)

Comment threadapps/marketing/src/pages/download.astro Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/marketing/src/pages/index.astro
shivamhwp added a commit to shivamhwp/t3code that referenced this pull request Aug 3, 2026
- Drop the stage-colored background shift and the status-dot ping from
the T3 Connect section; dots and backdrop are now static.
- Remove the inbox showcase's How-threads-work link.
- Boot the hero demo at demo.html with no hash route, matching the
full interactive demo from the marketing redesign PR (pingdotgg#4909), which
lands on the new-thread composer instead of a dead thread route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maria-rcksand others added 20 commits August 14, 2026 22:01
Accept live server configs that only change the nightly/dev channel suffix so the hero demo stage art updates without a reload, and stub the RPC methods main added so the demo backend typechecks again.
Show the iPad and iPhone cards whenever the desktop demo is visible, and treat date-only nightly versions as the same release line so live channel switching still applies.
Only apply is-loaded when device preview images have actually loaded, and keep load listeners wired while the store is hidden so a narrow-to-wide resize no longer reveals empty full-color cards.
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from a32d658 to 47a4777CompareAugust 15, 2026 02:02
"description": "See every agent and clear finished work.",
"link": {
"label": "How threads work",
"href": "https://github.com/pingdotgg/t3code/blob/main/docs/reference/encyclopedia.md#thread-timeline"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumlib/showcase-spec.json:15

All four showcase help links lead to invalid documentation targets: the encyclopedia.md and source-control-providers.md paths 404, while keybindings.md#defaults lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the href values to existing documentation paths and anchors, such as docs/user/source-control.md, or add the referenced pages.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/marketing/src/lib/showcase-spec.json around line 15:
All four showcase help links lead to invalid documentation targets: the `encyclopedia.md` and `source-control-providers.md` paths 404, while `keybindings.md#defaults` lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the `href` values to existing documentation paths and anchors, such as `docs/user/source-control.md`, or add the referenced pages.

index 3f1c2aa..9e84b71 100644
--- a/apps/web/src/components/chat/ChatComposer.tsx
+++ b/apps/web/src/components/chat/ChatComposer.tsx
@@ -41,6 +41,9 @@ export function ChatComposer(props: ChatComposerProps) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/fixtures.ts:680

DEMO_COMPOSER_DIFF is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares -6 +9 but contains -3 +6 lines, the second declares -7 +16 but contains -2 +12, and the DropOverlay.tsx hunk declares +11 but contains +7; update the hunk counts or add the missing fixture lines.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/fixtures.ts around line 680:
`DEMO_COMPOSER_DIFF` is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares `-6 +9` but contains `-3 +6` lines, the second declares `-7 +16` but contains `-2 +12`, and the `DropOverlay.tsx` hunk declares `+11` but contains `+7`; update the hunk counts or add the missing fixture lines.

// scrollers, so the demo applies the gesture to the real element under the
// pointer. This remains user-driven and works for every scrollable app surface.
function installDemoWheelScrolling(): void {
document.addEventListener(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/main.tsx:56

The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe Window during capture, before this document listener is reached; register the handler on window instead so it runs at the window phase.

- document.addEventListener(+ window.addEventListener(
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/main.tsx around line 56:
The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe `Window` during capture, before this `document` listener is reached; register the handler on `window` instead so it runs at the window phase.

if-no-files-found: warn
retention-days: 14

publish_marketing_preview:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:82

Overlapping runs can commit stale screenshots and source.json to the default branch, regressing a newer preview. publish_marketing_preview checks out the branch after capture but never verifies that github.sha is still current, and git pull --rebase can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 82:
Overlapping runs can commit stale screenshots and `source.json` to the default branch, regressing a newer preview. `publish_marketing_preview` checks out the branch after capture but never verifies that `github.sha` is still current, and `git pull --rebase` can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

["ios-thread.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/thread.png"
["ios-terminal.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/terminal.png"
["ios-review.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/review.png"
["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:150

The publisher leaves threads-light.png and the four ios-*-light.png assets stale, so light-color-scheme visitors see outdated screenshots after a default appearance: both capture. preview_sources includes only dark paths; add the corresponding light mappings so both halves are refreshed.

 ["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"
+ ["threads-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/threads.png"+ ["ios-thread-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/thread.png"+ ["ios-terminal-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/terminal.png"+ ["ios-review-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/review.png"+ ["ios-environments-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/environments.png"
🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 150:
The publisher leaves `threads-light.png` and the four `ios-*-light.png` assets stale, so light-color-scheme visitors see outdated screenshots after a default `appearance: both` capture. `preview_sources` includes only `dark` paths; add the corresponding `light` mappings so both halves are refreshed.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

demoWindow.addEventListener("wheel", demoWheelHandler, {
capture: true,
passive: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Demo wheel hijacks inner scrolling

Medium Severity

The homepage attaches a capture-phase wheel listener on the demo iframe window that always calls preventDefault and stopImmediatePropagation, then scrolls the outer page. That runs before the demo’s own wheel handler, so sidebar, thread, and other inner surfaces never receive trackpad or mouse wheel input in the embedded hero.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

["android-thread.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/thread.png"
["android-terminal.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/terminal.png"
["android-review.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/review.png"
["android-environments.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Publish job skips light screenshots

Low Severity

publish_marketing_preview runs for dark and default both captures, but it only copies .../dark/... files into mobile-states. The homepage serves matching *-light.png assets in light mode, and those files are never refreshed by this job.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@maria-rcks@StiensWout@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(marketing): redesign website and product showcase - #4909

Closed
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website
Closed

feat(marketing): redesign website and product showcase#4909
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Redesigned the marketing homepage around the simpler visual system, shared atmospheric hero treatment, and updated product showcase.
  • Reworked the download page with a cleaner release-channel switch, ordered platform rows, mobile store links, and official store artwork.
  • Simplified the privacy and security pages to match the homepage, including quieter typography, white bullets, and streamlined navigation.
  • Added deterministic web-demo fixtures and screenshot tooling for marketing assets, along with mobile documentation and refreshed Open Graph imagery.
  • Linked the iOS and Android downloads directly from the README introduction, incorporating the README treatment from docs: link iOS and Android app store downloads #4902 alongside the dedicated mobile-app section.

Why

The marketing and legal surfaces had diverged visually, while the download experience mixed oversized store actions, icon-heavy release controls, and inconsistent page chrome. This brings those surfaces into one restrained design system and makes the product itself the focus.

UI Changes

Each comparison uses the same 1440 × 900 viewport and a slow, eased full-page scroll. “Before” is the current live t3.codes page; “After” is this redesign.

PageBeforeAfter
Homepage
old-home.webm
new-home.webm
Download
old-download.webm
new-download.webm
Privacy
old-privacy.webm
new-privacy.webm
Security
old-security.webm
new-security.webm

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Validation:

  • pnpm --filter @t3tools/marketing typecheck
  • pnpm --filter @t3tools/web typecheck
  • pnpm --filter @t3tools/web test -- src/branding.test.ts (186 files, 1,666 tests)
  • pnpm exec vitest run apps/marketing/src/lib/releases.test.ts (2 tests)

Built with GPT-5.6 Sol via the T3 Code Codex harness.


Note

Medium Risk
Large marketing surface area and a workflow that pushes commits to the default branch with release-app credentials; marketing builds now depend on Chromium/Playwright and the web sidebar-demo build, increasing CI and local build time and failure modes.

Overview
Redesigns the marketing site around a shared layout with release-channel switching (Latest / Nightly / Dev), platform-aware behavior, Open Graph metadata, and a refreshed nav/footer.

The download page gains channel-specific GitHub release resolution (including nightly selection and macOS arch-aware asset URLs), a Dev “build from source” path, and clearer mobile store links. Legal pages can use a simplified layout without the on-page section nav.

Asset pipeline:dev/build now run the web sidebar demo build plus a Playwright capture script that produces feature crops and a WebGL-composited og-image.png. A CI job on the default branch copies dark mobile showcase screenshots into apps/marketing/public/mobile-states and auto-commits when they change.

README adds mobile app links and a mobile-app doc entry; store logos and mobile preview metadata are added under public/.

Reviewed by Cursor Bugbot for commit 47a4777. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Redesign marketing website with stage-aware downloads, live demo embed, and mobile app showcase

  • Rebuilds the homepage (index.astro) with a live interactive demo iframe, a dynamic hero section, a new Remote+mobile section with iOS/Android store links, an FAQ section, and a redesigned CTA; removes the old harnesses/Git/open-source sections.
  • Adds a release channel picker (Latest/Nightly/Dev) to the download page and homepage; download buttons resolve platform-specific asset URLs or copy a git clone command in Dev stage; selections persist via localStorage and sync across the page via a t3-marketing-stage-change custom event.
  • Overhauls Layout.astro with Open Graph/Twitter/canonical metadata, stage-aware favicons, a layered blur nav, an expanded three-column footer, and an inline script that sets data-stage/data-platform on <html> at load time.
  • Adds fetchNightlyRelease, findReleaseAssetUrl, selectNightlyRelease, and a 5-minute session cache to releases.ts to support nightly asset resolution.
  • Introduces a standalone sidebar demo build (vite.demo.config.ts) that emits into marketing/public/sidebar-demo, a Playwright screenshot capture script, and a CI workflow step that auto-publishes mobile screenshots to the repo.
  • Adds mobile app links to the Connections settings panel and user documentation.
  • Risk: dev and build scripts now run build:sidebar-demo and Playwright screenshot capture before Astro, increasing build time and adding a Playwright dependency.
📊 Macroscope summarized 47a4777. 37 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 33e670f6-8118-4cf1-b840-009f61ddca2a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/server.ts Outdated
@t3-code

t3-codeBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

maria confirmed this redesign already covers the app-store work in #4902: the shared store URLs, README mobile links, and mobile download section. #4902 should not be merged separately.

@maria-rcks
maria-rcks marked this pull request as ready for review July 30, 2026 02:44
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

5 blocking correctness issues found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from 3c56aec to 935e4d4CompareJuly 30, 2026 03:41
Comment threadapps/marketing/src/lib/releases.ts Outdated
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs Outdated
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from b901010 to 30dfba2CompareJuly 30, 2026 04:58
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seed.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the new Effect code in apps/web/src/demo/* (in-browser demo RPC backend, layers, fixtures, seeding) plus the touched web/marketing TypeScript against the Effect service conventions.

Namespace subpath imports, layer composition, WsRpcGroup.toLayer handler wiring, and the Effect.runFork(Layer.launch(...)) application boundary all look consistent with the conventions. One finding on error modeling at the dispatch boundary in apps/web/src/demo/server.ts.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seedState.ts
@StiensWout

Copy link
Copy Markdown
Contributor

looking good! I like the style :)

Comment threadapps/marketing/src/pages/download.astro Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/marketing/src/pages/index.astro
shivamhwp added a commit to shivamhwp/t3code that referenced this pull request Aug 3, 2026
- Drop the stage-colored background shift and the status-dot ping from
the T3 Connect section; dots and backdrop are now static.
- Remove the inbox showcase's How-threads-work link.
- Boot the hero demo at demo.html with no hash route, matching the
full interactive demo from the marketing redesign PR (pingdotgg#4909), which
lands on the new-thread composer instead of a dead thread route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maria-rcksand others added 20 commits August 14, 2026 22:01
Accept live server configs that only change the nightly/dev channel suffix so the hero demo stage art updates without a reload, and stub the RPC methods main added so the demo backend typechecks again.
Show the iPad and iPhone cards whenever the desktop demo is visible, and treat date-only nightly versions as the same release line so live channel switching still applies.
Only apply is-loaded when device preview images have actually loaded, and keep load listeners wired while the store is hidden so a narrow-to-wide resize no longer reveals empty full-color cards.
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from a32d658 to 47a4777CompareAugust 15, 2026 02:02
"description": "See every agent and clear finished work.",
"link": {
"label": "How threads work",
"href": "https://github.com/pingdotgg/t3code/blob/main/docs/reference/encyclopedia.md#thread-timeline"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumlib/showcase-spec.json:15

All four showcase help links lead to invalid documentation targets: the encyclopedia.md and source-control-providers.md paths 404, while keybindings.md#defaults lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the href values to existing documentation paths and anchors, such as docs/user/source-control.md, or add the referenced pages.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/marketing/src/lib/showcase-spec.json around line 15:
All four showcase help links lead to invalid documentation targets: the `encyclopedia.md` and `source-control-providers.md` paths 404, while `keybindings.md#defaults` lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the `href` values to existing documentation paths and anchors, such as `docs/user/source-control.md`, or add the referenced pages.

index 3f1c2aa..9e84b71 100644
--- a/apps/web/src/components/chat/ChatComposer.tsx
+++ b/apps/web/src/components/chat/ChatComposer.tsx
@@ -41,6 +41,9 @@ export function ChatComposer(props: ChatComposerProps) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/fixtures.ts:680

DEMO_COMPOSER_DIFF is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares -6 +9 but contains -3 +6 lines, the second declares -7 +16 but contains -2 +12, and the DropOverlay.tsx hunk declares +11 but contains +7; update the hunk counts or add the missing fixture lines.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/fixtures.ts around line 680:
`DEMO_COMPOSER_DIFF` is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares `-6 +9` but contains `-3 +6` lines, the second declares `-7 +16` but contains `-2 +12`, and the `DropOverlay.tsx` hunk declares `+11` but contains `+7`; update the hunk counts or add the missing fixture lines.

// scrollers, so the demo applies the gesture to the real element under the
// pointer. This remains user-driven and works for every scrollable app surface.
function installDemoWheelScrolling(): void {
document.addEventListener(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/main.tsx:56

The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe Window during capture, before this document listener is reached; register the handler on window instead so it runs at the window phase.

- document.addEventListener(+ window.addEventListener(
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/main.tsx around line 56:
The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe `Window` during capture, before this `document` listener is reached; register the handler on `window` instead so it runs at the window phase.

if-no-files-found: warn
retention-days: 14

publish_marketing_preview:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:82

Overlapping runs can commit stale screenshots and source.json to the default branch, regressing a newer preview. publish_marketing_preview checks out the branch after capture but never verifies that github.sha is still current, and git pull --rebase can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 82:
Overlapping runs can commit stale screenshots and `source.json` to the default branch, regressing a newer preview. `publish_marketing_preview` checks out the branch after capture but never verifies that `github.sha` is still current, and `git pull --rebase` can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

["ios-thread.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/thread.png"
["ios-terminal.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/terminal.png"
["ios-review.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/review.png"
["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:150

The publisher leaves threads-light.png and the four ios-*-light.png assets stale, so light-color-scheme visitors see outdated screenshots after a default appearance: both capture. preview_sources includes only dark paths; add the corresponding light mappings so both halves are refreshed.

 ["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"
+ ["threads-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/threads.png"+ ["ios-thread-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/thread.png"+ ["ios-terminal-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/terminal.png"+ ["ios-review-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/review.png"+ ["ios-environments-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/environments.png"
🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 150:
The publisher leaves `threads-light.png` and the four `ios-*-light.png` assets stale, so light-color-scheme visitors see outdated screenshots after a default `appearance: both` capture. `preview_sources` includes only `dark` paths; add the corresponding `light` mappings so both halves are refreshed.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

demoWindow.addEventListener("wheel", demoWheelHandler, {
capture: true,
passive: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Demo wheel hijacks inner scrolling

Medium Severity

The homepage attaches a capture-phase wheel listener on the demo iframe window that always calls preventDefault and stopImmediatePropagation, then scrolls the outer page. That runs before the demo’s own wheel handler, so sidebar, thread, and other inner surfaces never receive trackpad or mouse wheel input in the embedded hero.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

["android-thread.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/thread.png"
["android-terminal.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/terminal.png"
["android-review.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/review.png"
["android-environments.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Publish job skips light screenshots

Low Severity

publish_marketing_preview runs for dark and default both captures, but it only copies .../dark/... files into mobile-states. The homepage serves matching *-light.png assets in light mode, and those files are never refreshed by this job.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@maria-rcks@StiensWout@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(marketing): redesign website and product showcase - #4909

Closed
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website
Closed

feat(marketing): redesign website and product showcase#4909
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Redesigned the marketing homepage around the simpler visual system, shared atmospheric hero treatment, and updated product showcase.
  • Reworked the download page with a cleaner release-channel switch, ordered platform rows, mobile store links, and official store artwork.
  • Simplified the privacy and security pages to match the homepage, including quieter typography, white bullets, and streamlined navigation.
  • Added deterministic web-demo fixtures and screenshot tooling for marketing assets, along with mobile documentation and refreshed Open Graph imagery.
  • Linked the iOS and Android downloads directly from the README introduction, incorporating the README treatment from docs: link iOS and Android app store downloads #4902 alongside the dedicated mobile-app section.

Why

The marketing and legal surfaces had diverged visually, while the download experience mixed oversized store actions, icon-heavy release controls, and inconsistent page chrome. This brings those surfaces into one restrained design system and makes the product itself the focus.

UI Changes

Each comparison uses the same 1440 × 900 viewport and a slow, eased full-page scroll. “Before” is the current live t3.codes page; “After” is this redesign.

PageBeforeAfter
Homepage
old-home.webm
new-home.webm
Download
old-download.webm
new-download.webm
Privacy
old-privacy.webm
new-privacy.webm
Security
old-security.webm
new-security.webm

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Validation:

  • pnpm --filter @t3tools/marketing typecheck
  • pnpm --filter @t3tools/web typecheck
  • pnpm --filter @t3tools/web test -- src/branding.test.ts (186 files, 1,666 tests)
  • pnpm exec vitest run apps/marketing/src/lib/releases.test.ts (2 tests)

Built with GPT-5.6 Sol via the T3 Code Codex harness.


Note

Medium Risk
Large marketing surface area and a workflow that pushes commits to the default branch with release-app credentials; marketing builds now depend on Chromium/Playwright and the web sidebar-demo build, increasing CI and local build time and failure modes.

Overview
Redesigns the marketing site around a shared layout with release-channel switching (Latest / Nightly / Dev), platform-aware behavior, Open Graph metadata, and a refreshed nav/footer.

The download page gains channel-specific GitHub release resolution (including nightly selection and macOS arch-aware asset URLs), a Dev “build from source” path, and clearer mobile store links. Legal pages can use a simplified layout without the on-page section nav.

Asset pipeline:dev/build now run the web sidebar demo build plus a Playwright capture script that produces feature crops and a WebGL-composited og-image.png. A CI job on the default branch copies dark mobile showcase screenshots into apps/marketing/public/mobile-states and auto-commits when they change.

README adds mobile app links and a mobile-app doc entry; store logos and mobile preview metadata are added under public/.

Reviewed by Cursor Bugbot for commit 47a4777. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Redesign marketing website with stage-aware downloads, live demo embed, and mobile app showcase

  • Rebuilds the homepage (index.astro) with a live interactive demo iframe, a dynamic hero section, a new Remote+mobile section with iOS/Android store links, an FAQ section, and a redesigned CTA; removes the old harnesses/Git/open-source sections.
  • Adds a release channel picker (Latest/Nightly/Dev) to the download page and homepage; download buttons resolve platform-specific asset URLs or copy a git clone command in Dev stage; selections persist via localStorage and sync across the page via a t3-marketing-stage-change custom event.
  • Overhauls Layout.astro with Open Graph/Twitter/canonical metadata, stage-aware favicons, a layered blur nav, an expanded three-column footer, and an inline script that sets data-stage/data-platform on <html> at load time.
  • Adds fetchNightlyRelease, findReleaseAssetUrl, selectNightlyRelease, and a 5-minute session cache to releases.ts to support nightly asset resolution.
  • Introduces a standalone sidebar demo build (vite.demo.config.ts) that emits into marketing/public/sidebar-demo, a Playwright screenshot capture script, and a CI workflow step that auto-publishes mobile screenshots to the repo.
  • Adds mobile app links to the Connections settings panel and user documentation.
  • Risk: dev and build scripts now run build:sidebar-demo and Playwright screenshot capture before Astro, increasing build time and adding a Playwright dependency.
📊 Macroscope summarized 47a4777. 37 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 33e670f6-8118-4cf1-b840-009f61ddca2a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/server.ts Outdated
@t3-code

t3-codeBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

maria confirmed this redesign already covers the app-store work in #4902: the shared store URLs, README mobile links, and mobile download section. #4902 should not be merged separately.

@maria-rcks
maria-rcks marked this pull request as ready for review July 30, 2026 02:44
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

5 blocking correctness issues found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from 3c56aec to 935e4d4CompareJuly 30, 2026 03:41
Comment threadapps/marketing/src/lib/releases.ts Outdated
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs Outdated
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from b901010 to 30dfba2CompareJuly 30, 2026 04:58
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seed.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the new Effect code in apps/web/src/demo/* (in-browser demo RPC backend, layers, fixtures, seeding) plus the touched web/marketing TypeScript against the Effect service conventions.

Namespace subpath imports, layer composition, WsRpcGroup.toLayer handler wiring, and the Effect.runFork(Layer.launch(...)) application boundary all look consistent with the conventions. One finding on error modeling at the dispatch boundary in apps/web/src/demo/server.ts.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seedState.ts
@StiensWout

Copy link
Copy Markdown
Contributor

looking good! I like the style :)

Comment threadapps/marketing/src/pages/download.astro Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/marketing/src/pages/index.astro
shivamhwp added a commit to shivamhwp/t3code that referenced this pull request Aug 3, 2026
- Drop the stage-colored background shift and the status-dot ping from
the T3 Connect section; dots and backdrop are now static.
- Remove the inbox showcase's How-threads-work link.
- Boot the hero demo at demo.html with no hash route, matching the
full interactive demo from the marketing redesign PR (pingdotgg#4909), which
lands on the new-thread composer instead of a dead thread route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maria-rcksand others added 20 commits August 14, 2026 22:01
Accept live server configs that only change the nightly/dev channel suffix so the hero demo stage art updates without a reload, and stub the RPC methods main added so the demo backend typechecks again.
Show the iPad and iPhone cards whenever the desktop demo is visible, and treat date-only nightly versions as the same release line so live channel switching still applies.
Only apply is-loaded when device preview images have actually loaded, and keep load listeners wired while the store is hidden so a narrow-to-wide resize no longer reveals empty full-color cards.
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from a32d658 to 47a4777CompareAugust 15, 2026 02:02
"description": "See every agent and clear finished work.",
"link": {
"label": "How threads work",
"href": "https://github.com/pingdotgg/t3code/blob/main/docs/reference/encyclopedia.md#thread-timeline"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumlib/showcase-spec.json:15

All four showcase help links lead to invalid documentation targets: the encyclopedia.md and source-control-providers.md paths 404, while keybindings.md#defaults lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the href values to existing documentation paths and anchors, such as docs/user/source-control.md, or add the referenced pages.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/marketing/src/lib/showcase-spec.json around line 15:
All four showcase help links lead to invalid documentation targets: the `encyclopedia.md` and `source-control-providers.md` paths 404, while `keybindings.md#defaults` lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the `href` values to existing documentation paths and anchors, such as `docs/user/source-control.md`, or add the referenced pages.

index 3f1c2aa..9e84b71 100644
--- a/apps/web/src/components/chat/ChatComposer.tsx
+++ b/apps/web/src/components/chat/ChatComposer.tsx
@@ -41,6 +41,9 @@ export function ChatComposer(props: ChatComposerProps) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/fixtures.ts:680

DEMO_COMPOSER_DIFF is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares -6 +9 but contains -3 +6 lines, the second declares -7 +16 but contains -2 +12, and the DropOverlay.tsx hunk declares +11 but contains +7; update the hunk counts or add the missing fixture lines.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/fixtures.ts around line 680:
`DEMO_COMPOSER_DIFF` is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares `-6 +9` but contains `-3 +6` lines, the second declares `-7 +16` but contains `-2 +12`, and the `DropOverlay.tsx` hunk declares `+11` but contains `+7`; update the hunk counts or add the missing fixture lines.

// scrollers, so the demo applies the gesture to the real element under the
// pointer. This remains user-driven and works for every scrollable app surface.
function installDemoWheelScrolling(): void {
document.addEventListener(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/main.tsx:56

The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe Window during capture, before this document listener is reached; register the handler on window instead so it runs at the window phase.

- document.addEventListener(+ window.addEventListener(
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/main.tsx around line 56:
The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe `Window` during capture, before this `document` listener is reached; register the handler on `window` instead so it runs at the window phase.

if-no-files-found: warn
retention-days: 14

publish_marketing_preview:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:82

Overlapping runs can commit stale screenshots and source.json to the default branch, regressing a newer preview. publish_marketing_preview checks out the branch after capture but never verifies that github.sha is still current, and git pull --rebase can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 82:
Overlapping runs can commit stale screenshots and `source.json` to the default branch, regressing a newer preview. `publish_marketing_preview` checks out the branch after capture but never verifies that `github.sha` is still current, and `git pull --rebase` can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

["ios-thread.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/thread.png"
["ios-terminal.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/terminal.png"
["ios-review.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/review.png"
["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:150

The publisher leaves threads-light.png and the four ios-*-light.png assets stale, so light-color-scheme visitors see outdated screenshots after a default appearance: both capture. preview_sources includes only dark paths; add the corresponding light mappings so both halves are refreshed.

 ["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"
+ ["threads-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/threads.png"+ ["ios-thread-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/thread.png"+ ["ios-terminal-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/terminal.png"+ ["ios-review-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/review.png"+ ["ios-environments-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/environments.png"
🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 150:
The publisher leaves `threads-light.png` and the four `ios-*-light.png` assets stale, so light-color-scheme visitors see outdated screenshots after a default `appearance: both` capture. `preview_sources` includes only `dark` paths; add the corresponding `light` mappings so both halves are refreshed.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

demoWindow.addEventListener("wheel", demoWheelHandler, {
capture: true,
passive: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Demo wheel hijacks inner scrolling

Medium Severity

The homepage attaches a capture-phase wheel listener on the demo iframe window that always calls preventDefault and stopImmediatePropagation, then scrolls the outer page. That runs before the demo’s own wheel handler, so sidebar, thread, and other inner surfaces never receive trackpad or mouse wheel input in the embedded hero.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

["android-thread.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/thread.png"
["android-terminal.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/terminal.png"
["android-review.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/review.png"
["android-environments.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Publish job skips light screenshots

Low Severity

publish_marketing_preview runs for dark and default both captures, but it only copies .../dark/... files into mobile-states. The homepage serves matching *-light.png assets in light mode, and those files are never refreshed by this job.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@maria-rcks@StiensWout@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(marketing): redesign website and product showcase - #4909

Closed
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website
Closed

feat(marketing): redesign website and product showcase#4909
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Redesigned the marketing homepage around the simpler visual system, shared atmospheric hero treatment, and updated product showcase.
  • Reworked the download page with a cleaner release-channel switch, ordered platform rows, mobile store links, and official store artwork.
  • Simplified the privacy and security pages to match the homepage, including quieter typography, white bullets, and streamlined navigation.
  • Added deterministic web-demo fixtures and screenshot tooling for marketing assets, along with mobile documentation and refreshed Open Graph imagery.
  • Linked the iOS and Android downloads directly from the README introduction, incorporating the README treatment from docs: link iOS and Android app store downloads #4902 alongside the dedicated mobile-app section.

Why

The marketing and legal surfaces had diverged visually, while the download experience mixed oversized store actions, icon-heavy release controls, and inconsistent page chrome. This brings those surfaces into one restrained design system and makes the product itself the focus.

UI Changes

Each comparison uses the same 1440 × 900 viewport and a slow, eased full-page scroll. “Before” is the current live t3.codes page; “After” is this redesign.

PageBeforeAfter
Homepage
old-home.webm
new-home.webm
Download
old-download.webm
new-download.webm
Privacy
old-privacy.webm
new-privacy.webm
Security
old-security.webm
new-security.webm

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Validation:

  • pnpm --filter @t3tools/marketing typecheck
  • pnpm --filter @t3tools/web typecheck
  • pnpm --filter @t3tools/web test -- src/branding.test.ts (186 files, 1,666 tests)
  • pnpm exec vitest run apps/marketing/src/lib/releases.test.ts (2 tests)

Built with GPT-5.6 Sol via the T3 Code Codex harness.


Note

Medium Risk
Large marketing surface area and a workflow that pushes commits to the default branch with release-app credentials; marketing builds now depend on Chromium/Playwright and the web sidebar-demo build, increasing CI and local build time and failure modes.

Overview
Redesigns the marketing site around a shared layout with release-channel switching (Latest / Nightly / Dev), platform-aware behavior, Open Graph metadata, and a refreshed nav/footer.

The download page gains channel-specific GitHub release resolution (including nightly selection and macOS arch-aware asset URLs), a Dev “build from source” path, and clearer mobile store links. Legal pages can use a simplified layout without the on-page section nav.

Asset pipeline:dev/build now run the web sidebar demo build plus a Playwright capture script that produces feature crops and a WebGL-composited og-image.png. A CI job on the default branch copies dark mobile showcase screenshots into apps/marketing/public/mobile-states and auto-commits when they change.

README adds mobile app links and a mobile-app doc entry; store logos and mobile preview metadata are added under public/.

Reviewed by Cursor Bugbot for commit 47a4777. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Redesign marketing website with stage-aware downloads, live demo embed, and mobile app showcase

  • Rebuilds the homepage (index.astro) with a live interactive demo iframe, a dynamic hero section, a new Remote+mobile section with iOS/Android store links, an FAQ section, and a redesigned CTA; removes the old harnesses/Git/open-source sections.
  • Adds a release channel picker (Latest/Nightly/Dev) to the download page and homepage; download buttons resolve platform-specific asset URLs or copy a git clone command in Dev stage; selections persist via localStorage and sync across the page via a t3-marketing-stage-change custom event.
  • Overhauls Layout.astro with Open Graph/Twitter/canonical metadata, stage-aware favicons, a layered blur nav, an expanded three-column footer, and an inline script that sets data-stage/data-platform on <html> at load time.
  • Adds fetchNightlyRelease, findReleaseAssetUrl, selectNightlyRelease, and a 5-minute session cache to releases.ts to support nightly asset resolution.
  • Introduces a standalone sidebar demo build (vite.demo.config.ts) that emits into marketing/public/sidebar-demo, a Playwright screenshot capture script, and a CI workflow step that auto-publishes mobile screenshots to the repo.
  • Adds mobile app links to the Connections settings panel and user documentation.
  • Risk: dev and build scripts now run build:sidebar-demo and Playwright screenshot capture before Astro, increasing build time and adding a Playwright dependency.
📊 Macroscope summarized 47a4777. 37 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 33e670f6-8118-4cf1-b840-009f61ddca2a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/server.ts Outdated
@t3-code

t3-codeBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

maria confirmed this redesign already covers the app-store work in #4902: the shared store URLs, README mobile links, and mobile download section. #4902 should not be merged separately.

@maria-rcks
maria-rcks marked this pull request as ready for review July 30, 2026 02:44
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

5 blocking correctness issues found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from 3c56aec to 935e4d4CompareJuly 30, 2026 03:41
Comment threadapps/marketing/src/lib/releases.ts Outdated
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs Outdated
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from b901010 to 30dfba2CompareJuly 30, 2026 04:58
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seed.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the new Effect code in apps/web/src/demo/* (in-browser demo RPC backend, layers, fixtures, seeding) plus the touched web/marketing TypeScript against the Effect service conventions.

Namespace subpath imports, layer composition, WsRpcGroup.toLayer handler wiring, and the Effect.runFork(Layer.launch(...)) application boundary all look consistent with the conventions. One finding on error modeling at the dispatch boundary in apps/web/src/demo/server.ts.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seedState.ts
@StiensWout

Copy link
Copy Markdown
Contributor

looking good! I like the style :)

Comment threadapps/marketing/src/pages/download.astro Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/marketing/src/pages/index.astro
shivamhwp added a commit to shivamhwp/t3code that referenced this pull request Aug 3, 2026
- Drop the stage-colored background shift and the status-dot ping from
the T3 Connect section; dots and backdrop are now static.
- Remove the inbox showcase's How-threads-work link.
- Boot the hero demo at demo.html with no hash route, matching the
full interactive demo from the marketing redesign PR (pingdotgg#4909), which
lands on the new-thread composer instead of a dead thread route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maria-rcksand others added 20 commits August 14, 2026 22:01
Accept live server configs that only change the nightly/dev channel suffix so the hero demo stage art updates without a reload, and stub the RPC methods main added so the demo backend typechecks again.
Show the iPad and iPhone cards whenever the desktop demo is visible, and treat date-only nightly versions as the same release line so live channel switching still applies.
Only apply is-loaded when device preview images have actually loaded, and keep load listeners wired while the store is hidden so a narrow-to-wide resize no longer reveals empty full-color cards.
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from a32d658 to 47a4777CompareAugust 15, 2026 02:02
"description": "See every agent and clear finished work.",
"link": {
"label": "How threads work",
"href": "https://github.com/pingdotgg/t3code/blob/main/docs/reference/encyclopedia.md#thread-timeline"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumlib/showcase-spec.json:15

All four showcase help links lead to invalid documentation targets: the encyclopedia.md and source-control-providers.md paths 404, while keybindings.md#defaults lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the href values to existing documentation paths and anchors, such as docs/user/source-control.md, or add the referenced pages.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/marketing/src/lib/showcase-spec.json around line 15:
All four showcase help links lead to invalid documentation targets: the `encyclopedia.md` and `source-control-providers.md` paths 404, while `keybindings.md#defaults` lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the `href` values to existing documentation paths and anchors, such as `docs/user/source-control.md`, or add the referenced pages.

index 3f1c2aa..9e84b71 100644
--- a/apps/web/src/components/chat/ChatComposer.tsx
+++ b/apps/web/src/components/chat/ChatComposer.tsx
@@ -41,6 +41,9 @@ export function ChatComposer(props: ChatComposerProps) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/fixtures.ts:680

DEMO_COMPOSER_DIFF is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares -6 +9 but contains -3 +6 lines, the second declares -7 +16 but contains -2 +12, and the DropOverlay.tsx hunk declares +11 but contains +7; update the hunk counts or add the missing fixture lines.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/fixtures.ts around line 680:
`DEMO_COMPOSER_DIFF` is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares `-6 +9` but contains `-3 +6` lines, the second declares `-7 +16` but contains `-2 +12`, and the `DropOverlay.tsx` hunk declares `+11` but contains `+7`; update the hunk counts or add the missing fixture lines.

// scrollers, so the demo applies the gesture to the real element under the
// pointer. This remains user-driven and works for every scrollable app surface.
function installDemoWheelScrolling(): void {
document.addEventListener(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/main.tsx:56

The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe Window during capture, before this document listener is reached; register the handler on window instead so it runs at the window phase.

- document.addEventListener(+ window.addEventListener(
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/main.tsx around line 56:
The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe `Window` during capture, before this `document` listener is reached; register the handler on `window` instead so it runs at the window phase.

if-no-files-found: warn
retention-days: 14

publish_marketing_preview:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:82

Overlapping runs can commit stale screenshots and source.json to the default branch, regressing a newer preview. publish_marketing_preview checks out the branch after capture but never verifies that github.sha is still current, and git pull --rebase can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 82:
Overlapping runs can commit stale screenshots and `source.json` to the default branch, regressing a newer preview. `publish_marketing_preview` checks out the branch after capture but never verifies that `github.sha` is still current, and `git pull --rebase` can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

["ios-thread.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/thread.png"
["ios-terminal.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/terminal.png"
["ios-review.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/review.png"
["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:150

The publisher leaves threads-light.png and the four ios-*-light.png assets stale, so light-color-scheme visitors see outdated screenshots after a default appearance: both capture. preview_sources includes only dark paths; add the corresponding light mappings so both halves are refreshed.

 ["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"
+ ["threads-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/threads.png"+ ["ios-thread-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/thread.png"+ ["ios-terminal-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/terminal.png"+ ["ios-review-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/review.png"+ ["ios-environments-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/environments.png"
🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 150:
The publisher leaves `threads-light.png` and the four `ios-*-light.png` assets stale, so light-color-scheme visitors see outdated screenshots after a default `appearance: both` capture. `preview_sources` includes only `dark` paths; add the corresponding `light` mappings so both halves are refreshed.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

demoWindow.addEventListener("wheel", demoWheelHandler, {
capture: true,
passive: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Demo wheel hijacks inner scrolling

Medium Severity

The homepage attaches a capture-phase wheel listener on the demo iframe window that always calls preventDefault and stopImmediatePropagation, then scrolls the outer page. That runs before the demo’s own wheel handler, so sidebar, thread, and other inner surfaces never receive trackpad or mouse wheel input in the embedded hero.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

["android-thread.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/thread.png"
["android-terminal.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/terminal.png"
["android-review.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/review.png"
["android-environments.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Publish job skips light screenshots

Low Severity

publish_marketing_preview runs for dark and default both captures, but it only copies .../dark/... files into mobile-states. The homepage serves matching *-light.png assets in light mode, and those files are never refreshed by this job.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@maria-rcks@StiensWout@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(marketing): redesign website and product showcase - #4909

Closed
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website
Closed

feat(marketing): redesign website and product showcase#4909
maria-rcks wants to merge 20 commits into
pingdotgg:mainfrom
maria-rcks:fix/new-marketing-website

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Redesigned the marketing homepage around the simpler visual system, shared atmospheric hero treatment, and updated product showcase.
  • Reworked the download page with a cleaner release-channel switch, ordered platform rows, mobile store links, and official store artwork.
  • Simplified the privacy and security pages to match the homepage, including quieter typography, white bullets, and streamlined navigation.
  • Added deterministic web-demo fixtures and screenshot tooling for marketing assets, along with mobile documentation and refreshed Open Graph imagery.
  • Linked the iOS and Android downloads directly from the README introduction, incorporating the README treatment from docs: link iOS and Android app store downloads #4902 alongside the dedicated mobile-app section.

Why

The marketing and legal surfaces had diverged visually, while the download experience mixed oversized store actions, icon-heavy release controls, and inconsistent page chrome. This brings those surfaces into one restrained design system and makes the product itself the focus.

UI Changes

Each comparison uses the same 1440 × 900 viewport and a slow, eased full-page scroll. “Before” is the current live t3.codes page; “After” is this redesign.

PageBeforeAfter
Homepage
old-home.webm
new-home.webm
Download
old-download.webm
new-download.webm
Privacy
old-privacy.webm
new-privacy.webm
Security
old-security.webm
new-security.webm

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Validation:

  • pnpm --filter @t3tools/marketing typecheck
  • pnpm --filter @t3tools/web typecheck
  • pnpm --filter @t3tools/web test -- src/branding.test.ts (186 files, 1,666 tests)
  • pnpm exec vitest run apps/marketing/src/lib/releases.test.ts (2 tests)

Built with GPT-5.6 Sol via the T3 Code Codex harness.


Note

Medium Risk
Large marketing surface area and a workflow that pushes commits to the default branch with release-app credentials; marketing builds now depend on Chromium/Playwright and the web sidebar-demo build, increasing CI and local build time and failure modes.

Overview
Redesigns the marketing site around a shared layout with release-channel switching (Latest / Nightly / Dev), platform-aware behavior, Open Graph metadata, and a refreshed nav/footer.

The download page gains channel-specific GitHub release resolution (including nightly selection and macOS arch-aware asset URLs), a Dev “build from source” path, and clearer mobile store links. Legal pages can use a simplified layout without the on-page section nav.

Asset pipeline:dev/build now run the web sidebar demo build plus a Playwright capture script that produces feature crops and a WebGL-composited og-image.png. A CI job on the default branch copies dark mobile showcase screenshots into apps/marketing/public/mobile-states and auto-commits when they change.

README adds mobile app links and a mobile-app doc entry; store logos and mobile preview metadata are added under public/.

Reviewed by Cursor Bugbot for commit 47a4777. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Redesign marketing website with stage-aware downloads, live demo embed, and mobile app showcase

  • Rebuilds the homepage (index.astro) with a live interactive demo iframe, a dynamic hero section, a new Remote+mobile section with iOS/Android store links, an FAQ section, and a redesigned CTA; removes the old harnesses/Git/open-source sections.
  • Adds a release channel picker (Latest/Nightly/Dev) to the download page and homepage; download buttons resolve platform-specific asset URLs or copy a git clone command in Dev stage; selections persist via localStorage and sync across the page via a t3-marketing-stage-change custom event.
  • Overhauls Layout.astro with Open Graph/Twitter/canonical metadata, stage-aware favicons, a layered blur nav, an expanded three-column footer, and an inline script that sets data-stage/data-platform on <html> at load time.
  • Adds fetchNightlyRelease, findReleaseAssetUrl, selectNightlyRelease, and a 5-minute session cache to releases.ts to support nightly asset resolution.
  • Introduces a standalone sidebar demo build (vite.demo.config.ts) that emits into marketing/public/sidebar-demo, a Playwright screenshot capture script, and a CI workflow step that auto-publishes mobile screenshots to the repo.
  • Adds mobile app links to the Connections settings panel and user documentation.
  • Risk: dev and build scripts now run build:sidebar-demo and Playwright screenshot capture before Astro, increasing build time and adding a Playwright dependency.
📊 Macroscope summarized 47a4777. 37 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 33e670f6-8118-4cf1-b840-009f61ddca2a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/server.ts Outdated
@t3-code

t3-codeBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

maria confirmed this redesign already covers the app-store work in #4902: the shared store URLs, README mobile links, and mobile download section. #4902 should not be merged separately.

@maria-rcks
maria-rcks marked this pull request as ready for review July 30, 2026 02:44
Comment threadapps/marketing/src/lib/releases.ts
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

5 blocking correctness issues found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from 3c56aec to 935e4d4CompareJuly 30, 2026 03:41
Comment threadapps/marketing/src/lib/releases.ts Outdated
Comment threadapps/marketing/scripts/capture-demo-screenshots.mjs Outdated
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/fixtures.ts
Comment threadapps/web/src/demo/server.ts
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts Outdated
Comment threadapps/web/src/demo/server.ts
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from b901010 to 30dfba2CompareJuly 30, 2026 04:58
Comment threadapps/marketing/src/pages/index.astro Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seed.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the new Effect code in apps/web/src/demo/* (in-browser demo RPC backend, layers, fixtures, seeding) plus the touched web/marketing TypeScript against the Effect service conventions.

Namespace subpath imports, layer composition, WsRpcGroup.toLayer handler wiring, and the Effect.runFork(Layer.launch(...)) application boundary all look consistent with the conventions. One finding on error modeling at the dispatch boundary in apps/web/src/demo/server.ts.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/demo/server.ts
Comment threadapps/web/src/demo/seed.ts
Comment threadapps/web/src/demo/seed.ts Outdated
Comment threadapps/web/src/demo/seedState.ts
@StiensWout

Copy link
Copy Markdown
Contributor

looking good! I like the style :)

Comment threadapps/marketing/src/pages/download.astro Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadapps/marketing/src/pages/index.astro
Comment threadapps/marketing/src/pages/index.astro
shivamhwp added a commit to shivamhwp/t3code that referenced this pull request Aug 3, 2026
- Drop the stage-colored background shift and the status-dot ping from
the T3 Connect section; dots and backdrop are now static.
- Remove the inbox showcase's How-threads-work link.
- Boot the hero demo at demo.html with no hash route, matching the
full interactive demo from the marketing redesign PR (pingdotgg#4909), which
lands on the new-thread composer instead of a dead thread route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maria-rcksand others added 20 commits August 14, 2026 22:01
Accept live server configs that only change the nightly/dev channel suffix so the hero demo stage art updates without a reload, and stub the RPC methods main added so the demo backend typechecks again.
Show the iPad and iPhone cards whenever the desktop demo is visible, and treat date-only nightly versions as the same release line so live channel switching still applies.
Only apply is-loaded when device preview images have actually loaded, and keep load listeners wired while the store is hidden so a narrow-to-wide resize no longer reveals empty full-color cards.
@maria-rcks
maria-rcksforce-pushed the fix/new-marketing-website branch from a32d658 to 47a4777CompareAugust 15, 2026 02:02
"description": "See every agent and clear finished work.",
"link": {
"label": "How threads work",
"href": "https://github.com/pingdotgg/t3code/blob/main/docs/reference/encyclopedia.md#thread-timeline"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumlib/showcase-spec.json:15

All four showcase help links lead to invalid documentation targets: the encyclopedia.md and source-control-providers.md paths 404, while keybindings.md#defaults lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the href values to existing documentation paths and anchors, such as docs/user/source-control.md, or add the referenced pages.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/marketing/src/lib/showcase-spec.json around line 15:
All four showcase help links lead to invalid documentation targets: the `encyclopedia.md` and `source-control-providers.md` paths 404, while `keybindings.md#defaults` lacks that heading, so every link either shows a GitHub 404 or misses the promised section. Update the `href` values to existing documentation paths and anchors, such as `docs/user/source-control.md`, or add the referenced pages.

index 3f1c2aa..9e84b71 100644
--- a/apps/web/src/components/chat/ChatComposer.tsx
+++ b/apps/web/src/components/chat/ChatComposer.tsx
@@ -41,6 +41,9 @@ export function ChatComposer(props: ChatComposerProps) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/fixtures.ts:680

DEMO_COMPOSER_DIFF is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares -6 +9 but contains -3 +6 lines, the second declares -7 +16 but contains -2 +12, and the DropOverlay.tsx hunk declares +11 but contains +7; update the hunk counts or add the missing fixture lines.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/fixtures.ts around line 680:
`DEMO_COMPOSER_DIFF` is not a valid unified diff, so the demo parser can truncate, merge, or reject the showcased composer changes instead of rendering them reliably. The first hunk declares `-6 +9` but contains `-3 +6` lines, the second declares `-7 +16` but contains `-2 +12`, and the `DropOverlay.tsx` hunk declares `+11` but contains `+7`; update the hunk counts or add the missing fixture lines.

// scrollers, so the demo applies the gesture to the real element under the
// pointer. This remains user-driven and works for every scrollable app surface.
function installDemoWheelScrolling(): void {
document.addEventListener(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumdemo/main.tsx:56

The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe Window during capture, before this document listener is reached; register the handler on window instead so it runs at the window phase.

- document.addEventListener(+ window.addEventListener(
🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/web/src/demo/main.tsx around line 56:
The demo's wheel handler never runs when embedded, so vertical gestures scroll the marketing page and internal demo surfaces cannot be scrolled. The embedding page stops propagation at the iframe `Window` during capture, before this `document` listener is reached; register the handler on `window` instead so it runs at the window phase.

if-no-files-found: warn
retention-days: 14

publish_marketing_preview:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:82

Overlapping runs can commit stale screenshots and source.json to the default branch, regressing a newer preview. publish_marketing_preview checks out the branch after capture but never verifies that github.sha is still current, and git pull --rebase can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 82:
Overlapping runs can commit stale screenshots and `source.json` to the default branch, regressing a newer preview. `publish_marketing_preview` checks out the branch after capture but never verifies that `github.sha` is still current, and `git pull --rebase` can successfully rebase and push the older assets. Serialize this publisher or abort when the branch has advanced before committing.

["ios-thread.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/thread.png"
["ios-terminal.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/terminal.png"
["ios-review.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/review.png"
["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Mediumworkflows/mobile-showcase-screenshots.yml:150

The publisher leaves threads-light.png and the four ios-*-light.png assets stale, so light-color-scheme visitors see outdated screenshots after a default appearance: both capture. preview_sources includes only dark paths; add the corresponding light mappings so both halves are refreshed.

 ["ios-environments.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/dark/environments.png"
+ ["threads-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/threads.png"+ ["ios-thread-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/thread.png"+ ["ios-terminal-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/terminal.png"+ ["ios-review-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/review.png"+ ["ios-environments-light.png"]="$RUNNER_TEMP/mobile-showcase/iphone-6.9/light/environments.png"
🤖 Copy this AI Prompt to have your agent fix this:
In file @.github/workflows/mobile-showcase-screenshots.yml around line 150:
The publisher leaves `threads-light.png` and the four `ios-*-light.png` assets stale, so light-color-scheme visitors see outdated screenshots after a default `appearance: both` capture. `preview_sources` includes only `dark` paths; add the corresponding `light` mappings so both halves are refreshed.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

demoWindow.addEventListener("wheel", demoWheelHandler, {
capture: true,
passive: false,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Demo wheel hijacks inner scrolling

Medium Severity

The homepage attaches a capture-phase wheel listener on the demo iframe window that always calls preventDefault and stopImmediatePropagation, then scrolls the outer page. That runs before the demo’s own wheel handler, so sidebar, thread, and other inner surfaces never receive trackpad or mouse wheel input in the embedded hero.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

["android-thread.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/thread.png"
["android-terminal.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/terminal.png"
["android-review.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/review.png"
["android-environments.png"]="$RUNNER_TEMP/mobile-showcase/phone/dark/environments.png"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Publish job skips light screenshots

Low Severity

publish_marketing_preview runs for dark and default both captures, but it only copies .../dark/... files into mobile-states. The homepage serves matching *-light.png assets in light mode, and those files are never refreshed by this job.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 47a4777. Configure here.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@maria-rcks@StiensWout@shivamhwp