The bundles carried all thirteen translations at once and a page fetched them a third time as raw source; each page now loads only its own language. Alongside that: JavaScript is minified, the eight stylesheets are served as one file, the QR scanner is fetched after the app is up instead of on every visit, Inter ships once rather than five copies of the same file, and Font Awesome is subset to the 82 icons this app draws instead of all 2468. 1.85 MB across 43 requests becomes under 700 KB across 33. On mobile the page starts drawing in 1.6 s instead of 6.3 s and is usable in 4.5 s instead of 11 s. Pages also carry their text in the HTML now. Everything was drawn by JavaScript into an empty div, so crawlers saw correct metadata around nothing, and twelve of the thirteen language pages had never been shown to anyone. The documentation is published under /docs/ with a new FAQ, and unknown addresses return a real 404. Separately: the localized shells were served with the year-long immutable cache header meant for static assets, which pinned anyone who opened /de/ or /ru/ to that build. The header is fixed and the service worker refreshes what it cached. Claude-Session: https://claude.ai/code/session_014KjzTXxrhzYoDDWChYQ4u2
34 lines
1.6 KiB
CSS
34 lines
1.6 KiB
CSS
/* Inter — self-hosted (latin + latin-ext subsets), served from this origin so the page
|
|
makes no request to fonts.gstatic.com.
|
|
|
|
Two files, not ten. This used to declare five weights per subset — 400, 500, 600, 700,
|
|
800 — each pointing at its own URL, and the browser dutifully fetched five of them:
|
|
245 KB, the second largest thing on the page after the app bundle. All five were the
|
|
same file. Inter here is a variable font with a wght axis from 100 to 900, so one file
|
|
answers for every weight; the five names were copies of it.
|
|
|
|
Declaring the range instead of a single value is what says so. Rendering is unchanged:
|
|
measured at 100px, "Handgloves" comes out 559.7 / 581.6 / 590.5 px at weights 400 / 700
|
|
/ 800 under either spelling, because the axis was already being applied — the five
|
|
files were never five weights, only five downloads. */
|
|
|
|
/* latin-ext */
|
|
@font-face {
|
|
font-family: 'Inter';
|
|
font-style: normal;
|
|
font-weight: 100 900;
|
|
font-display: swap;
|
|
src: url(files/inter-latin-ext.woff2) format('woff2');
|
|
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
}
|
|
|
|
/* latin */
|
|
@font-face {
|
|
font-family: 'Inter';
|
|
font-style: normal;
|
|
font-weight: 100 900;
|
|
font-display: swap;
|
|
src: url(files/inter-latin.woff2) format('woff2');
|
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
}
|