From 64a45a86418cfc32ec02d43bc85af512b25a2012 Mon Sep 17 00:00:00 2001 From: Piotr Gaczkowski Date: Mon, 27 Apr 2026 22:20:49 +0200 Subject: [PATCH] feat: Make good art (with Typst) --- devenv.nix | 4 + src/kronos/main.py | 106 +- src/typst/.gitignore | 2 + src/typst/assets/calendar.svg | 25941 ++++++++++++++++++++++++++++++++ src/typst/assets/event.svg | 1244 ++ src/typst/assets/logo.png | Bin 0 -> 5247 bytes src/typst/assets/photo.jpg | Bin 0 -> 26158 bytes src/typst/calendar.typ | 69 + src/typst/content/.gitkeep | 0 src/typst/event.typ | 75 + 10 files changed, 27414 insertions(+), 27 deletions(-) create mode 100644 src/typst/.gitignore create mode 100644 src/typst/assets/calendar.svg create mode 100644 src/typst/assets/event.svg create mode 100644 src/typst/assets/logo.png create mode 100644 src/typst/assets/photo.jpg create mode 100644 src/typst/calendar.typ create mode 100644 src/typst/content/.gitkeep create mode 100644 src/typst/event.typ diff --git a/devenv.nix b/devenv.nix index c46ffe5..b96c8d3 100644 --- a/devenv.nix +++ b/devenv.nix @@ -18,9 +18,13 @@ sync.allExtras = true; }; }; + typst = { + enable = true; + }; }; packages = [ + pkgs.hanken-grotesk pkgs.uv ]; diff --git a/src/kronos/main.py b/src/kronos/main.py index 25e9219..0909e09 100755 --- a/src/kronos/main.py +++ b/src/kronos/main.py @@ -1,4 +1,5 @@ import datetime +import json import os import sys from zoneinfo import ZoneInfo @@ -17,8 +18,9 @@ MOBILIZON_API_URL = "https://events.hs3.pl/api" QUERY_LIMIT = 100 TIME_WINDOW_DAYS = 365 TRUNCATE_AFTER_CHARACTERS = 300 -TEMPLATE_FILENAME = "templates/newsletter_template.html" -OUTPUT_FILENAME = "newsletter_events.html" +TEMPLATES = { + "templates/newsletter_template.html": "newsletter_events.html", +} def sanitize_html(raw_html: str) -> str: @@ -50,6 +52,7 @@ def build_graphql_query(): title description beginsOn + endsOn picture { url } @@ -91,7 +94,7 @@ def fetch_events(begins_on: str, ends_on: str, limit: int = QUERY_LIMIT): def prepare_events_for_template(raw_events: list) -> list: - jours_semaine = [ + days_week = [ "poniedziałek", "wtorek", "środa", @@ -100,7 +103,7 @@ def prepare_events_for_template(raw_events: list) -> list: "sobota", "niedziela", ] - mois_annee = [ + month_year = [ "", "stycznia", "lutego", @@ -132,6 +135,7 @@ def prepare_events_for_template(raw_events: list) -> list: begins_iso = ev.get("beginsOn") picture = ev.get("picture") picture_url = picture.get("url") if picture else None + picture_filename = ev.get("picture_filename") link = ev.get("url") or "" if picture_url and "?" in picture_url: @@ -146,15 +150,15 @@ def prepare_events_for_template(raw_events: list) -> list: location = "" dt_utc = datetime.datetime.fromisoformat(begins_iso.replace("Z", "+00:00")) - dt_paris = dt_utc.astimezone(ZoneInfo("Europe/Paris")) - jour_nom = jours_semaine[dt_paris.weekday()] - jour_num = dt_paris.day - mois_nom = mois_annee[dt_paris.month] - annee = dt_paris.year - heure = dt_paris.hour - minute = dt_paris.minute + dt_warsaw = dt_utc.astimezone(ZoneInfo("Europe/Warsaw")) + day_name = days_week[dt_warsaw.weekday()] + day_num = dt_warsaw.day + month_name = month_year[dt_warsaw.month] + year = dt_warsaw.year + hour = dt_warsaw.hour + minute = dt_warsaw.minute minute_str = f"{minute:02d}" - full_date = f"{jour_nom}, {jour_num} {mois_nom} {annee} @ {heure}:{minute_str}" + full_date = f"{day_name}, {day_num} {month_name} {year} @ {hour}:{minute_str}" prepared.append( { @@ -162,6 +166,7 @@ def prepare_events_for_template(raw_events: list) -> list: "description": truncated, "full_date": full_date, "picture_url": picture_url, + "picture_filename": picture_filename, "location": location, "link": link, "start_time": dt_utc, @@ -191,6 +196,37 @@ def inline_css(input_html_path, output_html_path): f.write(inlined_html) +def download_picture(): + pass + + +def save_json_content(events): + json_dirname = "src/typst/content" + os.makedirs(json_dirname, exist_ok=True) + with open(os.path.join(json_dirname, "events.json"), "w") as f: + json.dump(sorted(events, key=lambda event: event["beginsOn"]), f) + + +def extract_picture(event): + picture = event.get("picture") + picture_url = picture.get("url") if picture else None + picture_filename = None + + if picture_url: + if "?" in picture_url: + picture_url = picture_url.split("?", 1)[0] + + picture_dirname = "src/typst/assets/tmp" + picture_filename = os.path.join(picture_dirname, picture_url.split("/")[-1]) + event["picture_filename"] = picture_filename + + response = requests.get(picture_url) + + os.makedirs(picture_dirname, exist_ok=True) + with open(picture_filename, "wb") as picture_file: + picture_file.write(response.content) + + def _main(): load_dotenv() @@ -216,28 +252,44 @@ def _main(): sys.exit(0) for ev in raw_events: - print(f"{ev.get('title', 'Untitled')} — {ev.get('beginsOn', 'Unknown date')}") + print(f"{ev.get('title', 'Untitled')} — {ev.get('beginsOn', 'Unknown date')}") + + ev["txt_description"] = BeautifulSoup(ev["description"], "html.parser").get_text() + + begins = ev["beginsOn"].split("T") + ends = ev["endsOn"].split("T") + txt_date = f"{begins[0]} {begins[1][:-4]}-" + if begins[0] != ends[0]: + txt_date += f"{ends[0]}" + txt_date += f"{ends[1][:-4]}" + ev["txt_date"] = txt_date + + extract_picture(ev) + + save_json_content(raw_events) raw_events.sort(key=lambda ev: ev.get("beginsOn", "")) events = prepare_events_for_template(raw_events) - os.makedirs("dist", exist_ok=True) - output_path = os.path.join(os.getcwd(), "dist", OUTPUT_FILENAME) - html_output = render_newsletter( - events=events, template_dir=os.getcwd(), template_name=TEMPLATE_FILENAME - ) + for template_filename, output_filename in TEMPLATES.items(): + output = render_newsletter( + events=events, template_dir=os.getcwd(), template_name=template_filename + ) - with open(output_path, "w", encoding="utf-8") as f: - f.write(html_output) - print(f"File '{output_path}' generated successfully.", file=sys.stderr) + os.makedirs("dist", exist_ok=True) + output_path = os.path.join(os.getcwd(), "dist", output_filename) + with open(output_path, "w", encoding="utf-8") as f: + f.write(output) + print(f"File '{output_path}' generated successfully.", file=sys.stderr) - inlined_output_path = os.path.join(os.getcwd(), "dist", "newsletter_events_inlined.html") - inline_css(output_path, inlined_output_path) - print( - f"File '{inlined_output_path}' (inline CSS) generated.", - file=sys.stderr, - ) + if output_filename.endswith(".html"): + inlined_output_path = os.path.join(os.getcwd(), "dist", f"inlined_{output_filename}") + inline_css(output_path, inlined_output_path) + print( + f"File '{inlined_output_path}' (inline CSS) generated.", + file=sys.stderr, + ) discord_token = os.getenv("DISCORD_TOKEN") client = KronosBot(intents=intents) diff --git a/src/typst/.gitignore b/src/typst/.gitignore new file mode 100644 index 0000000..20634ad --- /dev/null +++ b/src/typst/.gitignore @@ -0,0 +1,2 @@ +assets/tmp/* +*.pdf diff --git a/src/typst/assets/calendar.svg b/src/typst/assets/calendar.svg new file mode 100644 index 0000000..7c6b5d6 --- /dev/null +++ b/src/typst/assets/calendar.svg @@ -0,0 +1,25941 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GSPublisherVersion 0.17.100.100 + + + + + + + + + + + + + + + + + + + + NADCHODZĄCE + WYDARZENIA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SPRAWDŹ + , + CO SIĘ + U NAS DZIEJE + + + + + + + + + + + + OTWARCI + DLA WSZYSTKICH + + + + + + + + + + + + TWORZYMY + DZIELIMY SIĘ + UCZYMY + + + + + + + + + + + + TECHNOLOGIA + PASJA + SPOŁECZNOŚĆ + + + + + + + + + + + + DOŁĄCZ DO NAS + ! + + + + + + + + + + + + hs + 3 + . + pl + + + + + + + + + + + + KODUJ + . + TWÓRZ + . + INSPIRUJ SIĘ + . + BAW SIĘ + . + + + + + + + + + + + + STATUS + : + AKTYWNY + + + + + + + + + + + + KOD + + + + + + + + + + + + TRYB + : + KREATYWNY + + + + + + + + + + + + ELEKTRONIKA + + + + + + + + + + + + MECHANIKA + + + + + + + + + + + + DESIGN + + + + + + + + + + + + EKSPERYMENTY + + + + + + + + + + + + KAWA + + + + + + + + + + + + POWER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/typst/assets/event.svg b/src/typst/assets/event.svg new file mode 100644 index 0000000..517ccb8 --- /dev/null +++ b/src/typst/assets/event.svg @@ -0,0 +1,1244 @@ + + + + + + + + + + + + + + + + + + + GSPublisherVersion 0.20.100.100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/typst/assets/logo.png b/src/typst/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8e793ead60c939dfe7846506494d666ffabd2a GIT binary patch literal 5247 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 rS=90YMMG|WN@iLmiUva~Vw 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
b}Pl^BB2h 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 ALI3~& literal 0 HcmV?d00001 diff --git a/src/typst/calendar.typ b/src/typst/calendar.typ new file mode 100644 index 0000000..e4d21ba --- /dev/null +++ b/src/typst/calendar.typ @@ -0,0 +1,69 @@ +#set page( + paper: "a4", + background: context { + place(center + horizon, { + image("assets/calendar.svg") + }) + }, + margin: (top: .5cm, bottom: .5cm, x: 0cm), +) + +#set text(fill: white) + +#let pat = tiling(size: (30pt, 30pt))[ + #place(line(start: (0%, 0%), end: (100%, 100%), stroke: white)) + #place(line(start: (0%, 100%), end: (100%, 0%), stroke: white)) +] + +#let add_event(number, title, description, date, address) = { + let ex = 85mm + calc.rem-euclid(number, 2) * 67mm + let ey = 46mm + calc.div-euclid(number, 2) * 76mm + + place( + top+left, + dx: ex, + dy: ey, + block( + width: 32mm, + height: 48mm, + + [ + #block( + height: 14mm, + clip: true, + text( + font: ("Hanken Grotesk"), + title + ) + ) + #move(dy: 4mm, + block( + height: 3mm, + clip: true, + text(weight: "bold", size: 9pt, date) + ) + ) + #move(dy: 11mm, + block( + height: 12mm, + clip: true, + text(size: 9pt, address) + ) + ) + ], + ) + ) +} + +#let events = json("content/events.json") +#let index = 0 + +#for event in events { + add_event(index, event.title, event.txt_description, event.txt_date, "Hackerspace Trójmiasto, al. Wojska Polskiego 41, Gdańsk") + + index = index + 1 + + if (index >= 6) { + break + } +} diff --git a/src/typst/content/.gitkeep b/src/typst/content/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/typst/event.typ b/src/typst/event.typ new file mode 100644 index 0000000..ae81c34 --- /dev/null +++ b/src/typst/event.typ @@ -0,0 +1,75 @@ +#import "@preview/bulb:0.1.0": dither + +#set page( + width: 297mm, + height: 169mm, + background: context { + place(center + horizon, { + image("assets/event.svg") + }) + }, + margin: (top: 0cm, bottom: .5cm, x: .5cm), +) + +#let make_event_card(title, description, date, address, picture, name) = { + move( + dx: 148mm, + dy: 23mm, + image( + dither( + read("assets/photo.jpg", encoding: none), + mode: "bw", + method: "bayer8x8", + size: 360, + ), + ), + ) + place( + top+left, + dx: 94mm, + dy: -4mm, + image("assets/hs3_logo_hires.png", height: 38mm, width: 38mm), + ) + + set text(font: ("Hanken Grotesk"), size: 14pt) + + place( + top+left, + dx: 12mm, + dy: 30mm, + block( + width: 118mm, + height: 130mm, + grid( + rows: (2fr, 6fr, 0.75fr, 0.5fr), + text(size: 28pt, weight: "bold", title), + text(size: 10pt, description), + text( + size: 24pt, + weight: "bold", + grid( + columns: (1fr, 1fr), + date.split(" ").at(0), + align(right)[#date.split(" ").at(1)] + ), + ), + address, + ) + ) + ) + + align(right+bottom)[#text(size: 14pt, weight: "bold", name)] +} + +#let events = json("content/events.json") +#let index = 0 + +#for event in events { + make_event_card(event.title, event.txt_description, event.txt_date, "Gdańsk, al. Wojska Polskiego 41", "", "Joanna Roscoe") + + index = index + 1 + + if index < events.len() { + pagebreak() + } +}