Bilingual project universe for Claudiu Schuster — static website, editable social-preview generator, self-hosted assets and reproducible build.
  • Python 33.7%
  • JavaScript 21.7%
  • CSS 20.7%
  • HTML 20.7%
  • Shell 2.7%
  • Other 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-10 21:02:27 +00:00
.openai fix: keep language switching on the canonical root URL 2026-10-10 20:53:47 +00:00
artwork Update Site source 2026-10-10 14:48:48 +02:00
docs fix: keep language switching on the canonical root URL 2026-10-10 20:53:47 +00:00
public fix: keep language switching on the canonical root URL 2026-10-10 20:53:47 +00:00
scripts fix: keep language switching on the canonical root URL 2026-10-10 20:53:47 +00:00
vendor/claudiuschuster.de Update Site source 2026-10-10 14:48:48 +02:00
worker fix: keep language switching on the canonical root URL 2026-10-10 20:53:47 +00:00
.gitignore fix: keep language switching on the canonical root URL 2026-10-10 20:53:47 +00:00
Makefile fix: keep language switching on the canonical root URL 2026-10-10 20:53:47 +00:00
README.md fix: keep language switching on the canonical root URL 2026-10-10 20:53:47 +00:00
requirements-build.txt Update Site source 2026-10-10 14:48:48 +02:00
site.config.json seo: link ClaudiuSchuster alias to the existing person identity 2026-10-10 18:17:07 +00:00

Claudiu Schuster — Project Universe

Responsive, bilingual portfolio for four linked projects. HTML, CSS and JavaScript; all presentation assets, fonts and social images are hosted with the Site. The source builder regenerates the social cards and the German default page whenever content changes. English is selected within the same page.

Published Site: https://chatgpt.claudiuschuster.de/

Both languages use this one canonical URL.

Content

  • oss-oo.io: independent, self-hosted git laboratory for humans and AI agents.
  • oss-singularity.io: shared work, missions, and open-source community.
  • claudiuschuster.de: personal portfolio.
  • 22g.de: tisabur agent identity.

Project filters, native project-detail dialogs, DE/EN switching, mobile navigation, reduced-motion support, keyboard focus states and print styles are included. The language button updates the existing text, html.lang and language-dependent metadata without changing the URL, canonical or og:url. The choice is stored in sessionStorage for the current tab and restored on reload; unavailable storage does not prevent switching. Incoming legacy ?lang=en links still select English and are cleaned in the browser, but no such links are generated. Without JavaScript, the complete German page and ordinary links to the four domains remain usable.

Regenerate the social preview

The active PNG renderer is copied and adapted from the renderer in claudiuschuster.de. The PNG fingerprint and dimension helpers are adapted from its production builder. The original renderer, MIT license and pinned source links are in vendor/claudiuschuster.de/.

Build dependencies

  • Python 3.10 or newer, Node.js 18 or newer, Bash and Make.
  • FontTools, pinned in requirements-build.txt.
  • ImageMagick (magick or convert).
  • librsvg (rsvg-convert) or Inkscape. The renderer prefers librsvg and falls back to Inkscape.

Install the Python dependency in your usual virtual environment:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements-build.txt
make build
make check

make build generates both social SVGs, renders both 1200 × 630 social PNGs, gives each social PNG a filename containing the first 12 characters of its SHA-256 digest, rebuilds the favicons, and updates the HTML, canonical links, Open Graph/Twitter metadata, robots file and sitemap. No network downloads occur during a build. Commit the changed source and generated assets under public/ together. The deployable Worker artifact under dist/ is generated and ignored.

What to change Source
Headline on the page and card translations.de.heroTitle / translations.en.heroTitle in public/app.js; retain three lines separated by <br> for the card layout
Card eyebrow and short tagline socialEyebrow / socialTagline in each translation
Social description and image alternative text socialDescription / socialAlt in each translation
Project names and domains on the card projectDetails in public/app.js
Project labels on the card and orbital graphic orbitLab, orbitHuman, orbitSingularity, orbitAgent in each translation
Canonical origin, title, author, card monogram and brand label site.config.json
Composition, colours, spacing and typography of the card scripts/create_social_art.py
Page structure, project card markup and original illustrations public/index.html

The generated SVGs live in artwork/. Their lettering is outlined using the bundled fonts so it renders without font downloads or system-font substitution. Each text path retains a data-text label for inspection. Longer strings are fitted to their allotted width; an unsupported character reports which font subset needs extending. Edit the source fields above, because a build replaces generated SVGs.

make render-social-preview regenerates only the SVG/PNG files and image manifest. Run make build for normal content changes so HTML image URLs stay synchronized. make check validates the root page, language controls and script behavior, required metadata, PNG dimensions, fingerprints, local references, the single-URL sitemap, robots and the 404 document. The same command builds and exercises the Worker HTTP contract; actual production delivery is checked after deployment. Previously generated hash-named PNGs are retained so existing cached cards keep a valid asset URL. Byte reproducibility assumes the same renderer and dependency versions; a different renderer may produce a different valid content hash.

The adapted shell renderer also preserves the upstream optional circular portrait treatment:

bash scripts/render_social_preview.sh INPUT.svg OUTPUT.png OPTIONAL_PROFILE.png

The portfolio's default artwork uses its own monogram and does not require a portrait. Both published cards are opaque PNGs, and every image URL is absolute HTTPS. The HTML includes og:image:secure_url, MIME type, dimensions and alternative text, plus twitter:card=summary_large_image. No social-account handle is invented.

Favicons

The homepage declares the stable /assets/favicon.png URL as a 96 × 96 PNG for both language selections. The conventional /favicon.ico fallback contains 16, 32, 48 and 64 pixel images. These are rendered directly from the unchanged public/assets/favicon.svg artwork with the existing SVG renderer and ImageMagick dependencies; no external assets are fetched.

Run make favicons to rebuild only the icons, followed by make check to validate their dimensions, file structure, page links and crawl permissions. The build strips generated metadata; byte reproducibility assumes the same renderer and dependency versions. Keep the icon URLs stable. Google controls when a favicon appears in search results, even after it has recrawled the homepage.

Search Console

Submit https://chatgpt.claudiuschuster.de/sitemap.xml in the appropriate Search Console property. It contains only the canonical homepage, without language alternatives; https://chatgpt.claudiuschuster.de/robots.txt advertises the same sitemap. Both are regenerated from the shared origin. The head contains one root canonical and no hreflang links.

Language switching requires JavaScript; the crawlable default is German. The Worker permanently redirects the former English paths /en, /en/ and /en/index.html to the root URL with HTTP 301. The /index.html alias also redirects to root. Do not include them in navigation or the sitemap, and do not block their redirects in robots.txt. Unknown paths return the bilingual public/404.html document with HTTP 404; its noindex also excludes a direct fetch. Its existing language links both target root and remember the selected language before normal navigation. Confirm initial redirect statuses, headers and Google accessibility after publication.

This single-URL choice keeps English available as an interface language, without a separately indexable English page. Earlier Google entries are migrated through permanent redirects and Google's subsequent processing; an immediate disappearance from search results is not guaranteed.

See the Search Console preparation and handoff for property selection, exact URLs, live checks, verification limits and the workflow for diagnosing the user's other sites.

Hosting artifact

The existing Sites project uses the supported Worker ESM deployment format so legacy language URLs can return real permanent HTTP redirects. public/ contains the authored page and its local assets. scripts/build_worker.py embeds their exact bytes into dist/server/index.js and copies the project manifest to dist/.openai/hosting.json. No external requests, runtime filesystem, dependencies or account data are needed. The source manifest has no competing static-site declaration.

Run make worker to package existing assets, or make build to regenerate the social assets and package them. make check checks language behavior and metadata, rebuilds the Worker, and checks all asset bytes and content types, GET/HEAD, cache validation, exact legacy redirects and real noindex 404s. Publish this artifact through the existing Sites project and source workflow; retain its project ID and public audience. Do not publish public/ as a second static site, which would lose the redirect contract.

Sources checked on 2026-10-10

Telegram, email and legal links were verified against the official websites. Code links lead to oss-oo, the active development platform identified by the personal GitHub profile (https://github.com/ClaudiuSchuster). The SVG project illustrations are original editorial graphics, not replicas of the projects' original brand marks. Official asset downloads returned HTTP 403; no unavailable image dependencies are used.

Structure

  • public/index.html: semantic content and vector illustrations.
  • public/styles.css: typography, layout, responsive rules and print treatment.
  • public/app.js: translations, filtering, dialog and navigation behavior.
  • public/language-preference.js: guarded per-tab preference and 404 language selection.
  • public/sitemap.xml, public/robots.txt: generated search discovery files.
  • public/404.html: bilingual error page, excluded from indexing.
  • public/assets/social/: generated content-hashed PNG cards.
  • public/assets/fonts/: subset URW Base35 WOFF fonts and their license.
  • artwork/: generated SVG cards and the image manifest.
  • scripts/: image generation, copied/adapted PNG renderer and fingerprints, metadata generation, validation.
  • site.config.json: shared origin, title, author and card brand settings.
  • vendor/claudiuschuster.de/: original renderer reference, MIT license and provenance.
  • .openai/hosting.json: Site identity and hosting configuration.
  • docs/search-console.md: Search Console setup and troubleshooting handoff.

The Sites source workflow owns source synchronization and deployment packaging. The current Site audience is public. Hosting must preserve asset bytes, provide the exact permanent legacy-language redirects, and return real 404 responses for unknown paths. For a different host or custom domain, update site.config.json and run make build before deployment.