This repo contains the files for maintaining my personal website ⇢ gugulet.hu
  • CSS 61.9%
  • JavaScript 15.1%
  • Shell 11.2%
  • Python 5.7%
  • HTML 5.3%
  • Other 0.8%
Find a file
g_it 908642a78e
Some checks failed
Resume Content Validation / validate-resume (push) Failing after 2s
Spell Check / Check spelling (push) Successful in 8s
vale / runner / vale (push) Successful in 4s
.
2026-04-08 17:21:29 +02:00
.checks .Moving out some non-compliant files, while we test. 2026-04-08 15:26:34 +02:00
.forgejo/workflows . 2026-04-08 17:21:29 +02:00
.vale Check for typos. 2026-04-08 15:52:15 +02:00
content .Moving out some non-compliant files, while we test. 2026-04-08 15:26:34 +02:00
.envrc Moving folder locally. NAS is not it for dev. 2026-03-18 11:26:59 +01:00
.markdownlint-cli2.jsonc Adding markdownlint rules. 2026-04-07 02:14:51 +02:00
.vale.ini Check for typos. 2026-04-08 15:52:15 +02:00
Dockerfile Going for max minify for css, js, and html. 2026-03-15 00:48:10 +01:00
minify.py Level 2 minification for CSS. 2026-03-15 13:40:44 +01:00
readme.md . 2026-04-07 02:17:43 +02:00
requirements.txt Fixed vale finally. 2026-04-08 13:43:19 +02:00
skills.md Updating readme. 2026-04-07 01:37:09 +02:00
zensical.toml Remove section menu in Resume. 2026-03-14 22:41:29 +01:00

Site

GSAP Markdown CSS Jinja Docker Shell

This repo contains the files for maintaining my personal website: gugulet.hu and is built using the Zensical static site generator.

Setup steps

  1. Clone the repo and enter the directory: git clone git:git.gugulet.hu/g_it/site.g_it; cd site
  2. Setup the virtual environment: python3 -m venv .venv
  3. Activate the virtual environment: source .venv/bin/activate
  4. Install all the packages: pip install -r requirements.txt
  5. Activate direnv: direnv allow

Architecture

content/              Source content (Markdown, assets, templates)
  assets/css/         Per-page stylesheets
  assets/js/          JavaScript (GSAP animations, loader, protection)
  assets/fonts/       Custom fonts (ttf)
  assets/media/       Images, favicons
  overrides/          Jinja2 templates (extends Zensical theme)
  index.md            Homepage
  resume.md           Resume page
deploy/               Generated static site (build output)
zensical.toml         Build config (site metadata, extensions, theme)
minify.py             Post-build CSS/JS/HTML minification
Dockerfile            Multi-stage build (Zensical builder + Caddy server)

Build and serve

# Development
source .venv/bin/activate
zensical serve --watch

# Production build
zensical build
rm ./deploy/sitemap.xml
python minify.py

# Docker
docker build -t site:latest .
docker run -p 80:80 site:latest

Key conventions

  • Zensical (MkDocs-based) static site generator with zensical.toml as single config source.
  • Markdown + YAML frontmatter for all content. Each page declares its template, extra_css, and extra_js.
  • Jinja2 templates in content/overrides/ extend the Zensical base theme.
  • GSAP + ScrollTrigger for homepage scroll animations. No other JS frameworks.
  • Per-section typography: serif (Words), monospace (Technical), display (Visuals).
  • CSS custom properties for theming. Responsive sizing via clamp() and viewport units.
  • Post-build minification via minify.py (terser for JS, clean-css for CSS, inline for HTML). Preserves <pre>/<code> blocks.
  • No database. Fully static output served by Caddy.
  • Content protection: protect.js prevents right-click and copying.
  • Anti-AI crawling: meta robots tag with noai, noimageai.

CI/CD

GitHub Actions runs Vale prose linting and MegaLinter on push/PR to main. Fail on errors.

Dependencies

pip install -r requirements.txt   # Python (Zensical, Jinja2, pymdown-extensions)
npm install -g terser clean-css-cli  # Node (minification)