feat(icons): add the nfs and jsbox icons

This commit is contained in:
2026-09-20 15:45:02 +02:00
parent 6b8aaff836
commit b1f6b3724a
3 changed files with 123 additions and 0 deletions
+4
View File
@@ -14,6 +14,8 @@ svg-assets/
├── icons/ finished icons, one per project
│ ├── gasm-devkit.svg
│ ├── interpres.svg
│ ├── jsbox.svg
│ ├── nfs.svg
│ ├── scripts.svg
│ ├── sourcedock.svg
│ ├── tensor.svg
@@ -144,6 +146,8 @@ yet.
| `icons/scripts.svg` | scripts, a DevOps toolbox of standalone Perl scripts |
| `icons/sourcedock.svg` | sourcedock.dev, the self-hosted Git forge where this whole set berths |
| `icons/interpres.svg` | interpres, TOML 1.0 parser for Go |
| `icons/nfs.svg` | nfs, a full NFSv4.2 implementation in pure Go, server and client |
| `icons/jsbox.svg` | jsbox, the zero-config development server for plain HTML, CSS and JavaScript |
## Licence
+54
View File
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512" role="img" aria-labelledby="title desc">
<title id="title">jsbox, the zero-config development server for plain HTML, CSS and JavaScript</title>
<desc id="desc">An open box seen from above on a yellow badge, its four lighter brown flaps flared outward like opened lid panels and a cream browser window seated in the mouth with a thin shadow gap, amber page lines and a cyan cursor.</desc>
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#FACC15"/>
<stop offset="1" stop-color="#A16207"/>
</linearGradient>
<radialGradient id="halo" cx="0.5" cy="0.5" r="0.5">
<stop offset="0" stop-color="#FEF9C3" stop-opacity="0.14"/>
<stop offset="0.6" stop-color="#FEF9C3" stop-opacity="0.05"/>
<stop offset="1" stop-color="#FEF9C3" stop-opacity="0"/>
</radialGradient>
<filter id="shadowOpenBox" x="-40%" y="-40%" width="180%" height="180%">
<feDropShadow dx="0" dy="9" stdDeviation="11" flood-color="#713F12" flood-opacity="0.45"/>
</filter>
</defs>
<rect width="512" height="512" rx="112" fill="url(#bg)"/>
<rect x="1.5" y="1.5" width="509" height="509" rx="110.5" fill="none" stroke="#FEF08A" stroke-width="3" opacity="0.5"/>
<circle cx="256" cy="256" r="225" fill="url(#halo)"/>
<g filter="url(#shadowOpenBox)">
<!-- lid flaps, flared outward toward the viewer, centred on x=256, y=256 -->
<g fill="#92400E">
<path d="M156 96 H356 L330 140 H182 Z"/>
<path d="M182 372 H330 L356 416 H156 Z"/>
<path d="M96 156 V356 L140 330 V182 Z"/>
<path d="M372 182 V330 L416 356 V156 Z"/>
</g>
<!-- box walls and mouth -->
<rect x="148" y="148" width="216" height="216" rx="26" fill="#78350F"/>
<rect x="164" y="164" width="184" height="184" rx="18" fill="#451A03"/>
<!-- the runtime seated in the mouth: a browser window -->
<g>
<rect x="170" y="170" width="172" height="172" rx="14" fill="#FFF7ED"/>
<path d="M170 184 A14 14 0 0 1 184 170 H328 A14 14 0 0 1 342 184 V204 H170 Z" fill="#78350F"/>
<g fill="#FFF7ED">
<circle cx="192" cy="187" r="5.5"/>
<circle cx="208" cy="187" r="5.5"/>
<circle cx="224" cy="187" r="5.5"/>
</g>
<g fill="#F59E0B">
<rect x="186" y="218" width="96" height="12" rx="6"/>
<rect x="186" y="242" width="134" height="12" rx="6"/>
<rect x="186" y="266" width="70" height="12" rx="6"/>
</g>
<rect x="186" y="292" width="12" height="16" rx="3" fill="#22D3EE"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+65
View File
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512" role="img" aria-labelledby="title desc">
<title id="title">nfs, a full NFSv4.2 implementation in pure Go</title>
<desc id="desc">A pale server cabinet on a sea-teal badge fanning solid link lines down to three client tiles, each carrying a small amber folder.</desc>
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#0D9488"/>
<stop offset="1" stop-color="#134E4A"/>
</linearGradient>
<radialGradient id="halo" cx="0.5" cy="0.5" r="0.5">
<stop offset="0" stop-color="#CCFBF1" stop-opacity="0.12"/>
<stop offset="0.6" stop-color="#CCFBF1" stop-opacity="0.04"/>
<stop offset="1" stop-color="#CCFBF1" stop-opacity="0"/>
</radialGradient>
<filter id="shadowServer" x="-40%" y="-40%" width="180%" height="180%">
<feDropShadow dx="0" dy="9" stdDeviation="11" flood-color="#042F2E" flood-opacity="0.45"/>
</filter>
</defs>
<rect width="512" height="512" rx="112" fill="url(#bg)"/>
<rect x="1.5" y="1.5" width="509" height="509" rx="110.5" fill="none" stroke="#5EEAD4" stroke-width="3" opacity="0.5"/>
<circle cx="256" cy="256" r="225" fill="url(#halo)"/>
<g filter="url(#shadowServer)">
<!-- link lines: one port, one fan, drawn first so shapes sit on top -->
<g fill="none" stroke="#99F6E4" stroke-width="8" stroke-linecap="round" opacity="0.8">
<path d="M256 318 V344"/>
<path d="M256 344 L144 362"/>
<path d="M256 344 L256 362"/>
<path d="M256 344 L368 362"/>
</g>
<!-- server cabinet -->
<g>
<rect x="180" y="104" width="152" height="214" rx="22" fill="#ECFDF5"/>
<g fill="#0F766E">
<rect x="204" y="134" width="76" height="14" rx="7"/>
<rect x="204" y="168" width="76" height="14" rx="7"/>
<rect x="204" y="202" width="76" height="14" rx="7"/>
<rect x="204" y="236" width="76" height="14" rx="7"/>
</g>
<circle cx="302" cy="141" r="7" fill="#22D3EE"/>
<g fill="#FBBF24">
<circle cx="302" cy="175" r="7"/>
<circle cx="302" cy="209" r="7"/>
<circle cx="302" cy="243" r="7"/>
</g>
<rect x="204" y="278" width="104" height="18" rx="9" fill="#0F766E"/>
</g>
<!-- three clients, each with an amber folder -->
<g>
<g fill="#ECFDF5">
<rect x="112" y="362" width="64" height="46" rx="12"/>
<rect x="224" y="362" width="64" height="46" rx="12"/>
<rect x="336" y="362" width="64" height="46" rx="12"/>
</g>
<g fill="#FBBF24">
<path d="M132 376 h10 l4 5 h10 a3 3 0 0 1 3 3 v11 a3 3 0 0 1 -3 3 h-24 a3 3 0 0 1 -3 -3 v-16 a3 3 0 0 1 3 -3 Z"/>
<path d="M244 376 h10 l4 5 h10 a3 3 0 0 1 3 3 v11 a3 3 0 0 1 -3 3 h-24 a3 3 0 0 1 -3 -3 v-16 a3 3 0 0 1 3 -3 Z"/>
<path d="M356 376 h10 l4 5 h10 a3 3 0 0 1 3 3 v11 a3 3 0 0 1 -3 3 h-24 a3 3 0 0 1 -3 -3 v-16 a3 3 0 0 1 3 -3 Z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB