Update CV: improve teaching format, publications, and add publications section
This commit is contained in:
parent
70dee4681b
commit
161d23aba7
148
pages/cv.vue
148
pages/cv.vue
|
|
@ -91,9 +91,50 @@ useHead({
|
|||
<span class="item-subtitle">{{ teach.position }}</span>
|
||||
</div>
|
||||
<div class="item-detail">{{ formatMonth(teach.startDate) }} – {{ formatMonth(teach.endDate) }}</div>
|
||||
<ul v-if="teach.highlights" class="item-list">
|
||||
<li v-for="h in teach.highlights">{{ h }}</li>
|
||||
</ul>
|
||||
<template v-if="teach.highlights || teach.courses">
|
||||
<div class="item-detail ml-4 hanging-indent">
|
||||
<strong>Subjects and courses:</strong>{{ ' ' }}<template v-if="teach.highlights">
|
||||
<template v-for="h in teach.highlights">{{ h.startsWith('Topics:') ? h.replace('Topics: ', '') : '' }}</template>
|
||||
</template><template v-if="teach.highlights && teach.courses">, </template><template v-if="teach.courses">{{ teach.courses.join(', ') }}</template>
|
||||
</div>
|
||||
<template v-for="h in teach.highlights">
|
||||
<div v-if="h.startsWith && h.startsWith('Activities')" class="item-detail ml-4 hanging-indent">
|
||||
<strong>Activities and Responsibilities:</strong> {{ h.replace(/^Activities( and Responsibilities)?: /, '') }}
|
||||
</div>
|
||||
<div v-else-if="h.startsWith && !h.startsWith('Topics:')" class="item-detail ml-4 hanging-indent">
|
||||
{{ h }}
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
<div v-else-if="teach.summary" class="item-detail ml-4 hanging-indent">
|
||||
{{ teach.summary }}
|
||||
</div>
|
||||
<div v-if="teach.committees" class="item-detail ml-4 hanging-indent">
|
||||
<strong>Committees:</strong> {{ teach.committees.map(c => c.role + ' - ' + c.name).join('; ') }}
|
||||
</div>
|
||||
<div v-if="teach.events" class="item-detail ml-4 hanging-indent">
|
||||
<strong>Events:</strong> {{ teach.events.map(e => e.name + ' (' + e.type + ')').join(', ') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Publications -->
|
||||
<section v-if="resume?.publications?.length" class="cv-section">
|
||||
<h4>Publications</h4>
|
||||
<div class="cv-entry">
|
||||
<div v-for="pub in resume.publications" :key="pub.id" class="item">
|
||||
<div class="item-title" v-html="pub.entryTags?.title"></div>
|
||||
<div class="bib ml-4">
|
||||
<span v-if="pub.entryTags?.author">{{ pub.entryTags.author }}.</span>
|
||||
<span v-if="pub.entryTags?.editor">
|
||||
<span v-if="pub.entryTags?.author">, </span>editors {{ pub.entryTags.editor }}.
|
||||
</span>
|
||||
<span v-if="pub.entryTags?.booktitle"><em>{{ pub.entryTags.booktitle }}.</em></span>
|
||||
<span v-if="pub.entryTags?.journal"><em>{{ pub.entryTags.journal }}</em>,</span>
|
||||
<span v-if="pub.entryTags?.volume">vol. {{ pub.entryTags.volume }}</span>
|
||||
<span v-if="pub.entryTags?.publisher">{{ pub.entryTags.publisher }},</span> {{ pub.entryTags?.year }}.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -127,9 +168,48 @@ useHead({
|
|||
<span class="item-subtitle">{{ w.position }}</span>
|
||||
</div>
|
||||
<div class="item-detail">{{ formatMonth(w.startDate) }} – {{ formatMonth(w.endDate) }}</div>
|
||||
<ul v-if="w.highlights" class="item-list">
|
||||
<li v-for="h in w.highlights">{{ h }}</li>
|
||||
</ul>
|
||||
<div v-if="w.summary" class="item-detail ml-4 hanging-indent">
|
||||
<strong>Project:</strong> {{ w.summary.replace('Project: ', '') }}
|
||||
</div>
|
||||
<div v-if="w.highlights" class="ml-4">
|
||||
<div v-for="h in w.highlights" class="item-detail hanging-indent">
|
||||
<span v-if="h.startsWith('Activities')"><strong>Activities and Responsibilities:</strong> {{ h.replace(/^Activities( and Responsibilities)?: /, '') }}</span>
|
||||
<span v-else>{{ h }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Recordings -->
|
||||
<section v-if="resume?.solo_releases?.length || resume?.compilation_releases?.length" class="cv-section">
|
||||
<h4>Recordings</h4>
|
||||
|
||||
<div v-if="resume?.solo_releases?.length" class="subsection">
|
||||
<div class="subsection-title"><strong>Solo Albums</strong></div>
|
||||
<div v-for="(rel, idx) in resume.solo_releases" :key="idx" class="item recording-item">
|
||||
<span class="item-title">{{ rel.title }}</span>
|
||||
<span class="item-detail ml-4">{{ rel.publisher }}. {{ rel.media_type }}. {{ rel.date }}.</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="resume?.compilation_releases?.length" class="subsection">
|
||||
<div class="subsection-title"><strong>Compilation Albums</strong></div>
|
||||
<div v-for="(rel, idx) in resume.compilation_releases" :key="idx" class="item recording-item">
|
||||
<span class="item-title">{{ rel.title }}</span>
|
||||
<span class="item-detail ml-4">{{ rel.publisher }}. {{ rel.media_type }}. {{ rel.date }}.</span>
|
||||
<div class="item-detail ml-4">featuring <span class="italic">{{ rel.work }}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Residencies -->
|
||||
<section v-if="resume?.residencies?.length" class="cv-section">
|
||||
<h4>Residencies and Awards</h4>
|
||||
<div class="cv-entry">
|
||||
<div v-for="(res, idx) in resume.residencies" :key="idx" class="item">
|
||||
<span class="item-title">{{ res.org }}</span>
|
||||
<span class="item-meta">{{ res.date }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -154,57 +234,6 @@ useHead({
|
|||
</p>
|
||||
</section>
|
||||
|
||||
<!-- Publications -->
|
||||
<section v-if="resume?.publications?.length" class="cv-section">
|
||||
<h4>Publications</h4>
|
||||
<div class="cv-entry">
|
||||
<div v-for="pub in resume.publications" :key="pub.id" class="item">
|
||||
<div class="item-title" v-html="pub.entryTags?.title"></div>
|
||||
<div class="bib">
|
||||
{{ pub.entryTags?.author }}
|
||||
<span v-if="pub.entryTags?.editor">, editors {{ pub.entryTags.editor }}.</span>
|
||||
<span v-if="pub.entryTags?.booktitle"><em>{{ pub.entryTags.booktitle }}.</em></span>
|
||||
<span v-if="pub.entryTags?.journal"><em>{{ pub.entryTags.journal }}</em>,</span>
|
||||
<span v-if="pub.entryTags?.volume">vol. {{ pub.entryTags.volume }}</span>
|
||||
<span v-if="pub.entryTags?.publisher">{{ pub.entryTags.publisher }},</span> {{ pub.entryTags?.year }}.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Recordings -->
|
||||
<section v-if="resume?.solo_releases?.length || resume?.compilation_releases?.length" class="cv-section">
|
||||
<h4>Recordings</h4>
|
||||
|
||||
<div v-if="resume?.solo_releases?.length" class="subsection">
|
||||
<div class="subsection-title"><strong>Solo Albums</strong></div>
|
||||
<div v-for="(rel, idx) in resume.solo_releases" :key="idx" class="item recording-item">
|
||||
<span class="item-title">{{ rel.title }}</span>
|
||||
<span class="item-detail">{{ rel.publisher }}. {{ rel.media_type }}. {{ rel.date }}.</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="resume?.compilation_releases?.length" class="subsection">
|
||||
<div class="subsection-title"><strong>Compilation Albums</strong></div>
|
||||
<div v-for="(rel, idx) in resume.compilation_releases" :key="idx" class="item recording-item">
|
||||
<span class="item-title">{{ rel.title }}</span>
|
||||
<span class="item-detail">{{ rel.publisher }}. {{ rel.media_type }}. {{ rel.date }}.</span>
|
||||
<div class="item-detail">featuring <span class="italic">{{ rel.work }}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Residencies -->
|
||||
<section v-if="resume?.residencies?.length" class="cv-section">
|
||||
<h4>Residencies and Awards</h4>
|
||||
<div class="cv-entry">
|
||||
<div v-for="(res, idx) in resume.residencies" :key="idx" class="item">
|
||||
<span class="item-title">{{ res.org }}</span>
|
||||
<span class="item-meta">{{ res.date }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- References -->
|
||||
<section v-if="resume?.references?.length" class="cv-section">
|
||||
<h4>References</h4>
|
||||
|
|
@ -323,6 +352,11 @@ useHead({
|
|||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.hanging-indent {
|
||||
padding-left: 1rem;
|
||||
text-indent: -1rem;
|
||||
}
|
||||
|
||||
.year-group {
|
||||
margin-bottom: 12px;
|
||||
margin-left: 10px;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,16 @@
|
|||
import { readFileSync } from 'node:fs'
|
||||
|
||||
const dataFile = './server/data/resume.json'
|
||||
const pubsFile = './server/data/publications.json'
|
||||
|
||||
export default defineEventHandler(() => {
|
||||
const raw = readFileSync(dataFile, 'utf-8')
|
||||
return JSON.parse(raw)
|
||||
const resume = JSON.parse(raw)
|
||||
|
||||
const pubsRaw = readFileSync(pubsFile, 'utf-8')
|
||||
const publications = JSON.parse(pubsRaw)
|
||||
|
||||
resume.publications = publications
|
||||
|
||||
return resume
|
||||
})
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
"label": "Curriculum Vitae",
|
||||
"email": "mwinter@unboundedpress.org",
|
||||
"phone": "+49.176.6807.2118",
|
||||
"website": "www.unboundedpress.org",
|
||||
"website": "https://unboundedpress.org",
|
||||
"summary": "here is a statement",
|
||||
"location": {
|
||||
"address": "Stockholmer Strasse 32",
|
||||
|
|
@ -21,10 +21,26 @@
|
|||
"position": "University Professor of Sound and Intermedia",
|
||||
"website": "https://gmpu.ac.at/",
|
||||
"startDate": "2025-03-03",
|
||||
"summary": "Courses: Experimental Music Workshop",
|
||||
"courses": [
|
||||
"Experimental Music Workshop",
|
||||
"Musicology Seminar",
|
||||
"History of Tuning Systems",
|
||||
"Sound and Intermedia curricula (launching Winter 2026)"
|
||||
],
|
||||
"highlights": [
|
||||
"Topics: Sound Art and Intermedia",
|
||||
"Activities and Responsibilities: Develop a sound and intermedia program, aid in development of a doctoral program, and conduct artistic research"
|
||||
"Activities: Develop sound and intermedia program, aid in development of doctoral program, conduct artistic research, organize events"
|
||||
],
|
||||
"committees": [
|
||||
{"role": "Vorsitzender (Chair)", "name": "Arbeitskreis für Gleichbehandlung"},
|
||||
{"role": "Member", "name": "Studienkommission"},
|
||||
{"role": "Member", "name": "Folep (Artistic Research Direction)"}
|
||||
],
|
||||
"events": [
|
||||
{"name": "NOISE SILENCE ACTION", "type": "Concert"},
|
||||
{"name": "Intentional and Random", "type": "Concert"},
|
||||
{"name": "Embodied Differences", "type": "Workshop"},
|
||||
{"name": "The Between Things", "type": "Forum"}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue