Algroveon-Mini-SSG – Own Static Site Generator
Static Site Generator in Python with Browser Admin UI, direct deployment via SFTP/FTP, AI-powered multilingual support, and a flexible Jinja2 template system.
This project is a Static Site Generator (SSG) for multilingual websites. This means it is a system that generates finished HTML pages from content and templates. The entire workflow remains in Python: without npm and without a JavaScript build toolchain—meaning without the additional chain of frontend tools for building, bundling, and processing that is otherwise common. At its core is a browser-based admin interface through which content can be maintained, websites can be built, and files can be transferred directly to web servers.
Admin UI – The Central Workspace
The admin interface deliberately relies on Flask locally and is not an afterthought, but rather the central workspace of the entire system. This is appropriate for local use, but for proper public hosting, a cleanly configured web server such as Nginx with a secure hosting environment should be placed in front of it. From here, the entire editorial and publishing process is managed:
- File Explorer – Content tree of all Markdown files, sorted by language and type
- Markdown Editor – Split live preview, toolbar, full-screen mode (custom web component, no npm)
- New Document – Wizard with templates for blog posts, projects, or pages; frontmatter is automatically pre-populated
- Full-text Search – Search across all Markdown content in the project
- Design Tab – Edit templates directly in the browser; site-specific adjustments override the theme without modifying the original
- Translation System – Full support for AI-powered translations using local LLMs or cloud LLMs
- Multi-Site Mode – Manage multiple sites in parallel via a single shared Admin UI
Build and Deploy: One Click
The build process starts build.py and displays the output as a live stream in the browser.
During deployment, only changed files are uploaded (MD5-based comparison):
- SFTP – via
paramiko, password stored in the OS keychain (macOS Keychain / Linux Secret Service) - FTP – classic FTP for simple hosts, without additional dependencies
- Connection Test – verifies credentials before the actual upload
- Incremental – only files with a changed MD5 hash are transferred
Template System
Templates are Jinja2 HTML files located under themes/<theme>/. The theme is assigned in site.yaml. Using the Design Tab, templates can be customized per site – these changes are stored in sites/<site>/templates/ and take precedence over the original theme. Layouts are assigned via a frontmatter field (layout: post, layout: project, etc.).
Multilingualism
Content is located under content/<lang>/, and URLs follow the schema /<lang>/page.html. A unique navigation is rendered for each language. If a translation is missing, fallback logic is applied instead of going directly to a 404 page.
AI-Powered Translation
translate.py translates Markdown content via LLM. Supported providers:
- Ollama (local) – native Ollama API, including automatic VRAM management
- OpenAI – GPT-4o-mini and other models directly
- OpenAI-compatible – Mistral, LM Studio, any locally hosted endpoints
The system detects outdated translations via SHA-256 hash (source content + translated frontmatter fields). If a source file changes, only that file is re-translated. Code blocks and the frontmatter structure remain intact. The entire process runs as an SSE stream with live output in the browser.
SFTP configuration and deploy credentials are currently hardcoded. Refactoring for public release is in progress.