<feed xmlns='http://www.w3.org/2005/Atom'>
<title>progmaweb/ops/git/static, 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>Give git.progmasoft.com a phone layout</title>
<updated>2026-11-15T09:04:44+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-15T09:04:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=cf2b6c972c94c30a5d055ca9e24e81ed6b497ff3'/>
<id>cf2b6c972c94c30a5d055ca9e24e81ed6b497ff3</id>
<content type='text'>
On a phone the mirror pages were drawn 980 px wide and scaled down to
unreadable text (Android Chrome, desktop mode off): head.html had no
viewport meta, so the narrow-screen rules of progmasoft-git.css never
applied.

- head.html declares width=device-width, initial-scale=1.
- Below 720 px the page keeps a 12 px margin, and lists, files, diffs
  and preformatted text scroll inside their own box instead of widening
  the page.

Deployed to the server and checked with Playwright at 390 px (index,
summary, tree, log, file, commit): body text 15 px, no page overflow.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
On a phone the mirror pages were drawn 980 px wide and scaled down to
unreadable text (Android Chrome, desktop mode off): head.html had no
viewport meta, so the narrow-screen rules of progmasoft-git.css never
applied.

- head.html declares width=device-width, initial-scale=1.
- Below 720 px the page keeps a 12 px margin, and lists, files, diffs
  and preformatted text scroll inside their own box instead of widening
  the page.

Deployed to the server and checked with Playwright at 390 px (index,
summary, tree, log, file, commit): body text 15 px, no page overflow.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Add read-only Git mirrors on git.progmasoft.com</title>
<updated>2026-11-12T20:41:27+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-12T20:41:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=83e0ad4586d90bf02c3a5bfeb1ab92fd90e51703'/>
<id>83e0ad4586d90bf02c3a5bfeb1ab92fd90e51703</id>
<content type='text'>
git.progmasoft.com shows the public repositories under development
(tazel, tazelish, tazel.net, catch3, progmasoft-cpp, progmaweb, website)
as read-only mirrors with cgit, and serves clones over smart HTTP, such
as git clone https://git.progmasoft.com/tazel. GitHub stays where
development happens; private and archived repositories are not mirrored.

ops/git holds what runs on the server:

- cgitrc, the header, footer and stylesheet: the look of progmasoft.com
  (its tokens, the four-tile brand with "Git" beside it, the dark
  footer), light like its default, no scripts, no rendered READMEs.
- git-mirror.sh with git-mirror.service/.timer: every ten minutes, as
  gitmirror, branches and tags only from GitHub, pruned, the default
  branch followed, repacked with a bitmap when something changed.
- fcgiwrap@cgit drop-ins: cgit and git-http-backend run as cgit with
  systemd sandboxing (no network, read-only system, exposure 0.7), on
  a socket only nginx can open.
- selinux/progmasoft_cgit.te: fcgiwrap runs in httpd_t and the two
  CGIs move into git_script_t; the module allows only that move under
  the NoNewPrivileges that the sandboxing sets.
- nginx/git.conf: HSTS, a content security policy without scripts,
  per-address request and connection limits, 403 for receive-pack and
  the dumb protocol, buffered clones, and the inline handlers of cgit's
  menus removed.

ops/README.md describes the files, the labels, and why the name is not
behind the Cloudflare proxy: through it a clone of catch3 never reached
the client.

Deployed and checked live: every page answers 200, unknown ones 404,
full clones of tazel, progmaweb and catch3 work, a push answers 403,
no SELinux denials, no console errors, no horizontal scroll at 390 px.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
git.progmasoft.com shows the public repositories under development
(tazel, tazelish, tazel.net, catch3, progmasoft-cpp, progmaweb, website)
as read-only mirrors with cgit, and serves clones over smart HTTP, such
as git clone https://git.progmasoft.com/tazel. GitHub stays where
development happens; private and archived repositories are not mirrored.

ops/git holds what runs on the server:

- cgitrc, the header, footer and stylesheet: the look of progmasoft.com
  (its tokens, the four-tile brand with "Git" beside it, the dark
  footer), light like its default, no scripts, no rendered READMEs.
- git-mirror.sh with git-mirror.service/.timer: every ten minutes, as
  gitmirror, branches and tags only from GitHub, pruned, the default
  branch followed, repacked with a bitmap when something changed.
- fcgiwrap@cgit drop-ins: cgit and git-http-backend run as cgit with
  systemd sandboxing (no network, read-only system, exposure 0.7), on
  a socket only nginx can open.
- selinux/progmasoft_cgit.te: fcgiwrap runs in httpd_t and the two
  CGIs move into git_script_t; the module allows only that move under
  the NoNewPrivileges that the sandboxing sets.
- nginx/git.conf: HSTS, a content security policy without scripts,
  per-address request and connection limits, 403 for receive-pack and
  the dumb protocol, buffered clones, and the inline handlers of cgit's
  menus removed.

ops/README.md describes the files, the labels, and why the name is not
behind the Cloudflare proxy: through it a clone of catch3 never reached
the client.

Deployed and checked live: every page answers 200, unknown ones 404,
full clones of tazel, progmaweb and catch3 work, a push answers 403,
no SELinux denials, no console errors, no horizontal scroll at 390 px.
</pre>
</div>
</content>
</entry>
</feed>
