{"id":137,"date":"2026-10-05T17:02:01","date_gmt":"2026-10-05T15:02:01","guid":{"rendered":"https:\/\/linuxundich.de\/en\/?page_id=137"},"modified":"2026-10-05T23:17:06","modified_gmt":"2026-10-05T21:17:06","slug":"projects","status":"publish","type":"page","link":"https:\/\/linuxundich.de\/en\/projects\/","title":{"rendered":"Projects"},"content":{"rendered":"\n<style>\n\/* Projektseiten (linuxundich.de\/projekte\/) \u2013 Entwurfsstil.\n   Liegt als synchronisiertes Muster \u201eProjektseiten: Stil\u201c in WordPress und\n   wird von jeder Projektseite eingebunden. Wandert vor der Ver\u00f6ffentlichung\n   ins lui-theme. Farben nur \u00fcber die Theme-Variablen, damit der Dunkelmodus\n   mitzieht. *\/\n\n\/* Seitenleiste und Vorlagen-Titel ausblenden, die Seite bringt eigene mit *\/\n.lui-two-col:has(.lui-pj) > .lui-sidebar-col { display: none; }\n.lui-two-col:has(.lui-pj) > .lui-article-col { flex-basis: 100%; }\n.lui-article-col:has(.lui-pj) .lui-article-header { display: none; }\n\n.lui-pj {\n\t--pj-accent: var(--wp--preset--color--accent, #ff6600);\n\t--pj-accent-dark: var(--wp--preset--color--accent-dark, #cc5200);\n\t--pj-ink: var(--wp--preset--color--contrast, #1a1a1a);\n\t--pj-muted: var(--wp--preset--color--muted, #63625f);\n\t--pj-line: var(--wp--preset--color--line, #e3e1dd);\n\t--pj-bg: var(--wp--preset--color--base, #fff);\n\t--pj-bg2: var(--wp--preset--color--base-2, #f5f4f2);\n\t--pj-mono: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n\t--pj-display: \"Space Grotesk\", \"Inter\", system-ui, sans-serif;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2.75rem;\n}\n.lui-pj > * { margin-block: 0 !important; }\n.lui-pj h1, .lui-pj h2, .lui-pj h3 { text-wrap: balance; }\n.lui-pj section, .lui-pj .lui-pj-sec { display: flex; flex-direction: column; gap: .9rem; }\n.lui-pj .lui-pj-sec > * { margin-block: 0; }\n.lui-pj .lui-pj-sec > h2 { font-size: 1.5rem; }\n\n\/* Kleine Zeilen *\/\n.lui-pj .lui-pj-path { font: 500 .8rem var(--pj-mono); color: var(--pj-muted); }\n.lui-pj .lui-pj-meta { font: 500 .8rem var(--pj-mono); color: var(--pj-muted); margin-top: .35rem; }\n.lui-pj .lui-pj-flag { font: 600 .74rem var(--pj-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--pj-accent-dark); }\n.lui-pj .lui-pj-lead { font-size: 1.1rem; }\n\/* Eine Textbreite f\u00fcr allen Flie\u00dftext, damit Abs\u00e4tze nicht mal schmal, mal seitenbreit laufen *\/\n.lui-pj > p, .lui-pj .lui-pj-sec > p, .lui-pj .wp-block-column > p, .lui-pj .lui-pj-box > p { max-width: 44rem; }\n.lui-pj .lui-pj-note { font-size: .85rem; color: var(--pj-muted); border-left: 3px solid var(--pj-line); padding-left: .8rem; }\n.lui-pj .lui-pj-chips { font: 500 .78rem var(--pj-mono); color: var(--pj-muted); }\n.lui-pj .lui-pj-chips mark, .lui-pj .lui-pj-chip {\n\tdisplay: inline-block; max-width: 100%; margin: 0 .25rem .3rem 0; line-height: 1.5;\n\tbackground: var(--pj-bg2); color: var(--pj-ink); padding: .1em .55em; border-radius: 4px;\n}\n\n\/* Kopf: Icon + Name *\/\n.lui-pj .lui-pj-head { display: flex; gap: 1.4rem; align-items: center; }\n.lui-pj .lui-pj-head > .wp-block-group { margin: 0; min-width: 0; }\n.lui-pj .lui-pj-head h1 { font-size: clamp(2rem, 4.5vw, 2.8rem); margin: 0; letter-spacing: -.02em; }\n.lui-pj .lui-pj-head p { margin: .3rem 0 0; }\n.lui-pj .lui-pj-icon { flex: none; margin: 0; width: 96px; }\n.lui-pj .lui-pj-icon img { width: 96px; height: 96px; object-fit: contain; }\n@media (max-width: 560px) {\n\t.lui-pj .lui-pj-head { flex-direction: column; align-items: flex-start; gap: .8rem; }\n\t.lui-pj .lui-pj-icon, .lui-pj .lui-pj-icon img { width: 64px; height: 64px; }\n}\n\n\/* \u00dcbersicht: Kopf *\/\n.lui-pj .lui-pj-title { font-size: clamp(2.2rem, 5vw, 3.3rem); letter-spacing: -.025em; margin: 0; }\n.lui-pj .lui-pj-title span { color: var(--pj-accent); }\n\n\/* Bezugsquellen *\/\n.lui-pj .lui-get { gap: .55rem; }\n.lui-pj .lui-get .wp-block-button__link {\n\tdisplay: inline-flex; align-items: center; gap: .55rem;\n\tbackground: var(--pj-bg); color: var(--pj-ink); border: 1px solid var(--pj-line);\n\tborder-radius: 8px; padding: .55rem .9rem .55rem .7rem;\n\tfont: 600 .9rem\/1.1 var(--pj-display); text-decoration: none;\n}\n.lui-pj .lui-get .wp-block-button__link::before {\n\tcontent: \"\"; width: 20px; height: 20px; flex: none; background: currentColor;\n\t-webkit-mask: var(--pj-glyph) center \/ contain no-repeat; mask: var(--pj-glyph) center \/ contain no-repeat;\n}\n.lui-pj .lui-get .wp-block-button__link:hover { border-color: var(--pj-accent); }\n.lui-pj .lui-get .is-primary .wp-block-button__link { background: var(--pj-ink); color: var(--pj-bg); border-color: var(--pj-ink); }\n.lui-pj .lui-get .is-planned .wp-block-button__link { border-style: dashed; color: var(--pj-muted); font-weight: 500; pointer-events: none; }\n.lui-pj .lui-get .is-planned .wp-block-button__link::after {\n\tcontent: \"geplant\"; font: 500 .66rem var(--pj-mono); text-transform: uppercase; letter-spacing: .05em;\n\tborder: 1px solid var(--pj-line); border-radius: 3px; padding: .1em .35em; margin-left: .2rem;\n}\nhtml[lang^=\"en\"] .lui-pj .lui-get .wp-block-button.is-planned .wp-block-button__link::after { content: \"planned\"; }\n.lui-get--github  { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7 3 12l5 5M16 7l5 5-5 5M14 4l-4 16'\/%3E%3C\/svg%3E\"); }\n.lui-get--release { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3v12m-5-5 5 5 5-5M4 20h16'\/%3E%3C\/svg%3E\"); }\n.lui-get--ego     { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'%3E%3Cpath d='M10 3h4v3a2 2 0 1 0 4 0V3h3v7h-3a2 2 0 1 0 0 4h3v7h-7v-3a2 2 0 1 0-4 0v3H3v-7h3a2 2 0 1 0 0-4H3V3h7z'\/%3E%3C\/svg%3E\"); }\n.lui-get--flathub { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Cpath d='M12 3 4 7.5v9L12 21l8-4.5v-9L12 3zM4 7.5 12 12l8-4.5M12 12v9'\/%3E%3C\/svg%3E\"); }\n.lui-get--fdroid  { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Crect x='4' y='9' width='16' height='11' rx='2.5'\/%3E%3Cpath d='M7 5l2 3M17 5l-2 3'\/%3E%3Ccircle cx='12' cy='14.5' r='2.6'\/%3E%3C\/svg%3E\"); }\n.lui-get--play    { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 3.5v17a1 1 0 0 0 1.5.86l14-8.5a1 1 0 0 0 0-1.72l-14-8.5A1 1 0 0 0 6 3.5z'\/%3E%3C\/svg%3E\"); }\n.lui-get--wp      { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'\/%3E%3Cpath d='M6.5 8.5h3M14.5 8.5h3M8 8.5l3 9 1.5-4.5M13 8.5l3 9 1.5-5'\/%3E%3C\/svg%3E\"); }\n.lui-get--docs    { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Cpath d='M6 3h8l4 4v14H6zM14 3v4h4M9 12h6M9 16h6'\/%3E%3C\/svg%3E\"); }\n\n\/* Querformat-B\u00fchne 3:2 *\/\n.lui-pj .lui-shots { gap: .75rem !important; margin: 0; }\n.lui-pj .lui-shots .wp-block-image img,\n.lui-pj .lui-pj-shot img {\n\taspect-ratio: 3 \/ 2 !important; width: 100%; height: auto !important; object-fit: cover; object-position: center top;\n\tborder-radius: 8px; box-shadow: 0 10px 28px -14px rgba(0,0,0,.45);\n}\n.lui-pj .lui-shots.is-anchor-right img, .lui-pj .lui-pj-shot.is-anchor-right img { object-position: right top; }\n.lui-pj figcaption { font-style: normal !important; }\n.lui-pj .lui-shots figcaption { position: static !important; background: none !important; color: var(--pj-muted) !important; font-size: .8rem; text-align: center; padding: .4rem 0 0 !important; }\n.lui-pj .lui-pj-shot { margin: 0; }\n.lui-pj .lui-pj-video video { aspect-ratio: 3 \/ 2; width: 100%; object-fit: cover; border-radius: 8px; background: #111; }\n\n\/* Hochkant: Handyrahmen, seitlich wischbar *\/\n.lui-pj .lui-phones {\n\tdisplay: flex !important; flex-wrap: nowrap !important; gap: 1.1rem !important; overflow-x: auto;\n\tscroll-snap-type: x mandatory; padding: 1.2rem 1.2rem 1rem; border-radius: 12px; background: var(--pj-bg2); margin: 0;\n}\n.lui-pj .lui-phones > .wp-block-image { flex: 0 0 190px !important; width: 190px !important; scroll-snap-align: start; margin: 0 !important; display: flex; flex-direction: column; }\n.lui-pj .lui-phones img, .lui-pj .lui-pj-phone video, .lui-pj .lui-pj-phone img {\n\taspect-ratio: 9 \/ 20 !important; height: auto !important; width: 100%; object-fit: cover; object-position: top;\n\tborder: 6px solid #111; border-radius: 24px; background: #111; box-shadow: 0 14px 28px -16px rgba(0,0,0,.6);\n}\n.lui-pj .lui-phones figcaption { position: static !important; background: none !important; color: var(--pj-muted) !important; font-size: .8rem; text-align: center; padding: .5rem 0 0 !important; }\n.lui-pj .lui-pj-phone { margin: 0 auto; max-width: 230px; }\n\n\/* Raster f\u00fcr Funktionen, Schritte, Grunds\u00e4tze *\/\n.lui-pj .lui-pj-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.4rem 2rem; }\n.lui-pj .lui-pj-grid.is-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.lui-pj .lui-pj-grid.is-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n.lui-pj .lui-pj-grid > * { margin: 0 !important; min-width: 0; }\n.lui-pj .lui-pj-grid h3 { font-size: 1.05rem; margin: 0 0 .3rem; }\n.lui-pj .lui-pj-grid p { margin: 0; font-size: .95rem; }\n.lui-pj .lui-pj-grid.is-4 > * { border-top: 1px solid var(--pj-line); padding-top: .8rem; }\n@media (max-width: 900px) { .lui-pj .lui-pj-grid.is-3, .lui-pj .lui-pj-grid.is-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n@media (max-width: 600px) { .lui-pj .lui-pj-grid, .lui-pj .lui-pj-grid.is-3, .lui-pj .lui-pj-grid.is-4 { grid-template-columns: 1fr; } }\n\n.lui-pj .lui-pj-steps { counter-reset: pjstep; }\n.lui-pj .lui-pj-steps > * { counter-increment: pjstep; border-top: 2px solid var(--pj-ink); padding-top: .8rem; }\n.lui-pj .lui-pj-steps > *::before { content: counter(pjstep); display: block; font: 700 1.7rem\/1 var(--pj-display); color: var(--pj-accent); margin-bottom: .4rem; }\n.lui-pj .lui-pj-steps pre { font-size: .78rem; margin: .6rem 0 0; white-space: pre-wrap; overflow-wrap: anywhere; }\n\n\/* Zwei Spalten *\/\n.lui-pj .lui-pj-split { gap: 2rem; align-items: center !important; margin: 0; }\n.lui-pj .lui-pj-split > .wp-block-column > * { margin-block: 0 0 .8rem; }\n\n\/* Fragen und Antworten: K\u00e4sten gestaltet das lui-theme (Details-Block), hier nur der Abstand *\/\n.lui-pj .lui-pj-faq { display: flex; flex-direction: column; gap: .75rem; }\n.lui-pj .lui-pj-faq > .wp-block-details { margin: 0 !important; }\n\n\/* Versionen *\/\n.lui-pj .lui-pj-versions { margin: 0; }\n.lui-pj .lui-pj-versions table { border: 0; font-size: .92rem; }\n.lui-pj .lui-pj-versions td { border: 0; border-bottom: 1px solid var(--pj-line); padding: .55rem .9rem .55rem 0; vertical-align: top; }\n.lui-pj .lui-pj-versions td:first-child { font: 600 .85rem var(--pj-mono); color: var(--pj-accent-dark); white-space: nowrap; }\n.lui-pj .lui-pj-versions td:nth-child(2) { font: .8rem var(--pj-mono); color: var(--pj-muted); white-space: nowrap; }\n\n\/* Dunkler Kasten (wie Footer: immer dunkel) *\/\n.lui-pj .lui-pj-band { background: #1a1a1a; color: #e9e7e3; border-radius: 12px; padding: 1.5rem 1.6rem; gap: 1.5rem; }\n.lui-pj .lui-pj-band h2 { color: #fff; font-size: 1.3rem; margin: 0 0 .4rem; }\n.lui-pj .lui-pj-band p { color: #bdbbb6; margin: 0; font-size: .95rem; }\n.lui-pj .lui-pj-band a { color: #ff8a3d; }\n.lui-pj .lui-pj-band .lui-get .wp-block-button__link { background: #262625; color: #fff; border-color: #3a3938; }\n\n\/* Kasten Datenschutz *\/\n.lui-pj .lui-pj-box { border: 1px solid var(--pj-line); border-radius: 12px; padding: 1.1rem 1.3rem; background: var(--pj-bg2); }\n.lui-pj .lui-pj-box > * { margin: 0; }\n.lui-pj .lui-pj-box h3 { font-size: 1.05rem; margin-bottom: .3rem; }\n\n\/* \u00dcbersicht: hervorgehobenes Projekt *\/\n.lui-pj .lui-pj-feature { background: var(--pj-bg2); border-radius: 12px; padding: 1.4rem; gap: 1.8rem; margin: 0; align-items: center !important; }\n.lui-pj .lui-pj-feature .lui-pj-head { gap: .9rem; }\n.lui-pj .lui-pj-feature .lui-pj-icon, .lui-pj .lui-pj-feature .lui-pj-icon img { width: 56px; height: 56px; }\n.lui-pj .lui-pj-feature h2 { margin: 0; font-size: 1.6rem; }\n.lui-pj .lui-pj-feature .wp-block-column > * { margin-block: 0 .8rem; }\n\n\/* Weitere Projekte *\/\n.lui-pj .lui-pj-more { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: .8rem; }\n.lui-pj .lui-pj-more li { border: 1px solid var(--pj-line); border-radius: 10px; padding: .8rem 1rem; font-size: .9rem; color: var(--pj-muted); }\n.lui-pj .lui-pj-more li a { display: block; font: 600 1.05rem var(--pj-display); color: var(--pj-ink); text-decoration: none; }\n.lui-pj .lui-pj-more li a:hover { color: var(--pj-accent-dark); }\n\n\/* Einzelbild ohne festes Format (z. B. Mini-Player) *\/\n.lui-pj .lui-pj-mini { margin: 0 auto; max-width: 260px; }\n.lui-pj .lui-pj-mini img { border-radius: 10px; box-shadow: 0 10px 28px -14px rgba(0,0,0,.45); }\n.lui-pj .lui-pj-mini figcaption { color: var(--pj-muted); font-size: .8rem; text-align: center; }\n\n\/* Vollbild: Format- und Rahmenregeln aufheben, Video ganz zeigen (Hochkant auf volle H\u00f6he) *\/\n.lui-pj video:fullscreen {\n\taspect-ratio: auto !important; width: 100% !important; height: 100% !important; max-width: none;\n\tobject-fit: contain !important; border: 0 !important; border-radius: 0 !important; box-shadow: none !important; background: #000;\n}\n.lui-pj video:-webkit-full-screen {\n\taspect-ratio: auto !important; width: 100% !important; height: 100% !important; max-width: none;\n\tobject-fit: contain !important; border: 0 !important; border-radius: 0 !important; box-shadow: none !important; background: #000;\n}\n\n\/* Tabelle Voraussetzungen: wie Versionen, aber zweite Spalte darf umbrechen *\/\n.lui-pj .lui-pj-req { margin: 0; }\n.lui-pj .lui-pj-req table { border: 0; font-size: .92rem; }\n.lui-pj .lui-pj-req td { border: 0; border-bottom: 1px solid var(--pj-line); padding: .55rem .9rem .55rem 0; vertical-align: top; }\n.lui-pj .lui-pj-req td:first-child { color: var(--pj-muted); white-space: nowrap; }\n\n\/* Video im Bildschirmformat 16:9 (z. B. Desktop-Aufnahme mit Schnelleinstellungen am Rand) *\/\n.lui-pj .lui-pj-video.is-wide video { aspect-ratio: 16 \/ 9; object-fit: contain; }\n\/* Galerie: Lazy-Bilder (sizes=\"auto\") bekamen in der Flex-Spalte der Abbildung die H\u00f6he 0 *\/\n.lui-pj .lui-shots img { flex: none !important; }\n<\/style>\n\n\n\n<div class=\"wp-block-group alignwide lui-pj is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"lui-pj-path wp-block-paragraph\">~\/projects<\/p>\n\n\n<div class=\"wp-block-group lui-pj-sec is-layout-flow wp-block-group-is-layout-flow\">\n<h1 class=\"wp-block-heading lui-pj-title\">Linux und Ich <span>\u00b7<\/span> Projects<\/h1>\n\n\n<p class=\"lui-pj-lead wp-block-paragraph\">Software I write for my own everyday life with Linux and Android. All of it open source, free of charge and on GitHub. Bug reports, ideas and translations are welcome.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-columns lui-pj-feature is-layout-flex wp-container-core-columns-is-layout-81260c56 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:58%\">\n<figure class=\"wp-block-image size-full lui-pj-shot is-anchor-right\"><a href=\"\/en\/projects\/pulsgeber\/\"><img loading=\"lazy\" decoding=\"async\" width=\"990\" height=\"660\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/10\/pulsgeber-quick-settings.webp\" alt=\"Pulsgeber in the GNOME Quick Settings\" class=\"wp-image-135\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/10\/pulsgeber-quick-settings.webp 990w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/10\/pulsgeber-quick-settings-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/10\/pulsgeber-quick-settings-768x512.webp 768w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><\/a><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"lui-pj-flag wp-block-paragraph\">New release \u00b7 October 2, 2026<\/p>\n\n\n<div class=\"wp-block-group lui-pj-head is-nowrap is-layout-flex wp-container-core-group-is-layout-81260c56 wp-block-group-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ac57fe020ca0&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ac57fe020ca0\" class=\"wp-block-image size-full lui-pj-icon wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"256\" height=\"256\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/10\/pulsgeber-icon.png\" alt=\"Pulsgeber icon\" class=\"wp-image-131\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/10\/pulsgeber-icon.png 256w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/10\/pulsgeber-icon-150x150.png 150w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/10\/pulsgeber-icon-240x240.png 240w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\"><a href=\"\/en\/projects\/pulsgeber\/\">Pulsgeber<\/a><\/h2>\n\n\n<p class=\"lui-pj-meta wp-block-paragraph\">v0.4.1 \u00b7 GPL-3.0<\/p>\n<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Switch TUXEDO power profiles right from the GNOME Quick Settings, without opening the Control Center.<\/p>\n\n\n<p class=\"lui-pj-chips wp-block-paragraph\"><mark>GNOME Shell 50\u201351<\/mark> <mark>Extension<\/mark> <mark>Released<\/mark><\/p>\n\n\n<div class=\"wp-block-buttons lui-get is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button lui-get--docs is-primary\"><a class=\"wp-block-button__link wp-element-button\" href=\"\/en\/projects\/pulsgeber\/\">Learn more<\/a><\/div>\n\n\n<div class=\"wp-block-button lui-get--github\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/linuxundich\/pulsgeber\">GitHub<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<p class=\"lui-pj-chips wp-block-paragraph\">In the works: <mark>Gnomos \u00b7 Sonos for GNOME<\/mark> <mark>Commentator \u00b7 WordPress comments on Android<\/mark><\/p>\n\n\n<div class=\"wp-block-group lui-pj-sec is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\">How the projects come about<\/h2>\n\n\n<div class=\"wp-block-group lui-pj-grid is-4 is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Born from my own needs<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Every program solves a problem I had myself, and I use it every day.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Open source<\/h3>\n\n\n<p class=\"wp-block-paragraph\">GPL or MIT, source code and issue tracker on GitHub. Forks are welcome.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">No account, no cloud<\/h3>\n\n\n<p class=\"wp-block-paragraph\">The programs only talk to your own devices. No tracking, no ads.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">AI-assisted<\/h3>\n\n\n<p class=\"wp-block-paragraph\">I develop with AI assistance. Decisions, reviews and testing stay with me, on my own devices.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-columns lui-pj-band is-layout-flex wp-container-core-columns-is-layout-81260c56 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Get involved<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Found a bug, have an idea for a feature or want to translate? All projects accept issues and pull requests on GitHub. Feedback in the comments below the blog posts works too.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-buttons lui-get is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button lui-get--github\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/linuxundich\">github.com\/linuxundich<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Open source software from Linux und Ich: extensions and apps for GNOME, Android and WordPress.<\/p>\n","protected":false},"author":2,"featured_media":135,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"lui_source_id":47867,"lui_source_hash":"","lui_source_translated":"2026-10-05","lui_source_reviewed":true,"footnotes":""},"class_list":["post-137","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages\/137","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/comments?post=137"}],"version-history":[{"count":2,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages\/137\/revisions"}],"predecessor-version":[{"id":151,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages\/137\/revisions\/151"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media\/135"}],"wp:attachment":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media?parent=137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}