Skip to content

Commit 7ac1a2a

Browse files
committed
feat(site): add .site portal landing page for GitHub Pages
1 parent 326dcf1 commit 7ac1a2a

8 files changed

Lines changed: 1791 additions & 0 deletions

File tree

.site/.nojekyll

Whitespace-only changes.

.site/img/logo.svg

Lines changed: 16 additions & 0 deletions
Loading

.site/index.html

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<!-- PYDEVICES-HEAD-TAGS: START -->
5+
<title>PyDevices - pydevices-android-runner</title>
6+
<meta name="description" content="Pre-built Android Runner APK build engine for the PyDevices product stack.">
7+
<link rel="icon" type="image/svg+xml" href="img/logo.svg">
8+
<!-- PYDEVICES-HEAD-TAGS: END -->
9+
<meta charset="utf-8">
10+
<script>try{if(localStorage.getItem('pydevices-theme')==='light'){document.documentElement.setAttribute('data-theme','light');}}catch(e){}</script>
11+
<meta name="viewport" content="width=device-width, initial-scale=1">
12+
13+
14+
<link rel="icon" type="image/svg+xml" href="img/logo.svg">
15+
<link rel="preconnect" href="https://fonts.googleapis.com">
16+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
17+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&display=swap">
18+
<link rel="stylesheet" href="./vendor/pydevices-chrome/site.css">
19+
</head>
20+
<body>
21+
<!-- PYDEVICES-ABOVE-THE-FOLD: START -->
22+
<div id="pydevices-site-header"></div>
23+
24+
<!-- Hero Banner -->
25+
<section class="hero wrap">
26+
<div class="hero-lead">
27+
<div class="hero-brand">
28+
<div class="logo-badge product-mark" style="background: linear-gradient(135deg, var(--tier-4-purple), #7c3aed);"><img src="img/logo.svg" alt="pydevices-android-runner" width="112" height="112"></div>
29+
<span class="eyebrow" style="color: var(--tier-4-purple);">android-runner</span>
30+
</div>
31+
<h1>pydevices-android-runner — Pre-built Android Runner APK.</h1>
32+
</div>
33+
<p><code>pydevices-android-runner</code> Pre-built Android Runner APK build engine for the PyDevices product stack. Compiles the generic, debuggable PyDevices Runner APK with CPython, SDL2, native LVGL/pygraphics wheels, and stdio socket bridge.</p>
34+
<div class="cta">
35+
<a class="btn primary" style="background: #24292e; color: #fff; border-color: #24292e;" href="https://github.com/PyDevices/pydevices-android-runner">
36+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.9a3.4 3.4 0 0 0-1-2.6c3-.3 6-1.5 6-6.5a5 5 0 0 0-1.4-3.5 4.6 4.6 0 0 0-.1-3.5s-1.1-.3-3.5 1.3a12 12 0 0 0-6 0C6.6 1.7 5.5 2 5.5 2a4.6 4.6 0 0 0-.1 3.5A5 5 0 0 0 4 9c0 5 3 6.2 6 6.5a3.4 3.4 0 0 0-1 2.6V22"/></svg>
37+
GitHub Repo
38+
</a>
39+
<a class="btn" style="border-color: var(--tier-4-purple); color: var(--tier-4-purple);" href="https://github.com/PyDevices/pydevices-android-runner/blob/main/README.md">Runner Architecture</a>
40+
<a class="btn" style="border-color: var(--tier-4-purple); color: var(--tier-4-purple);" href="https://github.com/PyDevices/pydevices-android-runner/releases">Releases &amp; APKs</a>
41+
<a class="btn" style="border-color: var(--tier-4-purple); color: var(--tier-4-purple);" href="https://pydevices.github.io/pydevices/">pydevices Core</a>
42+
</div>
43+
</section>
44+
<!-- PYDEVICES-ABOVE-THE-FOLD: END -->
45+
<div id="pydevices-site-header"></div>
46+
47+
<main class="wrap" style="padding-bottom: 60px;">
48+
<div class="section-head">
49+
<h2>Building the Debug APK</h2>
50+
<span class="hint">Automated build for arm64-v8a and x86_64</span>
51+
</div>
52+
53+
<div class="spec-block">
54+
<pre><code># Clone runner repository:
55+
git clone https://github.com/PyDevices/pydevices-android-runner.git
56+
cd pydevices-android-runner
57+
58+
# Run automated Android runner build:
59+
./build_android.sh -y
60+
61+
# Generated multi-ABI APK output:
62+
# p4a_app/bin/runner-0.1.0-arm64-v8a_x86_64-debug.apk</code></pre>
63+
</div>
64+
</main>
65+
66+
<div id="pydevices-site-footer"></div>
67+
<script src="./vendor/pydevices-chrome/site-chrome.js"></script>
68+
<script src="./vendor/pydevices-chrome/theme-toggle.js"></script>
69+
<script src="./vendor/pydevices-chrome/tree-nav.js"></script>
70+
</body>
71+
</html>
Lines changed: 16 additions & 0 deletions
Loading
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
/*
2+
* PyDevices — shared site header + footer
3+
*
4+
* Injects identical chrome into pages that provide mount points:
5+
* <div id="pydevices-site-header"></div>
6+
* ...
7+
* <div id="pydevices-site-footer"></div>
8+
* <script src="https://pydevices.github.io/assets/js/site-chrome.js"></script>
9+
* <script src="https://pydevices.github.io/assets/js/theme-toggle.js"></script>
10+
*
11+
* Load this script before theme-toggle.js so #theme-toggle exists when the
12+
* toggle binds. Canonical copy:
13+
* https://pydevices.github.io/assets/js/site-chrome.js
14+
*/
15+
(function () {
16+
var LOGO = "https://pydevices.github.io/img/logo.svg";
17+
var ROOT = "https://pydevices.github.io";
18+
19+
var HEADER =
20+
'<header class="site-header">' +
21+
'<div class="wrap">' +
22+
'<a class="brand" href="' +
23+
ROOT +
24+
'/">' +
25+
'<span class="logo"><img src="' +
26+
LOGO +
27+
'" alt="" width="30" height="30"></span>' +
28+
"PyDevices" +
29+
"</a>" +
30+
'<nav class="nav">' +
31+
'<button type="button" class="btn js-open-tree-modal" style="padding: 5px 12px; font-size: 0.85rem;" title="Explore ecosystem tree navigation">' +
32+
'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="width:14px;height:14px;"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg> Tree View' +
33+
'</button>' +
34+
'<a href="' +
35+
ROOT +
36+
'/pydevices/">Core Stack</a>' +
37+
'<a href="' +
38+
ROOT +
39+
'/pygraphics/">Toolkits</a>' +
40+
'<a href="' +
41+
ROOT +
42+
'/displayif/">Native C</a>' +
43+
'<a href="' +
44+
ROOT +
45+
'/pydevices-examples/pyscript/">Gallery</a>' +
46+
'<a href="https://github.com/PyDevices">GitHub</a>' +
47+
"</nav>" +
48+
'<button type="button" class="theme-toggle" id="theme-toggle" aria-label="Toggle color theme" title="Toggle color theme">' +
49+
'<svg class="icon-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg>' +
50+
'<svg class="icon-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>' +
51+
"</button>" +
52+
"</div>" +
53+
"</header>";
54+
55+
var FOOTER =
56+
'<footer class="site-footer">' +
57+
'<div class="wrap">' +
58+
"<span>&copy; 2026 PyDevices &middot; MIT License</span>" +
59+
'<span><a href="https://github.com/PyDevices">github.com/PyDevices</a></span>' +
60+
"</div>" +
61+
"</footer>";
62+
63+
var TREE_MODAL_HTML =
64+
'<div class="tree-modal-backdrop" id="pydevices-tree-modal-backdrop">' +
65+
'<div class="tree-modal" role="dialog" aria-modal="true" aria-label="Ecosystem Tree Navigation">' +
66+
'<div class="tree-modal-header">' +
67+
'<h3>PyDevices Ecosystem Tree</h3>' +
68+
'<button type="button" class="tree-modal-close" id="pydevices-tree-modal-close" aria-label="Close modal">&times;</button>' +
69+
'</div>' +
70+
'<div class="tree-modal-body">' +
71+
'<div class="tree-container" style="border:none; box-shadow:none; padding:0; margin:0;">' +
72+
'<div class="tree-header">' +
73+
'<div class="tree-search-wrap" style="max-width:100%;">' +
74+
'<svg class="tree-search-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg>' +
75+
'<input type="text" class="tree-search" placeholder="Filter repositories, runtimes, modules...">' +
76+
'</div>' +
77+
'</div>' +
78+
'<div class="tree-view">' +
79+
'<div class="tree-branch open">' +
80+
'<div class="tree-branch-header"><svg class="tree-toggle-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 18l6-6-6-6"/></svg> 📁 1: Core Platform & Board Contract</div>' +
81+
'<div class="tree-branch-children">' +
82+
'<a class="tree-leaf" href="https://pydevices.github.io/pydevices/"><span class="tree-leaf-name">pydevices</span><span class="tag tag-tier-1">Core Board Contract</span></a>' +
83+
'<a class="tree-leaf" href="https://pydevices.github.io/displayif/"><span class="tree-leaf-name">displayif</span><span class="tag tag-tier-1">C Bus Interface</span></a>' +
84+
'<a class="tree-leaf" href="https://pydevices.github.io/pydevices-examples/"><span class="tree-leaf-name">pydevices-examples</span><span class="tag tag-tier-1">Showcase & Demos</span></a>' +
85+
'</div>' +
86+
'</div>' +
87+
'<div class="tree-branch open">' +
88+
'<div class="tree-branch-header"><svg class="tree-toggle-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 18l6-6-6-6"/></svg> 📁 2: Pure-Python & Portable Toolkits</div>' +
89+
'<div class="tree-branch-children">' +
90+
'<a class="tree-leaf" href="https://pydevices.github.io/pygraphics/"><span class="tree-leaf-name">pygraphics</span><span class="tag tag-tier-2">2D FrameBuffer</span></a>' +
91+
'<a class="tree-leaf" href="https://pydevices.github.io/pdwidgets/"><span class="tree-leaf-name">pdwidgets</span><span class="tag tag-tier-2">UI Toolkit</span></a>' +
92+
'<a class="tree-leaf" href="https://pydevices.github.io/palettes/"><span class="tree-leaf-name">palettes</span><span class="tag tag-tier-2">Color Engine</span></a>' +
93+
'</div>' +
94+
'</div>' +
95+
'<div class="tree-branch open">' +
96+
'<div class="tree-branch-header"><svg class="tree-toggle-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 18l6-6-6-6"/></svg> 📁 3: LVGL Native Extensions & Binding Generator</div>' +
97+
'<div class="tree-branch-children">' +
98+
'<a class="tree-leaf" href="https://pydevices.github.io/lvgl-bindings/"><span class="tree-leaf-name">lvgl-bindings</span><span class="tag tag-tier-3">LVGL Generator</span></a>' +
99+
'<a class="tree-leaf" href="https://pydevices.github.io/lvgl-micropython/"><span class="tree-leaf-name">lvgl-micropython</span><span class="tag tag-tier-3">MicroPython C</span></a>' +
100+
'<a class="tree-leaf" href="https://pydevices.github.io/lvgl-python/"><span class="tree-leaf-name">lvgl-python</span><span class="tag tag-tier-3">CPython / WASM</span></a>' +
101+
'<a class="tree-leaf" href="https://pydevices.github.io/lvgl-circuitpython/"><span class="tree-leaf-name">lvgl-circuitpython</span><span class="tag tag-tier-3">CircuitPython C</span></a>' +
102+
'</div>' +
103+
'</div>' +
104+
'<div class="tree-branch open">' +
105+
'<div class="tree-branch-header"><svg class="tree-toggle-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 18l6-6-6-6"/></svg> 📁 4: Target App Hosts & PWAs</div>' +
106+
'<div class="tree-branch-children">' +
107+
'<a class="tree-leaf" href="https://pydevices.github.io/pydevices-pyscript-template/"><span class="tree-leaf-name">pyscript-template</span><span class="tag tag-tier-4">PWA Template</span></a>' +
108+
'<a class="tree-leaf" href="https://pydevices.github.io/pydevices-android-template/"><span class="tree-leaf-name">android-template</span><span class="tag tag-tier-4">Android APK</span></a>' +
109+
'</div>' +
110+
'</div>' +
111+
'<div class="tree-branch open">' +
112+
'<div class="tree-branch-header"><svg class="tree-toggle-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 18l6-6-6-6"/></svg> 📁 5: Developer Tools & Infrastructure</div>' +
113+
'<div class="tree-branch-children">' +
114+
'<a class="tree-leaf" href="https://pydevices.github.io/mip/"><span class="tree-leaf-name">mip</span><span class="tag tag-tier-5">PyDevices MIP Index</span></a>' +
115+
'<a class="tree-leaf" href="https://pydevices.github.io/cmods/"><span class="tree-leaf-name">cmods</span><span class="tag tag-tier-5">Build Workspace</span></a>' +
116+
'<a class="tree-leaf" href="https://pydevices.github.io/mpftp/"><span class="tree-leaf-name">mpftp</span><span class="tag tag-tier-5">REPL / Transfer Tool</span></a>' +
117+
'</div>' +
118+
'</div>' +
119+
'</div>' +
120+
'</div>' +
121+
'</div>' +
122+
'</div>' +
123+
'</div>';
124+
125+
function inject() {
126+
var headerMount = document.getElementById("pydevices-site-header");
127+
var footerMount = document.getElementById("pydevices-site-footer");
128+
if (headerMount) {
129+
headerMount.outerHTML = HEADER;
130+
}
131+
if (footerMount) {
132+
footerMount.outerHTML = FOOTER;
133+
}
134+
if (!document.getElementById("pydevices-tree-modal-backdrop")) {
135+
document.body.insertAdjacentHTML("beforeend", TREE_MODAL_HTML);
136+
}
137+
if (!document.querySelector('script[src*="tree-nav.js"]')) {
138+
var script = document.createElement('script');
139+
script.src = ROOT + '/vendor/pydevices-chrome/tree-nav.js';
140+
document.head.appendChild(script);
141+
}
142+
}
143+
144+
if (document.readyState === "loading") {
145+
document.addEventListener("DOMContentLoaded", inject);
146+
} else {
147+
inject();
148+
}
149+
})();

0 commit comments

Comments
 (0)