71 lines
3.1 KiB
Markdown
Executable file
71 lines
3.1 KiB
Markdown
Executable file
# Site
|
|
|
|
     
|
|
|
|
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)
|
|
```
|