Skip to content

Commit 98c63ed

Browse files
committed
site: correct every use-it surface; plain language throughout
The /api page advertised the retired interscript.org/api endpoint in its curl hero and generated snippets (404 live; production is api.interscript.org/v1, POST JSON, open CORS) and showed a CDN import of the wrong package name with a strategy that cannot load the ISC-only maps endpoint. The npm card called bare transliterate() with no loader configured. The CLI section used a package and bin name that do not exist (interscript-ts; the bin is interscript) and could not have worked before 5.3.1 anyway - the CLI gained an ISC loader today. The home CTA's curl line fetched a .json the endpoint stopped serving. Every snippet now shows a verified command: the API examples against the live POST endpoint, the CDN/npm cards use the ISC strategy recipe (pinned 5.3.1, probed in a browser), the CLI examples run as shipped, and the new Python card states the one setup step it needs (a maps checkout). /ml adds the no-install paths (REST infer endpoint, the browser demo, the CDN recipe). Headlines rewritten in plain language per the house decision: 'Try it. Copy the snippet. Ship.' -> 'Try the API.', 'Where maps end, models begin' -> 'Neural models for what maps cannot cover', 'Every trap we fell into, now a rule' -> 'How we measure', '580M parameters against the frontier' -> 'Our results against the frontier', 'Measured, or it doesn't ship' -> 'Every number is measured'.
1 parent 3505c96 commit 98c63ed

4 files changed

Lines changed: 90 additions & 53 deletions

File tree

src/pages/api.astro

Lines changed: 64 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,20 @@ const playgroundSystems = [
1919
<section class="api-hero">
2020
<div class="container">
2121
<p class="eyebrow eyebrow-accent">API & playground</p>
22-
<h1>Try it. Copy the snippet. Ship.</h1>
22+
<h1>Try the API.</h1>
2323
<p class="hero-deck">
24-
The Interscript REST API runs at <code>https://interscript.org/api/</code> — open to all, no auth,
25-
no rate limits (yet). Three endpoints: <code>/api/transliterate</code>, <code
26-
>/api/systems</code
27-
>, <code>/api/detect</code>. Or run the same engine locally in JS, TypeScript, Ruby, or your
28-
terminal.
24+
The REST API runs at <code>https://api.interscript.org/v1</code>. No account, no API key.
25+
Send a POST request with a JSON body. Endpoints: <code>/transliterate</code> (one
26+
conversion), <code>/transliterate/batch</code> (many), <code>/systems</code> (the 289-system
27+
catalogue), <code>/detect</code> (which system explains a source–target pair), and
28+
<code>/infer</code> (neural models — diacritization and grapheme-to-phoneme). Responses
29+
allow cross-origin requests, so browser scripts can call the API directly.
2930
</p>
3031
<pre
31-
class="hero-curl"><code set:html={`# Live, no install needed:
32-
curl -G 'https://interscript.org/api/transliterate' \\
33-
--data-urlencode 'system=bgnpcgn-ukr-Cyrl-Latn-2019' \\
34-
--data-urlencode 'input=Антон'
35-
# → {"system":"bgnpcgn-ukr-Cyrl-Latn-2019","input":"Антон","output":"Anton",…}`} /></pre>
32+
class="hero-curl"><code set:html={`curl -X POST 'https://api.interscript.org/v1/transliterate' \\
33+
-H 'Content-Type: application/json' \\
34+
-d '{"system": "bgnpcgn-ukr-Cyrl-Latn-2019", "input": "Антон"}'
35+
# → {"system":"bgnpcgn-ukr-Cyrl-Latn-2019","input":"Антон","output":"Anton"}`} /></pre>
3636
</div>
3737
</section>
3838

@@ -55,9 +55,19 @@ curl -G 'https://interscript.org/api/transliterate' \\
5555
<h3>npm</h3>
5656
</header>
5757
<pre><code>npm install interscript</code></pre>
58-
<pre><code set:html={`import { transliterate } from "interscript"
58+
<pre><code set:html={`import {
59+
configure,
60+
iscStrategy,
61+
transliterateAsync
62+
} from "interscript"
63+
64+
configure({
65+
strategies: [
66+
iscStrategy({ baseUrl: "https://interscript.org/maps" })
67+
]
68+
})
5969
60-
const out = transliterate(
70+
const out = await transliterateAsync(
6171
"bgnpcgn-ukr-Cyrl-Latn-2019",
6272
"Антон"
6373
)
@@ -79,29 +89,49 @@ out = Interscript.transliterate(
7989
# → "Anton"`} /></pre>
8090
</article>
8191

92+
<article class="install-card">
93+
<header>
94+
<span class="runtime-badge">Python</span>
95+
<h3>pip</h3>
96+
</header>
97+
<pre><code>pip install interscript</code></pre>
98+
<pre><code set:html={`import os, interscript
99+
100+
# Point at a checkout of github.com/interscript/maps
101+
# (the pip package ships the engine, not the corpus):
102+
interscript.add_load_path(
103+
os.environ["INTERSCRIPT_MAPS_PATH"]
104+
)
105+
106+
print(interscript.transliterate(
107+
"bgnpcgn-ukr-Cyrl-Latn-2019", "Антон"
108+
))
109+
# → Anton`} /></pre>
110+
</article>
111+
82112
<article class="install-card">
83113
<header>
84114
<span class="runtime-badge">Browser</span>
85115
<h3>CDN</h3>
86116
</header>
87-
<pre><code>npm install interscript
88-
# or: https://esm.sh/interscript-ts</code></pre>
117+
<pre><code>No build step. Import from a CDN:</code></pre>
89118
<pre><code set:html={`import {
90-
transliterateAsync,
91-
httpStrategy,
92-
configure
93-
} from "https://esm.sh/interscript-ts"
119+
configure,
120+
iscStrategy,
121+
transliterateAsync
122+
} from "https://esm.sh/interscript@5.3.1"
94123
95124
configure({
96-
strategies: [httpStrategy({
97-
baseUrl: "https://interscript.org/maps"
98-
})]
125+
strategies: [
126+
iscStrategy({ baseUrl: "https://interscript.org/maps" })
127+
]
99128
})
100129
101130
const out = await transliterateAsync(
102131
"bgnpcgn-ukr-Cyrl-Latn-2019",
103132
"Антон"
104-
)`} /></pre>
133+
)
134+
// → "Anton Olehovych"`} /></pre>
105135
</article>
106136
</div>
107137
</div>
@@ -143,8 +173,9 @@ const out = await transliterateAsync(
143173
<p class="eyebrow">CLI &amp; CI</p>
144174
<h2>Transliterate from the terminal.</h2>
145175
<p class="section-deck">
146-
The <code>interscript-ts</code> CLI runs anywhere Node does — your laptop, a build pipeline,
147-
a GitHub Action. Same engine, same maps, same byte-for-byte output.
176+
The <code>interscript</code> CLI runs anywhere Node does — a laptop, a build pipeline,
177+
a GitHub Action. Maps load from interscript.org; no local checkout needed
178+
(npm package 5.3.1 or later). Same engine and same output as every other runtime.
148179
</p>
149180
</header>
150181

@@ -154,9 +185,9 @@ const out = await transliterateAsync(
154185
<span class="runtime-badge">CLI</span>
155186
<h3>Install</h3>
156187
</header>
157-
<pre><code>npm install -g interscript-ts
158-
# or use without installing:
159-
npx interscript-ts --help</code></pre>
188+
<pre><code>npm install -g interscript
189+
# or run it once without installing:
190+
npx interscript --help</code></pre>
160191
</article>
161192

162193
<article class="cli-card">
@@ -165,11 +196,11 @@ npx interscript-ts --help</code></pre>
165196
<h3>Single call</h3>
166197
</header>
167198
<pre><code set:html={`# Transliterate from stdin
168-
echo "Антон" | interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019
199+
echo "Антон" | interscript t bgnpcgn-ukr-Cyrl-Latn-2019
169200
# → Anton
170201
171202
# Or from a file
172-
interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019 \\
203+
interscript t bgnpcgn-ukr-Cyrl-Latn-2019 \\
173204
-i input.txt -o output.txt`} /></pre>
174205
</article>
175206

@@ -179,11 +210,11 @@ interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019 \\
179210
<h3>Batch (CSV)</h3>
180211
</header>
181212
<pre><code set:html={`# names.txt has one name per line
182-
interscript-ts b bgnpcgn-ukr-Cyrl-Latn-2019 \\
213+
interscript b bgnpcgn-ukr-Cyrl-Latn-2019 \\
183214
names.txt --csv > romanized.csv
184215
185216
# Or: list every BGN/PCGN Cyrillic system
186-
interscript-ts list --authority bgnpcgn \\
217+
interscript list --authority bgnpcgn \\
187218
--source-script Cyrl --maps-dir ./maps`} /></pre>
188219
</article>
189220

@@ -202,7 +233,7 @@ jobs:
202233
- uses: actions/checkout@v4
203234
- uses: actions/setup-node@v4
204235
with: { node-version: '20' }
205-
- run: npx interscript-ts@latest \\
236+
- run: npx interscript@latest \\
206237
b bgnpcgn-ukr-Cyrl-Latn-2019 \\
207238
names.txt --csv \\
208239
--http https://interscript.org/maps \\

src/pages/index.astro

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ for (const code of systemCodes) {
255255
<div class="container">
256256
<header class="section-head">
257257
<p class="eyebrow">The neural layer</p>
258-
<h2>Where maps end, models begin.</h2>
258+
<h2>Neural models for what maps cannot cover.</h2>
259259
<p class="section-deck">
260260
Some conversions have no authority document: restoring the diacritics a scribe left out,
261261
reading Thai or Urdu as phonemes. Those ship as checksummed neural artifacts under the
@@ -321,10 +321,10 @@ for (const code of systemCodes) {
321321
gem install interscript
322322

323323
# TypeScript / JavaScript
324-
npm install interscript-ts
324+
npm install interscript
325325

326-
# Or load a single map's IR directly
327-
curl interscript.org/maps/&lt;system-code&gt;.json</code></pre>
326+
# Or fetch a single map's source directly
327+
curl interscript.org/maps/&lt;system-code&gt;.isc</code></pre>
328328
</div>
329329
</div>
330330
</section>

src/pages/ml.astro

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ const clientModels = [
115115
<div class="container">
116116
<p class="eyebrow eyebrow-accent">The neural layer</p>
117117
<h1 class="page-headline">
118-
Where maps end,<br /><em>models</em> begin.
118+
Neural models for the<br /><em>conversions maps cannot cover</em>.
119119
</h1>
120120
<p class="hero-lead">
121121
The 289 authority-backed maps cover romanization systems that a committee has published.
@@ -134,7 +134,7 @@ const clientModels = [
134134
<div class="container">
135135
<header class="section-head">
136136
<p class="eyebrow">The catalogue</p>
137-
<h2>Every model, with its number.</h2>
137+
<h2>Every model, with its measured score.</h2>
138138
<p class="section-deck">
139139
The index resolves 23 models across five languages. No model is published without a
140140
measured metric next to its teacher's, on the same harness, in the open. Students are
@@ -211,8 +211,8 @@ const clientModels = [
211211
<section class="section surface-deep" id="leaderboard">
212212
<div class="container">
213213
<header class="section-head">
214-
<p class="eyebrow">The frontier, measured</p>
215-
<h2>580M parameters against the frontier.</h2>
214+
<p class="eyebrow">Measurements</p>
215+
<h2>Our results against the frontier.</h2>
216216
<p class="section-deck">
217217
SadeedDiac-25 — all 1,200 paragraphs, Misraj's own evaluator, windowed zero-skip
218218
protocol, one instrument for every row. Our dedicated 580M teacher is the best
@@ -364,7 +364,7 @@ const clientModels = [
364364
<div class="container contract-grid">
365365
<div>
366366
<p class="eyebrow">The instrument</p>
367-
<h2>Every trap we fell into, now a rule.</h2>
367+
<h2>How we measure.</h2>
368368
<p class="section-deck">
369369
Measurement discipline isn't ceremony — each of these rules exists because the naive
370370
version produced a wrong number we nearly shipped. They are why a number on this page
@@ -468,6 +468,13 @@ model.translate("สวัสดี")
468468
>SECRYST_CACHE</code
469469
>. Both are read at call time in all three runtimes.
470470
</p>
471+
<p class="env-note">
472+
Without installing anything: the same models answer the REST endpoint
473+
<code>POST https://api.interscript.org/v1/infer</code> (open CORS, no key), and run in the
474+
browser at <a href="/neural">the demo page</a>. In a script with no build step, the map
475+
layer loads from <a href="https://esm.sh/interscript@5.3.1">esm.sh</a> — full recipe in the
476+
package's <code>docs/CDN.md</code>.
477+
</p>
471478
</div>
472479
</section>
473480

@@ -478,7 +485,7 @@ model.translate("สวัสดี")
478485
<div class="container cta-grid">
479486
<div class="cta-text">
480487
<p class="eyebrow eyebrow-accent">Provenance</p>
481-
<h2>Measured, or it doesn't ship.</h2>
488+
<h2>Every number is measured.</h2>
482489
<p class="cta-deck">
483490
Teachers are frozen before distillation and never LLM-generated — language-model teachers
484491
hallucinate diacritics. Every number in the ledger links to a protocol in the open results

src/scripts/api-playground.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,13 @@ const state: State = {
4242
}
4343

4444
function snippetJs(s: State): string {
45-
return `import { transliterate } from "interscript"
45+
return `import { configure, iscStrategy, transliterateAsync } from "interscript"
4646
47-
const result = transliterate(
47+
configure({
48+
strategies: [iscStrategy({ baseUrl: "https://interscript.org/maps" })],
49+
})
50+
51+
const result = await transliterateAsync(
4852
"${s.system}",
4953
${JSON.stringify(s.input)}
5054
)
@@ -64,15 +68,10 @@ puts result
6468
}
6569

6670
function snippetCurl(s: State): string {
67-
return `# GET request — easy to test in any terminal
68-
curl -G 'https://interscript.org/api/transliterate' \\
69-
--data-urlencode 'system=${s.system}' \\
70-
--data-urlencode 'input=${s.input}'
71-
72-
# Or POST a JSON body:
73-
curl -X POST 'https://interscript.org/api/transliterate' \\
71+
return `curl -X POST 'https://api.interscript.org/v1/transliterate' \\
7472
-H 'Content-Type: application/json' \\
75-
-d '{"system": "${s.system}", "input": ${JSON.stringify(s.input)}}'`
73+
-d '{"system": "${s.system}", "input": ${JSON.stringify(s.input)}}'
74+
# → {"system":"${s.system}","input":${JSON.stringify(s.input)},"output":${JSON.stringify(s.output)}}`
7675
}
7776

7877
function render() {

0 commit comments

Comments
 (0)