Skip to content

Commit b9f8e4d

Browse files
committed
feat(site): add the Pythinker Desktop showcase section
New section under the hero with a slow-zoom webm of the app (png poster, webp reduced-motion fallback), a fixed aspect ratio to avoid layout shift, and a download call to action pointing at the latest GitHub release.
1 parent 821f135 commit b9f8e4d

4 files changed

Lines changed: 90 additions & 1 deletion

File tree

272 KB
Loading
44.2 KB
Binary file not shown.
26.1 KB
Loading

apps/site/src/App.vue

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ onUnmounted(() => {
203203
<a href="/" class="nav-brand"><PythinkerMascot :width="26" :height="32" /><span>Pythinker Code</span></a>
204204
<div class="nav-actions">
205205
<div class="nav-links">
206+
<a href="#desktop">Desktop</a>
206207
<a href="https://pymodel.github.io/pythinker-code/" target="_blank" rel="noopener">Docs</a>
207208
<a href="https://github.com/PyModel/pythinker-code" target="_blank" rel="noopener"><img src="/brand/github.svg" alt="" width="16" height="16" />GitHub</a>
208209
<a href="https://www.npmjs.com/package/@pymodel/pythinker-code" target="_blank" rel="noopener"><img src="/brand/npm.svg" alt="" width="16" height="16" />npm</a>
@@ -214,6 +215,7 @@ onUnmounted(() => {
214215
</button>
215216
<Transition name="mobile-menu">
216217
<div v-show="menuOpen" class="mobile-menu-panel">
218+
<a href="#desktop" @click="closeMenu(false)">Desktop</a>
217219
<a href="https://pymodel.github.io/pythinker-code/" target="_blank" rel="noopener" @click="closeMenu(false)">Docs</a>
218220
<a href="https://github.com/PyModel/pythinker-code" target="_blank" rel="noopener" @click="closeMenu(false)"><img src="/brand/github.svg" alt="" width="16" height="16" />GitHub</a>
219221
<a href="https://www.npmjs.com/package/@pymodel/pythinker-code" target="_blank" rel="noopener" @click="closeMenu(false)"><img src="/brand/npm.svg" alt="" width="16" height="16" />npm</a>
@@ -255,6 +257,25 @@ onUnmounted(() => {
255257
</div>
256258
</header>
257259
260+
<section id="desktop" class="section container desktop-showcase" aria-labelledby="desktop-title">
261+
<div class="desktop-showcase-media reveal">
262+
<video autoplay muted loop playsinline preload="metadata" poster="/pythinker_desktop.png" aria-label="Pythinker Desktop app">
263+
<source src="/pythinker_desktop.webm" type="video/webm" />
264+
<img src="/pythinker_desktop.webp" alt="Pythinker Desktop showing an AI coding session" />
265+
</video>
266+
<img class="desktop-showcase-still" src="/pythinker_desktop.webp" alt="Pythinker Desktop showing an AI coding session" />
267+
</div>
268+
<div class="desktop-showcase-copy reveal">
269+
<p class="eyebrow">Desktop app</p>
270+
<h2 id="desktop-title" class="display-md">Pythinker Desktop</h2>
271+
<p class="desktop-showcase-lead">The agent in a native macOS app, with sidebar sessions, live activity, and auto-updates.</p>
272+
<div class="desktop-showcase-actions">
273+
<a class="button button-primary" href="https://github.com/PyModel/pythinker-code/releases/latest" target="_blank" rel="noopener">Download for macOS</a>
274+
<span class="desktop-showcase-note">Auto-updates included · Apple Silicon</span>
275+
</div>
276+
</div>
277+
</section>
278+
258279
<div class="works-with" aria-label="Works with leading AI models">
259280
<span class="works-with-label">Works with</span>
260281
<div class="works-with-marquee" aria-hidden="true">
@@ -731,6 +752,65 @@ onUnmounted(() => {
731752
margin-inline: auto;
732753
}
733754
755+
.desktop-showcase {
756+
display: grid;
757+
grid-template-columns: 3fr 2fr;
758+
align-items: center;
759+
gap: 48px;
760+
}
761+
762+
.desktop-showcase-media {
763+
width: 100%;
764+
max-width: 100%;
765+
min-width: 0;
766+
overflow: hidden;
767+
aspect-ratio: 2048 / 1300;
768+
border: 1px solid var(--hairline);
769+
border-radius: var(--r-lg);
770+
background: var(--terminal-bg);
771+
box-shadow: var(--shadow-terminal);
772+
}
773+
774+
.desktop-showcase-media video,
775+
.desktop-showcase-media video > img,
776+
.desktop-showcase-media > img {
777+
display: block;
778+
width: 100%;
779+
max-width: 100%;
780+
height: 100%;
781+
object-fit: cover;
782+
}
783+
784+
.desktop-showcase-still {
785+
display: none !important;
786+
}
787+
788+
.desktop-showcase-copy {
789+
display: flex;
790+
flex-direction: column;
791+
gap: 20px;
792+
align-items: flex-start;
793+
}
794+
795+
.desktop-showcase-lead {
796+
color: var(--ink-muted);
797+
font-size: 16px;
798+
line-height: 1.6;
799+
}
800+
801+
.desktop-showcase-actions {
802+
display: flex;
803+
flex-wrap: wrap;
804+
align-items: center;
805+
gap: 16px;
806+
}
807+
808+
.desktop-showcase-note {
809+
color: var(--ink-subtle);
810+
font-size: 13px;
811+
line-height: 1.5;
812+
}
813+
734814
.works-with {
735815
display: flex;
736816
width: 100%;
@@ -1665,7 +1745,8 @@ onUnmounted(() => {
16651745
@media (max-width: 899px) {
16661746
.quickstart-grid,
16671747
.docs-grid,
1668-
.vscode-grid {
1748+
.vscode-grid,
1749+
.desktop-showcase {
16691750
grid-template-columns: 1fr;
16701751
}
16711752
@@ -1825,6 +1906,14 @@ onUnmounted(() => {
18251906
}
18261907
18271908
@media (prefers-reduced-motion: reduce) {
1909+
.desktop-showcase-media video {
1910+
display: none;
1911+
}
1912+
1913+
.desktop-showcase-media .desktop-showcase-still {
1914+
display: block !important;
1915+
}
1916+
18281917
.works-with-track {
18291918
animation: none;
18301919
}

0 commit comments

Comments
 (0)