<feed xmlns='http://www.w3.org/2005/Atom'>
<title>progmaweb/apps/web/app, branch content/catch3-0.4.0</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>Merge branch 'main' into feature/product-catalog-like-apache</title>
<updated>2026-11-14T13:45:45+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-11-14T13:45:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=189d3c6d4fe99dc9c11bd4d45ef40ddc8b29e799'/>
<id>189d3c6d4fe99dc9c11bd4d45ef40ddc8b29e799</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Point product.progmasoft.com/robots.txt at its sitemap; drop unused text</title>
<updated>2026-11-14T13:44:19+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-14T13:44:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=800d828080426f781d374920c5623883844f80ca'/>
<id>800d828080426f781d374920c5623883844f80ca</id>
<content type='text'>
Review of this pull request:

- robots.txt on product.progmasoft.com named the apex sitemap; it names
  https://product.progmasoft.com/sitemap.xml now, as viget names its own.
- details and facts.links were translated in four languages but shown
  nowhere; they are gone.
- Stylelint (Codacy): one header comment block in catalog.css, no type
  qualifier on [aria-current], range notation in its media queries.

Codacy's "object injection" findings are left: every index is a key of a
typed, closed list (ProductSlug, categories, statuses), never input.
Playwright on a production build again: 56 page, language and width
combinations without overflow, console errors or CSP violations.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Review of this pull request:

- robots.txt on product.progmasoft.com named the apex sitemap; it names
  https://product.progmasoft.com/sitemap.xml now, as viget names its own.
- details and facts.links were translated in four languages but shown
  nowhere; they are gone.
- Stylelint (Codacy): one header comment block in catalog.css, no type
  qualifier on [aria-current], range notation in its media queries.

Codacy's "object injection" findings are left: every index is a key of a
typed, closed list (ProductSlug, categories, statuses), never input.
Playwright on a production build again: 56 page, language and width
combinations without overflow, console errors or CSP violations.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Describe Progmasoft without programming languages and compilers</title>
<updated>2026-11-14T13:33:47+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-14T13:33:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=638d81dc4d0cfe554ea952cae2f59ac70534976d'/>
<id>638d81dc4d0cfe554ea952cae2f59ac70534976d</id>
<content type='text'>
The footer of every page, the site description and the home page still
said that Progmasoft builds programming-language infrastructure,
languages and compilers. Since Tala and its tools are archived, they
describe what Progmasoft makes now, in all four languages:

- Footer: "Developer tools and data infrastructure built with durable
  contracts."
- Site and home description: build systems, testing tools, an agentic
  IDE and data infrastructure.
- Home hero: build systems, testing tools, agentic development
  environments, data infrastructure and the services around them.
- The area "Languages and compilers" becomes "Data infrastructure"
  (columnar in-memory formats and engines for large data on the JVM);
  "Developer tools" drops language servers for agentic development
  environments.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The footer of every page, the site description and the home page still
said that Progmasoft builds programming-language infrastructure,
languages and compilers. Since Tala and its tools are archived, they
describe what Progmasoft makes now, in all four languages:

- Footer: "Developer tools and data infrastructure built with durable
  contracts."
- Site and home description: build systems, testing tools, an agentic
  IDE and data infrastructure.
- Home hero: build systems, testing tools, agentic development
  environments, data infrastructure and the services around them.
- The area "Languages and compilers" becomes "Data infrastructure"
  (columnar in-memory formats and engines for large data on the JVM);
  "Developer tools" drops language servers for agentic development
  environments.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix what Playwright found at phone width; keep the header inside it</title>
<updated>2026-11-14T13:31:03+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-14T13:31:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=02b9cd891bdc5e2e2eb6ed4ffe6ef6272ff93b77'/>
<id>02b9cd891bdc5e2e2eb6ed4ffe6ef6272ff93b77</id>
<content type='text'>
Checked in Chromium through Playwright against a production build:
seven catalog pages, four languages, 1366 and 390 pixels wide, with the
console, CSP and horizontal overflow watched.

- The site header was 51 px wider than a 390 px phone on every host
  (progmasoft.com, account, viget and the catalog): the brand, the
  account button and the two preference controls did not fit. Below 480
  px the gaps shrink and the header may wrap to a second line; overflow
  is 0 on all of them now.
- .pm-catalog already named the dashed box of the home page, which
  framed the whole index; the index is .pm-index.
- Phone width: the four numbers sit two by two, the project column of
  the table keeps 200 px, and the index starts closer to the hero.
- A project's description goes into the hero, as before, instead of
  running into the heading of its list.

No console errors, no CSP violations, no overflow on any of the 56 page,
language and width combinations.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Checked in Chromium through Playwright against a production build:
seven catalog pages, four languages, 1366 and 390 pixels wide, with the
console, CSP and horizontal overflow watched.

- The site header was 51 px wider than a 390 px phone on every host
  (progmasoft.com, account, viget and the catalog): the brand, the
  account button and the two preference controls did not fit. Below 480
  px the gaps shrink and the header may wrap to a second line; overflow
  is 0 on all of them now.
- .pm-catalog already named the dashed box of the home page, which
  framed the whole index; the index is .pm-index.
- Phone width: the four numbers sit two by two, the project column of
  the table keeps 200 px, and the index starts closer to the hero.
- A project's description goes into the hero, as before, instead of
  running into the heading of its list.

No console errors, no CSP violations, no overflow on any of the 56 page,
language and width combinations.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Make product.progmasoft.com a catalog like projects.apache.org</title>
<updated>2026-11-14T13:21:48+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-14T13:21:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=fd5d1dfc8223dd660815ee7cca118507985ccc39'/>
<id>fd5d1dfc8223dd660815ee7cca118507985ccc39</id>
<content type='text'>
The catalog listed two products as cards. It now works as an index of
every Progmasoft project, in all four languages:

- The front page counts the projects (released, in development,
  languages), searches them by text, category, language and status with
  a plain GET form, so no script runs, and lists them in one table: name
  and tagline, category, language, status, latest release; then the
  latest releases.
- /categories and /languages group the projects; /releases lists the
  latest release of each, newest first, then those without one.
- A project page has a facts box as Apache's has: status, category,
  language, license, latest release, start date, site, repository and
  issues. A project in development heads its list "What it is being
  built to do" instead of "What it does".
- Agenceland, Archer and Etincelle join Tazel and Catch3, each marked in
  development; the archived Tala projects stay out of the catalog.
- product.progmasoft.com has a sitemap of its own: the views and every
  project page.

The data is in lib/products.ts (facts, search, releases) and the text in
lib/catalog-messages.ts; tsconfig allows .ts imports between lib files
so that node:test can load them. Tests: the five projects and their
facts, search by text, category, language and status, the query-string
parsing, and release order (42 pass); lint and tsc clean; every route
rendered by next dev with the product host, in de-DE, ru-RU and he-IL
(right to left) too.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The catalog listed two products as cards. It now works as an index of
every Progmasoft project, in all four languages:

- The front page counts the projects (released, in development,
  languages), searches them by text, category, language and status with
  a plain GET form, so no script runs, and lists them in one table: name
  and tagline, category, language, status, latest release; then the
  latest releases.
- /categories and /languages group the projects; /releases lists the
  latest release of each, newest first, then those without one.
- A project page has a facts box as Apache's has: status, category,
  language, license, latest release, start date, site, repository and
  issues. A project in development heads its list "What it is being
  built to do" instead of "What it does".
- Agenceland, Archer and Etincelle join Tazel and Catch3, each marked in
  development; the archived Tala projects stay out of the catalog.
- product.progmasoft.com has a sitemap of its own: the views and every
  project page.

The data is in lib/products.ts (facts, search, releases) and the text in
lib/catalog-messages.ts; tsconfig allows .ts imports between lib files
so that node:test can load them. Tests: the five projects and their
facts, search by text, category, language and status, the query-string
parsing, and release order (42 pass); lint and tsc clean; every route
rendered by next dev with the product host, in de-DE, ru-RU and he-IL
(right to left) too.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>List C, C++ and Objective-C packages on ViGet instead of Tala</title>
<updated>2026-11-10T00:19:15+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-10T00:19:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=a69b53d92b18a0ecd0d8710efbddd4799dc6a3e7'/>
<id>a69b53d92b18a0ecd0d8710efbddd4799dc6a3e7</id>
<content type='text'>
Tala and its tools are no longer developed as of 2026-11-10; Progmasoft
puts its work into Tazel, a build system for C, C++, Objective-C,
Objective-C++ and Zig. ViGet follows:

- /langs/tala is removed. /langs/c, /langs/cpp and /langs/objc are the
  language catalogs (Objective-C++ packages belong to /langs/objc), served
  by one page, app/viget/langs/[language], which knows only these three;
  any other language is 404. /langs leads to the language list on the
  ViGet home page.
- lib/viget-catalogs.ts: three open language catalogs with their own
  title, description and empty state in en-US, de-DE, ru-RU and he-IL; the
  Tazel catalog describes Tazel as the build system for C, C++,
  Objective-C, Objective-C++ and Zig.
- The ViGet home, header, footer and metadata name C, C++ and Objective-C;
  "Explore Tala" becomes "Explore Tazel" (tazel.net), and the footer links
  Tazel instead of Tala. The sitemap lists the three catalogs.
- Tests: the catalogs, their texts in every language, no text naming Tala,
  and the proxy routes.

pnpm test (37), lint, check and build pass; next start answers /langs/c,
/langs/cpp and /langs/objc with their pages, /langs/tala and /langs/zig
with 404, and /langs with 308 to the language list.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Tala and its tools are no longer developed as of 2026-11-10; Progmasoft
puts its work into Tazel, a build system for C, C++, Objective-C,
Objective-C++ and Zig. ViGet follows:

- /langs/tala is removed. /langs/c, /langs/cpp and /langs/objc are the
  language catalogs (Objective-C++ packages belong to /langs/objc), served
  by one page, app/viget/langs/[language], which knows only these three;
  any other language is 404. /langs leads to the language list on the
  ViGet home page.
- lib/viget-catalogs.ts: three open language catalogs with their own
  title, description and empty state in en-US, de-DE, ru-RU and he-IL; the
  Tazel catalog describes Tazel as the build system for C, C++,
  Objective-C, Objective-C++ and Zig.
- The ViGet home, header, footer and metadata name C, C++ and Objective-C;
  "Explore Tala" becomes "Explore Tazel" (tazel.net), and the footer links
  Tazel instead of Tala. The sitemap lists the three catalogs.
- Tests: the catalogs, their texts in every language, no text naming Tala,
  and the proxy routes.

pnpm test (37), lint, check and build pass; next start answers /langs/c,
/langs/cpp and /langs/objc with their pages, /langs/tala and /langs/zig
with 404, and /langs with 308 to the language list.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove Xide and ides.progmasoft.com</title>
<updated>2026-11-08T15:46:08+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-08T15:46:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=efa1f584205e93c292ea40b564d92a03f12ab33c'/>
<id>efa1f584205e93c292ea40b564d92a03f12ab33c</id>
<content type='text'>
Xide is no longer developed as of 2026-11-08 (Progmasoft/xide#29), so
Progmaweb stops presenting it:

- product.progmasoft.com: Xide leaves the catalog, its card and its
  detail page; /xide on the product host is a 404 like any unknown
  product. The catalog's description in every language names the Tala
  language with its tools and Catch3.
- ides.progmasoft.com served only the IDE list and the Xide page, so the
  whole site goes: the pages under app/ides, its texts in every
  language, idesRoute and its host in the proxy, and both nginx server
  blocks. The certificate of progmasoft.com no longer has to name it.

Tests: the catalog lists the remaining products and refuses xide.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Xide is no longer developed as of 2026-11-08 (Progmasoft/xide#29), so
Progmaweb stops presenting it:

- product.progmasoft.com: Xide leaves the catalog, its card and its
  detail page; /xide on the product host is a 404 like any unknown
  product. The catalog's description in every language names the Tala
  language with its tools and Catch3.
- ides.progmasoft.com served only the IDE list and the Xide page, so the
  whole site goes: the pages under app/ides, its texts in every
  language, idesRoute and its host in the proxy, and both nginx server
  blocks. The certificate of progmasoft.com no longer has to name it.

Tests: the catalog lists the remaining products and refuses xide.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'main' into feature/policies-consent</title>
<updated>2026-11-06T14:51:08+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-11-06T14:51:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=52047af6589b2729575523c1f4db61ea90a35d30'/>
<id>52047af6589b2729575523c1f4db61ea90a35d30</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Ask for the Privacy and Security Policies at registration</title>
<updated>2026-11-06T09:57:27+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-06T09:57:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=53fb8b8bde857025d12655ae53857fc30226b186'/>
<id>53fb8b8bde857025d12655ae53857fc30226b186</id>
<content type='text'>
progmasoft.com/privacy and progmasoft.com/security publish the two
policies in en-US, de-DE, ru-RU and he-IL, and the footer links both.
The Privacy Policy says what an account keeps and that Progmasoft keeps
an IP address for one purpose only: with a ViGet upload, to establish
where an upload that turns out to be malicious software came from and
to give it to the competent authorities. It says that no data, the IP
address included, is sold, rented or traded. The Security Policy covers
passwords, sessions, HTTPS, the ban on malicious software in ViGet and
how to report a weakness.

The registration form asks the person to accept both policies, and the
API refuses a registration without that acceptance, with a password
(acceptPolicies, a validation error of that field) or through Google:
the start of a Google registration without acceptPolicies=true goes
back to /register?google=policies-required, and the completion creates
no account unless the authentication state carries the current version.
An account keeps the version it accepted and the moment, in two new
columns that schema step 2 adds; accounts created before it keep null.
PolicyAcceptance.CurrentVersion and policyVersion on the web side name
the same date, and a web test reads the C# constant to keep them equal.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
progmasoft.com/privacy and progmasoft.com/security publish the two
policies in en-US, de-DE, ru-RU and he-IL, and the footer links both.
The Privacy Policy says what an account keeps and that Progmasoft keeps
an IP address for one purpose only: with a ViGet upload, to establish
where an upload that turns out to be malicious software came from and
to give it to the competent authorities. It says that no data, the IP
address included, is sold, rented or traded. The Security Policy covers
passwords, sessions, HTTPS, the ban on malicious software in ViGet and
how to report a weakness.

The registration form asks the person to accept both policies, and the
API refuses a registration without that acceptance, with a password
(acceptPolicies, a validation error of that field) or through Google:
the start of a Google registration without acceptPolicies=true goes
back to /register?google=policies-required, and the completion creates
no account unless the authentication state carries the current version.
An account keeps the version it accepted and the moment, in two new
columns that schema step 2 adds; accounts created before it keep null.
PolicyAcceptance.CurrentVersion and policyVersion on the web side name
the same date, and a web test reads the C# constant to keep them equal.
</pre>
</div>
</content>
</entry>
<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>
</feed>
