# Site

![GSAP](https://img.shields.io/badge/GSAP-0AE448?style=flat&logo=GSAP&logoColor=white) ![Markdown](https://img.shields.io/badge/Markdown-000000?style=flat&logo=Markdown&logoColor=white) ![CSS](https://img.shields.io/badge/CSS-663399?style=flat&logo=CSS&logoColor=white) ![Jinja](https://img.shields.io/badge/Jinja-7E0C1B?style=flat&logo=Jinja&logoColor=white) ![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat&logo=Docker&logoColor=white) ![Shell](https://img.shields.io/badge/zsh-F15A24?style=flat&logo=zsh&logoColor=white)

This repo contains the files for maintaining my personal website: [gugulet.hu](https://gugulet.hu) and is built using the [Zensical static site generator](https://zensical.org/).

## 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

```text
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

```bash
# 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

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