<feed xmlns='http://www.w3.org/2005/Atom'>
<title>progmaweb, branch docs/tazel-net-links</title>
<subtitle>The site and account service of Progmasoft: a Next.js frontend and an ASP.NET Core API.</subtitle>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/'/>
<entry>
<title>Link Tazel's site at tazel.net</title>
<updated>2026-11-06T06:44:08+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-06T06:44:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=ed8dc99ef0910ae9c9797918775d18786e0a9f1b'/>
<id>ed8dc99ef0910ae9c9797918775d18786e0a9f1b</id>
<content type='text'>
tazel.tala.run only redirects to tazel.net now. The product list and the
Tazel plugin catalog link the new address directly.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
tazel.tala.run only redirects to tazel.net now. The product list and the
Tazel plugin catalog link the new address directly.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #55 from Progmasoft/security/content-security-policy</title>
<updated>2026-11-06T06:32:28+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-11-06T06:32:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=8f18eba55a8980141bd7b989378cb557ae927e2e'/>
<id>8f18eba55a8980141bd7b989378cb557ae927e2e</id>
<content type='text'>
Give every page a Content-Security-Policy with its own nonce</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Give every page a Content-Security-Policy with its own nonce</pre>
</div>
</content>
</entry>
<entry>
<title>Give every page a Content-Security-Policy with its own nonce</title>
<updated>2026-11-06T05:05:21+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-06T05:05:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=c4fb3effa7f806c570771bb83c0ed6988006bc24'/>
<id>c4fb3effa7f806c570771bb83c0ed6988006bc24</id>
<content type='text'>
The pages of progmasoft.com and its hosts had no content security
policy. The proxy now creates a 128-bit nonce for every request and sends
the policy both ways: on the request, so that Next marks its own inline
scripts with the nonce, and on the response. The layout reads the nonce
for the theme bootstrap. Every page is rendered on demand already, so
none is served with a stale nonce.

Scripts may come from the host, carry the nonce, or be Cloudflare's Web
Analytics beacon from static.cloudflareinsights.com, which reports to
cloudflareinsights.com. 'strict-dynamic' is left out, because browsers
ignore host sources under it and the beacon is added by Cloudflare
without a nonce. Styles allow inline ones; objects, framing and other
base URLs are refused. There is no form-action: sign-in and OAuth
consent end in redirects to other hosts, loopback addresses included,
and browsers apply form-action to them. The development server also
gets 'unsafe-eval' for its hot reload.

Tests check the nonce and each directive; ARCHITECTURE.md describes the
policy.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The pages of progmasoft.com and its hosts had no content security
policy. The proxy now creates a 128-bit nonce for every request and sends
the policy both ways: on the request, so that Next marks its own inline
scripts with the nonce, and on the response. The layout reads the nonce
for the theme bootstrap. Every page is rendered on demand already, so
none is served with a stale nonce.

Scripts may come from the host, carry the nonce, or be Cloudflare's Web
Analytics beacon from static.cloudflareinsights.com, which reports to
cloudflareinsights.com. 'strict-dynamic' is left out, because browsers
ignore host sources under it and the beacon is added by Cloudflare
without a nonce. Styles allow inline ones; objects, framing and other
base URLs are refused. There is no form-action: sign-in and OAuth
consent end in redirects to other hosts, loopback addresses included,
and browsers apply form-action to them. The development server also
gets 'unsafe-eval' for its hot reload.

Tests check the nonce and each directive; ARCHITECTURE.md describes the
policy.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #53 from Progmasoft/feature/five-part-versions</title>
<updated>2026-11-01T17:20:46+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-11-01T17:20:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=35e09214817585007308bdbc26d877791843ab29'/>
<id>35e09214817585007308bdbc26d877791843ab29</id>
<content type='text'>
Accept plugin versions of up to five numbers</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Accept plugin versions of up to five numbers</pre>
</div>
</content>
</entry>
<entry>
<title>Accept plugin versions of up to five numbers</title>
<updated>2026-11-01T17:16:35+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-01T17:16:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=e85e2b2359518f83354c09f9f4a101b7779e6e9c'/>
<id>e85e2b2359518f83354c09f9f4a101b7779e6e9c</id>
<content type='text'>
Tazel takes A.B.C, then .D, .E and -METADATA if needed, so the descriptor
check follows it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Tazel takes A.B.C, then .D, .E and -METADATA if needed, so the descriptor
check follows it.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #52 from Progmasoft/feature/four-part-versions</title>
<updated>2026-11-01T15:43:38+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-11-01T15:43:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=8323e428c021642aaf898bfdefe3b3f4f8f1824b'/>
<id>8323e428c021642aaf898bfdefe3b3f4f8f1824b</id>
<content type='text'>
Accept plugin versions of four numbers</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Accept plugin versions of four numbers</pre>
</div>
</content>
</entry>
<entry>
<title>Accept plugin versions of four numbers</title>
<updated>2026-11-01T13:09:24+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-01T13:09:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=02662c79c1f2bcda974da9e1b0ed8c5ac92ee127'/>
<id>02662c79c1f2bcda974da9e1b0ed8c5ac92ee127</id>
<content type='text'>
Progmasoft's releases move to four numbers, and the plugins publish here.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Progmasoft's releases move to four numbers, and the plugins publish here.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #51 from Progmasoft/feature/site-icons</title>
<updated>2026-10-29T15:56:15+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-29T15:56:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=1d99f81ec96e05337e474dc84555def3a1bcf954'/>
<id>1d99f81ec96e05337e474dc84555def3a1bcf954</id>
<content type='text'>
Serve the Progmasoft mark as the site icon</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Serve the Progmasoft mark as the site icon</pre>
</div>
</content>
</entry>
<entry>
<title>Serve the Progmasoft mark as the site icon</title>
<updated>2026-10-29T15:25:16+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-29T15:25:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=6a87306ec5b972cbf18d76836a6df5d7828575ea'/>
<id>6a87306ec5b972cbf18d76836a6df5d7828575ea</id>
<content type='text'>
The sites declared no icon and /favicon.ico answered 404, so search
engines and assistants that show a site's icon (DuckDuckGo, ChatGPT)
fell back to a gray placeholder; the only copy of the mark was the BIMI
logo for mail.

The app now has the Next.js icon files, so every page links them:

- app/icon.svg: the four squares of the BIMI logo, cropped to the mark
  so it fills a browser tab, on a transparent field.
- app/favicon.ico: the same mark at 16, 32 and 48 pixels (PNG entries),
  for clients that ask for /favicon.ico without reading the page.
- app/apple-icon.png: 180 pixels on the white field of the BIMI logo,
  since iOS fills transparency with black.

The proxy rewrites paths per host, which would send /icon.svg on the
account, ViGet and the other hosts into their own page trees; the
matcher now skips the two new files as it already skipped favicon.ico,
so every Progmasoft host serves the same icons.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The sites declared no icon and /favicon.ico answered 404, so search
engines and assistants that show a site's icon (DuckDuckGo, ChatGPT)
fell back to a gray placeholder; the only copy of the mark was the BIMI
logo for mail.

The app now has the Next.js icon files, so every page links them:

- app/icon.svg: the four squares of the BIMI logo, cropped to the mark
  so it fills a browser tab, on a transparent field.
- app/favicon.ico: the same mark at 16, 32 and 48 pixels (PNG entries),
  for clients that ask for /favicon.ico without reading the page.
- app/apple-icon.png: 180 pixels on the white field of the BIMI logo,
  since iOS fills transparency with black.

The proxy rewrites paths per host, which would send /icon.svg on the
account, ViGet and the other hosts into their own page trees; the
matcher now skips the two new files as it already skipped favicon.ico,
so every Progmasoft host serves the same icons.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #50 from Progmasoft/feature/provision-reserved-accounts</title>
<updated>2026-10-29T13:34:29+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-29T13:34:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=6b4e5e403875d3648be383395f1dad50f0d6503d'/>
<id>6b4e5e403875d3648be383395f1dad50f0d6503d</id>
<content type='text'>
Provision the reserved accounts on the server</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Provision the reserved accounts on the server</pre>
</div>
</content>
</entry>
</feed>
