Skip to content

Commit ecf39e1

Browse files
committed
feat(site): add VS Code extension section and link-preview metadata
Put the VS Code extension right after the hero with a screenshot, Marketplace link, and a copyable install command, and give the site Open Graph and Twitter card tags so pasted links render a preview. Also point the CLI README hero at an image that exists; the old path 404s and shows a broken image on the npm package page.
1 parent 45be822 commit ecf39e1

9 files changed

Lines changed: 171 additions & 3 deletions

File tree

apps/pythinker-code/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
[![npm](https://img.shields.io/npm/v/@pythoughts/pythinker-code)](https://www.npmjs.com/package/@pythoughts/pythinker-code) [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE) [![Docs](https://img.shields.io/badge/docs-online-blue)](https://pythoughts-labs.github.io/pythinker-code/)
66

77
<p align="center">
8-
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/init.webp" alt="Pythinker Code terminal demo" width="860">
8+
<img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/terminal-ui.webp" alt="Pythinker Code terminal demo" width="860">
99
</p>
1010

1111
## What is Pythinker Code CLI

apps/site/index.html

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,37 @@
66
<meta name="color-scheme" content="light" />
77
<meta name="theme-color" content="#ffffff" />
88
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
9+
<link rel="icon" href="/favicon.ico" sizes="48x48" />
10+
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
911
<link rel="canonical" href="https://code.pythinker.com/" />
1012
<meta
1113
name="description"
12-
content="Install Pythinker Code: an open-source AI coding agent for your terminal. One command for macOS, Linux, Windows, Homebrew, Nix, or npm."
14+
content="Install Pythinker Code: an open-source AI coding agent for your terminal and VS Code. One command for macOS, Linux, Windows, Homebrew, Nix, or npm."
1315
/>
16+
17+
<!-- Link previews: Slack, Discord, iMessage, X, LinkedIn, WhatsApp. -->
18+
<meta property="og:type" content="website" />
19+
<meta property="og:site_name" content="Pythinker Code" />
20+
<meta property="og:url" content="https://code.pythinker.com/" />
21+
<meta property="og:title" content="Pythinker Code, the terminal-native AI engineering agent" />
22+
<meta
23+
property="og:description"
24+
content="An open-source AI engineering agent for your terminal and VS Code. It reads your repo, edits files, runs commands, and iterates until the job is done."
25+
/>
26+
<meta property="og:image" content="https://code.pythinker.com/og.jpg" />
27+
<meta property="og:image:type" content="image/jpeg" />
28+
<meta property="og:image:width" content="1200" />
29+
<meta property="og:image:height" content="630" />
30+
<meta property="og:image:alt" content="Pythinker Code running as a VS Code extension" />
31+
<meta property="og:locale" content="en_US" />
32+
<meta name="twitter:card" content="summary_large_image" />
33+
<meta name="twitter:title" content="Pythinker Code, the terminal-native AI engineering agent" />
34+
<meta
35+
name="twitter:description"
36+
content="An open-source AI engineering agent for your terminal and VS Code. It reads your repo, edits files, runs commands, and iterates until the job is done."
37+
/>
38+
<meta name="twitter:image" content="https://code.pythinker.com/og.jpg" />
39+
<meta name="twitter:image:alt" content="Pythinker Code running as a VS Code extension" />
1440
<link rel="preconnect" href="https://fonts.googleapis.com" />
1541
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
1642
<link
15.7 KB
Loading

apps/site/public/favicon.ico

15 KB
Binary file not shown.

apps/site/public/icon-192.png

17.1 KB
Loading

apps/site/public/icon-512.png

50.8 KB
Loading

apps/site/public/og.jpg

67.3 KB
Loading

apps/site/public/vscode_img.jpeg

89.9 KB
Loading

apps/site/src/App.vue

Lines changed: 143 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ const terminalDemos = [
5757
},
5858
];
5959
60+
const vscodeInstallCommand = 'code --install-extension pythoughts.pythinker-code';
61+
6062
const copiedCommand = ref('');
6163
const mobileMenu = ref(null);
6264
const menuButton = ref(null);
@@ -279,6 +281,47 @@ onUnmounted(() => {
279281
</div>
280282
</div>
281283
284+
<section id="vscode" class="section container" aria-labelledby="vscode-title">
285+
<div class="reveal">
286+
<p class="eyebrow">VS Code extension</p>
287+
<h2 id="vscode-title" class="display-md">The same agent, inside your editor.</h2>
288+
</div>
289+
<div class="vscode-grid">
290+
<figure class="vscode-shot reveal">
291+
<img
292+
src="/vscode_img.jpeg"
293+
alt="Pythinker Code running in the VS Code sidebar next to an open editor"
294+
width="1280"
295+
height="844"
296+
loading="lazy"
297+
decoding="async"
298+
/>
299+
</figure>
300+
<div class="vscode-copy reveal">
301+
<p class="vscode-lead">Install from the Marketplace and Pythinker Code lives in the Activity Bar. It reads your repo, proposes edits in the native diff viewer, and runs commands with your approval.</p>
302+
<ul class="vscode-points">
303+
<li><strong>Native diffs.</strong> Review every proposed change in VS Code's own diff viewer before it lands.</li>
304+
<li><strong>Shared config.</strong> Same <code>config.toml</code>, MCP servers, login, and sessions as the terminal app.</li>
305+
<li><strong>Thinking controls.</strong> Toggle reasoning or pick a model-supported thinking effort per task.</li>
306+
</ul>
307+
<div class="vscode-actions">
308+
<a class="button button-primary" href="https://marketplace.visualstudio.com/items?itemName=pythoughts.pythinker-code" target="_blank" rel="noopener">
309+
<img src="/brand/visualstudiocode.svg" alt="" width="16" height="16" />
310+
Get the extension
311+
</a>
312+
<div class="vscode-command">
313+
<code>code --install-extension pythoughts.pythinker-code</code>
314+
<button class="row-copy" type="button" aria-label="Copy VS Code install command" @click="copyText(vscodeInstallCommand)">
315+
<svg v-if="copiedCommand === vscodeInstallCommand" aria-hidden="true" viewBox="0 0 20 20"><path d="m4 10 4 4 8-9" /></svg>
316+
<svg v-else aria-hidden="true" viewBox="0 0 20 20"><rect x="7" y="3" width="10" height="11" rx="2" /><rect x="3" y="7" width="10" height="10" rx="2" /></svg>
317+
</button>
318+
</div>
319+
</div>
320+
<p class="section-note">Requires VS Code 1.100.0 or later. Cursor, Windsurf, and other VS Code forks install the same VSIX.</p>
321+
</div>
322+
</div>
323+
</section>
324+
282325
<section id="install" class="section container" aria-labelledby="install-title">
283326
<div class="reveal">
284327
<p class="eyebrow">Installation</p>
@@ -1330,6 +1373,104 @@ onUnmounted(() => {
13301373
opacity: 0.6;
13311374
}
13321375
1376+
.vscode-grid {
1377+
display: grid;
1378+
grid-template-columns: 3fr 2fr;
1379+
align-items: stretch;
1380+
gap: 48px;
1381+
margin-top: 32px;
1382+
}
1383+
1384+
/* ponytail: the shot fills the card so both columns end on the same line; cover
1385+
crops the screenshot's right-hand marketplace rail, which carries no message */
1386+
.vscode-shot {
1387+
overflow: hidden;
1388+
border: 1px solid var(--hairline);
1389+
border-radius: var(--r-lg);
1390+
background: var(--terminal-bg);
1391+
box-shadow: var(--shadow-terminal);
1392+
}
1393+
1394+
.vscode-shot img {
1395+
display: block;
1396+
width: 100%;
1397+
height: 100%;
1398+
object-fit: cover;
1399+
object-position: left center;
1400+
}
1401+
1402+
.vscode-copy {
1403+
display: flex;
1404+
flex-direction: column;
1405+
gap: 20px;
1406+
}
1407+
1408+
.vscode-lead {
1409+
color: var(--ink-muted);
1410+
font-size: 16px;
1411+
line-height: 1.6;
1412+
}
1413+
1414+
.vscode-points {
1415+
display: flex;
1416+
flex-direction: column;
1417+
gap: 12px;
1418+
padding: 0;
1419+
list-style: none;
1420+
color: var(--ink-muted);
1421+
font-size: 14px;
1422+
line-height: 1.6;
1423+
}
1424+
1425+
.vscode-points strong {
1426+
color: var(--ink);
1427+
font-weight: 600;
1428+
}
1429+
1430+
.vscode-points code {
1431+
padding: 1px 5px;
1432+
border-radius: var(--r-sm);
1433+
background: var(--surface-2);
1434+
color: var(--ink);
1435+
font-size: 13px;
1436+
}
1437+
1438+
.vscode-actions {
1439+
display: flex;
1440+
flex-direction: column;
1441+
gap: 12px;
1442+
align-items: flex-start;
1443+
}
1444+
1445+
.vscode-actions .button-primary {
1446+
gap: 8px;
1447+
}
1448+
1449+
.vscode-actions .button-primary img {
1450+
filter: brightness(0) invert(1);
1451+
}
1452+
1453+
.vscode-command {
1454+
display: flex;
1455+
width: 100%;
1456+
min-width: 0;
1457+
align-items: center;
1458+
gap: 8px;
1459+
padding: 4px 4px 4px 12px;
1460+
border: 1px solid var(--hairline);
1461+
border-radius: var(--r-sm);
1462+
background: var(--surface-2);
1463+
}
1464+
1465+
.vscode-command code {
1466+
min-width: 0;
1467+
flex: 1;
1468+
overflow-x: auto;
1469+
color: var(--ink);
1470+
font-size: 13px;
1471+
white-space: nowrap;
1472+
}
1473+
13331474
.plugin-row {
13341475
display: flex;
13351476
min-height: 72px;
@@ -1514,7 +1655,8 @@ onUnmounted(() => {
15141655
15151656
@media (max-width: 899px) {
15161657
.quickstart-grid,
1517-
.docs-grid {
1658+
.docs-grid,
1659+
.vscode-grid {
15181660
grid-template-columns: 1fr;
15191661
}
15201662

0 commit comments

Comments
 (0)