---
title: "Home"
filters:
- panel-accordion
format: html
format:
html:
include-in-header: assets/calendar/calendar-head.html
---
Welcome to the Information Systems Education (ISE) lab handbook!
This handbook documents how the ISE Lab works — how we teach, research, collaborate, and support students and colleagues in a transparent, reproducible way.
It is a public resource written for students, teaching staff, and collaborators who interact with the lab.
To propose changes or contribute, see [How to contribute to the handbook](/management/handbook.html).
**Start here — by role**
::: {.panel-accordion}
### Students {icon="mortarboard-fill"}
- Courses:
```{python}
#| label: course-table
#| echo: false
from pathlib import Path
import re
try:
import yaml # PyYAML
except ImportError as e:
raise RuntimeError("Missing dependency: PyYAML. Install with `pip install pyyaml`.") from e
from IPython.display import Markdown, display
COURSE_DIR = Path("teaching/courses")
def read_front_matter(qmd_path: Path) -> dict:
text = qmd_path.read_text(encoding="utf-8")
m = re.match(r"^\s*---\s*\n(.*?)\n---\s*\n", text, flags=re.DOTALL)
if not m:
return {}
return yaml.safe_load(m.group(1)) or {}
def semester_label(semester: str) -> str:
if not semester or "-" not in semester:
return semester or ""
year, term = semester.split("-", 1)
return f"{term} {year}"
def normalize_degree_program(value) -> list[str]:
if value is None:
return []
if isinstance(value, str):
return [value.strip()] if value.strip() else []
if isinstance(value, list):
return [str(v).strip() for v in value if str(v).strip()]
return [str(value).strip()] if str(value).strip() else []
rows = []
for qmd in sorted(COURSE_DIR.glob("*.qmd")):
meta = read_front_matter(qmd)
if not meta:
continue
if str(meta.get("status", "")).strip().lower() != "upcoming":
continue
lecture = (meta.get("title") or "").strip()
upcoming = semester_label((meta.get("semester") or "").strip())
degree_list = normalize_degree_program(meta.get("degree_program"))
if degree_list:
for degree in degree_list:
rows.append({
"Degree Program": degree,
"Lecture": lecture,
"Upcoming Semester": upcoming,
})
else:
rows.append({
"Degree Program": "",
"Lecture": lecture,
"Upcoming Semester": upcoming,
})
headers = ["Degree Program", "Lecture", "Upcoming Semester"]
if not rows:
display(Markdown("_No upcoming courses found._"))
else:
rows.sort(key=lambda r: (r["Degree Program"], r["Upcoming Semester"], r["Lecture"]))
widths = {h: max(len(h), *(len(str(r.get(h, ""))) for r in rows)) for h in headers}
def fmt_row(d):
return "| " + " | ".join(str(d.get(h, "")).ljust(widths[h]) for h in headers) + " |"
md_lines = []
md_lines.append("| " + " | ".join(h.ljust(widths[h]) for h in headers) + " |")
md_lines.append("| " + " | ".join("-" * widths[h] for h in headers) + " |")
for r in rows:
md_lines.append(fmt_row(r))
display(Markdown("\n".join(md_lines)))
```
- [Theses](https://fs-ise.github.io/theses/){target=_blank}
- [FAQ](teaching/faq.html)
### Admin {icon="person-gear"}
- [Repositories](management/repositories.html)
:::
<!--
### Students
- Courses (pages with materials, dates, exams, reviews, ...)
- Theses
- Improvement
- Contact (recomendation letters, mentoring/counselling, Calendly, Q&A, feedback form)
- Teaching statement
### Teaching assistants {icon="person-video"}
- SOP
- Pedagogy
- Admin (vacation, contracts, onboarding, job letters)
### Admin
- Courses (announced, rooms, dates)
- Exams (supervising, corrections)
- Hiring
- Security (Gefahren, ...)
- Budget, Inventory
### Crowdworkers & Citizen Scientists {icon="people"}
- Guidelines
- Resources...
- Tasks overview (e.g., simple: search IS journals for literature reviews -report them here, review our teaching materials, test search-query/bib-dedupe..., advanced: contribute to search-query, colrev, bib-dedupe)
-->
<br>
## Areas
The handbook is organized around five core areas that reflect how the lab operates over time.
::: {.grid}
::: {.g-col-6}
### Teaching
Principles, systems, and procedures for designing, delivering, and evaluating courses — from lectures and theses to assessments, student support, and institutional reporting. [Go to Teaching →](teaching/index.qmd)
:::
::: {.g-col-6}
### Research
Support for scholarly work — from project planning and collaboration to methods, data, writing, and publication workflows. [Go to Research →](research/index.qmd)
:::
::: {.g-col-6}
### Management
Operating procedures that keep the lab running — communication, infrastructure, teaching admin, research support, risk, procurement, and HR. [Go to Management →](management/index.qmd)
:::
::: {.g-col-6}
### Academy
Training and development activities that build individual and shared capabilities over time. [Go to Academy →](academy/index.qmd)
:::
::: {.g-col-6}
### Team
Roles, responsibilities, and who to contact for specific topics within the lab. [Go to Team →](team/index.qmd)
:::
:::
::: {.callout-note title="Calendar" collapse=true}
Our shared public calendar has dates for upcoming events in the lab.
It contains mostly public events that are of interest to the team and students.
<div id="ec"></div>
To subscribe directly, you can export the .ics file, then add the calendar to Outlook or Thunderbird.
```sh
https://raw.githubusercontent.com/fs-ise/handbook/main/assets/calendar/fs-ise_cal.ical
```
To add or modify events, edit the `events.yaml` file [here]({{< meta handbook.url >}}/edit/main/assets/calendar/events.yaml){target=_blank}.
:::
<script src="assets/calendar/calendar.js"></script>