Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
661 changes: 661 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

18 changes: 16 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
<!--
SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>

SPDX-License-Identifier: AGPL-3.0-or-later
-->

# ics.tools – Kalender für deutsche Feiertage und Schulferien

Ein Open-Source-Projekt, das standardisierte ICS-Kalenderdateien für deutsche Feiertage und Schulferien bereitstellt.

## 📋 Projektbeschreibung

**ics.tools** automatisiert die Bereitstellung von Kalenderinformationen für alle deutschen Bundesländer. Das Projekt bezieht Daten von der Open Holidays API, validiert sie manuell und stellt sie als ICS-Dateien zur Verfügung.
**ics.tools** automatisiert die Bereitstellung von Kalenderinformationen für alle deutschen Bundesländer. Das Projekt nutzt die Daten der [Open Holiday API](https://www.openholidaysapi.org/) als Grundlage, validiert diese manuell und stellt sie als ICS-Dateien zur Verfügung.

### Features

Expand All @@ -19,6 +25,13 @@ Ein Open-Source-Projekt, das standardisierte ICS-Kalenderdateien für deutsche F
3. **Merge** (`02_merge_*.py`) – Daten + Overrides zusammenführen
4. **Generate** (`03_generate_*.py`) – ICS-Dateien erstellen

## Lizenz

Dieses Projekt nutzt unterschiedliche Lizenzen für den Quellcode und die enthaltenen Daten:

* **💻 Quellcode:** Der gesamte Programmcode steht unter der **GNU Affero General Public License v3 (AGPL-3.0)**. Der vollständige Lizenztext befindet sich in der Datei `LICENSE` im Hauptverzeichnis.
* **📊 Daten:** Die Daten im Ordner `/data` (inklusive aller Anpassungen) basieren auf der Open Holiday API und stehen unter der **Open Database License (ODbL)**. Details dazu findest du in der `data/README.md`.

## 🏗️ Website-Generierung

Das Projekt nutzt **Jekyll** zur Umwandlung von Markdown in HTML:
Expand Down Expand Up @@ -56,4 +69,5 @@ Fehler gefunden? Idee für eine Verbesserung?

---

**Open Source & Community-Driven**
**Open Source & Community-Driven**
Copyright (C) 2021-2026 Sebastian Espei
540 changes: 540 additions & 0 deletions data/LICENSE

Large diffs are not rendered by default.

31 changes: 31 additions & 0 deletions data/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Projekt-Daten / Project Data

Dieses Verzeichnis enthält die Datenkomponenten dieses Projekts. Aufgrund der Lizenzbestimmungen der Datenquelle gelten für diesen Ordner andere Lizenzbedingungen als für den restlichen Quellcode des Projekts (AGPLv3).

---

## Deutsch

### Datenquelle & Urheberrecht
Die in diesem Ordner enthaltenen Daten basieren auf Informationen der [**Open Holiday API**](https://www.openholidaysapi.org/).

### Lizenzierung & Änderungen
Diese Daten sowie alle von mir vorgenommenen Änderungen, Modifikationen oder Überschreibungen stehen unter den Bedingungen der **Open Database License (ODbL) v1.0**.

Der vollständige Lizenztext ist online unter [Open Data Commons ODbL](https://opendatacommons.org/licenses/odbl/1-0/) einsehbar.

*Enthält Informationen der Open Holiday API, die hier unter der Open Database License (ODbL) zur Verfügung gestellt werden.*

---

## English

### Data Source & Attribution
The data contained in this folder is based on information from the [**Open Holiday API**](https://www.openholidaysapi.org/).

### Licensing & Modifications
This data, along with any changes, modifications, or overrides made by me, is made available under the terms of the **Open Database License (ODbL) v1.0**.

The full license text can be found online at [Open Data Commons ODbL](https://opendatacommons.org/licenses/odbl/1-0/).

*Contains information from Open Holiday API, which is made available here under the Open Database License (ODbL).*
4 changes: 4 additions & 0 deletions scripts/01_fetch_public_holidays.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import requests
import json
import os
Expand Down
4 changes: 4 additions & 0 deletions scripts/01_fetch_school_holidays.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import json
import os
import time
Expand Down
4 changes: 4 additions & 0 deletions scripts/02_merge_public_holidays.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import json
import os
import hashlib
Expand Down
4 changes: 4 additions & 0 deletions scripts/02_merge_school_holidays.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import hashlib
import json
import os
Expand Down
4 changes: 4 additions & 0 deletions scripts/03_generate_public_holidays_ics.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import os
import json
from pathlib import Path
Expand Down
4 changes: 4 additions & 0 deletions scripts/03_generate_school_holidays_ics.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import json
import os
from datetime import datetime, timedelta, timezone
Expand Down
4 changes: 4 additions & 0 deletions scripts/04_generate_public_holidays_aggregated_ics.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import json
import os
from collections import Counter
Expand Down
4 changes: 4 additions & 0 deletions scripts/cal_diff.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import sys
from pathlib import Path
from datetime import datetime, timedelta
Expand Down
4 changes: 4 additions & 0 deletions scripts/config.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

from datetime import datetime

COUNTRY_CODE = "DE"
Expand Down
4 changes: 4 additions & 0 deletions scripts/generate_page.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

import sys
import os
import shutil
Expand Down
17 changes: 14 additions & 3 deletions website_template/index_template.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
---
# SPDX-FileCopyrightText: 2026 Sebastian Espei <seblsebastian@aol.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

layout: default
title: "ics.tools"
description: "Deutsche Feiertage und Schulferien als Kalender"
Expand All @@ -10,7 +14,9 @@ Dein universeller Kalender für **deutsche Feiertage** und **Schulferien**.

## Was ist ics.tools?

**ics.tools** bietet dir standardisierte Kalenderdateien im **ICS-Format**. Mit nur wenigen Klicks integrierst du Feiertage und Schulferien in deine bevorzugte Kalender-App – und sie bleiben automatisch auf dem neuesten Stand.
**ics.tools** bietet dir standardisierte Kalenderdateien im **ICS-Format**. Damit integrierst du Feiertage und Schulferien mit nur wenigen Klicks in deine bevorzugte Kalender-App – und dank automatischer Updates bleibst du immer auf dem neuesten Stand.

Als verlässliche Basis dient dabei die [Open Holiday API](https://www.openholidaysapi.org/). Deren Daten werden zusätzlich manuell geprüft, bevor sie als fertige ICS-Dateien für dich bereitgestellt werden.

### Zwei einfache Wege:

Expand Down Expand Up @@ -41,7 +47,11 @@ Lade die Datei herunter und importiere sie manuell in deinen Kalender.

---

## ICS-Format – Der Standard für Kalender
## Lizenz & Daten

**Quellcode:** Der Programmcode steht unter der **GNU Affero General Public License v3 (AGPL-3.0)**.

**Daten:** Die Daten im Ordner `/data` basieren auf der Open Holiday API und stehen unter der **Open Database License (ODbL)**.

ICS-Dateien (iCalendar-Format, [RFC 5545](https://www.rfc-editor.org/rfc/rfc5545)) sind der weltweite Standard für Kalenderaustausch. Sie sind mit praktisch jeder Kalender-Anwendung kompatibel.

Expand All @@ -55,4 +65,5 @@ ICS-Dateien (iCalendar-Format, [RFC 5545](https://www.rfc-editor.org/rfc/rfc5545

---

[Impressum](https://skillkiller.de/impressum) • [GitHub](https://github.com/ics-tools/ics.tools) • [Status](https://status.ics.tools/)
[Impressum](https://skillkiller.de/impressum) • [GitHub](https://github.com/ics-tools/ics.tools) • [Status](https://status.ics.tools/)
© 2021-2026 Sebastian Espei