diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a136337
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.pdf
diff --git a/data.csv b/data.csv
new file mode 100644
index 0000000..698b016
--- /dev/null
+++ b/data.csv
@@ -0,0 +1,16 @@
+"Jahr","E-Mails"
+2011,6
+2012,26
+2013,21
+2014,23
+2015,17
+2016,12
+2017,15
+2018,11
+2019,6
+2020,14
+2021,9
+2022,7
+2023,7
+2024,7
+2025,1
diff --git a/logo.svg b/logo.svg
new file mode 100755
index 0000000..14191b0
--- /dev/null
+++ b/logo.svg
@@ -0,0 +1,153 @@
+
+
+
+
diff --git a/outline.typ b/outline.typ
new file mode 100644
index 0000000..82bdc0c
--- /dev/null
+++ b/outline.typ
@@ -0,0 +1,45 @@
+#set text(lang: "de")
+
+#outline()
+
+= Überschrift 1
+
+#lorem(20)
+
+= Überschrift 2
+== Lorem
+
+#lorem(20)
+
+#pagebreak()
+
+= Tabellen
+
+#figure(
+ table(
+ columns: 3,
+ "1", "2", "3",
+ "4", "5", "6",
+ ),
+ caption: [einfache Tabelle],
+)
+
+== Noch eine Tabelle
+
+#figure(
+ table(
+ columns: 3,
+ align: (left, center, right),
+ table.header(
+ [*Spalte 1*], [*Spalte 2*], [*Spalte 3*],
+ ),
+ "1", "2", "3",
+ "4", "5", "6",
+ ),
+ caption: [Tabelle mit Header und Ausrichtung],
+)
+
+#outline(
+ title: "Tabellenverzeichnis",
+ target: figure.where(kind: table),
+)
diff --git a/protocol.typ b/protocol.typ
new file mode 100644
index 0000000..53d5ea5
--- /dev/null
+++ b/protocol.typ
@@ -0,0 +1,56 @@
+#import "@preview/quick-minutes:1.2.2": *
+
+#set text(font: "Segoe UI Variable Static Text")
+#show : set text(font: "Segoe UI Small Capital in Small")
+
+#show: minutes.with(
+ locale: "de",
+ chairperson: "Zaphod Beeblebrox",
+ secretary: "Ford Prefect",
+ date: datetime(year: 2042, month: 5, day: 25),
+ body-name: "FabLab Altmühlfranken e.\u{202f}V.",
+ event-name: "Sitzung",
+ present: (
+ "Arthur Dent",
+ "Tricia McMillan",
+ ),
+ not-voting: (
+ "Slartibartfaß",
+ ),
+ custom-header: (date, body-name, event-name, logo, _) => [#grid(columns: (auto, 1fr), align: (left, right), [#logo], [#body-name #linebreak() #event-name am #date]) #line(length: 100%, stroke: 2pt + rgb("#16A3C4"))],
+ custom-name-format: (first-name, last-name, _, _) => [#first-name #last-name],
+ custom-name-style: (name, _) => [#name ],
+ display-all-warnings: true,
+ //enable-help-text: true,
+ //hide-warnings: true,
+ translation-overrides: ("ITEM": "Punkt"),
+ show-arrival-time: true,
+ logo: image("logo.svg", height: 4em),
+ signing: true,
+ line-numbering: none,
+ hole-mark: true,
+)
+
+// NOTE: Abstimmung in Tagesordnung verstecken
+#show heading.where(level: 5): it => [
+ #block(it.body)
+]
+
+= 1900/Begrüßung
+
+/ZB begrüßt die Galaxis.
+
+= 1905/Bericht der Vogonen
+
+#lorem(10)
+
+= 1930/Wahl
+
+--2000/Arthur
+
+!2005/Soll die Umgehungsstraße gebaut werden?/2/0/1
+
+Die Pläne werden im Planungsbüro ausgehängt.
+
+/2030
+
diff --git a/talk.typ b/talk.typ
new file mode 100644
index 0000000..ab2c674
--- /dev/null
+++ b/talk.typ
@@ -0,0 +1,277 @@
+#import "@preview/minimal-presentation:0.7.0": *
+
+#set text(font: "Noto Sans")
+#show math.equation: set text(font: "Noto Sans Math")
+#show raw: set text(font: "FiraCode Nerd Font", size: 1.5em)
+
+#show: project.with(
+ title: "Typst",
+ sub-title: "besseres LaTeX?",
+ author: "jan",
+ date: "07.10.2025",
+ lang: "de",
+)
+
+= Was ist Typst?
+
+== Meine Erfahrungen mit LaTeX
+
+basierend auf *einem* Projekt vor *11 Jahren*
+
+#columns-content()[
+ - unhandliche Syntax
+ - kein Paketmanagement
+ - diverse Abhänigkeiten
+ - aber kein Management
+ - nicht alles auf CTAN
+ - hoffentlich schreibst du gerne Makefiles
+ - verschiedene CLIs benötigt
+ - 4-6 pdflatex Aufrufe nötig
+][
+ ```latex
+ \chapter{FabLab}
+ \section{Untergruppen}
+ \begin{itemize}
+ \item Chaostreff
+ \item Repair-Caf\'{e}
+ \end{itemize}
+ ```
+]
+
+== Geht's auch einfacher?
+
+#columns-content()[
+ - weniger überflüssige Syntax
+ - viele Funktionen eingebaut
+ - Paketmanagement
+][
+ ```typ
+ = FabLab
+ == Untergruppen
+ - Chaostreff
+ - Repair-Cafe\u{301}
+ ```
+]
+
+= Grundlagen
+
+== Syntax
+
+#columns-content()[
+ ```typ
+ Einfache Formatierungen wie *fett* und _kursiv_ sind intuitiv. Je nach Sprache werden "Anführungszeichen" korrekt umgewandelt.
+
+ Absätze werden durch eine Leerzeile getrennt.
+ ```
+][
+ Einfache Formatierungen wie *fett* und _kursiv_ sind intuitiv. Je nach Sprache werden "Anführungszeichen" korrekt umgewandelt.
+
+ Absätze werden durch eine Leerzeile getrennt.
+]
+
+== Syntax
+
+#columns-content()[
+ ```typ
+ Es gibt viele Möglichkeiten für Sonderzeichen:
+ - e\u{301}
+ - $bitcoin$
+ - #emoji.face
+ - 🥳
+ Keine Angst vor UTF-8!
+ ```
+][
+ Es gibt viele Möglichkeiten für Sonderzeichen:
+ - e\u{301}
+ - $bitcoin$
+ - #emoji.face
+ - 🥳
+ Keine Angst vor UTF-8!
+]
+
+== Formatierung
+
+#columns-content()[
+ ```typ
+ #set rect(
+ fill: gray,
+ width: 100%,
+ height: 100%
+ )
+ #grid(
+ columns: (1fr, 2fr),
+ rows: (1fr, 3fr),
+ gutter: 3pt,
+ rect[Hello],
+ rect[World],
+ rect[from],
+ rect[grids],
+ )
+ ```
+][
+ #set rect(
+ fill: gray,
+ width: 100%,
+ height: 100%
+ )
+ #grid(
+ columns: (1fr, 2fr),
+ rows: (1fr, 3fr),
+ gutter: 3pt,
+ align: center,
+ rect[Hello],
+ rect[World],
+ rect[from],
+ rect[grids],
+ )
+]
+
+== Inhaltsverzeichnis
+
+#sym.arrow outline.typ
+
+== Defaults überschreiben
+
+#columns-content()[
+ ```typ
+ #show "foo": "bar"
+ foo
+
+ #set text(blue)
+ #show regex("\w+\?"): set text(red)
+ Was steht auf deinem Handtuch? Keine Panik!
+ ```
+][
+ #[
+ #show "foo": "bar"
+ foo
+
+ #set text(blue)
+ #show regex("\w+\?"): set text(red)
+ Was steht auf deinem Handtuch? Keine Panik!
+ ]
+]
+
+== Code
+
+#columns-content()[
+ ```typ
+ #let antwort = 7 * 6
+ Die Antwort ist #antwort.
+
+ #table(
+ columns: 5,
+ ..for i in range(10) {
+ ([#i],)
+ }
+ )
+
+ #{
+ [Code Block]
+ }
+ ```
+][
+ #let antwort = 7 * 6
+ Die Antwort ist #antwort.
+
+ #table(
+ columns: 5,
+ ..for i in range(10) {
+ ([#i],)
+ }
+ )
+
+ #{
+ [Code Block]
+ }
+]
+
+== Daten einlesen
+
+#columns-content(colwidths: (70%, auto))[
+ ```typ
+ #let rows = csv("data.csv", row-type: dictionary)
+ #rows.len() Zeilen eingelesen.
+
+ #table(
+ columns: 2,
+ align: right,
+ ..for (Jahr, E-Mails) in rows.slice(0,5) {
+ (Jahr, E-Mails)
+ }
+ )
+ ```
+][
+ #let rows = csv("data.csv", row-type: dictionary)
+ #rows.len() Zeilen eingelesen.
+
+ #table(
+ columns: 2,
+ align: right,
+ ..for (Jahr, E-Mails) in rows.slice(0,5) {
+ (Jahr, E-Mails)
+ }
+ )
+]
+
+= Pakete
+
+== Wo findet man Pakete?
+
+Offizielles Repo: https://typst.app/universe/
+
+Abhängigkeiten werden im Dokument definiert:
+```typ
+#import "@preview/minimal-presentation:0.7.0": *
+```
+
+== Diagramme
+
+#columns-content(colwidths: (2fr, 1fr))[
+ ```typ
+ #import "@preview/lilaq:0.5.0"
+ #let rows = csv("data.csv", row-type: dictionary)
+ #let x = rows.map(it => int(it.Jahr))
+ #let y = rows.map(it => int(it.E-Mails))
+ #lilaq.diagram(
+ xlabel: "Jahr", ylabel: "E-Mails",
+ width: 100%, height: 70%,
+ lilaq.bar(
+ x,
+ y,
+ )
+ )
+ ```
+][
+ #import "@preview/lilaq:0.5.0"
+ #let rows = csv("data.csv", row-type: dictionary)
+ #let x = rows.map(it => int(it.Jahr))
+ #let y = rows.map(it => int(it.E-Mails))
+ #lilaq.diagram(
+ xlabel: "Jahr", ylabel: "E-Mails",
+ width: 100%, height: 70%,
+ lilaq.bar(
+ x,
+ y,
+ )
+ )
+]
+
+== Präsentationen
+
+```typ
+#import "@preview/minimal-presentation:0.7.0": *
+
+#show: project.with(
+ title: "Typst", sub-title: "besseres LaTeX?",
+ author: "jan", date: "07.10.2025", lang: "de",
+)
+
+= Was ist Typst?
+
+== Meine Erfahrungen mit LaTeX
+```
+
+== Protokolle
+
+#sym.arrow protocol.typ