Check and Windows preview / check (anvil) (push) Successful in 49s
Check and Windows preview / check (crucible) (push) Successful in 48s
Check and Windows preview / check (knurl) (push) Successful in 40s
Check and Windows preview / check (lathe) (push) Successful in 41s
Check and Windows preview / check (patina) (push) Successful in 56s
Check and Windows preview / check (rivet) (push) Successful in 45s
Check and Windows preview / check (temper) (push) Successful in 43s
Check and Windows preview / check (weld) (push) Successful in 1m20s
Check and Windows preview / previews (push) Successful in 1m15s
Check and Windows preview / windows (push) Successful in 2m31s
Astro site for the suite: a home page with the plugin cards, install steps, principles, the metalwork names and the ideas on the bench, one page per plugin, and the Impressum and privacy policy. Plugin names, versions, download links and editor previews come from the catalog, the wrapper manifests and docs/*/assets at build time. Served by unprivileged nginx in Docker behind Traefik on fl.narl.io, the same setup as proton.narl.io: no access logs, CSP 'self', no JavaScript, legal pages filled from the environment at start.
38 lines
930 B
Plaintext
38 lines
930 B
Plaintext
---
|
||
import { PLUGINS } from '../data/plugins';
|
||
import PluginCard from './PluginCard.astro';
|
||
---
|
||
|
||
<section id="plugins" class="section">
|
||
<div class="container">
|
||
<div class="section-head">
|
||
<p class="eyebrow">The plugins</p>
|
||
<h2>Cast, shaped and finished</h2>
|
||
<p>
|
||
Each plugin is a separate product with its own version, guide and release. Every download is a ZIP with one
|
||
<code>.clap</code> file and a checksum. The editor previews below are rendered from the plugins’ own code.
|
||
</p>
|
||
</div>
|
||
<ul class="grid" role="list">
|
||
{PLUGINS.map((plugin) => <PluginCard plugin={plugin} />)}
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<style>
|
||
.grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||
gap: 1.5rem;
|
||
margin: 0;
|
||
padding: 0;
|
||
list-style: none;
|
||
}
|
||
|
||
@media (max-width: 860px) {
|
||
.grid {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
}
|
||
</style>
|