Skip to content

Commit a277175

Browse files
committed
fix(site): article pages get the design system + responsive layout
about, blog, blog posts, docs index, docs pages, and the phonological layer page were raw markup with no .container (edge-to-edge text), ad-hoc font sizes, nonexistent CSS variables (--color-surface / --color-border fell back to off-brand hexes), 8px radii against the 1-2px ledger language, and no responsive behavior. Add a shared article layer to global.css (.page-hero eyebrow/headline/ deck + .prose with reading measure, rhythm, marker bullets, blockquote, and ledger tables) and convert all six pages to it. AsciiDoc bodies now get prose styling via a plain class instead of per-page :global blocks. Docs pages gain a contained grid with minmax(0,1fr) so long code lines no longer stretch the layout, and a sticky sidebar. Also fixes 17 more Astro whitespace-collapse sites the new permanent source-scan guard surfaced (api, compare, maps, scripts, phonological, about), and rewrites the 12 tests that asserted the fabricated NGA partnership into truth-asserting regression guards (no NGA/NSG-2021 anywhere, about lists v1's real supporters).
1 parent bf0e61f commit a277175

16 files changed

Lines changed: 504 additions & 410 deletions

src/pages/about.astro

Lines changed: 87 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -3,113 +3,101 @@ import Base from "../layouts/Base.astro"
33
---
44

55
<Base title="About — Interscript" description="Background, mission, and team behind Interscript.">
6-
<h1>About Interscript</h1>
6+
<div class="container">
7+
<header class="page-hero">
8+
<p class="eyebrow eyebrow-accent">About</p>
9+
<h1>About Interscript</h1>
10+
<p class="page-deck">
11+
One map format for every authority-backed romanization system —
12+
running in any language runtime.
13+
</p>
14+
</header>
715

8-
<section>
9-
<h2>Mission</h2>
10-
<p>
11-
Interscript exists to make transliteration between writing systems
12-
<strong>interoperable</strong>. Where most romanization tools
13-
implement one system or one authority, Interscript encodes the
14-
complete corpus of major authority-backed systems (BGN/PCGN, ISO,
15-
UN, ALA-LC, ODNI, ICAO, DIN, and others) using a single map format
16-
that runs in any language runtime.
17-
</p>
18-
</section>
16+
<div class="prose">
17+
<section>
18+
<h2>Mission</h2>
19+
<p>
20+
Interscript exists to make transliteration between writing systems <strong>interoperable</strong>. Where most romanization tools
21+
implement one system or one authority, Interscript encodes the
22+
complete corpus of major authority-backed systems (BGN/PCGN, ISO,
23+
UN, ALA-LC, ODNI, ICAO, DIN, and others) using a single map format
24+
that runs in any language runtime.
25+
</p>
26+
</section>
1927

20-
<section>
21-
<h2>Why it matters</h2>
22-
<p>
23-
Names, places, and historical records exist in dozens of scripts.
24-
Whether you're a librarian cataloguing foreign-language works, a
25-
government agency standardising romanisation, or a developer
26-
building multilingual search, you need predictable, auditable
27-
conversion. Interscript maps are checked into git, versioned, and
28-
independently testable against the published authority documents.
29-
</p>
30-
</section>
28+
<section>
29+
<h2>Why it matters</h2>
30+
<p>
31+
Names, places, and historical records exist in dozens of scripts.
32+
Whether you're a librarian cataloguing foreign-language works, a
33+
government agency standardising romanisation, or a developer
34+
building multilingual search, you need predictable, auditable
35+
conversion. Interscript maps are checked into git, versioned, and
36+
independently testable against the published authority documents.
37+
</p>
38+
</section>
3139

32-
<section>
33-
<h2>History</h2>
34-
<p>
35-
Interscript was started at Ribose in 2019 as a Ruby library and
36-
has since grown to include TypeScript and Python engines, a public
37-
reference site, and an optional phonological layer —
38-
<a href="/docs/phonological-layer">interscript-ml</a> (the
39-
contract and model zoo) run by the
40-
<a href="https://www.secryst.org">secryst</a> crystal family
41-
(Ruby · Python · TypeScript). The map corpus now exceeds 300
42-
systems.
43-
</p>
44-
</section>
40+
<section>
41+
<h2>History</h2>
42+
<p>
43+
Interscript was started at Ribose in 2019 as a Ruby library and
44+
has since grown to include TypeScript and Python engines, a public
45+
reference site, and an optional phonological layer — <a href="/docs/phonological-layer">interscript-ml</a> (the
46+
contract and model zoo) run by the <a href="https://www.secryst.org">secryst</a> crystal family
47+
(Ruby · Python · TypeScript). The map corpus now exceeds 300
48+
systems.
49+
</p>
50+
</section>
4551

46-
<section>
47-
<h2>The ecosystem</h2>
48-
<p>
49-
Interscript is deliberately layered. The core is deterministic
50-
maps and engines. When a map needs undiacritized text vocalized
51-
first, it dispatches to an optional crystal:
52-
</p>
53-
<ul>
54-
<li><strong>Maps + engines</strong> —
55-
<code>interscript-ruby</code>, <code>interscript-ts</code>,
56-
<code>interscript-py</code> — pure deterministic conversion.</li>
57-
<li><strong>Contract + zoo</strong> —
58-
<a href="https://github.com/interscript/interscript-ml">interscript-ml</a>
59-
— the <code>models.yaml</code> index, IMF&nbsp;v1 model format,
60-
and golden sets.</li>
61-
<li><strong>Crystals</strong> —
62-
<a href="https://www.secryst.org">secryst</a> (<code>gem secryst</code> · <code>pip install secryst</code> ·
63-
<code>npm i secryst</code>) — local ONNX inference implementing
64-
the contract. A crystal has no interscript dependency; an engine
65-
without a crystal simply cannot execute maps that declare a
66-
vocalization step.</li>
67-
<li><strong>Training</strong> —
68-
<a href="https://github.com/interscript/interscript-ml-train">interscript-ml-train</a>
69-
— teachers whose students enter the zoo.</li>
70-
</ul>
71-
</section>
52+
<section>
53+
<h2>The ecosystem</h2>
54+
<p>
55+
Interscript is deliberately layered. The core is deterministic
56+
maps and engines. When a map needs undiacritized text vocalized
57+
first, it dispatches to an optional crystal:
58+
</p>
59+
<ul>
60+
<li><strong>Maps + engines</strong> — <code>interscript-ruby</code>, <code>interscript-ts</code>, <code>interscript-py</code> — pure deterministic conversion.</li>
61+
<li><strong>Contract + zoo</strong> — <a href="https://github.com/interscript/interscript-ml">interscript-ml</a> — the <code>models.yaml</code> index, IMF&nbsp;v1 model format,
62+
and golden sets.</li>
63+
<li><strong>Crystals</strong> — <a href="https://www.secryst.org">secryst</a> (<code>gem secryst</code> · <code>pip install secryst</code> · <code>npm i secryst</code>) — local ONNX inference implementing
64+
the contract. A crystal has no interscript dependency; an engine
65+
without a crystal simply cannot execute maps that declare a
66+
vocalization step.</li>
67+
<li><strong>Training</strong> — <a href="https://github.com/interscript/interscript-ml-train">interscript-ml-train</a> — teachers whose students enter the zoo.</li>
68+
</ul>
69+
</section>
7270

73-
<section>
74-
<h2>Team</h2>
75-
<p>
76-
Interscript is an open-source project maintained by Ribose Inc.
77-
and a community of contributors. Source code is on
78-
<a href="https://github.com/interscript">GitHub</a>; issues and
79-
pull requests are welcome.
80-
</p>
81-
</section>
71+
<section>
72+
<h2>Team</h2>
73+
<p>
74+
Interscript is an open-source project maintained by Ribose Inc.
75+
and a community of contributors. Source code is on <a href="https://github.com/interscript">GitHub</a>; issues and
76+
pull requests are welcome.
77+
</p>
78+
</section>
8279

83-
<section>
84-
<h2>Supporters</h2>
85-
<p>
86-
The Interscript project has received extensive support from the
87-
following organizations and individuals, in no particular order:
88-
</p>
89-
<ul>
90-
<li>Prof. Lyubomir Ivanov (<a href="https://www.bas.bg">Bulgarian Academy of Sciences</a>)</li>
91-
<li><a href="https://www.usgs.gov/core-science-systems/ngp/board-on-geographic-names">U.S. Board on Geographic Names (BGN)</a></li>
92-
<li><a href="https://www.ogc.org">Open Geospatial Consortium (OGC)</a></li>
93-
<li><a href="https://www.calconnect.org">CalConnect</a></li>
94-
<li>The <a href="https://www.eki.ee/wgrs/">Working Group on Romanization Systems</a> of the <a href="https://unstats.un.org/unsd/ungegn/">United Nations Group of Experts on Geographical Names</a></li>
95-
<li><a href="https://www.icao.int">International Civil Aviation Organization (ICAO)</a></li>
96-
</ul>
97-
</section>
80+
<section>
81+
<h2>Supporters</h2>
82+
<p>
83+
The Interscript project has received extensive support from the
84+
following organizations and individuals, in no particular order:
85+
</p>
86+
<ul>
87+
<li>Prof. Lyubomir Ivanov (<a href="https://www.bas.bg">Bulgarian Academy of Sciences</a>)</li>
88+
<li><a href="https://www.usgs.gov/core-science-systems/ngp/board-on-geographic-names">U.S. Board on Geographic Names (BGN)</a></li>
89+
<li><a href="https://www.ogc.org">Open Geospatial Consortium (OGC)</a></li>
90+
<li><a href="https://www.calconnect.org">CalConnect</a></li>
91+
<li>The <a href="https://www.eki.ee/wgrs/">Working Group on Romanization Systems</a> of the <a href="https://unstats.un.org/unsd/ungegn/">United Nations Group of Experts on Geographical Names</a></li>
92+
<li><a href="https://www.icao.int">International Civil Aviation Organization (ICAO)</a></li>
93+
</ul>
94+
</section>
95+
</div>
96+
</div>
9897
</Base>
9998

10099
<style>
101-
section {
102-
margin: 2rem 0;
103-
}
104-
h2 {
105-
font-size: 1.4rem;
106-
margin-bottom: 0.5rem;
107-
}
108-
p {
109-
line-height: 1.7;
110-
color: var(--color-ink);
111-
}
112-
a {
113-
color: var(--color-brand);
100+
.container {
101+
padding-bottom: 2rem;
114102
}
115103
</style>

src/pages/api.astro

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,7 @@ const playgroundSystems = [
2121
<p class="eyebrow eyebrow-accent">API & playground</p>
2222
<h1>Try it. Copy the snippet. Ship.</h1>
2323
<p class="hero-deck">
24-
The Interscript REST API runs at <code>https://interscript.org/api/</code>
25-
— open to all, no auth, no rate limits (yet). Three endpoints:
26-
<code>/api/transliterate</code>, <code>/api/systems</code>,
27-
<code>/api/detect</code>. Or run the same engine locally in JS,
28-
TypeScript, Ruby, or your terminal.
24+
The Interscript REST API runs at <code>https://interscript.org/api/</code> — open to all, no auth, no rate limits (yet). Three endpoints: <code>/api/transliterate</code>, <code>/api/systems</code>, <code>/api/detect</code>. Or run the same engine locally in JS, TypeScript, Ruby, or your terminal.
2925
</p>
3026
<pre class="hero-curl"><code set:html={`# Live, no install needed:
3127
curl -G 'https://interscript.org/api/transliterate' \\

src/pages/blog.astro

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,65 +12,80 @@ const posts = renderAsciiDocDir("src/content/blog").map((p) => ({
1212
---
1313

1414
<Base title="Blog — Interscript" description="Articles on transliteration, the Interscript project, and adjacent topics.">
15-
<h1>Blog</h1>
16-
<p class="lead">Long-form articles on transliteration engineering and research.</p>
15+
<div class="container">
16+
<header class="page-hero">
17+
<p class="eyebrow eyebrow-accent">Blog</p>
18+
<h1>Blog</h1>
19+
<p class="page-deck">Long-form articles on transliteration engineering and research.</p>
20+
</header>
1721

18-
<ul class="post-list">
19-
{posts.map((p) => (
20-
<li>
21-
<a href={`/blog/${p.slug}`}>
22-
<span class="date">{p.date}</span>
23-
<span class="title">{p.title}</span>
24-
{p.author && <span class="author">by {p.author}</span>}
25-
<span class="summary">{p.summary}</span>
26-
</a>
27-
</li>
28-
))}
29-
</ul>
22+
<ul class="post-list">
23+
{posts.map((p) => (
24+
<li>
25+
<a href={`/blog/${p.slug}`}>
26+
<span class="date tnum">{p.date}</span>
27+
<span class="title">{p.title}</span>
28+
{p.author && <span class="author">by {p.author}</span>}
29+
<span class="summary">{p.summary}</span>
30+
</a>
31+
</li>
32+
))}
33+
</ul>
34+
</div>
3035
</Base>
3136

3237
<style>
33-
.lead {
34-
color: var(--color-stone);
35-
margin-bottom: 3rem;
38+
.container {
39+
padding-bottom: 3rem;
3640
}
3741
.post-list {
3842
list-style: none;
3943
padding: 0;
44+
max-width: 68ch;
4045
}
4146
.post-list li {
4247
border-bottom: 1px solid var(--color-rule);
4348
}
49+
.post-list li:first-child {
50+
border-top: 2px solid var(--color-ink);
51+
}
4452
.post-list a {
4553
display: block;
46-
padding: 1.5rem 0;
54+
padding: 1.5rem 0.25rem;
4755
text-decoration: none;
4856
color: var(--color-ink);
4957
}
5058
.post-list a:hover .title {
51-
color: var(--color-brand);
59+
color: var(--color-highlight);
60+
}
61+
.post-list a:focus-visible {
62+
outline-offset: -2px;
5263
}
5364
.date {
5465
display: block;
55-
color: var(--color-stone);
56-
font-size: 0.85rem;
57-
letter-spacing: 0.05em;
66+
font-family: var(--font-mono);
67+
font-size: var(--text-micro);
68+
letter-spacing: 0.12em;
69+
text-transform: uppercase;
70+
color: var(--color-stone-light);
5871
}
5972
.title {
6073
display: block;
61-
font-size: 1.2rem;
62-
font-weight: 600;
63-
margin: 0.25rem 0 0.5rem;
74+
font-family: var(--font-display);
75+
font-size: 1.375rem;
76+
letter-spacing: -0.01em;
77+
margin: 0.375rem 0 0.375rem;
6478
}
6579
.author {
6680
display: block;
6781
color: var(--color-stone);
68-
font-size: 0.9rem;
82+
font-size: var(--text-small);
6983
font-style: italic;
7084
margin-bottom: 0.5rem;
7185
}
7286
.summary {
7387
display: block;
7488
color: var(--color-stone);
89+
line-height: 1.6;
7590
}
7691
</style>

0 commit comments

Comments
 (0)