docs: tighten the site text and fold the about page into the index

This commit is contained in:
randogoth 2026-10-11 15:12:14 +03:00
parent 18ab5a91ad
commit 39269ca61b
5 changed files with 65 additions and 186 deletions

View file

@ -8,13 +8,13 @@ SPEC_DESCRIPTION = The Mews Profile specification, version 0.1.
site: site:
rm -rf build rm -rf build
mkdir -p build/spec build/dtd mkdir -p build/spec build/dtd
cp site/index.html site/about.html site/check.html build/ cp site/index.html site/check.html build/
cp mews-0.1.css build/mews-0.1.css cp mews-0.1.css build/mews-0.1.css
cp mews-0.1.css build/spec/mews-0.1.css cp mews-0.1.css build/spec/mews-0.1.css
cp dtd/mews-0.1.dtd dtd/xhtml-mobile12.dtd build/dtd/ cp dtd/mews-0.1.dtd dtd/xhtml-mobile12.dtd build/dtd/
uv run --script md2mews.py doc/SPEC.md -o build/spec/0.1.html --lang en \ uv run --script md2mews.py doc/SPEC.md -o build/spec/0.1.html --lang en \
--variant mews-cool --description "$(SPEC_DESCRIPTION)" --variant mews-cool --description "$(SPEC_DESCRIPTION)"
uv run mewslint.py --quiet build/index.html build/about.html build/check.html \ uv run mewslint.py --quiet build/index.html build/check.html \
build/spec/0.1.html build/spec/0.1.html
@echo "site built in build/" @echo "site built in build/"

View file

@ -109,7 +109,7 @@
# page that does not follow the spec cannot reach the server. # page that does not follow the spec cannot reach the server.
site = pkgs.runCommand "mews-site" { } '' site = pkgs.runCommand "mews-site" { } ''
mkdir -p $out/spec $out/dtd mkdir -p $out/spec $out/dtd
cp ${./site}/index.html ${./site}/about.html ${./site}/check.html $out/ cp ${./site}/index.html ${./site}/check.html $out/
cp ${./mews-0.1.css} $out/mews-0.1.css cp ${./mews-0.1.css} $out/mews-0.1.css
cp ${./mews-0.1.css} $out/spec/mews-0.1.css cp ${./mews-0.1.css} $out/spec/mews-0.1.css
cp ${./dtd/mews-0.1.dtd} $out/dtd/mews-0.1.dtd cp ${./dtd/mews-0.1.dtd} $out/dtd/mews-0.1.dtd
@ -121,7 +121,7 @@
--description ${lib.escapeShellArg specDescription} --description ${lib.escapeShellArg specDescription}
${app}/bin/mewslint --quiet \ ${app}/bin/mewslint --quiet \
$out/index.html $out/about.html $out/check.html $out/spec/0.1.html $out/index.html $out/check.html $out/spec/0.1.html
''; '';
} }
); );

View file

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>About Mews</title>
<meta name="mews-profile" content="0.1" />
<meta name="viewport" content="width=device-width" />
<meta name="description" content="How the Mews directory works, what this site keeps, and how to get in touch." />
<link rel="stylesheet" type="text/css" href="mews-0.1.css" />
</head>
<body class="mews-cool">
<h1>About Mews</h1>
<p>Mews Profile is a working draft. The format, the stylesheet and this
site are all version 0.1, which is to say I am still changing my mind
about parts of it, and the spec admits as much in its first paragraph.
What a given version promises is written down at
<a href="/spec/0.1" accesskey="1">mews.page/spec/0.1</a>, and it stays
there once published.</p>
<h2>How the directory works</h2>
<p>Anyone can submit an address. The page is fetched and put through both
of the checks in section 9.1: it has to validate against the Mews DTD, and
it has to follow the handful of rules a DTD can't express, like keeping
your images on your own site and the markup under 256 KB (and preferably
under 64). Pass both and
your site is listed at once, by nobody's leave but the checker's.</p>
<p>Listed sites are looked at again every week, and one whose page stops
conforming is dropped; since I hold no contact details there is nobody to
warn beforehand, so submit the fixed page and it is listed again
immediately. A site the checker simply can't reach gets a few days of
retries before it goes, because being down over a weekend isn't the same
as being wrong.</p>
<p>The checks say nothing whatsoever about what a site publishes, and they
can't: a page about anything at all can be flawless XHTML. So if a listing
here points at something abusive, write to me and it comes out.</p>
<h2>What this site keeps</h2>
<p>A submission stores the address you gave, the domain it belongs to,
what the checks found, and a salted hash of your IP address so that the
rate limits work. The salt is replaced every month, so last month's hashes
stop matching this month's, and raw addresses are never written down at
all.</p>
<p>Submissions and results are deleted after ninety days. No cookies,
nothing loaded from anywhere else, and no analytics, which given the
subject matter would have been embarrassing.</p>
<h2>Thanks</h2>
<p>The format rests on <em>XHTML Mobile Profile 1.2</em>, which the
<a href="/dtd/xhtml-mobile12.dtd">Open Mobile Alliance</a> finished in
March 2008 and which is still perfectly good. The stylesheet asks first
for <a href="https://www.brailleinstitute.org/freefont/"><em>Atkinson
Hyperlegible</em></a>, made free for anyone to use by the Braille
Institute of America, and then for
<a href="https://github.com/adobe-fonts/source-code-pro"><em>Source Code
Pro</em></a> by Paul D. Hunt. Neither is loaded from anywhere: if you have
them you see them, and if you don't, Verdana is waiting.</p>
<h2>Get in touch</h2>
<p>Bug reports, arguments about the spec, and sites that ought to be
listed and aren't:</p>
<address>hello@mews.page</address>
<hr />
<p>I would rather this stayed small: a format one person can implement in
a weekend, a directory you can read in a single sitting, and pages that
still open in 2046. If it grows much past that, something has gone
wrong.</p>
<p><a href="/" accesskey="0">Mews</a>
· <a href="/check" accesskey="2">Check a page</a>
· <a href="/directory" accesskey="3">The directory</a></p>
</body>
</html>

View file

@ -11,10 +11,10 @@
</head> </head>
<body class="mews-cool"> <body class="mews-cool">
<h1>Check a page</h1> <h1>Check a page</h1>
<p>Paste an address below. The checker fetches that page, validates it <p>Paste an address. The checker validates the page against the
against the <a href="/dtd/mews-0.1.dtd">Mews DTD</a>, reads your copy of <a href="/dtd/mews-0.1.dtd">Mews DTD</a>, reads your stylesheet and up to
the stylesheet and up to twenty of your images, and then lists every rule twenty images, and lists every rule it breaks with the section of the spec
the page breaks together with the section of the spec that explains it.</p> that explains it.</p>
<form action="/result" method="post"> <form action="/result" method="post">
<fieldset> <fieldset>
@ -25,37 +25,30 @@
</fieldset> </fieldset>
</form> </form>
<p><strong>Check page</strong> tells you what it found and keeps nothing. <p><strong>Check page</strong> reports and keeps nothing.
<strong>Check and list</strong> does the same and then, if the page passes, <strong>Check and list</strong> also puts your site in the
puts your site in the <a href="/directory" accesskey="4">directory</a>. <a href="/directory" accesskey="4">directory</a> if the page passes.
Either way it can take up to a minute, and there is no progress bar, Either way it takes up to a minute, with no progress bar, because that
because a progress bar wants JavaScript and that is the one thing a Mews would want JavaScript. Leave this page open and put the kettle on.</p>
page can't have. Leave this page open and go and put the kettle on.</p>
<h2>Doing it yourself</h2> <h2>Doing it yourself</h2>
<p>The same checks run on the command line, which is far less tedious <p>The same checks run on the command line, which is quicker while you
while you are still fixing things:</p> are still fixing things:</p>
<pre>uv run mewslint.py https://example.com/</pre> <pre>uv run mewslint.py https://example.com/</pre>
<p>It reads local files too, so you can check a page before anyone else <p>It reads local files too, so you can check a page before publishing
sees it, and I run it on this site as well: the build refuses to produce it. This site's own build refuses to produce mews.page if any of its pages
mews.page at all if one of its own pages stops conforming. That seemed stops conforming. That seemed only fair.</p>
only fair.</p>
<h2>What gets listed</h2> <h2>What gets listed</h2>
<p>One page per site, the one you hand me, and nobody reviews it: if the <p>One page per site, the one you submit, and nobody reviews it: it
page passes it goes in, and that is the whole of the trust model. A listed passes or it doesn't. Listed sites are rechecked every week, and there is
site is checked again every week, and one whose page stops conforming no address to warn you at. No account, no password to forget, and no
comes out of the directory without being asked twice.</p> warning either.</p>
<p>Fix it, submit it again, and it is back in straight away. I keep no
address to warn you at, which is the trade (no account, no password to
forget, and no warning either).</p>
<hr /> <hr />
<p>If the checker turns your page down over something the spec doesn't <p>A page turned down over something the spec doesn't say is a bug in the
actually say, that is a bug in my validator rather than a fault in your validator, not a fault in your page. Report it to the address on the
page, and I would like to hear about it.</p> <a href="/" accesskey="0">home page</a>.</p>
<p><a href="/spec/0.1" accesskey="5">The spec</a> <p><a href="/spec/0.1" accesskey="5">The spec</a></p>
· <a href="/about" accesskey="0">About this site</a></p>
</body> </body>
</html> </html>

View file

@ -10,35 +10,47 @@
<link rel="stylesheet" type="text/css" href="mews-0.1.css" /> <link rel="stylesheet" type="text/css" href="mews-0.1.css" />
</head> </head>
<body class="mews-cool"> <body class="mews-cool">
<h1>Mews</h1> <h1>the mews</h1>
<p>A <em>mews</em> is the lane round the back where the stables used to be: <p>A <em>mews</em> is the lane round the back where the stables were:
narrow, quiet, and not on the way to anywhere. The web could do with one of narrow, quiet, not on the way to anywhere. Small sites, plain words,
those. Small sites, plain words, nothing watching you read.</p> nothing watching.</p>
<p>This obviously isn't the first attempt to do so. The <p><a href="https://geminiprotocol.net/">Gemini</a>, <a href="https://portal.mozz.us/spartan/spartan.mozz.us/">Spartan</a>, the
<a href="https://indieweb.org/">IndieWeb</a> and small web crowd have made this case for way longer than I have. The usual answer is to go and build somewhere else, and the people doing it are right about the problem. <a href="https://indieweb.org/">IndieWeb</a> and the small web got there
<a href="https://geminiprotocol.net/">Gemini</a> has been at it since 2019, <a href="https://portal.mozz.us/spartan/spartan.mozz.us/">Spartan</a> trimmed even the TLS out of it, and I keep capsules on all of them.</p> first, and they are right about the problem. But a calmer web doesn't really need
a new protocol and a client nobody has.</p>
<p>Where I disagree is that it takes a new protocol, which means a new client, a new server, and a page hardly anybody can open from a link you send them. <p>There was already a standard cut back on purpose: <em>XHTML Mobile Profile
We already had a Web standard that was cut back on purpose, and cut back 1.2</em> aka. <em>WAP 2.0</em> is strict XML with no frames and basic tables, because a 2008
properly: a published spec, a DTD, and a few hundred million handsets to phone couldn't afford more. Mews takes out the scripts and styling too. The phones are still the excuse but this time the quiet is the point.</p>
test it against. <em>XHTML Mobile Profile 1.2</em> is strict XML built
from a fixed list of modules, with the desktop machinery left out of the
build: no frames, no iframes, no image maps, and basic tables instead of
the full set. It kept scripts and author stylesheets, because a phone in
2008 was expected to want them.</p>
<p>Mews goes further, for different reasons, and keeps the <em>MP</em>
while it is at it. Out go the scripting, style and object modules and the
event attributes; what is left is a choice rather than a hardware budget:
headings, paragraphs, lists, links, a few images, one stylesheet that
nobody gets to write, and nothing at all loaded from a server you don't
control. The phones were the excuse. The quiet is the point.</p>
<p><strong>Authors provide structure. Readers control <p><strong>Authors provide structure. Readers control
presentation.</strong> Every rule in the spec follows from that one line, presentation.</strong></p>
which in practice means I don't get to pick your typeface, your line width
or your colours, and you don't have to put up with mine.</p> <p>For viewing Mews pages in regular web browsers there is exactly one stylesheet, thirty-two colours and all, and you
don't write it: copy <a href="/mews-0.1.css" accesskey="4">mews-0.1.css</a>
onto your own site, link it, and leave it alone. Host your own copy rather
than linking this one.</p>
<h2>How the directory works</h2>
<p>Anyone can submit an address. The page is fetched, put through both of
the spec's checks, and listed at once if it passes. Nobody reviews it.</p>
<p>Listed sites are checked again every week, and one whose page stops
conforming is dropped. Submit the fixed page and it goes straight back in.
Being unreachable buys a few days first.</p>
<p>The checks say nothing about what a site publishes. Write to the
address below and a listing comes out.</p>
<h2>What this site keeps</h2>
<p>A submission stores the address you gave, its domain, the findings, and
a salted hash of your IP address for the rate limits, resalted monthly. Raw
addresses are never stored.</p>
<p>Everything is deleted after ninety days. No cookies, nothing loaded
from anywhere else, and no analytics, which given the subject matter would
have been embarrassing.</p>
<h2>Have a look round</h2> <h2>Have a look round</h2>
<ul> <ul>
@ -50,58 +62,8 @@
whose page passes.</li> whose page passes.</li>
</ul> </ul>
<h2>The whole page</h2>
<p>Here is a conforming Mews page, and not an excerpt either. The
lot:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head&gt;
&lt;title&gt;Signal Bars&lt;/title&gt;
&lt;meta name="mews-profile" content="0.1" /&gt;
&lt;link rel="stylesheet" type="text/css" href="mews-0.1.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Signal Bars&lt;/h1&gt;
&lt;p&gt;Notes on old phones and small screens.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>If that looks like 1999 to you, good.</p>
<h2>One stylesheet, thirty-two colours</h2>
<p>There is exactly one stylesheet, and you don't write it. Copy
<a href="/mews-0.1.css" accesskey="4">mews-0.1.css</a> onto your own site,
link it, and then leave it alone. It sets a readable column width, a light
theme and a dark one, and four palettes (warm, cool, green, and a
monochrome one that looks like an early phone screen) which you choose
between with a single class on the body. Every text colour in it clears
7:1 contrast against its background, which is a higher bar than most of
the web bothers with.</p>
<p>Host your own copy rather than linking mine. If every Mews site pointed
at one central file, that file's server would see a request for every page
anybody reads anywhere, and the whole business of loading nothing from
other sites would have been for nothing.</p>
<h2>The bits and pieces</h2>
<ul>
<li><a href="/mews-0.1.css">mews-0.1.css</a>, the stylesheet above.</li>
<li><a href="/dtd/mews-0.1.dtd">mews-0.1.dtd</a>, which is what the
checker validates against. Your browser should never fetch it, and
neither should a client.</li>
<li><a href="/dtd/xhtml-mobile12.dtd">xhtml-mobile12.dtd</a>, the
original from 2008, kept here so nobody has to go hunting for it.</li>
</ul>
<hr />
<p>This is a draft, version 0.1, and I am still changing my mind about
parts of it. The directory is new and nearly empty. But a page written to
these rules opens on a handset from 2006, in your browser today, and in
whatever is reading pages in twenty years, because there is almost nothing
left in it to break.</p>
<p>So: write something. Link to a neighbour. Leave the light on.</p> <p>So: write something. Link to a neighbour. Leave the light on.</p>
<p><a href="/about" accesskey="0">About this site</a></p>
<address>trl@posteo.net</address>
</body> </body>
</html> </html>