From 9e7223a1f5637ace1588e55b02742dedb28411f7 Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Sun, 12 Jul 2026 00:29:55 +0200 Subject: [PATCH] Add web SVG generator, container, and Kubernetes manifests - Flask app (web/) generates M1730 scale SVGs from a form; embeds GOST typ A font as base64 so output is self-contained - Dockerfile builds the app into git.baumann.gr/adebaumann/m1730-generator - k8s/ deploys as a ClusterIP service for NPM to proxy at works.adebaumann.com/M1730-generator/ Co-Authored-By: Claude Sonnet 4.6 --- .dockerignore | 5 + .gitignore | 3 + CLAUDE.md | 55 +++++++ Dockerfile | 14 ++ M1730-Scale_paths.svg | 292 +++++++++++++++++++++++++++++++++ M1730-Scale_template.svg | 112 +++++++++++++ M1730-Scale_text.svg | 340 +++++++++++++++++++++++++++++++++++++++ fonts/ГОСТ_тип_А.ttf | Bin 0 -> 143716 bytes k8s/deployment.yaml | 28 ++++ k8s/service.yaml | 12 ++ web/app.py | 117 ++++++++++++++ web/requirements.txt | 2 + web/templates/index.html | 213 ++++++++++++++++++++++++ 13 files changed, 1193 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 CLAUDE.md create mode 100644 Dockerfile create mode 100644 M1730-Scale_paths.svg create mode 100644 M1730-Scale_template.svg create mode 100644 M1730-Scale_text.svg create mode 100644 fonts/ГОСТ_тип_А.ttf create mode 100644 k8s/deployment.yaml create mode 100644 k8s/service.yaml create mode 100644 web/app.py create mode 100644 web/requirements.txt create mode 100644 web/templates/index.html diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3e4ccc2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.venv/ +.git/ +k8s/ +web/__pycache__/ +__pycache__/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..77ac754 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.venv/ +__pycache__/ +*.pyc diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..be8d739 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,55 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +SVG scale artwork for M1730 analog meters. The scales are designed in Inkscape (v1.4.3) using the **ГОСТ тип А** (GOST type A) font, a Russian technical drafting standard typeface. + +All canvas dimensions are **157.18373 mm × 26.683672 mm**. The coordinate origin is offset: `transform="translate(-37.352226,-90.454928)"` is applied to `layer1` in all files, so absolute SVG coordinates start around x=37, y=90 rather than 0,0. + +## File Roles + +The three SVG files represent layers of the same design, intended to be combined or used separately: + +- **`M1730-Scale_template.svg`** — Inkscape working template. Contains the background rect+cutout path, the zero tick mark, an end tick mark, the "U" axis label, numeric labels `0` and `X` (placeholder for the full-scale value), and a `5mA` range label. Also contains a `` inside `` used as a text flow shape (`shape-inside:url(#rect5)`) for the title text block (`id="text5"`). +- **`M1730-Scale_paths.svg`** — Paths-only version: all tick marks as `` elements, no text nodes (or text converted to paths). Used for cutting/printing workflows where fonts must not be embedded as live text. +- **`M1730-Scale_text.svg`** — Text-overlay version: tick mark paths plus live `` elements for numeric labels. The `sodipodi:docname` is `M1730-Scale.svg`, suggesting this is the "final" named file. + +## Key Design Parameters + +- Stroke colors: `#1a1a1a` (dark near-black) for all scale lines and text; fill `#f9f9f9` for the background panel, `#ffffff` for tick mark strokes. +- Major tick stroke-width: `0.555`; border stroke-width: `0.184`. +- Scale bar (the colored strip below tick marks): `y` range 107.547–113.746 mm absolute, `x` range 58.444–183.644. +- Zero tick at absolute x=60.844; full-scale tick at x=180.251. + +## Web Generator (`web/`) + +A Flask app that generates scale SVGs from a form. The venv lives at the repo root. + +``` +source .venv/bin/activate +cd web && python app.py # runs on http://localhost:5000 +``` + +`app.py` has one route (`GET /`) serving the form and one (`POST /generate`) that returns SVG. All SVG geometry is computed in `generate_svg()` using the same coordinate constants as the hand-drawn files. The form exposes: unit label, min/max values, major tick intervals, minor ticks per interval, number of numeric labels, and range label. + +The ГОСТ тип А font is loaded at startup from `/usr/local/share/fonts/г/ГОСТ_тип_А.ttf` and embedded as base64 in every generated SVG so output files are self-contained. + +## Container & Kubernetes + +``` +docker build -t m1730-scale:latest . +``` + +`fonts/ГОСТ_тип_А.ttf` must exist in the repo root before building (copy from `/usr/local/share/fonts/г/`). The image runs gunicorn on port 5000. + +``` +kubectl apply -f k8s/ +``` + +NPM should proxy `https://works.adebaumann.com/M1730-generator/` → `http://m1730-generator/` **with the prefix stripped** (trailing slash on `proxy_pass`). The frontend uses a relative `fetch('generate', ...)` URL so it works correctly under any subpath. + +## Editing SVG files directly + +Open files in **Inkscape**. There is no build, lint, or test tooling — changes are made directly to the SVG XML or via Inkscape's GUI. When modifying tick positions or labels, keep all three files consistent. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ac2be13 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.12-slim + +WORKDIR /app + +COPY web/requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt gunicorn + +COPY fonts/ГОСТ_тип_А.ttf /usr/local/share/fonts/г/ГОСТ_тип_А.ttf + +COPY web/ . + +EXPOSE 5000 + +CMD ["gunicorn", "-w", "2", "-b", "0.0.0.0:5000", "app:app"] diff --git a/M1730-Scale_paths.svg b/M1730-Scale_paths.svg new file mode 100644 index 0000000..af46df6 --- /dev/null +++ b/M1730-Scale_paths.svg @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/M1730-Scale_template.svg b/M1730-Scale_template.svg new file mode 100644 index 0000000..789fb18 --- /dev/null +++ b/M1730-Scale_template.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + U + 0 + X + + 5mA + + + diff --git a/M1730-Scale_text.svg b/M1730-Scale_text.svg new file mode 100644 index 0000000..8f6863d --- /dev/null +++ b/M1730-Scale_text.svg @@ -0,0 +1,340 @@ + + + + + + + + + + % + 0 + 20 + 40 + 60 + 80 + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5mA + + diff --git a/fonts/ГОСТ_тип_А.ttf b/fonts/ГОСТ_тип_А.ttf new file mode 100644 index 0000000000000000000000000000000000000000..aaa78192905ecd5eb5c866e299487d3382db9613 GIT binary patch literal 143716 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' +) + +# SVG absolute coordinate constants (1 user unit = 1 mm) +ZERO_X = 60.844130 # x of the zero/left tick +MAX_X = 180.251230 # x of the full-scale/right tick +BAR_Y = 107.54670 # y at the top of the scale bar (tick baseline) +SCALE_LEN = MAX_X - ZERO_X # 119.4071 mm + +BIG_H = 5.0895 # major tick height +SMALL_H = 2.6683 # minor tick height + + +def _fmt(v: float) -> str: + if v == int(v): + return str(int(v)) + return f"{v:.4g}" + + +def generate_svg(unit, min_val, max_val, range_label, big_ticks, small_ticks, label_count): + big_interval = SCALE_LEN / big_ticks + big_xs = [ZERO_X + i * big_interval for i in range(big_ticks + 1)] + + label_count = max(2, min(label_count, big_ticks + 1)) + label_indices = [round(k * big_ticks / (label_count - 1)) for k in range(label_count)] + + parts = [ + '', + '', + _FONT_FACE, + ' ', + + # Background rect with scale-bar cutout + ' ', + + # Unit label (large letter in left panel) + f' {escape(unit)}', + + # Range label inside the strip on the right + f' {escape(range_label)}', + ] + + # Major ticks + for x in big_xs: + parts.append( + f' ' + ) + + # Minor ticks + if small_ticks > 0: + sub = small_ticks + 1 + for i in range(big_ticks): + for j in range(1, small_ticks + 1): + x = big_xs[i] + j * big_interval / sub + parts.append( + f' ' + ) + + # Numeric labels (centered on their tick, above the tick area) + for idx in label_indices: + x = big_xs[idx] + val = min_val + (max_val - min_val) * idx / big_ticks + parts.append( + f' {escape(_fmt(val))}' + ) + + parts += [' ', ''] + return '\n'.join(parts) + + +@app.route('/') +def index(): + return render_template('index.html') + + +@app.route('/generate', methods=['POST']) +def generate(): + unit = request.form.get('unit', '%') + min_val = float(request.form.get('min', 0)) + max_val = float(request.form.get('max', 100)) + range_label = request.form.get('range_label', '5mA') + big_ticks = max(1, min(50, int(request.form.get('big_ticks', 10)))) + small_ticks = max(0, min(20, int(request.form.get('small_ticks', 4)))) + label_count = max(2, int(request.form.get('label_count', 6))) + + svg = generate_svg(unit, min_val, max_val, range_label, big_ticks, small_ticks, label_count) + return Response(svg, mimetype='image/svg+xml') + + +if __name__ == '__main__': + app.run(debug=True) diff --git a/web/requirements.txt b/web/requirements.txt new file mode 100644 index 0000000..e4a286c --- /dev/null +++ b/web/requirements.txt @@ -0,0 +1,2 @@ +flask +gunicorn diff --git a/web/templates/index.html b/web/templates/index.html new file mode 100644 index 0000000..99ddbbf --- /dev/null +++ b/web/templates/index.html @@ -0,0 +1,213 @@ + + + + + + M1730 Scale Generator + + + +
+

M1730 Scale Generator

+ +
+
+ + + + + + + + + + + + + + + +
+ + + +
+ +
+
+ +
+
Preview
+
+

Fill in the form and click Generate.

+
+
+
+ + + +