main
John Lauer Rev 2 write-up as an HTML sub-readme so the live 3D viewer embeds inline 776e420 12d ago
<!doctype html><html><head><meta charset="utf-8"><meta name="readme-max-height" content="60000"><meta name="viewport" content="width=device-width, initial-scale=1"><style>
  /* No @font-face here: the wiki renders README.html in a null-origin iframe,
     so adom.inc's font files fail CORS on every load and only add console
     noise. Fall back to the system stack, which the wiki chrome matches. */
  :root { --bg:#0d1117; --surface:#161b22; --elev:#1c2128; --border:#30363d;
           --text:#e6edf3; --body:#c9d1d9; --muted:#8b949e; --accent:#00b8b1; --purple:#8C6BF7; }
  * { box-sizing:border-box; margin:0; padding:0; }
  html,body { background:var(--bg); color:var(--body);
    font:15px/1.65 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
    scrollbar-width:none; }
  html::-webkit-scrollbar, body::-webkit-scrollbar { width:0; height:0; display:none; }
  #wrap { max-width:900px; margin:0 auto; padding:34px 22px 60px; }
  h1 { color:var(--text); font-size:40px; line-height:1.1; letter-spacing:-.02em; margin:0 0 10px; }
  h2 { color:var(--text); font-size:21px; letter-spacing:-.01em;
       margin:38px 0 12px; padding-bottom:7px; border-bottom:1px solid var(--border); }
  h3 { color:var(--text); font-size:16px; margin:22px 0 8px; }
  p { margin:0 0 13px; }
  .lede { font-size:17.5px; color:var(--text); margin-bottom:20px; }
  a { color:var(--accent); }
  code { font:13px/1.5 ui-monospace,"SF Mono",Menlo,Consolas,monospace;
         background:var(--elev); border:1px solid var(--border);
         border-radius:5px; padding:1px 5px; color:var(--text); }
  pre { background:var(--elev); border:1px solid var(--border); border-radius:10px;
        padding:14px 16px; overflow-x:auto; margin:0 0 16px; }
  pre code { background:none; border:0; padding:0; font-size:12.5px; line-height:1.6; }
  ul,ol { margin:0 0 14px; padding-left:22px; }
  li { margin:0 0 6px; }
  table { width:100%; border-collapse:collapse; margin:0 0 18px; font-size:13.5px; }
  th,td { text-align:left; padding:8px 11px; border-bottom:1px solid var(--border); vertical-align:top; }
  th { color:var(--muted); font-weight:600; white-space:nowrap; }
  td:first-child { color:var(--text); white-space:nowrap; }
  .viewer { border:1px solid var(--border); border-radius:12px; overflow:hidden;
             background:var(--surface); margin:22px 0 8px;
             box-shadow:0 12px 40px rgba(0,0,0,.45); }
  .viewer iframe { display:block; width:100%; height:620px; border:0; }
  .poster { display:block; width:100%; padding:0; border:0; background:none;
             cursor:pointer; position:relative; font:inherit; color:inherit; }
  .poster img { display:block; width:100%; height:auto; opacity:.55; transition:opacity .18s; }
  .poster:hover img { opacity:.75; }
  .play { position:absolute; inset:0; display:flex; flex-direction:column;
           align-items:center; justify-content:center; gap:6px; text-align:center; }
  .play b { background:var(--accent); color:#04120f; padding:10px 20px;
             border-radius:999px; font-size:15px; font-weight:700; }
  .play i { color:var(--text); font-style:normal; font-size:12.5px; opacity:.85; }
  .cap { color:var(--muted); font-size:13px; margin:0 0 26px; }
  .cap a { color:var(--accent); text-decoration:none; }
  .call { background:var(--surface); border:1px solid var(--border);
          border-left:3px solid var(--accent); border-radius:0 10px 10px 0;
          padding:14px 18px; margin:0 0 22px; color:var(--body); }
  .call b { color:var(--text); }
  .warn { border-left-color:var(--purple); }
  figure { margin:0 0 20px; }
  figure img { display:block; width:100%; height:auto; border-radius:10px;
               border:1px solid var(--border); background:#000; }
  figcaption { color:var(--muted); font-size:12.5px; margin-top:7px; }
  .grid2 { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
  @media (max-width:680px) { .grid2 { grid-template-columns:1fr; } }
  .muted { color:var(--muted); }

  iframe.live { display:block; width:100%; height:600px; border:1px solid var(--border); border-radius:12px;
                background:var(--surface); margin:8px 0 10px; box-shadow:0 12px 40px rgba(0,0,0,.45); }
  img { max-width:100%; height:auto; border-radius:10px; border:1px solid var(--border); margin:6px 0 14px; }
  table { display:block; overflow-x:auto; }
  blockquote { border-left:3px solid var(--accent); padding:4px 14px; margin:0 0 14px; color:var(--muted); }
</style></head>
</head><body><div id="wrap"><h1>Rev 2: 5 x 7 LED dot matrix</h1>
<p>Same idea as Rev 1, rebuilt around the one thing Rev 1 got wrong: legibility. Every letter is now
a 5 x 7 bitmap, so the N has a real diagonal. Along the way every part got a real manufacturer
part number from Adom's stocked reels, and the current came down under the USB-C default limit.</p>
<p><img src="https://wiki.adom.inc/adom/steven-led-nameplate/render/docs/img/steven-v2-hero.jpg" alt="Rev 2, 3D render of the assembled board" /></p>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>Status</td>
<td>Designed and verified in software. <strong>Not fabricated yet.</strong></td>
</tr>
<tr>
<td>Date</td>
<td>2026-09-23</td>
</tr>
<tr>
<td>Board</td>
<td>136.4 x 44.4 mm, 2 layer FR4, Adom molecule <code>136x44 absolute</code>, medium machine pins</td>
</tr>
<tr>
<td>Letters</td>
<td>94 white 0603 LEDs, 5 x 7 pixel font, 3 mm pitch, 3 mm letter gap, 105 mm of text</td>
</tr>
<tr>
<td>Power</td>
<td>USB-C on the east edge, 5 V, about 400 mA with every LED lit</td>
</tr>
<tr>
<td>Result</td>
<td>0 DRC errors, 98 of 98 nets connected, USB-C geometry on the guide's reference numbers</td>
</tr>
<tr>
<td>Parts</td>
<td>every line an <a href="https://wiki.adom.inc/adom/adom-basic-parts" target="_blank">Adom Basic Part</a> with an MPN</td>
</tr>
</tbody>
</table>
<h2>The board, live</h2>
<iframe class="live" loading="lazy" allow="fullscreen" src="https://wiki.adom.inc/adom/steven-led-nameplate/render/rev2/viewer/index.html" width="100%" height="560" title="Steven nameplate Rev 2, interactive 3D"></iframe>
<p>Orbit, zoom, hover any part for its refdes and net, x-ray the copper with the Nets panel, or run
the guided walkthrough. The PCB, Schematic and Parts tabs across the top are live too.
<a href="https://wiki.adom.inc/adom/steven-led-nameplate/render/rev2/viewer/index.html" target="_blank">Open full screen</a>.</p>
<h2>The question this revision asked</h2>
<p>Rev 1 showed that a 3 x 5 font cannot draw an N. Does a 5 x 7 font fix it, and can the same
AI pipeline still route a board with 60% more LEDs packed at a tighter pitch?</p>
<p>The request, verbatim, from John Lauer on 2026-09-23 after seeing Rev 1:</p>
<blockquote>
<p>can you make teh N for steven look more like an N? meaning the diagonal line in an N doesn't
come through very well in that board you made</p>
</blockquote>
<p>and on keeping Rev 1 rather than overwriting it:</p>
<blockquote>
<p>do a new one and keep the old one so steven can see the progression of ideas of his board
cuz they're all about running experiments and seeing evidence of each experiment</p>
</blockquote>
<h2>Method</h2>
<ol>
<li>
<p><strong>Font.</strong> A 5 x 7 bitmap per letter, taken from Adom's <code>evan-led-nameplate</code>, which had
already found that three columns cannot hold an N. The N diagonal walks column 1 to 2 to 3.
S, T, E and V were drawn the same way.</p>
<p><img src="https://wiki.adom.inc/adom/steven-led-nameplate/render/docs/img/n-glyph-rev1-vs-rev2.png" alt="3 x 5 N and H next to the 5 x 7 N" /></p>
</li>
<li>
<p><strong>Parts.</strong> White LED <code>IN-S63BT5UW</code> (Inolux), 470 ohm <code>CR0402-FX-4700GLF</code> per LED, 4.7 kohm
<code>CR0402-FX-4701GLF</code> CC pulldowns, 10 uF <code>CL21A106KOQNNNG</code> bulk and 100 nF <code>0402B104J160CT</code>
high-frequency decoupling, USB-C <code>TYPE-C-31-M-12</code> (LCSC C165948). All are stocked on Adom's
pick-and-place reels.</p>
</li>
<li>
<p><strong>Current budget.</strong> 94 LEDs at 330 ohm would draw about 560 mA, over the 500 mA a USB-C source
gives without negotiation. At 470 ohm each LED runs about 4.3 mA ((5 V - 3.0 V) / 470), so the
board draws about 400 mA.</p>
</li>
<li>
<p><strong>Board size.</strong> The code derives the board from the text: <code>BOARD_W = ceil((text + 30) / 2) * 2</code>,
so 105 mm of text gives a 136 mm board with 20 mm reserved for the USB-C zone. Changing the
name is a one-line edit (<code>TEXT</code>).</p>
</li>
<li>
<p><strong>USB-C placement.</strong> The guide's <code>W/2 - 4</code> assumes a nominal-size molecule. This board is
<em>absolute</em> sized, which puts the real edge 1 mm further out (W/2 + 0.2 mm wing). The first
build at <code>W/2 - 4</code> measured a 3.29 mm overhang and only 0.83 mm of board around the anchor
hole, so the connector moved to <code>W/2 - 5</code>.</p>
</li>
<li>
<p><strong>Schematic.</strong> Every symbol has explicit coordinates (LED and resistor pairs on a 10-column
grid) so the schematic is readable. The USB-C wrapper was extended only to forward <code>schX</code> and
<code>schY</code>, which the adom-usbc guide allows. Its footprint and 3D offsets are untouched.</p>
</li>
</ol>
<h2>Results</h2>
<h3>Negative results: routing a dense 5 x 7 grid</h3>
<p>At 3 mm pitch the resistor lives between two LED rows, which leaves the router very little room.</p>
<p>On tscircuit 0.0.1753 (the Rev 1 toolchain):</p>
<table>
<thead>
<tr>
<th>Layout</th>
<th>DRC errors</th>
<th>Nets split</th>
</tr>
</thead>
<tbody>
<tr>
<td>resistor 1.6 mm below, rotated 180 degrees</td>
<td>15</td>
<td>2</td>
</tr>
<tr>
<td>1.65 mm below, not rotated</td>
<td>1 (router ran out of iterations, 0 traces)</td>
<td>98</td>
</tr>
<tr>
<td>1.5 mm below, rotated</td>
<td>19</td>
<td>2</td>
</tr>
<tr>
<td>1.75 mm below, rotated</td>
<td>12</td>
<td>2</td>
</tr>
<tr>
<td>1.65 mm below, rotated</td>
<td>17</td>
<td>2</td>
</tr>
</tbody>
</table>
<p>None of these produced a working board, so the toolchain moved to tscircuit 0.0.2375, the version
<code>evan-led-nameplate</code> routed cleanly with. That router connected every net on the first try but
dropped a via inside a USB-C VBUS pad. Moving the four support parts (CC resistors and
decoupling) 1 mm left cleared it. Moving the USB-C for the edge fix then changed the routing
again, and a second sweep of the support-part position found the shipped layout:</p>
<table>
<thead>
<tr>
<th>Support parts at</th>
<th>DRC errors</th>
<th>Nets split</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>USB_X - 9</code></td>
<td><strong>0</strong></td>
<td><strong>0</strong> (shipped)</td>
</tr>
<tr>
<td><code>USB_X - 11</code></td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td><code>USB_X - 10</code>, resistor 1.65 mm below</td>
<td>4</td>
<td>0</td>
</tr>
<tr>
<td><code>USB_X - 12</code></td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
<p>The lesson worth keeping: tscircuit's DRC and <code>adom-tsci lint</code> never flagged a split net. Every
one of the &quot;0 errors, 1 split&quot; rows would have shipped a board with dark LEDs if the only check
had been DRC.</p>
<h3>Final numbers</h3>
<table>
<thead>
<tr>
<th>Check</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Components</td>
<td>197: 94 LEDs, 96 resistors, 2 capacitors, 1 USB-C, 4 machine pins</td>
</tr>
<tr>
<td>Routing</td>
<td>292 routed traces for 294 declared (the 2 are the merged same-net USB-C tabs), 92 vias</td>
</tr>
<tr>
<td>DRC errors in <code>circuit.json</code></td>
<td>0</td>
</tr>
<tr>
<td>Connectivity</td>
<td>98 of 98 nets, each one island</td>
</tr>
<tr>
<td>USB-C pad gap to edge</td>
<td>7.00 mm (guide reference 7.35, window 5 to 8)</td>
</tr>
<tr>
<td>USB-C anchor hole gap to edge</td>
<td>1.83 mm (guide reference 1.83)</td>
</tr>
<tr>
<td>USB-C mouth overhang</td>
<td>2.29 mm (guide reference 2.31)</td>
</tr>
<tr>
<td>USB-C pads / holes</td>
<td>12 / 6</td>
</tr>
<tr>
<td><code>adom-tsci lint</code></td>
<td>4 of 5 pass. The fifth is the four machine-pin symbols stacking in the schematic, a known limit of the molecule library that no board file can fix</td>
</tr>
</tbody>
</table>
<p><img src="https://wiki.adom.inc/adom/steven-led-nameplate/render/docs/img/steven-v2-top.jpg" alt="Rev 2 top view" /></p>
<h3>A viewer bug found along the way</h3>
<p>The adom-tsci preview re-bakes the 3D model at a higher texture resolution. With the newer
tscircuit's <code>circuit-json-to-gltf</code> the re-bake dropped the USB-C body (0 vertices), so the
connector showed as a flat white box. The board was fine. The fix was to serve the GLB that
<code>tsci export --format glb</code> produces, which carries the full 46,644-vertex receptacle, at the
cost of a 1024 px board texture instead of 2048.</p>
<h2>Reproduce this experiment</h2>
<h3>Tools used</h3>
<table>
<thead>
<tr>
<th>Tool</th>
<th>Version</th>
<th>What it did here</th>
<th>Get it</th>
</tr>
</thead>
<tbody>
<tr>
<td>Claude Code, in Adom's Hydrogen desktop</td>
<td>Claude Opus 5.5</td>
<td>The AI that wrote the board, ran every build and check, and wrote this page</td>
<td>Adom Hydrogen</td>
</tr>
<tr>
<td>bun</td>
<td>1.4.0</td>
<td>JavaScript runtime that runs tscircuit</td>
<td><code>curl -fsSL https://bun.sh/install | bash</code></td>
</tr>
<tr>
<td>tscircuit, @tscircuit/cli</td>
<td>0.0.2375 / 0.1.2134</td>
<td>Board description in TSX, autorouter, DRC, gerber and GLB export</td>
<td><code>bun install --frozen-lockfile</code> (pinned in <code>bun.lock</code>)</td>
</tr>
<tr>
<td>@tsci/adom-inc.molecule, @tsci/adom-inc.library</td>
<td>1.1.15 / 1.2.6</td>
<td>Adom molecule outline and corner machine pins</td>
<td>same, through the <code>.npmrc</code> registry <code>npm.tscircuit.com</code></td>
</tr>
<tr>
<td>adom-tsci</td>
<td>1.4.24</td>
<td>Live 3D / PCB / schematic preview, <code>lint</code>, gerber export, walkthrough, the viewer embedded on this page</td>
<td><code>adom-wiki pkg install adom/adom-tsci</code></td>
</tr>
<tr>
<td>adom-usbc guide</td>
<td>ships with adom-tsci</td>
<td>The USB-C wrapper (copied verbatim) and the edge checks</td>
<td><code>~/.claude/skills/adom-tsci/guides/adom-usbc.md</code></td>
</tr>
<tr>
<td><code>scripts/check-connectivity.py</code></td>
<td>this page</td>
<td>Geometric pad-trace-via connectivity per net; catches opens DRC misses</td>
<td>Python 3 standard library</td>
</tr>
<tr>
<td><code>scripts/sweep.sh</code></td>
<td>this page</td>
<td>Parallel layout sweep, reports DRC errors and split nets per variant</td>
<td>bash + bun</td>
</tr>
<tr>
<td><code>scripts/make-bom.py</code></td>
<td>this page</td>
<td>Real BOM and pick-and-place spliced into the gerber zip</td>
<td>Python 3 standard library</td>
</tr>
<tr>
<td>glb-datauri-textures.mjs, glb-make-zup.mjs</td>
<td>adom-tsci page</td>
<td>Makes the 3D models load in the wiki's sandbox and lie flat</td>
<td><code>https://wiki.adom.inc/adom/adom-tsci/render/scripts/</code></td>
</tr>
<tr>
<td>pup (Adom Bridge)</td>
<td></td>
<td>The renders on this page, shot in a background browser</td>
<td><code>adom-bridge pup_open_window</code></td>
</tr>
<tr>
<td>adom-wiki</td>
<td></td>
<td>Publishing this page</td>
<td>preinstalled on Adom containers</td>
</tr>
</tbody>
</table>
<h3>What actually ran, in order</h3>
<ol>
<li>Took the 5 x 7 font from <code>evan-led-nameplate</code> and wrote one parameterized <code>lib/index.tsx</code>
(name, board size, USB-C position and support parts all derived from <code>TEXT</code>).</li>
<li>Built on tscircuit 0.0.1753; swept four layouts; none connected every net.</li>
<li>Installed tscircuit 0.0.2375 in a scratch copy (with the <code>@tsci</code> registry in <code>.npmrc</code>),
rebuilt: every net connected, one via inside a USB-C pad. Swept the support-part position.</li>
<li>Ran <code>adom-tsci lint</code>; fixed the schematic by giving every symbol explicit <code>schX</code>/<code>schY</code>.</li>
<li>Ran the adom-usbc edge check; overhang was 3.29 mm because the board is absolute sized; moved
the connector 1 mm in and swept again (<code>scripts/sweep.sh</code>).</li>
<li><code>bunx tsci build lib/index.tsx --svgs --pcb-png --3d-png</code> and
<code>bunx tsci export lib/index.tsx --format glb</code> for the 3D model.</li>
<li><code>adom-tsci start</code>; found the preview's re-baked GLB had a 0-vertex USB-C; served the
tscircuit-exported GLB instead and confirmed the console had no placeholder.</li>
<li><code>adom-tsci export --format gerbers</code>, then <code>scripts/make-bom.py</code>.</li>
<li>Renders shot in a background pup window; this page built and published with <code>adom-wiki</code>.</li>
</ol>
<h3>Rebuild it yourself</h3>
<pre><code class="language-bash">adom-wiki repo download adom/steven-led-nameplate --extract ./steven
cd steven/rev2/source
bun install --frozen-lockfile          # pins tscircuit 0.0.2375, @tscircuit/cli 0.1.2134
bunx tsci build lib/index.tsx --svgs --pcb-png
bunx tsci export lib/index.tsx --format glb --output ../dist/lib/index/3d.glb
python3 scripts/check-connectivity.py  # expect: 98 nets checked, 0 split
</code></pre>
<p>Expected: 0 <code>*_error</code> entries in <code>dist/lib/index/circuit.json</code> and 292 routed traces. On a newer
tscircuit the router will route differently; rerun the connectivity check before trusting it.</p>
<p>To make one for someone else, change <code>TEXT</code> in <code>lib/index.tsx</code> and add any missing letters to
<code>FONT</code>. The board resizes itself. Rerun the build, the connectivity check and <code>adom-tsci lint</code>,
and sweep <code>PARTS_X</code> and <code>R_OFFSET</code> if a net splits. That is exactly how
<a href="https://wiki.adom.inc/adom/ellaine-led-nameplate" target="_blank">Ellaine's board</a> was made.</p>
<p>Live 3D: <a href="https://wiki.adom.inc/adom/steven-led-nameplate/render/rev2/viewer/index.html" target="_blank">the Rev 2 viewer</a>,
or the 3D Model view at the top of this page.</p>
<p>To fabricate: upload <code>rev2/fab/gerbers.zip</code> to a board house. The zip's
<code>bom.csv</code> and <code>pick_and_place.csv</code> carry real part numbers, replacing the empty stubs tscircuit
writes. Specify 1.6 mm FR4, 2 layers, any mask color.</p>
<h2>Outputs</h2>
<table>
<thead>
<tr>
<th>File</th>
<th>What it is</th>
<th>License</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>rev2/source/lib/index.tsx</code></td>
<td>The board, as tscircuit TSX, parameterized by <code>TEXT</code></td>
<td>MIT</td>
</tr>
<tr>
<td><code>rev2/source/lib/UsbCReceptacle.tsx</code></td>
<td>USB-C wrapper from the adom-usbc guide, plus schematic forwarding</td>
<td>MIT</td>
</tr>
<tr>
<td><code>rev2/source/scripts/check-connectivity.py</code></td>
<td>Geometric net connectivity check</td>
<td>MIT</td>
</tr>
<tr>
<td><code>rev2/source/package.json</code>, <code>bun.lock</code>, <code>.npmrc</code></td>
<td>Exact dependency pins</td>
<td>MIT</td>
</tr>
<tr>
<td><code>rev2/viewer/circuit.json</code></td>
<td>Complete circuit description</td>
<td>CC0</td>
</tr>
<tr>
<td><code>rev2/viewer/3d.glb</code>, <code>board.glb</code></td>
<td>3D models (Y-up for the viewer, Z-up for the wiki)</td>
<td>CC0</td>
</tr>
<tr>
<td><code>rev2/fab/gerbers.zip</code></td>
<td>Fabrication files with populated BOM and pick-and-place</td>
<td>CC0</td>
</tr>
<tr>
<td><code>rev2/fab/pcb.svg</code>, <code>schematic.svg</code></td>
<td>Layout and schematic drawings</td>
<td>CC0</td>
</tr>
<tr>
<td>this document</td>
<td>Method, results, negative results</td>
<td>CC BY 4.0</td>
</tr>
</tbody>
</table>
<h2>Provenance</h2>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>Requested by</td>
<td>John Lauer, Adom Industries</td>
</tr>
<tr>
<td>Designed by</td>
<td>Claude Opus 5.5 (Anthropic), in Claude Code inside Adom's Hydrogen desktop</td>
</tr>
<tr>
<td>Toolchain</td>
<td>tscircuit 0.0.2375, @tscircuit/cli 0.1.2134, @tsci/adom-inc.molecule 1.1.15, @tsci/adom-inc.library 1.2.6, adom-tsci 1.4.24, bun 1.4.0</td>
</tr>
<tr>
<td>Built on</td>
<td>Rev 1 of this page, and the 5 x 7 font from Adom's <code>evan-led-nameplate</code></td>
</tr>
<tr>
<td>Human review</td>
<td>John Lauer, 2026-09-23</td>
</tr>
</tbody>
</table>
<p>Contributor roles (<a href="https://credit.niso.org/" target="_blank">CRediT</a>): John Lauer, conceptualization and
supervision. Claude (AI), design, software, validation, writing.</p>
<h2>Funding</h2>
<p>The node is funded by the U.S. National Science Foundation PCL Test Bed program
(<a href="https://ror.org/021nxhr62" target="_blank">ROR 021nxhr62</a>). Made as a worked example of open publishing for the
Astera Institute (<a href="https://ror.org/00ydx1s47" target="_blank">ROR 00ydx1s47</a>); Astera did not fund it.</p>
</div><script>
(function(){var w=document.getElementById('wrap'),last=0;function post(){var h=w.offsetHeight+24;if(h!==last){last=h;parent.postMessage({type:'readme-height',height:h},'*');}}
post();addEventListener('load',post);addEventListener('resize',post);
document.querySelectorAll('img,iframe').forEach(function(e){e.addEventListener('load',post)});
if(window.ResizeObserver)new ResizeObserver(post).observe(w);[100,400,1200,3000].forEach(function(t){setTimeout(post,t)});})();
</script></body></html>