diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ae62ba2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,45 @@
+# Data-driven CV & resume
+
+My personal CV and resume files, automatically generated from a multi-lingual
+yaml data file.
+
+The CV contains a full run-down of my educational and job experience to date,
+while the resume is more compact, reduced to a single page
+and can be tailored for a specific job area or expertise.
+
+Is called like the following:
+
+```typst
+#resume(
+    yaml("content.yml"),
+    main: ("experience", "education", "volunteering", "skills", "languages"),
+    sidebar: ("volunteering", "skills")
+)
+```
+
+This is the default invocation, though sidebar and main body sections can be exchanged at will.
+
+TODO:
+
+- [x] move double-resume sources (per langauge) to a variable or similar
+- [x] separate volunteering from skills section
+- [_] one function per skill section
+- [_] resume prep:
+  - [ ] make experience groupable by client / short version
+  - [ ] enable display/hiding of sections/entries by tags?
+
+- [x] migrate to typst template?
+- [x] ! Fix german summary to be like English summary
+- [_] generalized entry?
+      Would have 'title', 'place', 'date', 'type'/'tags' + potential
+      'publication', 'bullets'
+
+## Typst-driven branch
+
+- [x] Fix publication '\&'s
+- [x] Fix en-dash/em-dash (e.g. in years)
+- [x] Producable from yaml content
+- [x] Can be switched between Ger/En
+- [x] Try sidebar version
+  - [ ] Generalize sidebar version through abstraction/extractions
+- [ ] unify items: experience/education/(thesis?)
diff --git a/resume.typ b/resume.typ
index 9c006fd..ce523d0 100644
--- a/resume.typ
+++ b/resume.typ
@@ -170,7 +170,7 @@
     }
 }
 
-#let resume(contents) = {
+#let resume(contents, main: ("experience", "education"), sidebar: ("volunteering", "languages", "skills")) = {
     set text(lang: lang)
 
     let date_formatting = {
@@ -203,48 +203,48 @@
     header(contents.about)
 
     let body = {
-//        if "summary" in contents {
-//            section(title:"", {
-//                contents.summary.at(lang)
-//            })
-//        };
+        if "summary" in main and "summary" in contents {
+           section(title:"", {
+               contents.summary.at(lang)
+           })
+        }
 
-        if "experience" in contents {
+        if "experience" in main and "experience" in contents {
             let title = sel_word_lang(en:"Professional Experience", de:"Berufserfahrung")
             section(title: title)[]
             by_experience_type(experience: contents.experience, type: contents.experience_types)
         }
 
-        if "education" in contents {
+        if "education" in main and "education" in contents {
             let title = sel_word_lang(en:"Education", de:"Ausbildung")
             section(title: title, entries:contents.thesis + contents.education)[]
         }
 
-//        if "volunteering" in contents {
-//            let title = sel_word_lang(en:"Volunteer Work", de:"Ehrenamt")
-//            section(title: title, entries:contents.volunteering)[]
-//        }
-//
-//        if "skills" in contents {
-//            let title = sel_word_lang(en:"Qualifications", de:"Qualifikationen")
-//            section(title: title, {
-//                skill_item(item:contents.skills)
-//            })
-//        }
-//
-//        if "languages" in contents {
-//            let title = sel_word_lang(en:"Languages", de:"Sprachen")
-//            section(title: title, {
-//                skill_item(item:contents.languages)
-//            })
-//        }
+        if "volunteering" in main and "volunteering" in contents {
+           let title = sel_word_lang(en:"Volunteer Work", de:"Ehrenamt")
+           section(title: title, entries:contents.volunteering)[]
+        }
+
+        if "skills" in main and "skills" in contents {
+           let title = sel_word_lang(en:"Qualifications", de:"Qualifikationen")
+           section(title: title, {
+               skill_item(item:contents.skills)
+           })
+        }
+
+        if "languages" in main and "languages" in contents {
+           let title = sel_word_lang(en:"Languages", de:"Sprachen")
+           section(title: title, {
+               skill_item(item:contents.languages)
+           })
+        }
     }
 
     let sidebar = {
-        if "volunteering" in contents {
+        if "volunteering" in sidebar and "volunteering" in contents {
             let title = sel_word_lang(en:"Volunteer Work", de:"Ehrenamt")
             [== #title]
-            for e in contents.volunteering {
+            for e in contents.at("volunteering") {
                 [
                 - *#e.title.at(lang)* (#e.date.at(lang))
                    #par(e.bullets.at(0).at(lang)) \
@@ -252,14 +252,14 @@
             }
         }
 
-        if "languages" in contents {
+        if "languages" in sidebar and "languages" in contents {
             let title = sel_word_lang(en:"Languages", de:"Sprachen")
             [== #title]
             skill_item(item:contents.languages, is_sidebar: true)
             [\ ]
         }
 
-        if "skills" in contents {
+        if "skills" in sidebar and "skills" in contents {
             let title = sel_word_lang(en:"Qualifications", de:"Kenntnisse")
             [== #title]
             skill_item(item:contents.skills, is_sidebar: true)
@@ -307,4 +307,3 @@
 #resume(
     yaml("content.yml")
 )
-