') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); kdelfour (Kevin Delfour) · GitHub
Skip to content
View kdelfour's full-sized avatar
😈
Work in progress !!!
😈
Work in progress !!!

Block or report kdelfour

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
kdelfour/README.md

Kevin Delfour

CTO hands-on · 17 ans de terrain · Lyon, France

Je donne des repères. Pas des leçons.

WebsiteLinkedIn


CTO chez Shiroo.ai. J'écris du code, je structure des équipes et je partage ce que j'apprends en chemin. Pour moi la tech est un outil au service des projets et des humains, le droit à l'erreur une pratique quotidienne, et le savoir quelque chose qui se partage — articles, livres et outils en accès libre.


🛠 Stack

TypeScriptPythonRustFlutterVueSvelteKitTerraformPocketBase


🚀 Side projects open-source

Des projets personnels pensés pour la production — pas des POCs ni des démos.

ProjetDescriptionTechStatut
RepoLensCLI d'audit de repos GitHub — bonnes pratiques, sécurité, conformitéRustEn route vers la prod
Open Event OrchestratorControl plane pour événements : CFP, planning, billetterie, CRMTypeScript · SvelteKit · PocketBaseEn route vers la prod
Neon AsteroidsArcade shooter néonFlutter · FlameBeta fermée · Google Play
NotchSMS chiffrés par Enigma, sans serveurFlutterBeta fermée · Google Play

📚 Livres (gratuits)


🧰 Outils gratuits

Sur kevin.delfour.co/outils — 100% navigateur, aucune donnée envoyée :

Build vs Buy vs Partner · Générateur d'ADR · Diagnostic de maturité CTO · Tech Radar personnel · Générateur de RFC · Matrice de décision technique


Pinned Loading

  1. Ebook_The_path_of_the_young_developer_Your_quest_for_experienceEbook_The_path_of_the_young_developer_Your_quest_for_experiencePublic

    "La Quête de l'Expérience" est un livre open source rédigé en LaTeX, destiné à aider les jeunes développeurs à naviguer dans le monde complexe et souvent déroutant de l'industrie du développement l…

    TeX 2

  2. Ebook_To_be_Or_not_to_be_CTOEbook_To_be_Or_not_to_be_CTOPublic

    MDX 1

  3. delfour-co/open-event-orchestratordelfour-co/open-event-orchestratorPublic

    The open-source control plane for events

    TypeScript 2 1

  4. systm-d/repolenssystm-d/repolensPublic

    A CLI tool to audit and prepare repositories for open source or enterprise standards

    Rust