init project running

a scraper for jobs in the reagion with connected telegram bot to send my new jobs every day
This commit is contained in:
trnq1ll0 committed 2026-09-02 16:11:22 +02:00
commit 9e8b4c1ad3
45 files changed
+4307

No files matched your search

+1
View File
@@ -0,0 +1 @@
.DS_Store
+36
View File
@@ -0,0 +1,36 @@
# Quellen (verifiziert am 02.09.2026)
## Automatische Feeds (via `05_System/feed_filter.py`)
| Quelle | URL | Anmerkung |
|---|---|---|
| greenjobs.de (Atom) | `https://www.greenjobs.de/angebote/neueste.html?zeitraum=28&feed=atom&ort=Dresden&umkreis=60` | funktioniert; ~27 Treffer/28 Tage; Titelformat: `Titel (Ort) - Firma` |
| eejobs.de (Atom) | `https://www.eejobs.de/angebote/neueste.html?zeitraum=28&feed=atom&ort=Dresden&umkreis=60` | funktioniert; ~22 Treffer/28 Tage |
| wandelbots (Personio-XML) | `https://wandelbots.jobs.personio.de/xml` | funktioniert; `<office>`-Feld vorhanden |
| heliatek (Personio-XML) | `https://heliatek.jobs.personio.de/xml` | funktioniert, aktuell 0 offene Stellen |
| Arbeitsagentur-Jobbörse (REST-API) | `https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v6/jobs` (Header `X-API-Key: jobboerse-jobsuche`) | funktioniert; 10 IT-Suchbegriffe, Dresden ±60 km, 7-Tage-Fenster, nur unbefristet, ohne Zeitarbeit/priv. Vermittler; Dedupe per Referenznummer; Java/PHP/ABAP/SAP/COBOL im Titel → `exclusion_hint` (Agent entscheidet) |
Hinweise:
- Personio-Job-URL: `https://<firma>.jobs.personio.de/job/<id>`
- Sunfire nutzt Softgarden (sunfire.softgarden.io), SachsenEnergie/ENSO nutzen HelixJobs (enso.helixjobs.com) — keine öffentlichen Feed-APIs gefunden → deren Karriereseiten per web_extract prüfen.
- Personio-Feeds von sunfire, sachsenenergie, enso, ufz, blackstonetechnology u. a. werden von einer Bot-Schutzseite (Vercel) blockiert oder ratenlimitiert (HTTP 307/429). Diese Firmen **nicht** per curl versuchen, sondern über die Websuche bzw. deren Karriereseiten abdecken.
## Ohne Feed → Websuche
- Indeed (RSS: HTTP 403, blockiert)
- StepStone, LinkedIn, Xing
- itsax.de (`/rss` ist HTML, kein Feed)
- nachhaltigejobs.de (kein Feed)
- jobverde.de (kein Feed)
- talents4good.de, goodjobs.eu (kein Feed gefunden)
## Karriereseiten (direkt prüfen, regelmäßig)
- Sunfire: sunfire.com/en/careers (Wasserstoff-Elektrolyseure, Dresden)
- SachsenEnergie: karriere.sachsenenergie.de (Dresden)
- SachsenNetze: sachsennetze.de (Dresden)
- Fraunhofer IKTS/IWS: recruiting.fraunhofer.de (Dresden)
- HZDR: hzdr.de/jobs (Dresden)
- IÖR: ioer.de/stellenangebote (Dresden)
- UFZ: ufz.de/karriere (Leipzig)
- Blackstone Technology: blackstone-technology.de (Döbeln, Feststoffbatterien)
- Nationalpark Sächsische Schweiz: nationalpark-saechsische-schweiz.de (Bad Schandau)
- Stadt Dresden: dresden.de/jobs
+54
View File
@@ -0,0 +1,54 @@
# Suchprofil (verbindliche Kriterien für den Agenten)
## Person
- Fachinformatiker (Systemintegration), 20+ Jahre Erfahrung
- Schwerpunkte: Linux/Unix, Python, DevOps, Infrastruktur, Netzwerk, Virtualisierung, Docker, KI/LLM, Web (Full-Stack), Embedded, 3D/VR/Unity, Backup/Automation
- Präferenz: mit Linux, BSD, Nix/NixOS oder anderen Unix-Derivaten arbeiten
## Suchradius
- Dresden + Großraum bis ca. 60 km: Radebeul, Meißen, Freital, Pirna, Riesa, Großenhain, Kamenz, Bautzen, Sächsische Schweiz, Wilsdruff, Heidenau, Coswig; Richtung Leipzig und Chemnitz
- Arbeit **im Team vor Ort** — kein Einzelkämpfer-Posten, kein 100%-Remote-Solo-Job
- (Entfernung prüfen: nur Orte, die real pendelbar sind)
## Harte Filter (Muss)
1. **Feste Anstellung** mit Gehalt + Urlaub (kein Freelance/Werkvertrag/Praktikum/Werkstudent/BFD)
2. **Ort** im Suchradius (s. o.)
3. **Ökologisch sinnvoll**: Arbeitgeber in Naturschutz, Nachhaltigkeit, Umwelt, E-Mobility/Energy, Batterietechnik, (Bau-/Wertstoff-)Recycling, Veganismus o. Ä. — **nein** zu: Industriebuden ohne Sinnbezug, Webagenturen, CRM/ERP-Anbietern, fossiler Energie (Kohle/Gas/Öl)
4. **Kein Java, kein PHP** als Kernaufgabe der Programmierung
## Weiche Präferenzen (Plus, kein Muss)
- Unix-Stack (Linux/BSD/Nix), Python, Shell, CI/CD, Kubernetes/Docker, Netzwerk, Monitoring, Open Source
- KI/LLM-Anwendung im Alltag
- Open-Source-Kultur, flache Hierarchien, sinnstiftende Mission
## Rollen-Keywords (wonach gesucht wird)
Linux, Unix, BSD, NixOS, Nix, Python, DevOps, SRE, Systemadministrator, System Engineer, IT-Administrator, IT-Spezialist, IT-Experte, Infrastruktur, Cloud, Kubernetes, Docker, Virtualisierung, Netzwerk(technik), Embedded, Firmware, C#, Unity, 3D, Softwareentwickler, Developer, Engineer, Backend, Full-Stack, Datenbank, PostgreSQL, Open Source, Ansible, Terraform, Monitoring, Backup, Security, KI/Künstliche Intelligenz, Machine Learning, Data Engineer
## Ausschluss-Keywords (überspringen, außer Rolle ist klar IT und Arbeitgeber klar öko)
Java (als Kern), PHP (als Kern), ABAP, SAP-Entwicklung, COBOL, Buchhaltung, Controlling, Lohnbuchhaltung, Vertrieb/Außendienst, Recruiting/HR, Marketing, Callcenter, Pflege, Handwerk
## Suchanfragen (täglich per Websuche)
1. Stellenangebote Linux Systemadministrator Dresden
2. DevOps Engineer Stellenangebot Dresden
3. Python Softwareentwickler Stelle Dresden Nachhaltigkeit
4. IT-Jobs Energiewende Umweltschutz Dresden Sachsen
5. Sunfire Dresden Karriere Stellenangebote
6. SachsenEnergie Karriere IT Stellen
7. Fraunhofer IKTS Dresden Stellenangebote Informatik
8. UFZ Leipzig Stellenangebote IT
9. IÖR Dresden Stellenangebote
10. HZDR Dresden Stellenangebote IT
11. Blackstone Technology Döbeln Jobs
12. itsax.de IT Stellen Dresden Linux
13. nachhaltigejobs.de Dresden
14. Embedded Firmware Entwickler Dresden Energie
15. Batteriespeicher OR Energiespeicher Softwareentwickler Dresden
16. Recycling Unternehmen IT Stelle Dresden Leipzig
17. Stadt Dresden Stellenangebote IT Digitalisierung
18. Nationalpark Sächsische Schweiz Stellenangebote
## Bewertung & Ablage (Agenten-Anweisung)
- Jeder Treffer wird gegen die harten Filter geprüft; Grenzfälle (z. B. „Sachsen" statt Dresden) als `grenzfall` markieren.
- Jeder NEUE Job (URL noch nicht in `02_Jobangebote/status.json`) bekommt eine eigene Datei unter `02_Jobangebote/<YYYY-MM-DD>/job-<kürzel>.md`.
- `02_Jobangebote/index.md` pflegen: eine Zeile je offenem Kandidaten mit Status.
- Nichts löschen; Abgelegtes wandert nach `04_Archiv/`.
+43
View File
@@ -0,0 +1,43 @@
# Firmen-Watchlist (Region Dresden ±60 km)
## Tier 1 — Kernziele (klar ökologisch sinnvoll, Region)
| Firma | Ort | Bereich |
|---|---|---|
| Sunfire GmbH | Dresden | Wasserstoff-Elektrolyseure |
| Heliatek GmbH | Dresden | Organische Solarfolien |
| UKA Umweltgerechte Kraftanlagen GmbH & Co. KG | Meißen | Wind-/Solarprojektentwicklung |
| TRICERA energy | Dresden | Energiespeicher |
| Blackstone Technology GmbH | Döbeln | 3D-gedruckte Feststoffbatterien |
| SachsenEnergie AG (DREWAG/ENSO) | Dresden | Kommunale Energieversorgung |
| SachsenNetze GmbH | Dresden | Strom-/Gasnetz, Energiewende |
| Dornier Power and Heat GmbH | Dresden/Leipzig | Kraftwerkstechnik (prüfen!) |
| Fraunhofer IKTS | Dresden | Keramik, Batterien, Wasserstoff |
| Fraunhofer IWS | Dresden | Werkstoff-/Lasertechnik |
| Helmholtz-Zentrum Dresden-Rossendorf (HZDR) | Dresden | Forschung, u. a. Energie |
| Leibniz-Institut für ökologische Raumentwicklung (IÖR) | Dresden | Nachhaltige Stadtentwicklung |
| UFZ Helmholtz-Zentrum für Umweltforschung | Leipzig | Umweltforschung |
| iDiv Deutsches Zentrum für integrative Biodiversitätsforschung | Leipzig | Biodiversität |
| Nationalpark Sächsische Schweiz | Bad Schandau | Naturschutz |
| Staatsbetrieb Sachsenforst | Graupa | Forst/Natur |
| Landeshauptstadt Dresden (Umweltamt, IT-Dienstleister) | Dresden | Kommune |
| Veolia / ALBA / REMONDIS (Standorte Dresden/Leipzig) | Region | Recycling/Kreislaufwirtschaft |
| TÜV SÜD Rail GmbH | Dresden (Standort) | Schienenverkehr (klimafreundlich) |
## Tier 2 — Angrenzend (nur bei wirklich passender, sinnstiftender Rolle)
| Firma | Ort | Bereich |
|---|---|---|
| Wandelbots GmbH | Dresden | Robotik-Automatisierung (neutral, starkes Tech-Team) |
| Vitesco Technologies | Dresden | E-Mobility-Komponenten |
| Stadtreinigung Dresden | Dresden | Abfallwirtschaft |
| Leibniz-Institut für Festkörper- und Werkstoffforschung (IFW) | Dresden | Materialforschung |
## Tier 3 — Ausschluss (nicht verfolgen)
- Braunkohle/Fossil: LEAG, Ontras, VNG (fossiles Gas)
- Banken, Versicherungen, klassische Industriebuden
- Webagenturen, CRM/ERP-Anbieter (auch wenn „greenwashing")
- Firmen, die primär Java/PHP-Entwicklung suchen
## Neu entdeckte Arbeitgeber
Neue, passende Arbeitgeber (z. B. aus Feeds oder Websuche gefunden) hier ergänzen — mit Ort, Bereich und Tier-Einstufung.
- Hinweis TRICERA energy (Tier 1): sucht laut VEE-Beitrag 01/2026 aktiv u. a. IT-Systemadministration & IT-Security. Karriere-Posts unter `tricera.energy/stellenausschreibung-<slug>/`; „Software Engineer – BESS" (04/2026) wurde besetzt, „Systems Engineer – BESS" (01/2026) offen.
@@ -0,0 +1,8 @@
# Systembetreuer Informationssicherheit (m/w/d) — Landeshauptstadt Dresden, Eigenbetrieb IT-Dienstleistungen
- Ort: Dresden
- Quelle: Bewerberportal Dresden — https://bewerberportal.dresden.de/BWVOnlinePortal/ausschreibungdetails?mdId=7&ausId=601
- Gefunden: 2026-09-01
- Status: offen
- Einschätzung: stark — unbefristet, Vollzeit (39 h), EG 9b–10 TVöD, 30 Tage Urlaub. IT-Security-Administration: Bearbeitung/Dokumentation von Sicherheitsvorfällen (teilw. Forensik), Durchsetzung von IT-Sicherheitsmaßnahmen, Sensibilisierung, Konzeption technischer/organisatorischer Maßnahmen. Zugang explizit auch über „Ausbildung Informatik + mehrjährige Berufserfahrung in der Administration" — passt auf 20+ Jahre Systemintegration. Arbeitgeber Kommune (Watchlist Tier 1). Chiffre EB17 02/2026.
- Notizen: Security-/Verwaltungsfokus statt Linux-Core; EG 9b–10 moderat. Bewerbung über bewerberportal.dresden.de.
@@ -0,0 +1,8 @@
# Serversystembetreuer Server Virtualisierung / VDI (m/w/d) — Landeshauptstadt Dresden, Eigenbetrieb IT-Dienstleistungen
- Ort: Dresden (Pirnaischer Platz)
- Quelle: Bewerberportal Dresden — https://bewerberportal.dresden.de/BWVOnlinePortal/ausschreibungdetails?mdId=7&ausId=606
- Gefunden: 2026-09-01
- Status: offen
- Einschätzung: stark — unbefristet, Vollzeit (39 h), TVöD E9b, 30 Tage Urlaub, Home-Office-Option. Aufgaben: Installation/Administration/Monitoring von x86-Servern, Virtualisierung/VDI, Hochverfügbarkeit, Storage, Lastverteilung, ITIL. Linux-Server-Administration ausdrücklich erwünscht — deckt sich stark mit Linux-/Infrastruktur-Profil. Arbeitgeber Kommune (Watchlist Tier 1). Chiffre EB17 05/2026.
- Notizen: E9b ist eher moderate Entgeltgruppe; Bewerbung über bewerberportal.dresden.de.
@@ -0,0 +1,8 @@
# Systems Engineer – BESS (m/w/d) — TRICERA energy GmbH
- Ort: Dresden (Industriestraße 65, 01129)
- Quelle: Karriereseite — https://tricera.energy/stellenausschreibung-systems-engineer-bess/
- Gefunden: 2026-09-01
- Status: offen
- Einschätzung: grenzfall — Festanstellung, Vollzeit, 30 Tage Urlaub, mobiles Arbeiten 2–3 Tage/Woche, Tier-1-Arbeitgeber (Batteriespeicher, Energiewende). Aber: Rolle ist energietechnisches Systems Engineering (Anforderungsanalyse, Steuer-/Regelalgorithmen, Netzanschlussregeln, Testpläne); Programmierung (Python/Go) nur „von Vorteil". Git, Docs-as-Code, Code-Reviews sind Teil des Alltags. Passt nur bedingt auf das Linux-/DevOps-Kernprofil.
- Notizen: Ausschreibung vom 27.01.2026, weiterhin online. Embedded-Pendant (Xing/rejobs) unklar — Benefits-Text dort deutet auf Praktikumsvermischung, daher nicht abgelegt. TRICERA sucht laut VEE-Beitrag 01/2026 aktiv u. a. IT-Systemadministration & IT-Security.
@@ -0,0 +1,8 @@
# Energy Technology Integration Specialist (m/w/d) — UKA Umweltgerechte Kraftanlagen GmbH & Co. KG
- Ort: Dresden
- Quelle: greenjobs.de — https://www.greenjobs.de/angebote/index.html?id=100154543&anz=html
- Gefunden: 2026-09-01
- Status: offen
- Einschätzung: stark — Tier-1-Arbeitgeber (Wind-/Solarprojektentwicklung, Meißen/Dresden). „Integration Specialist" klingt nach IT-/Systemintegration in der Energietechnik; genaue Anforderungen auf der Anzeigenseite prüfen.
- Notizen:
@@ -0,0 +1,8 @@
# Senior Software Engineer (gn) Camera Integration Framework — Wandelbots GmbH
- Ort: Dresden
- Quelle: Personio — https://wandelbots.jobs.personio.de/job/2743165
- Gefunden: 2026-09-01
- Status: offen
- Einschätzung: grenzfall — Arbeitgeber Tier 2 (Robotik, nicht primär ökologisch, aber starkes Tech-Team, Dresden). Rolle: Softwareentwicklung im Kamera-/Sensor-Bereich (Embedded/Nah-3D) — passt fachlich gut.
- Notizen: Department Engineering, permanent.
@@ -0,0 +1,8 @@
# Staff Backend Engineer (gn) with Cloud Know-How — Wandelbots GmbH
- Ort: Dresden
- Quelle: Personio — https://wandelbots.jobs.personio.de/job/2681684
- Gefunden: 2026-09-01
- Status: offen
- Einschätzung: grenzfall — Arbeitgeber Tier 2 (Robotik, nicht primär ökologisch, aber starkes Tech-Team, Dresden). Rolle: Backend + Cloud — passt fachlich gut (Python/Cloud/Infrastruktur).
- Notizen: Department Engineering, permanent.
+13
View File
@@ -0,0 +1,13 @@
# Index der gefundenen Jobangebote
Legende Status: `offen` = Kandidat, `bewerbung` = Bewerbung läuft, `gesendet` = Bewerbung raus,
`antwort` = Antwort erhalten, `gespräch` = im Gespräch, `zu` = Absage/Zusage, `archiviert` = in 04_Archiv.
| Datum | Job | Firma | Ort | Quelle | Status |
|---|---|---|---|---|---|
| 2026-09-01 | Energy Technology Integration Specialist | UKA Umweltgerechte Kraftanlagen | Dresden | greenjobs.de | offen |
| 2026-09-01 | Senior Software Engineer Camera Integration Framework | Wandelbots | Dresden | Personio | offen |
| 2026-09-01 | Staff Backend Engineer with Cloud Know-How | Wandelbots | Dresden | Personio | offen |
| 2026-09-01 | Serversystembetreuer Server Virtualisierung / VDI | Landeshauptstadt Dresden (EB IT) | Dresden | bewerberportal.dresden.de | offen |
| 2026-09-01 | Systembetreuer Informationssicherheit | Landeshauptstadt Dresden (EB IT) | Dresden | bewerberportal.dresden.de | offen |
| 2026-09-01 | Systems Engineer – BESS | TRICERA energy | Dresden | tricera.energy | offen |
+73
View File
@@ -0,0 +1,73 @@
{
"seen": {
"https://www.greenjobs.de/angebote/index.html?id=100146857&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100149191&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100149420&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154679&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154604&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154558&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154562&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154555&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154550&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154548&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154539&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154538&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154543&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154570&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154527&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154529&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154532&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154535&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154520&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154521&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154350&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154343&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154342&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100148459&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100151235&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100154287&anz=html": "2026-09-01",
"https://www.greenjobs.de/angebote/index.html?id=100151811&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154679&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154604&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154558&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154562&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154555&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154550&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154548&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154539&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154538&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154543&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154570&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154527&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154529&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154532&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154535&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154520&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154521&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154350&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100148459&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100151235&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100154287&anz=html": "2026-09-01",
"https://www.eejobs.de/angebote/index.html?id=100151811&anz=html": "2026-09-01",
"https://wandelbots.jobs.personio.de/job/2653059": "2026-09-01",
"https://wandelbots.jobs.personio.de/job/2743165": "2026-09-01",
"https://wandelbots.jobs.personio.de/job/2681684": "2026-09-01",
"https://www.itsax.de/jobs/301144/linux-systemadministrator-in-w-strich-m-strich-d-in-dresden": "2026-09-01",
"https://anvajo.jobs.personio.com/job/2534894?language=de": "2026-09-01",
"https://jobs.dis-ag.com/job/d3de3c25-1619-44c6-b9c5-61c50af72e0d/it-administratorin-dresden-43343": "2026-09-01",
"http://ioer.de/karriere/stellenangebote/detail/leiterin-wmd-dresden-concept-research-group-sitesai-sitesai-1": "2026-09-01",
"https://bewerberportal.dresden.de/BWVOnlinePortal/ausschreibungdetails?mdId=7&ausId=606": "2026-09-01",
"https://bewerberportal.dresden.de/BWVOnlinePortal/ausschreibungdetails?mdId=7&ausId=601": "2026-09-01",
"https://tricera.energy/stellenausschreibung-systems-engineer-bess/": "2026-09-01",
"https://tricera.energy/stellenausschreibung-software-engineer-bess/": "2026-09-01",
"https://rejobs.org/en/renewable-energy-jobs/119254-systems-engineer-embedded-systems-tricera-energy-gmbh": "2026-09-01",
"https://www.xing.com/jobs/dresden-systems-engineer-embedded-systems-154346689": "2026-09-01",
"https://tud.stellenticket.de/de/offers/206296": "2026-09-01",
"https://tud.stellenticket.de/de/offers/206297": "2026-09-01",
"https://recruiting.fraunhofer.de/Vacancies/49260/Description/1": "2026-09-01",
"https://jobs.fraunhofer.de/job/Dresden-Entwicklerin-KI-&-Machine-Learning-01069/1427048833/": "2026-09-01",
"https://www.itsax.de/jobs/303014/linux-systemadministrator-fuer-cloud-infrastruktur-and-virtualisierung-m-slash-w-slash-d-in-dresden": "2026-09-01",
"https://nationalpark-saechsische-schweiz.de/uploads/pdfs/Stellenausschreibungen/61_2026_Ausschreibung_4-Ranger_NLPFV_befristet.pdf": "2026-09-01",
"https://www.service.bund.de/IMPORTE/Stellenangebote/interamt/2026/07/1470714.html?nn=4642044&type=0": "2026-09-01"
}
}
+25
View File
@@ -0,0 +1,25 @@
# Bewerbungen
Hier landen die Bewerbungsunterlagen und der Status je Bewerbung.
**Empfehlung:** Je Bewerbung eine Datei anlegen, z. B.:
```
03_Bewerbungen/2026-09-05_Sunfire_Systemadministrator.md
```
Inhalt (Vorlage):
```markdown
# Bewerbung: <Jobtitel> bei <Firma>
- Job-Quelle: <Link zur Datei in ../02_Jobangebote/...>
- Beworben am: <Datum>
- Unterlagen: <Anschreiben, Lebenslauf, Zeugnisse — Pfade oder "im SMB-Ordner unter ...">
- Status: geplant | gesendet | Antwort | Gespräch | Absage | Zusage
- Kontakt: <Ansprechpartner, E-Mail, Telefon>
- Notizen:
```
Du kannst den Hermes-Bot auch bitten, Bewerbungen anzulegen oder den Status im
`02_Jobangebote/index.md` zu aktualisieren.
+4
View File
@@ -0,0 +1,4 @@
# Archiv
Erledigte, verworfene oder abgelaufene Jobangebote werden hierher verschoben
(statt gelöscht), damit die Historie erhalten bleibt.
+247
View File
@@ -0,0 +1,247 @@
#!/usr/bin/env python3
"""Jobsuche: Feed-Fetcher mit Regional-/Strukturfilter.
Holt die konfigurierten Job-Quellen (Atom + Personio-XML + Arbeitsagentur-
REST-API), filtert regional (Dresden + Umland) und gibt das Ergebnis als
JSON auf stdout aus.
Nur Python-Stdlib. Fehler einzelner Feeds werden abgefangen (status=error),
das Skript endet immer mit Exit-Code 0.
"""
import json
import re
import urllib.request
import xml.etree.ElementTree as ET
from urllib.parse import urlencode
from datetime import datetime, timezone
UA = "Mozilla/5.0 (X11; Linux x86_64) JobRadar/1.0"
TIMEOUT = 25
# Region: Dresden + Großraum bis ~60 km (inkl. Richtung Leipzig/Chemnitz/Bautzen)
REGION = re.compile(
r"Dresden|Meißen|Meissen|Radebeul|Coswig|Freital|Pirna|Heidenau|Riesa|"
r"Großenhain|Kamenz|Bautzen|Dippoldiswalde|Freiberg|Chemnitz|Leipzig|"
r"Görlitz|Sächsische Schweiz|Bad Schandau|Sebnitz|Neustadt|Ottendorf|"
r"Wilsdruff|Tharandt|Bannewitz|Kreischa|Dohna|Glashütte|Weinböhla|Nossen|"
r"Lommatzsch|Lausitz|Sachsen|Saxony",
re.IGNORECASE,
)
FEEDS = [
{
"name": "greenjobs",
"kind": "atom",
"url": ("https://www.greenjobs.de/angebote/neueste.html"
"?zeitraum=28&feed=atom&ort=Dresden&umkreis=60"),
},
{
"name": "eejobs",
"kind": "atom",
"url": ("https://www.eejobs.de/angebote/neueste.html"
"?zeitraum=28&feed=atom&ort=Dresden&umkreis=60"),
},
{
"name": "wandelbots",
"kind": "personio",
"company": "wandelbots",
"url": "https://wandelbots.jobs.personio.de/xml",
},
{
"name": "heliatek",
"kind": "personio",
"company": "heliatek",
"url": "https://heliatek.jobs.personio.de/xml",
},
{
"name": "arbeitsagentur",
"kind": "arbeitsagentur",
"url": "https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v6/jobs",
},
]
ATOM_NS = {"a": "http://www.w3.org/2005/Atom"}
# ── Arbeitsagentur-Jobbörse (REST-API, kein Feed) ──────────────────────────
BA_URL = "https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v6/jobs"
BA_API_KEY = "jobboerse-jobsuche"
# Suchbegriffe = Titelsuche, abgestimmt aufs Suchprofil (Rollen-Keywords).
BA_QUERIES = [
"Linux", "Systemadministrator", "IT-Administrator", "DevOps", "Python",
"Netzwerk", "Embedded", "Infrastruktur", "Security", "Kubernetes",
]
BA_FIXED = {
"angebotsart": "1", # 1 = ARBEIT
"wo": "Dresden",
"umkreis": "60",
"pav": "false", # keine privaten Arbeitsvermittlungen
"zeitarbeit": "false",
"arbeitszeit": "vz;tz", # Vollzeit + Teilzeit
"befristung": "2", # 2 = unbefristet
"veroeffentlichtseit": "7",
}
# Hart-Ausschluss: Rollen, die nie "klar IT" sein können (Suchprofil).
BA_HARD_BLOCK = re.compile(
r"Pflege|Handwerk|Callcenter|Buchhaltung|Controlling|Lohnbuchhaltung|"
r"Vertrieb|Außen|Aussen|Marketing|Recruiting|Personalwesen|"
r"Kassierer|Verkäufer|Reinigung",
re.IGNORECASE,
)
# Nur markieren, nicht ausschließen (Agent prüft Ausnahme: klar IT + klar öko).
BA_SOFT_BLOCK = re.compile(r"Java|PHP|ABAP|SAP|COBOL", re.IGNORECASE)
def fetch(url: str, headers: dict | None = None) -> bytes:
hdrs = {"User-Agent": UA, "Accept": "*/*"}
if headers:
hdrs.update(headers)
req = urllib.request.Request(url, headers=hdrs)
with urllib.request.urlopen(req, timeout=TIMEOUT) as resp:
return resp.read()
def parse_atom(data: bytes) -> list:
root = ET.fromstring(data)
items = []
for e in root.findall("a:entry", ATOM_NS):
link_el = e.find("a:link", ATOM_NS)
href = link_el.attrib.get("href", "") if link_el is not None else ""
title = (e.findtext("a:title", default="", namespaces=ATOM_NS) or "").strip()
updated = (e.findtext("a:updated", default="", namespaces=ATOM_NS) or "").strip()
items.append({"title": title, "url": href, "updated": updated})
return items
def parse_personio(data: bytes, company: str) -> list:
root = ET.fromstring(data)
items = []
for p in root:
def f(tag: str) -> str:
el = p.find(tag)
return (el.text or "").strip() if el is not None else ""
office = f("office")
if office and not REGION.search(office):
continue
jid = f("id")
items.append({
"title": f("name"),
"office": office,
"department": f("department"),
"employmentType": f("employmentType"),
"seniority": f("seniority"),
"schedule": f("schedule"),
"createdAt": f("createdAt"),
"keywords": f("keywords"),
"url": f"https://{company}.jobs.personio.de/job/{jid}" if jid else "",
})
return items
def parse_arbeitsagentur() -> tuple:
"""Arbeitsagentur-Jobbörse: alle Suchbegriffe abfragen, deduplizieren.
Gibt (items, errors) zurück; einzelne Suchanfragen werden isoliert
abgefangen, damit ein API-Fehler nicht die ganze Quelle kippt.
"""
by_ref: dict = {} # referenznummer -> item
errors: list = []
for q in BA_QUERIES:
params = urlencode({"was": q, **BA_FIXED})
page, total, collected = 1, None, 0
while True:
url = f"{BA_URL}?{params}&page={page}&size=100"
try:
data = fetch(url, headers={"X-API-Key": BA_API_KEY})
payload = json.loads(data)
except Exception as ex: # noqa: BLE001
errors.append(f"{q!r} (Seite {page}): {type(ex).__name__}: {ex}")
break
if total is None:
total = payload.get("maxErgebnisse") or 0
results = payload.get("ergebnisliste") or []
for j in results:
ref = (j.get("referenznummer") or "").strip()
title = (j.get("stellenangebotsTitel") or "").strip()
if not ref or not title:
continue
if BA_HARD_BLOCK.search(title):
continue
if ref not in by_ref:
locs = j.get("stellenlokationen") or []
orts, region = [], ""
for loc in locs:
adr = loc.get("adresse") or {}
ort = (adr.get("ort") or "").strip()
if ort and ort not in orts:
orts.append(ort)
if not region:
region = (adr.get("region") or "").strip()
ver = ((j.get("veroeffentlichungszeitraum") or {}).get("von")
or (j.get("datumErsteVeroeffentlichung") or ""))
eintritt = (j.get("eintrittszeitraum") or {}).get("von") or ""
by_ref[ref] = {
"title": title,
"firma": (j.get("firma") or "").strip(),
"ort": " / ".join(orts),
"region": region,
"entfernung": j.get("entfernung"),
"vertragsdauer": j.get("vertragsdauer") or "",
"vollzeit": j.get("arbeitszeitVollzeit"),
"verguetung": j.get("verguetungsangabe") or "",
"veroeffentlichtAm": ver,
"eintrittAb": eintritt,
"hauptberuf": (j.get("hauptberuf") or "").strip(),
"referenznummer": ref,
"url": f"https://www.arbeitsagentur.de/jobsuche/jobdetail/{ref}",
"matchedQueries": [q],
}
else:
by_ref[ref]["matchedQueries"].append(q)
soft = BA_SOFT_BLOCK.findall(title)
if soft:
hint = by_ref[ref].setdefault("exclusion_hint", [])
for m in soft:
if m not in hint:
hint.append(m)
collected += len(results)
if total == 0 or collected >= total or page >= 5:
break
page += 1
items = sorted(
by_ref.values(),
key=lambda i: (i["entfernung"] if isinstance(i["entfernung"], (int, float)) else 99,
i["title"].lower()),
)
return items, errors
def main() -> None:
out = {"generated_at": datetime.now(timezone.utc).isoformat(), "feeds": {}}
for fd in FEEDS:
res = {"name": fd["name"], "kind": fd["kind"], "url": fd["url"]}
try:
if fd["kind"] == "arbeitsagentur":
items, errors = parse_arbeitsagentur()
res["status"] = "ok" if (items or not errors) else "error"
if errors:
res["errors"] = errors
else:
data = fetch(fd["url"])
if fd["kind"] == "atom":
items = parse_atom(data)
else:
items = parse_personio(data, fd.get("company", ""))
res["status"] = "ok"
res["count"] = len(items)
res["items"] = items
except Exception as ex: # noqa: BLE001 - jedes Feed-Problem einzeln abfangen
res["status"] = "error"
res["error"] = f"{type(ex).__name__}: {ex}"
res["count"] = 0
res["items"] = []
out["feeds"][fd["name"]] = res
print(json.dumps(out, ensure_ascii=False, indent=1))
if __name__ == "__main__":
main()
+44
View File
@@ -0,0 +1,44 @@
.DEFAULT_GOAL := help
.PHONY: help all coverletter cv watch watch-coverletter watch-cv clean
TYPST := typst
TYPST_FLAGS := --font-path fonts
BUILD_DIR := build
help:
@echo "Verfügbare Befehle:"
@echo " make all Anschreiben und Lebenslauf erzeugen"
@echo " make coverletter Nur das Anschreiben erzeugen"
@echo " make cv Nur den Lebenslauf erzeugen"
@echo " make watch Beide Dokumente bei Änderungen neu bauen"
@echo " make watch-coverletter Nur das Anschreiben überwachen"
@echo " make watch-cv Nur den Lebenslauf überwachen"
@echo " make clean Erzeugte PDFs entfernen"
all: coverletter cv
coverletter: $(BUILD_DIR)/coverletter.pdf
cv: $(BUILD_DIR)/cv.pdf
watch:
@$(MAKE) --no-print-directory -j2 watch-coverletter watch-cv
watch-coverletter: | $(BUILD_DIR)
$(TYPST) watch $(TYPST_FLAGS) coverletter.typ $(BUILD_DIR)/coverletter.pdf
watch-cv: | $(BUILD_DIR)
$(TYPST) watch $(TYPST_FLAGS) cv.typ $(BUILD_DIR)/cv.pdf
$(BUILD_DIR):
mkdir -p $@
$(BUILD_DIR)/coverletter.pdf: coverletter.typ personal.typ template.typ assets/signature.png | $(BUILD_DIR)
$(TYPST) compile $(TYPST_FLAGS) coverletter.typ $@
$(BUILD_DIR)/cv.pdf: cv.typ personal.typ template.typ | $(BUILD_DIR)
$(TYPST) compile $(TYPST_FLAGS) cv.typ $@
clean:
rm -f $(BUILD_DIR)/coverletter.pdf $(BUILD_DIR)/cv.pdf
+44
View File
@@ -0,0 +1,44 @@
# Bewerbungsunterlagen in Typst
Dieser Ordner ist unabhängig von den LaTeX-Quellen im übergeordneten Projekt.
Er enthält die Typst-Dokumente, die gemeinsame Vorlage, alle benötigten Schriften
und die Unterschrift.
## Voraussetzungen
- Typst 0.15 oder neuer
- `make` (optional; die Typst-Befehle können auch direkt ausgeführt werden)
## PDFs bauen
Im Ordner `typst`:
```sh
make all
```
Die Ergebnisse liegen anschließend unter `build/coverletter.pdf` und
`build/cv.pdf`.
Einzeln lassen sich die Dokumente mit `make coverletter` und `make cv` bauen.
Ohne Make funktionieren auch diese Befehle:
```sh
typst compile --font-path fonts coverletter.typ build/coverletter.pdf
typst compile --font-path fonts cv.typ build/cv.pdf
```
## Automatisch bei Änderungen bauen
Der Watch-Modus überwacht beide Dokumente einschließlich ihrer importierten
Vorlagen und erzeugt die PDFs nach jeder gespeicherten Änderung neu:
```sh
make watch
```
Die Überwachung läuft, bis sie mit `Ctrl+C` beendet wird. Einzelne Dokumente
lassen sich mit `make watch-coverletter` oder `make watch-cv` überwachen.
Gemeinsame Kontaktdaten werden in `personal.typ` gepflegt. Farben, Kopf- und
Fußzeilen sowie wiederverwendbare CV-Komponenten stehen in `template.typ`.
Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+76
View File
@@ -0,0 +1,76 @@
#import "personal.typ": person
#import "template.typ": *
#set page(
paper: "a4",
margin: (left: 20mm, right: 20mm, top: 8mm, bottom: 16mm),
footer: cover-footer(person),
)
#show: document-base
#show link: set text(fill: accent)
#cover-header(person)
#v(11mm)
#grid(
columns: (1fr, auto),
align: (left, right),
[
#text(font: "Source Sans Pro", size: 11pt, weight: 700, fill: dark-ink)[
TRICERA energy GmbH
]
#v(2pt)
#text(font: "Source Sans Pro", size: 9pt, weight: 400, fill: gray-ink)[
#smallcaps([Industriestraße 65\
01129 Dresden])
]
],
text(
font: "Source Sans Pro",
size: 9pt,
weight: 300,
style: "italic",
fill: gray-ink,
)[#today-de],
)
#v(13mm)
#underline(
offset: 5pt,
text(font: "Source Sans Pro", size: 10pt, weight: 600, fill: dark-ink)[
Bewerbung als Netzwerk-Ingenieur / -Techniker (m/w/d)
],
)
#v(6mm)
#set text(font: "Source Sans Pro", size: 10pt, weight: 300, fill: gray-ink)
#set par(justify: false, leading: 0.7em)
Sehr geehrte Damen und Herren,
#v(2.5mm)
Batteriespeicher wie die von TRICERA machen erneuerbare Energie planbar – und brauchen dafür Netzwerkinfrastruktur, die sicher, redundant und sauber dokumentiert ist. An genau dieser Schnittstelle möchte ich arbeiten: technisch anspruchsvoll und zugleich unmittelbar wirksam für die Energiewende. Die ausgeschriebene Stelle verbindet beides mit meinem Werdegang.
Als Fachinformatiker für Systemintegration mit über 20 Jahren Berufserfahrung habe ich Systeme über alle Ebenen hinweg aufgebaut, betrieben und analysiert. In meiner aktuellen Rolle als Softwareentwickler betreue ich die Netzwerkanbindung und das Hosting unserer Anwendungen, den Betrieb von CI-Runnern und die Fehleranalyse über Anwendungs- und Systemgrenzen hinweg. Linux und die Shell sind dabei meine tägliche Arbeitsumgebung; privat betreibe ich Infrastruktur auf NixOS, FreeBSD und TrueNAS – mit Tailscale, Firewalls und automatisierten Backups.
Fachlich bin ich Ihrer Welt bereits begegnet: Ich habe die Anwendung #link("https://www.transnetbw.de/de/netzbooster-anwendung/")[„Netzbooster 360"] für TransnetBW entwickelt – die Visualisierung der Netzbooster-Pilotanlage in Kupferzell – sowie die virtuelle Führung durch das Umspannwerk Conneforde (TenneT). In #link("https://www.vrbits.de/#portfolio")[unserem Portfolio] finden sich zudem VR-Trainings für manuelle Schalthandlungen in Umspannwerken und Begehungen von Offshore-Trafostationen. Netzbetreiber, Umspannwerke und Batteriespeicher als Netzbooster sind mir dadurch konzeptionell vertraut – wenn auch bisher aus der Software- und nicht aus der Netzwerkperspektive.
Transparenz ist mir wichtig: Enterprise-Netzwerke dieser Größenordnung – große Routing- und Switching-Landschaften oder KRITIS-Umgebungen – habe ich bislang nicht verantwortet. Meine Netzwerkerfahrung stammt aus privater Infrastruktur und netzwerknahen Aufgaben im Beruf. Was ich mitbringe, sind solide TCP/IP-Grundlagen, IP-Adressierung, Firewalls und Zugriffsschutz sowie die Fähigkeit, mich selbstständig, gründlich und schnell in neue Systeme einzuarbeiten. VLAN-Segmentierung, Redundanzkonzepte und technische Dokumentation sind Themen, in die ich mich gezielt vertiefen möchte.
Für die ausgeschriebene Rolle bringe ich eine vergleichbare Qualifikation (Fachinformatiker für Systemintegration), fundierte Linux- und Shell-Kenntnisse sowie eine strukturierte, eigenständige Arbeitsweise mit. Deutsch ist meine Muttersprache, Englisch nutze ich täglich in Entwicklung und Dokumentation. Die Mischung aus etwa 90 % Büro- und 10 % Anlagentätigkeit entspricht genau meiner Vorstellung.
Mein frühestmöglicher Eintrittstermin ist der 1. Oktober 2026. Ich freue mich auf ein persönliches Gespräch, um mehr über Ihre Netzwerkinfrastruktur und die anstehenden Projekte zu erfahren.
#v(1mm)
Mit freundlichen Grüßen,
#v(1mm)
#image("assets/signature.png", width: 25mm)
+191
View File
@@ -0,0 +1,191 @@
#import "personal.typ": person
#import "template.typ": *
#set page(
paper: "a4",
margin: (left: 14mm, right: 14mm, top: 8mm, bottom: 16mm),
footer: cv-footer(person),
)
#show: document-base
#set par(leading: 0.56em)
#cv-header(person)
#section("Ber", "ufserfahrung")
#entry(
"C# Developer & Software Engineer for Unity AR/VR",
"vr-bits GmbH",
"Leipzig",
"seit 2019",
(
[Entwicklung und technische Betreuung von 20+ komplexen C\# Anwendungen mit Unity],
[Integration und Kapselung von SDKs, Schnittstellen, Datenformaten, Paketen und externen Services],
[Versions- und Paketpflege, technische Fehleranalyse, Performance-Optimierung und automatisierte Tests],
[CI-Pipelines mit GitHub Actions und GameCI auf lokalen und Remote-Runnern für mehrere Zielplattformen],
[Netzwerkanbindung und Hosting der Anwendungen inklusive Analyse von Problemen über Anwendungs- und Systemgrenzen hinweg],
[XR-Anwendungen für Energiewirtschaft und Netzbetreiber, u. a. „Netzbooster 360" für TransnetBW und virtuelle Führung Umspannwerk Conneforde (TenneT)],
[Client-Server-Kommunikation und plattformübergreifender Betrieb für Web-, Mobile-, Desktop- und XR-Systeme],
),
)
#entry(
"Freelance Full-Stack Developer",
"Selbständig",
"Dresden",
"2017–2019",
(
[Shopware und andere E-Commerce und Warenwirtschaftssysteme auf Basis von PHP, JavaScript, MySQL],
[Migration komplexer Systeme und Datenbanken],
[Frontend-Entwicklung mit modernen JavaScript Frameworks],
[IT-Beratung und Systemadministration],
),
)
#entry(
"Software-Qualitätssicherung – Webentwicklung",
"MAGIX Development AG",
"Dresden",
"2006–2016",
(
[IT-Support und Systemadministration in heterogenen Arbeitsplatz- und Systemumgebungen],
[Softwaretest, Qualitätssicherung und automatisierte Testentwicklung],
[Strukturierte Fehleranalyse und serviceorientierte Unterstützung interner Anwender],
[Inhouse Webentwicklungsprojekte],
),
)
#entry(
"Web Entwickler",
"Nebenberuflich",
"Dresden",
"2012–2017",
(
[Entwicklung von E-Commerce- und Warenwirtschaftssystemen mit PHP, JavaScript und MySQL],
[Responsive Design und Mobile-First Ansätze],
[Datenbankdesign und -optimierung],
),
)
#entry(
"Server Support",
"Compaq Computer Corporation",
"München",
"2001–2001",
(
[1st Level Server Support],
[Technischer Support für Serverprodukte],
),
)
#section("Aus", "bildung")
#entry(
"Fachinformatiker für Systemintegration",
"BSZET Dresden / MAGIX GmbH",
"Dresden",
"2003–2006",
(
[Systemintegration und Anwendungsentwicklung],
[Geschäftsprozesse],
[Virtualisierung],
),
)
#entry(
"Technischer Assistent für Automatisierungs- und Computertechnik",
"Berufliches Schulzentrum Weißwasser",
"Weißwasser",
"1997–2000",
(
[Grundlagen der Rechentechnik, Mess- und Regelungstechnik],
[Programmierung und Automatisierungstechnik],
[Hardware- und Softwareentwicklung],
[CAD],
),
)
#pagebreak()
#cv-header(person)
#section("Tec", "hnische Kenntnisse")
#skills[
#skill("Serveradministration", [Linux, NixOS/Nix, systemd, Docker/Compose, nginx, Nextcloud, Cockpit, POSIX Shell, Bash, PowerShell])
#skill("Speicher & Backup", [ZFS, Samba/SMB, Restic, rsync/SSH, SFTP, VeraCrypt, Robocopy, PostgreSQL-/MySQL-Dumps])
#skill("Netzwerk & Sicherheit", [TCP/IP, IP-Adressierung, Firewalls, OpenSSH, Tailscale/VPN, HTTPS/ACME, SMB-Signierung, Schlüsselverwaltung])
#skill("Betriebssysteme", [Debian, Fedora, NixOS, FreeBSD, CentOS, Windows, macOS])
#skill("Automation & Betrieb", [Updates, Wartung, Logging, Fehlerbehandlung, Backup/Restore, CI/CD, GitHub Actions, GameCI])
#skill("Programmierung", [C\#, Python, JavaScript/TypeScript, PHP, SQL, Shell, HTML/CSS, REST APIs, JSON, XML])
#skill("Qualität & Methoden", [Git, TDD, NUnit, Moq, Pytest, automatisierte Tests, Jira, Scrum, technische Dokumentation])
#skill("Anwendungsentwicklung", [Unity/C\#, Django, Webanwendungen, Datenbanken, Schnittstellenintegration, plattformübergreifende Systeme])
]
#section("Eng", "agement & Mentoring")
#entry(
"Mentor & Jury-Mitglied",
"Jugend hackt Dresden",
"Dresden",
"seit 2015",
(
[Betreuung von Jugendlichen bei Coding-Projekten],
[Jury-Tätigkeit bei Hackathons],
[Förderung von IT-Nachwuchs],
),
)
#entry(
"Dozent & Workshop-Leiter",
"Chaos macht Schule",
"Sachsen",
"2014–2018",
(
[IT-Workshops an Schulen durchgeführt],
[Aufklärung über Datenschutz und IT-Sicherheit],
[Praktische Programmier-Workshops für Schüler],
),
)
#entry(
"Open Source Förderung",
"VISOR – Prototype Fund Project",
"Berlin",
"2017–2018",
(
[Hauptentwicklung und Projektkoordination eines BMBF-geförderten Civic-Tech-Projekts],
[Webtool und offener Datenstandard für digitale Partizipation in Stadtentwicklungsprozessen],
),
)
#entry(
"Lead",
"Open Data Dresden",
"Dresden",
"2014–2021",
(
[Treffen, Aktionen, Veranstaltungen, Software pro Open Data in Dresden],
[Gründung eines Open-Data-Labs mit der Open Knowledge Foundation],
),
)
#entry(
"Speaker",
"Web Montag Dresden, CCC Veranstaltungen",
"Dresden",
"2012–2019",
(
[Vorträge zu Webentwicklung und IT-Trends],
[Wissensaustausch in der Developer-Community],
),
)
#section("Per", "sönliches")
#set text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)
Als begeisterter Autodidakt erschließe ich mir kontinuierlich neue Technologien. Ich arbeite gewissenhaft, selbstständig und eigenverantwortlich und behalte dabei Wartbarkeit, Sicherheit und einen zuverlässigen Betrieb im Blick.
Im Team kommuniziere ich offen, respektvoll und verständlich. Den fachlichen Austausch und unterschiedliche Perspektiven nutze ich gern, um tragfähige Lösungen für komplexe technische Fragestellungen zu entwickeln.
Mein Ziel ist es, diese Erfahrung dort einzusetzen, wo sie zur Energiewende beiträgt – etwa in der Netzwerk- und IT-Infrastruktur von Batteriespeichersystemen.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+12
View File
@@ -0,0 +1,12 @@
// Gemeinsame Stammdaten für Anschreiben und Lebenslauf.
#let person = (
first: "Robert",
last: "Wartenberg",
position: "Software Engineering · Systemintegration · Automatisierung",
street: "Robert-Matzke-Straße 43",
city: "01127 Dresden",
mobile: "(+49) 152 085 166 33",
email: "rw@boogiedev.net",
github: "RobTranquillo",
xing: "Robert_Wartenberg",
)
+175
View File
@@ -0,0 +1,175 @@
// Gemeinsames, eigenständiges Layout für beide Bewerbungsdokumente.
#let accent = rgb("#0395de")
#let ink = rgb("#333333")
#let dark-ink = rgb("#414141")
#let gray-ink = rgb("#3a3a5d")
#let rule-ink = rgb("#5d5d5d")
#let pale = rgb("#999999")
#let today = datetime.today()
#let month-names = (
"Januar", "Februar", "März", "April", "Mai", "Juni",
"Juli", "August", "September", "Oktober", "November", "Dezember",
)
#let today-de = (
str(today.day()) + ". " + month-names.at(today.month() - 1) +
" " + str(today.year())
)
#let document-base(body) = {
set text(font: "Source Sans Pro", lang: "de", size: 9pt, weight: 300, fill: ink)
set par(leading: 0.48em)
body
}
#let name-mark(
person,
size: 22pt,
family: "Roboto",
first-weight: 100,
first-smallcaps: false,
) = [
#text(font: family, size: size, weight: first-weight, fill: gray-ink)[
#if first-smallcaps { smallcaps(person.first) } else { person.first }
]#h(3pt)#text(font: family, size: size, weight: 700, fill: ink)[#person.last]
]
#let fa(glyph) = text(font: "FontAwesome", size: 0.95em)[#glyph]
#let cover-header(person) = block(width: 100%)[
#align(center)[
#name-mark(person, size: 32pt)
#v(1pt)
#text(font: "Source Sans Pro", size: 7.6pt, weight: 400, fill: accent)[
#smallcaps(person.position)
]
#v(2pt)
#text(font: "Roboto", size: 8pt, weight: 400, style: "italic", fill: pale)[
#person.street, #person.city
]
#v(3pt)
#text(font: "Roboto", size: 6.8pt, weight: 400, fill: ink)[
#fa("\u{f10b}") #person.mobile #h(7pt)|#h(7pt)
#fa("\u{f0e0}") #person.email #h(7pt)|#h(7pt)
#fa("\u{f092}") #person.github #h(7pt)|#h(7pt)
#fa("\u{f169}") #person.xing
]
]
]
#let cv-header(person) = block(width: 100%, below: 33pt)[
#grid(
columns: (1fr, 1.8fr, 1fr),
column-gutter: 6pt,
align: (left, center, right),
[
#text(font: "Roboto", size: 8pt, weight: 400, style: "italic", fill: pale)[
#person.street\
#person.city
]
],
align(center)[
#name-mark(
person,
family: "Source Sans Pro",
first-weight: 400,
first-smallcaps: true,
)
#v(2pt)
#text(font: "Source Sans Pro", size: 7.6pt, weight: 400, fill: accent)[
#smallcaps("Lebenslauf")
]
],
[
#text(font: "Roboto", size: 6.8pt, weight: 400, fill: ink)[
#fa("\u{f10b}") #person.mobile\
#fa("\u{f0e0}") #person.email\
#fa("\u{f169}") #person.xing\
#fa("\u{f092}") #person.github
]
],
)
]
#let cv-footer(person) = context grid(
columns: (1fr, 1fr, 1fr),
align: (left, center, right),
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[#smallcaps(today-de)],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[
#smallcaps(person.first + " " + person.last + " · Lebenslauf")
],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[#counter(page).display()],
)
#let cover-footer(person) = align(center)[
#text(font: "Source Sans Pro", size: 8pt, fill: pale, weight: 400)[
#smallcaps(person.first + " " + person.last)
]
]
#let section(accent-part, rest) = block(
width: 100%,
above: 8pt,
below: 5pt,
breakable: false,
)[
#grid(
columns: (auto, 1fr),
column-gutter: 2pt,
align: horizon,
text(font: "Source Sans Pro", size: 16pt, weight: 700)[
#text(fill: accent)[#accent-part]#text(fill: ink)[#rest]
],
line(length: 100%, stroke: 0.9pt + rule-ink),
)
]
#let bullet-list(items) = {
for item in items {
block(width: 100%)[
#grid(
columns: (7pt, 1fr),
column-gutter: 1pt,
[•],
item,
)
]
v(-5pt)
}
}
#let entry(role, organization, location, period, items) = block(
width: 100%,
above: 15pt,
below: 18pt,
breakable: false,
)[
#grid(
columns: (1fr, auto),
column-gutter: 8pt,
row-gutter: 9pt,
text(font: "Source Sans Pro", size: 10pt, weight: 700, fill: dark-ink)[#organization],
text(font: "Source Sans Pro", size: 9pt, weight: 300, style: "italic", fill: accent)[#location],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: gray-ink)[#smallcaps(role)],
text(font: "Source Sans Pro", size: 8pt, weight: 300, style: "italic", fill: gray-ink)[#period],
)
#parbreak()
#v(1pt)
#block(width: 100%)[
#text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)[#bullet-list(items)]
]
]
#let skills(body, above: 16pt, below: 12pt) = block(
width: 100%,
inset: (top: above, bottom: below),
body,
)
#let skill(label, value) = grid(
columns: (45mm, 1fr),
column-gutter: 5mm,
align: (right, left),
text(font: "Source Sans Pro", size: 10pt, weight: 700, fill: dark-ink)[#label],
text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)[#value],
)
+27
View File
@@ -0,0 +1,27 @@
# Technik
Dieses Verzeichnis mit dem Namen "Job Application" soll die zentrale Stelle sein in der Ich meine Job Suche konzentriere. Hier hinterlege ich meine persönlichen Informationen und hier sollen alle Daten über die gesamte Projektzeit abgelegt werden.
Der Ordner soll immer gut aufgeräumt sein, damit ich schnell und einfach alle Informationen finde und bearbeiten kann.
# Grundlagen
Ich bin Fachinformatiker und multi purpuse nerd mit +20 Jahren Berufserfahrung in Coding, Netzwerk, Virtualisierung, KI, Gamedesign und einiges mehr.
Ich bin auf der Suche nach einem neuen Job und würde gern etwas sinvolles tun, nicht einfach nur eine Industriebude, WebAgentur oder irgendwas bei dem hundertsten CRM/ERP/xyz-Anbieter. Sehr gerne möchte ich meine sehr tiefgreifenden IT Fähigkeiten einbringen und etwas machen im Bereich Naturschutz, Nachhaltigkeit, Umwelt, E-Mobility/Energy, Batterietechnik gern auch (Bau-/Wertstoff-)Recycling, Veganismus oder ähnlichen Themen.
# Ziel
Es soll kontinuierlich nach neuen interessanten Jobs für mich gesucht werden, auf die ich mich bewerben kann.
Jeden Tag sollen mir via meinem Telegram Bot neue Job Angebote und Optionen angezeigt werden, wenn sie neu gefunden wurden.
# Constraints
- Anstellung mit festem Gehalt und Urlaubstagen
- Arbeitsplatz in Dresden oder Umgebung in einem Team. Ich möchte kein Einzelkämpfer sein.
- Arbeitgeber aus ökologischer Sicht sinnvoll. Also in entsprechender Branche, Produkt oder Tätigkeit.
- Gerne würde ich mit Linux, BSD, Nix/NixOS oder anderen Unix Derivaten arbeiten
- Ich möchte nicht mit Java oder PHP programmieren
# Hintergerundwissen
Im Ordner my Knowledge liegen Dateien mit Informationen die ich aus meinen bisherigen Projekten extrahiert habe. Die klarmachen welche Fähigkeiten ich besitze.
+30
View File
@@ -0,0 +1,30 @@
# Job Application — Zentrale der Jobsuche
Dieser Ordner ist die zentrale Ablage der Jobsuche (Mission: siehe `Mission Statement.md`).
Betrieben durch den Hermes-Agenten „Jobsuche-Tageslauf" (täglich 16:00 UTC = 18:00 MESZ, Auslieferung per Telegram).
## Struktur
| Ordner/Datei | Zweck |
|---|---|
| `Mission Statement.md` | Ziele & Rahmenbedingungen |
| `my knowledge/` | Profil, Projekte, Technologien (deine Unterlagen) |
| `01_Suchprofil/` | Suchkriterien, Quellen, Firmen-Watchlist |
| `02_Jobangebote/` | Alle gefundenen Jobs + Index + Status |
| `03_Bewerbungen/` | Bewerbungs-Tracking (dein Bereich) |
| `04_Archiv/` | Erledigte/verworfene Angebote |
| `05_System/` | Skripte & Rohdaten der Pipeline |
## Tagesablauf (automatisch)
1. Feed-Skript `05_System/feed_filter.py` holt die Job-Feeds (regional gefiltert: Dresden + 60 km).
2. Der Agent ergänzt per Websuche (Indeed, StepStone, Jobbörse, Firmen-Karriereseiten).
3. Harte Filter: Festanstellung, Dresden ±60 km, ökologisch sinnvoller Arbeitgeber, kein Java/PHP als Kern.
4. Neue Treffer werden in `02_Jobangebote/<Datum>/` abgelegt, `index.md` + `status.json` aktualisiert.
5. Zusammenfassung der **neuen** Treffer geht per Telegram an dich.
## Hinweise
- Zeitverschiebung: Der Cron läuft in UTC. 16:00 UTC = 18:00 MESZ (Sommer) bzw. 17:00 MEZ (Winter).
- Du kannst dem Telegram-Digest direkt antworten (z. B. „bewirb dich auf Nr. 3" oder „X ignorieren").
- Bewerbungsstatus selbst pflegen: einfach in `03_Bewerbungen/` eine Datei je Bewerbung anlegen und im `02_Jobangebote/index.md` den Status ändern (oder dem Bot sagen, er soll es tun).