init project running
a scraper for jobs in the region with connected telegram bot to send my new jobs every day
This commit is contained in:
commit
fa4623b586
50 files changed
+1613
No files matched your search
@@ -0,0 +1,2 @@
|
||||
.DS_Store
|
||||
07_bewerbung-typst/build
|
||||
@@ -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
|
||||
@@ -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/`.
|
||||
@@ -0,0 +1,52 @@
|
||||
# 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 — **i. L.** (Insolvenz seit 07/2023, AG Chemnitz AZ 220 IN 1051/23; keine Jobs mehr) |
|
||||
| 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
|
||||
- 09/2026 geprüft & verworfen: AMTC (Fotomasken/Halbleiter, Dresden — IT-Stellen = Fertigungsautomatisierung mit Java/C#), IBH connect (IT-Dienstleister, Dresden), esveo (Digitaldienstleister), XIMA MEDIA (Digitalagentur), Helm & Walter (PHP-Webentwicklung)
|
||||
|
||||
## 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.
|
||||
- Kiwigrid GmbH | Dresden | offene Energie-/E-Mobility-Softwareplattform (IoT, Energiewende) — Tier 1 (09/2026: IT-Projektleiter/CSM)
|
||||
- Verkehrsverbund Oberelbe (VVO) GmbH | Dresden | ÖPNV/Nachhaltige Mobilität — Tier 1 (09/2026: Leiter Digitalisierung/IT, Beginn 2027)
|
||||
- ie2s GmbH | Dresden | Energie-Plattform-/Flexibilitätsservices (IT) — Tier 2 (09/2026: Senior Solution & AI Architect)
|
||||
- ibe Ermisch GmbH | Dresden | Messtechnik/Embedded für Energieinfrastruktur (Hochspannung) — Tier 2 (09/2026: Embedded Linux Engineer)
|
||||
- Cloud&Heat Technologies GmbH | Dresden | Nachhaltige Rechenzentren (Abwärme-Nutzung) + Open-Source-Cloud — Tier 1 (09/2026: DevOps-Engineer-Stelle itsax 303339 war bereits archiviert; Karriere-Seite cloudandheat.com/karriere/stellenangebote/ regelmäßig prüfen; itsax „Initiativbewerbung" offen)
|
||||
- telent GmbH | Radeberg (Standort) | Systemintegrator für KRITIS/Smart Energy/Smart Transportation (Kommunikationsnetze Bahn & Energie) — Tier 2 (09/2026: „System Engineer IP-Netze" nur für Schwerbehinderte → nicht passend; weitere Ausschreibungen beobachten)
|
||||
- Update TRICERA energy (09/2026): „Systems Engineer – BESS" (01/2026) ist jetzt als „Stelle wurde besetzt!" markiert. Offen laut Karriereseite (Berufserfahrene): Infrastructure Engineer – BESS (K8s/Rancher/ArgoCD), Netzwerk-Ingenieur:in / -Techniker:in, Junior Operations Engineer & Coordinator (Wartungskoordination, kein IT), Elektrofachkraft u. a.
|
||||
- Update SachsenEnergie (09/2026): Jobbörse (JS-iframe mastersolution, keine stabilen Detail-URLs) zeigt „Prozess- und Projektmanager*in für Digitalisierung" (Planungs-/Bauprozess, Lastenhefte/Berechtigungskonzepte) — PM-/Anforderungsrolle, kein FiSi-Kern-Fit → nicht abgelegt; IT-Jobbörse weiterhin nur manuell/JS prüfbar.
|
||||
@@ -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.
|
||||
@@ -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 |
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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 auch 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 vorrangig auf Linux und TrueNAS – mit Tailscale, Firewalls und automatisierten Backups. Daneben kenne und schätze ich auch andere Systeme wie NixOS und FreeBSD. Zudem bringe ich aus meiner ersten Ausbildung auch Grundlagenwissen im Aufbau elektrischer Anlagen und Industriesteuerungen mit.
|
||||
|
||||
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 #link("https://local.vr-bits.de/showcases/UWConneforde/index.htm")[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. Nicht zuletzt bringe ich aus meiner ersten Ausbildung auch Grundlagenwissen im Aufbau elektrischer Anlagen und Industriesteuerungen mit.
|
||||
|
||||
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)
|
||||
@@ -0,0 +1,197 @@
|
||||
#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)],
|
||||
[Webintegration sämtlicher Projekte und Mitverantwortung für den korrekten Betrieb in der Infrastruktur der Kunden],
|
||||
[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",
|
||||
(
|
||||
[Facharbeit: Aufbau eines virtuellen Netzwerkes mit DMZ und eines Servers mit LAMP-Umgebung (Linux, Apache, MySQL, PHP)],
|
||||
[Systemintegration und Anwendungsentwicklung einer betriebsinternen Urlaubsverwaltung],
|
||||
[Hardware- und Netzwerkaufbau, 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")
|
||||
|
||||
#v(10pt)
|
||||
|
||||
#set text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)
|
||||
#set par(justify: false, leading: 0.9em)
|
||||
|
||||
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.
|
||||
@@ -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",
|
||||
)
|
||||
@@ -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],
|
||||
)
|
||||
@@ -0,0 +1,4 @@
|
||||
# Archiv
|
||||
|
||||
Erledigte, verworfene oder abgelaufene Jobangebote werden hierher verschoben
|
||||
(statt gelöscht), damit die Historie erhalten bleibt.
|
||||
@@ -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()
|
||||
@@ -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
|
||||
@@ -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 |
@@ -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)
|
||||
@@ -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.
Binary file not shown.
@@ -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",
|
||||
)
|
||||
@@ -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],
|
||||
)
|
||||
@@ -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.
|
||||
@@ -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).
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1020 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.0 MiB |
Reference in new issue
Block a user