Skip to content

Commit 69d8c75

Browse files
committed
Rewrite GitHub Pages as product sites with product-mark heroes.
Expand thin stubs into accurate product pages: README-aligned install/build snippets, snippet-grid cards, and related links preferring pydevices.github.io Pages over GitHub. Hero uses product SVG marks; header keeps org logo. Sync vendored site.css from PyDevices.github.io.
1 parent 50aea77 commit 69d8c75

2 files changed

Lines changed: 96 additions & 15 deletions

File tree

web/index.html

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<script>try{if(localStorage.getItem('pydevices-theme')==='light'){document.documentElement.setAttribute('data-theme','light');}}catch(e){}</script>
66
<meta name="viewport" content="width=device-width, initial-scale=1">
77
<title>lv_circuitpython_mod — PyDevices</title>
8-
<meta name="description" content="CircuitPython integration for LVGL.">
8+
<meta name="description" content="CircuitPython integration for LVGL — tree patches, build_cp.sh, and tests. Not a MicroPython USER_C_MODULES usermod.">
99
<link rel="icon" type="image/svg+xml" href="https://pydevices.github.io/assets/img/logo.svg">
1010
<link rel="preconnect" href="https://fonts.googleapis.com">
1111
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
@@ -21,7 +21,7 @@
2121
PyDevices
2222
</a>
2323
<nav class="nav">
24-
<a href="https://pydevices.github.io/pydisplay/">pydisplay</a>
24+
<a href="https://pydevices.github.io/lv_bindings/">lv_bindings</a>
2525
<a href="https://pydevices.github.io/cmods/">cmods</a>
2626
<a href="https://github.com/PyDevices/lv_circuitpython_mod">Source</a>
2727
</nav>
@@ -33,40 +33,75 @@
3333
</header>
3434

3535
<section class="hero wrap">
36-
<div class="logo-badge"><img src="https://pydevices.github.io/assets/img/logo.svg" alt="PyDevices logo" width="112" height="112"></div>
36+
<div class="logo-badge product-mark"><img src="https://pydevices.github.io/assets/img/products/lv_circuitpython_mod.svg" alt="lv_circuitpython_mod" width="112" height="112"></div>
3737
<span class="eyebrow">PyDevices / lv_circuitpython_mod</span>
38-
<h1>CircuitPython integration for LVGL</h1>
39-
<p>lv_circuitpython_mod carries the CircuitPython-side integration for LVGL: tree patches, build glue, and tests that consume the CircuitPython artifacts from lv_bindings. It is how <code>import lvgl</code> becomes a CircuitPython-friendly native module instead of a MicroPython-only usermod.</p>
40-
<p>Work here when CircuitPython&apos;s module layout or build system needs LVGL-specific wiring. Pair it with a regenerated lv_bindings CircuitPython output and the cmods <code>cp-unix</code> path (or this repo&apos;s <code>build_cp.sh</code>) to verify the coverage build still smoke-tests cleanly.</p>
38+
<h1>lv_circuitpython_mod</h1>
39+
<p>CircuitPython integration for LVGL: tree patches, build glue (<code>build_cp.sh</code>), spike templates, and tests. It consumes <a href="https://pydevices.github.io/lv_bindings/">lv_bindings</a> CircuitPython artifacts (<code>generated/lvgl_circuitpython.c</code> / <code>.h</code>) so <code>import lvgl</code> works as a CircuitPython-native module.</p>
40+
<p>This is <strong>not</strong> a MicroPython <code>USER_C_MODULES</code> usermod — CircuitPython uses a different module layout and patch-driven build. Pair a stable CircuitPython release tag with regenerated bindings, then drive any port/board/variant through <code>./build_cp.sh</code>.</p>
4141
<div class="cta">
4242
<a class="btn primary" href="https://github.com/PyDevices/lv_circuitpython_mod">
4343
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>
4444
Source on GitHub
4545
</a>
46-
<a class="btn" href="https://pydevices.github.io/">PyDevices</a>
46+
<a class="btn" href="https://pydevices.github.io/lv_bindings/">lv_bindings</a>
47+
<a class="btn" href="https://pydevices.github.io/cmods/">cmods</a>
4748
</div>
4849
</section>
4950

5051
<main class="cards wrap">
5152
<div class="section-head">
52-
<h2>Build with lv_bindings + a tagged CircuitPython clone</h2>
53+
<h2>First-time setup</h2>
54+
<span class="hint">Sibling clones of <code>lv_bindings/</code> and a tagged <code>circuitpython/</code></span>
5355
</div>
5456
<div class="install-block">
55-
<pre><code>git clone https://github.com/PyDevices/lv_bindings.git
56-
cd lv_bindings &amp;&amp; git submodule update --init lvgl &amp;&amp; cd ..
57-
./lv_bindings/regenerate_lvcp.sh
57+
<pre><code># Pick a stable tag from github.com/adafruit/circuitpython/releases
58+
git clone --branch 10.2.1 \
59+
https://github.com/adafruit/circuitpython.git circuitpython
60+
cd circuitpython &amp;&amp; make fetch-all-submodules &amp;&amp; cd ..
5861

59-
git clone https://github.com/PyDevices/lv_circuitpython_mod.git
60-
./lv_circuitpython_mod/build_cp.sh --port unix --variant coverage</code></pre>
62+
git clone https://github.com/PyDevices/lv_bindings.git lv_bindings
63+
cd lv_bindings
64+
git submodule update --init lvgl
65+
python3 -m venv .venv
66+
.venv/bin/pip install -r requirements.txt
67+
./regenerate_lvcp.sh
68+
cd ..</code></pre>
69+
</div>
70+
71+
<div class="section-head" style="margin-top: 36px;">
72+
<h2>Patch and build</h2>
73+
<span class="hint"><code>build_cp.sh</code> always runs <code>apply_cp_lvgl_patches.sh --apply</code> first</span>
74+
</div>
75+
<div class="snippet-grid">
76+
<div class="snippet-card">
77+
<h3>unix coverage</h3>
78+
<p>Default cmods <code>cp-unix</code> target; good for the CP test suite / gcov.</p>
79+
<pre><code>cd lv_circuitpython_mod
80+
./apply_cp_lvgl_patches.sh --apply \
81+
--port unix --variant coverage
82+
./build_cp.sh --port unix --variant coverage
83+
84+
../circuitpython/ports/unix/build-coverage/micropython \
85+
./test_lvgl_cp_unix.py</code></pre>
86+
</div>
87+
<div class="snippet-card">
88+
<h3>Board firmware</h3>
89+
<p>Interactive or CLI port/board/variant selection. Install GCC 14+ toolchains first (see README).</p>
90+
<pre><code>./build_cp.sh --port espressif \
91+
--board espressif_esp32p4_function_ev
92+
93+
./build_cp.sh # interactive selection</code></pre>
94+
</div>
6195
</div>
6296

6397
<div class="section-head" style="margin-top: 36px;">
6498
<h2>Related</h2>
6599
</div>
66100
<ul class="linklist">
67-
<li><a href="https://pydevices.github.io/lv_bindings/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg>lv_bindings — the binding generator</a></li>
68-
<li><a href="https://pydevices.github.io/cmods/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg>cmods — the build workspace</a></li>
101+
<li><a href="https://pydevices.github.io/lv_bindings/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg>lv_bindings — binding generator</a></li>
102+
<li><a href="https://pydevices.github.io/cmods/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg>cmods — optional sibling workspace</a></li>
69103
<li><a href="https://pydevices.github.io/pydisplay/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg>pydisplay</a></li>
104+
<li><a href="https://pydevices.github.io/lv_micropython_cmod/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 6l6 6-6 6"/></svg>lv_micropython_cmod — MicroPython usermod</a></li>
70105
</ul>
71106
</main>
72107

web/vendor/pydevices-chrome/site.css

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,52 @@ pre code {
304304
display: block;
305305
}
306306

307+
/* Product hero mark — same orange badge as the org logo, but the card icon
308+
* (stroke SVG under assets/img/products/) instead of the shared PyDevices mark.
309+
* Keeps header branding org-wide while each product page gets its own face. */
310+
.logo-badge.product-mark {
311+
padding: 0;
312+
}
313+
314+
.logo-badge.product-mark img,
315+
.logo-badge.product-mark > svg {
316+
width: 54%;
317+
height: 54%;
318+
}
319+
320+
/* Short API / install excerpts under section heads */
321+
.snippet-grid {
322+
display: grid;
323+
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
324+
gap: 18px;
325+
}
326+
327+
.snippet-card {
328+
border: 1px solid var(--border);
329+
border-radius: var(--radius);
330+
background: var(--panel);
331+
box-shadow: var(--shadow-soft);
332+
padding: 18px 20px;
333+
text-align: left;
334+
}
335+
336+
.snippet-card h3 {
337+
margin: 0 0 6px;
338+
font-size: 1.02rem;
339+
color: var(--ink);
340+
letter-spacing: -0.01em;
341+
}
342+
343+
.snippet-card p {
344+
margin: 0 0 12px;
345+
color: var(--ink-soft);
346+
font-size: 0.92rem;
347+
}
348+
349+
.snippet-card pre {
350+
margin: 0;
351+
}
352+
307353
.hero .eyebrow {
308354
display: inline-block;
309355
text-transform: uppercase;

0 commit comments

Comments
 (0)