167 lines
7.2 KiB
HTML
167 lines
7.2 KiB
HTML
<!doctype html>
|
|
<!-- SPDX-License-Identifier: AGPL-3.0-only -->
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="go-import" content="gamertan.com/sandwich-hime git https://gitea.speelman.ca/gamertan/sandwich-hime.git">
|
|
<meta name="go-source" content="gamertan.com/sandwich-hime https://gitea.speelman.ca/gamertan/sandwich-hime https://gitea.speelman.ca/gamertan/sandwich-hime/src/branch/main{/dir} https://gitea.speelman.ca/gamertan/sandwich-hime/src/branch/main{/dir}/{file}#L{line}">
|
|
<meta name="himesan-release-status" content="pre-release">
|
|
<meta name="description" content="Sandwich Hime is an HTML-first, PHP-feeling Go component compiler published as an unsupported pre-1.0 source preview.">
|
|
<meta name="theme-color" content="#251849">
|
|
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'self'; img-src 'self'; base-uri 'none'; form-action 'none'">
|
|
<title>Sandwich Hime — typed Go templates with a hand-built-web heart</title>
|
|
<link rel="stylesheet" href="./assets/site.css">
|
|
</head>
|
|
<body>
|
|
<a class="skip-link" href="#main">Skip to the sandwich</a>
|
|
|
|
<header class="masthead">
|
|
<div class="status-strip" role="status">
|
|
<span aria-hidden="true">◆</span>
|
|
Public pre-1.0 source preview — unsupported, no v1 release
|
|
<span aria-hidden="true">◆</span>
|
|
</div>
|
|
<div class="masthead-inner">
|
|
<p class="eyebrow">Gamertan dot com presents</p>
|
|
<pre class="wordmark" role="img" aria-label="Sandwich Hime">
|
|
╭────────────────────────╮
|
|
│ SANDWICH HIME-SAN │
|
|
╰──────────┬─────────────╯
|
|
HTML ♥ GO
|
|
</pre>
|
|
<h1>A tiny compiler for people who still want to touch the web.</h1>
|
|
<p class="lede">
|
|
Sandwich Hime turns one <code>.sando</code> component into ordinary,
|
|
reviewable Go. It aims for the immediacy of classic mixed markup,
|
|
while keeping typed data, contextual safety, and boring deployments.
|
|
</p>
|
|
<nav aria-label="Project destinations" class="button-row">
|
|
<a href="https://gitea.speelman.ca/gamertan/sandwich-hime">Canonical Gitea</a>
|
|
<a href="#status">Read the release status</a>
|
|
</nav>
|
|
<p class="mirror-note">
|
|
Source and contributions live only on canonical Gitea.
|
|
</p>
|
|
</div>
|
|
</header>
|
|
|
|
<main id="main">
|
|
<section class="panel code-panel" aria-labelledby="taste-heading">
|
|
<div>
|
|
<p class="sticker" aria-hidden="true">view source!</p>
|
|
<h2 id="taste-heading">A taste of <code>.sando</code></h2>
|
|
<p>
|
|
Markup is the main language. Go appears exactly where the page needs
|
|
it, and every rendered value is escaped for its known HTML context.
|
|
</p>
|
|
</div>
|
|
<pre class="code" tabindex="0" role="region" aria-label="Profile component template example"><code><?sando go
|
|
package views
|
|
|
|
func Profile(page ProfileView)
|
|
?>
|
|
<section class="profile">
|
|
<h1><?= page.Name ?></h1>
|
|
<? if page.IsAdmin { ?>
|
|
<?~ AdminBadge() ?>
|
|
<? } ?>
|
|
</section></code></pre>
|
|
</section>
|
|
|
|
<section class="panel" aria-labelledby="boundary-heading">
|
|
<h2 id="boundary-heading">Compiler at the workbench. Small runtime in production.</h2>
|
|
<div class="cards">
|
|
<article>
|
|
<h3><code>himesan</code></h3>
|
|
<p>
|
|
A globally installed development tool that checks, generates, and
|
|
supervises a local server. It does not own your router or app.
|
|
</p>
|
|
</article>
|
|
<article>
|
|
<h3><code>page.sando.go</code></h3>
|
|
<p>
|
|
Deterministic generated Go, committed beside its source so code
|
|
review and production builds do not need the compiler.
|
|
</p>
|
|
</article>
|
|
<article>
|
|
<h3><code>sando</code></h3>
|
|
<p>
|
|
A deliberately small Apache-2.0 runtime: components, error-aware
|
|
rendering, and stable escaping helpers—no production server.
|
|
</p>
|
|
</article>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="panel origin" aria-labelledby="origin-heading">
|
|
<div class="pixel-heart" aria-hidden="true">♥</div>
|
|
<div>
|
|
<h2 id="origin-heading">From a 2004 PSO game-club page, with love</h2>
|
|
<p>
|
|
The spirit is personal-site webmaking: open the file, understand the
|
|
page, change the page. Sandwich Hime is a love letter to a first
|
|
Geocities-era site last updated in 2004—rebuilt with the safety and
|
|
repeatability expected from a serious modern Go project.
|
|
</p>
|
|
<p>
|
|
The checkerboard, bevels, and tiny status lights are intentional.
|
|
The security model is also intentional.
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="panel" id="status" aria-labelledby="status-heading">
|
|
<h2 id="status-heading">Proof first. Release second.</h2>
|
|
<p>
|
|
Hime-san has no supported tagged public version yet. EQL Wiki is the
|
|
production proving ground, and v1 remains unreleased until the compiler,
|
|
runtime, development supervisor, and contextual escaping have durable
|
|
evidence behind them.
|
|
</p>
|
|
<ul class="checklist">
|
|
<li><span aria-hidden="true">◌</span> Cross-platform deterministic generation on Go 1.25 and 1.26</li>
|
|
<li><span aria-hidden="true">◌</span> Adversarial, fuzz, race, vulnerability, and accessibility gates</li>
|
|
<li><span aria-hidden="true">◌</span> EQL differential pilot and a clean 14-day production soak</li>
|
|
<li><span aria-hidden="true">◌</span> Working security contact and human-reviewed project policies</li>
|
|
<li><span aria-hidden="true">◌</span> Signed tags, checksums, SBOMs, binaries, and vanity paths</li>
|
|
</ul>
|
|
<p class="honesty-box">
|
|
No “fastest template engine” promises live here. Any performance claim
|
|
will ship with the hardware, commit, dataset, commands, latency, and
|
|
allocation results needed to reproduce it.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="panel names" aria-labelledby="names-heading">
|
|
<h2 id="names-heading">Please keep the name tags on the right guests</h2>
|
|
<dl>
|
|
<div><dt>Project</dt><dd>Sandwich Hime / Hime-san</dd></div>
|
|
<div><dt>Command</dt><dd><code>himesan</code></dd></div>
|
|
<div><dt>Template</dt><dd><code>page.sando</code></dd></div>
|
|
<div><dt>Runtime</dt><dd><code>sando</code></dd></div>
|
|
<div><dt>San language</dt><dd><code>.san</code>—reserved, separate, and never a Hime-san template</dd></div>
|
|
</dl>
|
|
<p>
|
|
“Hime” on its own already belongs to an unrelated Go framework. The
|
|
compound Sandwich Hime and Hime-san identity avoids stepping on it.
|
|
</p>
|
|
</section>
|
|
</main>
|
|
|
|
<footer>
|
|
<p>
|
|
<span aria-hidden="true">[</span>
|
|
Hand-built for the web by Gamertan
|
|
<span aria-hidden="true">]</span>
|
|
</p>
|
|
<p class="fine-print">
|
|
Unsupported pre-1.0 preview. Compiler sources are AGPL-3.0-only; the
|
|
nested runtime is Apache-2.0; copyable examples are 0BSD.
|
|
</p>
|
|
</footer>
|
|
</body>
|
|
</html>
|