Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# T3 Code

T3 Code is an "agent harness control surface". It enables control of the agents on your machine with a best-in-class mobile app, [web app](https://app.t3.codes) and [Electron-based desktop app](https://t3.codes).
T3 Code is an "agent harness control surface". It enables control of the agents on your machine with a best-in-class mobile app ([iOS](https://apps.apple.com/us/app/t3-code-remote-claude-more/id6787819824), [Android](https://play.google.com/store/apps/details?id=com.t3tools.t3code)), [web app](https://app.t3.codes) and [Electron-based desktop app](https://t3.codes).

Works with your subscriptions on Claude Code, Codex, Cursor, Grok Build, and OpenCode. If they're set up on your computer, T3 Code can control them.

Expand Down
9 changes: 8 additions & 1 deletion apps/marketing/src/layouts/Layout.astro
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
---
import { GITHUB_REPOSITORY_URL, MARKETING_STATS } from "../lib/site";
import {
ANDROID_PLAY_STORE_URL,
GITHUB_REPOSITORY_URL,
IOS_APP_STORE_URL,
MARKETING_STATS,
} from "../lib/site";

interface Props {
title?: string;
Expand Down Expand Up @@ -69,6 +74,8 @@ const {
<a href={GITHUB_REPOSITORY_URL} target="_blank" rel="noopener noreferrer">GitHub</a>
<a href="https://discord.gg/jn4EGJjrvv" target="_blank" rel="noopener noreferrer">Discord</a>
<a href="/download">Download</a>
<a href={IOS_APP_STORE_URL} target="_blank" rel="noopener noreferrer">iOS app</a>
<a href={ANDROID_PLAY_STORE_URL} target="_blank" rel="noopener noreferrer">Android app</a>
<a href="/terms-of-service">Terms</a>
<a href="/privacy-policy">Privacy</a>
<a href="/security-policy">Security</a>
Expand Down
6 changes: 6 additions & 0 deletions apps/marketing/src/lib/site.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
export const GITHUB_REPOSITORY_URL = "https://github.com/pingdotgg/t3code";

export const IOS_APP_STORE_URL =
"https://apps.apple.com/us/app/t3-code-remote-claude-more/id6787819824";

export const ANDROID_PLAY_STORE_URL =
"https://play.google.com/store/apps/details?id=com.t3tools.t3code";

export const MARKETING_STATS = {
githubStars: "14k+",
users: "100,000",
Expand Down
22 changes: 21 additions & 1 deletion apps/marketing/src/pages/download.astro
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
import Layout from "../layouts/Layout.astro";
import { RELEASES_URL } from "../lib/releases";
import { ANDROID_PLAY_STORE_URL, IOS_APP_STORE_URL } from "../lib/site";
---

<Layout title="Download — T3 Code" description="Download T3 Code for macOS, Windows, or Linux.">
Expand Down Expand Up @@ -57,6 +58,24 @@ import { RELEASES_URL } from "../lib/releases";
</a>
</div>
</section>

<!-- Mobile -->
<section class="platform-section">
<div class="platform-header">
<svg class="platform-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="7" y="2" width="10" height="20" rx="2.5"/><path d="M11 18.5h2"/></svg>
<h2 class="platform-name">Mobile</h2>
</div>
<div class="download-cards">
<a class="download-card" href={IOS_APP_STORE_URL} target="_blank" rel="noopener noreferrer">
<span class="card-arch">iPhone &amp; iPad</span>
<span class="card-format">App Store</span>
</a>
<a class="download-card" href={ANDROID_PLAY_STORE_URL} target="_blank" rel="noopener noreferrer">
<span class="card-arch">Android</span>
<span class="card-format">Google Play</span>
</a>
</div>
</section>
</div>

<p class="releases-link">
Expand All @@ -73,7 +92,8 @@ import { RELEASES_URL } from "../lib/releases";

async function init() {
const versionLabel = document.getElementById("version-label");
const cards = document.querySelectorAll<HTMLAnchorElement>(".download-card");
// Only release-asset cards; mobile store cards have no data-asset and keep their href.
const cards = document.querySelectorAll<HTMLAnchorElement>(".download-card[data-asset]");

try {
const release = await fetchLatestRelease();
Expand Down
35 changes: 34 additions & 1 deletion apps/marketing/src/pages/index.astro
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
---
import Layout from "../layouts/Layout.astro";
import { GITHUB_REPOSITORY_URL, MARKETING_STATS } from "../lib/site";
import {
ANDROID_PLAY_STORE_URL,
GITHUB_REPOSITORY_URL,
IOS_APP_STORE_URL,
MARKETING_STATS,
} from "../lib/site";
import { tweets } from "../lib/tweets";

const desktopEndorsementRows = [
Expand Down Expand Up @@ -66,6 +71,12 @@ const mobileEndorsementRows = [
<span>Steal our code (legally)</span>
<svg class="hero-source-arrow" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17L17 7M8 7h9v9"/></svg>
</a>
<p class="hero-mobile-line">
Also on your phone:
<a href={IOS_APP_STORE_URL} target="_blank" rel="noopener noreferrer">iOS</a>
<span aria-hidden="true">·</span>
<a href={ANDROID_PLAY_STORE_URL} target="_blank" rel="noopener noreferrer">Android</a>
</p>
</div>

<div class="hero-preview">
Expand Down Expand Up @@ -578,6 +589,28 @@ const mobileEndorsementRows = [
opacity: 1;
}

.hero-mobile-line {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--fg-dim);
font-size: 13px;
letter-spacing: -0.005em;
}

.hero-mobile-line a {
color: var(--fg-muted);
text-decoration: underline;
text-decoration-color: rgba(161, 161, 170, 0.4);
text-underline-offset: 3px;
transition: color 0.18s ease, text-decoration-color 0.18s ease;
}

.hero-mobile-line a:hover {
color: var(--fg);
text-decoration-color: var(--fg);
}

/* Download button icons (platform-aware) */
.dl-icon {
display: none;
Expand Down
Loading