<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Projects and Tools &#8211; Muhammet Işık</title>
	<atom:link href="https://muisik.com/en/category/portfolio/projects-and-tools/feed/" rel="self" type="application/rss+xml" />
	<link>https://muisik.com</link>
	<description>Industrial Software and Solutions</description>
	<lastBuildDate>Thu, 22 Oct 2026 14:07:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://muisik.com/wp-content/uploads/2026/01/cropped-favicon-32x32.png</url>
	<title>Projects and Tools &#8211; Muhammet Işık</title>
	<link>https://muisik.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ContextRail: Minimum Effective Project Memory for Agentic Coding</title>
		<link>https://muisik.com/en/contextrail-minimum-governed-harness/</link>
		
		<dc:creator><![CDATA[Muhammet Işık]]></dc:creator>
		<pubDate>Mon, 12 Oct 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Projects and Tools]]></category>
		<category><![CDATA[Agentic AI]]></category>
		<category><![CDATA[Artificial Intelligence Reliability]]></category>
		<category><![CDATA[Harness Engineering]]></category>
		<category><![CDATA[Systems Architecture]]></category>
		<guid isPermaLink="false">https://muisik.com/?p=2827</guid>

					<description><![CDATA[An open-source harness framework that resolves inter-session memory loss, file sprawl, and context pollution with 5 Markdown layers and 3 platform validators.]]></description>
										<content:encoded><![CDATA[<p><em>An open-source harness framework that resolves inter-session memory loss, file sprawl, and context pollution with 5 Markdown layers and 3 platform validators.</em></p>
<p>ContextRail is an open-source harness framework designed to help AI agents work consistently, verifiably, and across sessions within software repositories. When an agent begins a new session, it coordinates where the project left off, the active task, established decisions, and past explorations without file sprawling or context window bloat across 5 Markdown layers and cross-platform validators.</p>


<hr class="wp-block-separator has-alpha-channel-opacity"/>


<h2>Project Overview</h2>
<table>
<thead>
<tr>
<th>Property</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Role</strong></td>
<td>Design, architecture development, documentation</td>
</tr>
<tr>
<td><strong>Status</strong></td>
<td>Stable</td>
</tr>
<tr>
<td><strong>Scope</strong></td>
<td>Software development projects with AI agents</td>
</tr>
<tr>
<td><strong>Technologies</strong></td>
<td>Markdown, Bash, PowerShell, GitHub Actions</td>
</tr>
<tr>
<td><strong>License</strong></td>
<td>MIT</td>
</tr>
<tr>
<td><strong>Distribution</strong></td>
<td>GitHub Template Repository + GitHub Release</td>
</tr>
</tbody>
</table>
<h2>Problem and Target</h2>
<p>Agentic coding tools (Codex, Claude Code, Gemini, Cursor, etc.) are evolving rapidly, but they share a fundamental bottleneck: <strong>project memory.</strong></p>
<p>When an agent begins a fresh session:</p>
<ul>
<li>Active task state is forgotten.</li>
<li>Architectural rationales are lost.</li>
<li>Redundant repo-wide scans waste tokens and latency.</li>
<li>The human operator is repeatedly forced into tedious context reconstruction.</li>
</ul>
<p>Common industry workarounds (monolithic rule files, fragmented micro-notes, or complex multi-agent orchestrators) either saturate the context window or induce navigational confusion. ContextRail solves this by organizing project state across 5 distinct lifecycle layers with deterministic mechanical validation.</p>
<h2>Architecture Flow &amp; Lifecycle</h2>
<p>ContextRail structures project memory into 5 lifecycle-aligned Markdown layers:</p>
<ul>
<li><strong>AGENTS.md</strong> — Operational guidelines and navigational routing</li>
<li><strong>SYSTEM.md</strong> — Project boundaries, components, and architectural invariants</li>
<li><strong>BOARD.md</strong> — Active tasks and current backlog status</li>
<li><strong>NOTES.md</strong> — Decision rationales, constraints, and permanent architectural memory</li>
<li><strong>HISTORY.md</strong> — Historical ledger of verified tasks and evidence logs</li>
</ul>
<p>On top of these 5 layers, cross-platform native validator scripts (Bash, PowerShell, GitHub Actions) enforce contract compliance. It requires zero SDKs, runtime dependencies, or external vector stores; it drops cleanly into any existing repository.</p>

<div class="cw-diagram-container" style="width: 100%; margin: 2rem 0; text-align: center; overflow-x: auto;">
  <div style="width: 100%; display: inline-block; border: 1px solid #e2e8f0; border-radius: 8px; padding: 1.25rem; background: #fafafa; box-shadow: 0 2px 8px rgba(0,0,0,0.04); box-sizing: border-box;">
    <svg id="cw-mermaid-en-88bd958c" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 1018.9443359375px;" viewBox="0 0 1018.9443359375 397.46484375" role="graphics-document document" aria-roledescription="flowchart-v2" xmlns:xlink="http://www.w3.org/1999/xlink"><style xmlns="http://www.w3.org/1999/xhtml">@import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css");</style><style>#cw-mermaid-en-88bd958c{font-size:14px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#cw-mermaid-en-88bd958c .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#cw-mermaid-en-88bd958c .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#cw-mermaid-en-88bd958c .error-icon{fill:#552222;}#cw-mermaid-en-88bd958c .error-text{fill:#552222;stroke:#552222;}#cw-mermaid-en-88bd958c .edge-thickness-normal{stroke-width:1px;}#cw-mermaid-en-88bd958c .edge-thickness-thick{stroke-width:3.5px;}#cw-mermaid-en-88bd958c .edge-pattern-solid{stroke-dasharray:0;}#cw-mermaid-en-88bd958c .edge-thickness-invisible{stroke-width:0;fill:none;}#cw-mermaid-en-88bd958c .edge-pattern-dashed{stroke-dasharray:3;}#cw-mermaid-en-88bd958c .edge-pattern-dotted{stroke-dasharray:2;}#cw-mermaid-en-88bd958c .marker{fill:#666;stroke:#666;}#cw-mermaid-en-88bd958c .marker.cross{stroke:#666;}#cw-mermaid-en-88bd958c svg{font-size:14px;}#cw-mermaid-en-88bd958c p{margin:0;}#cw-mermaid-en-88bd958c .label{color:#000000;}#cw-mermaid-en-88bd958c .cluster-label text{fill:#333;}#cw-mermaid-en-88bd958c .cluster-label span{color:#333;}#cw-mermaid-en-88bd958c .cluster-label span p{background-color:transparent;}#cw-mermaid-en-88bd958c .label text,#cw-mermaid-en-88bd958c span{fill:#000000;color:#000000;}#cw-mermaid-en-88bd958c .node rect,#cw-mermaid-en-88bd958c .node circle,#cw-mermaid-en-88bd958c .node ellipse,#cw-mermaid-en-88bd958c .node polygon,#cw-mermaid-en-88bd958c .node path{fill:#eee;stroke:#999;stroke-width:1px;}#cw-mermaid-en-88bd958c .rough-node .label text,#cw-mermaid-en-88bd958c .node .label text,#cw-mermaid-en-88bd958c .image-shape .label,#cw-mermaid-en-88bd958c .icon-shape .label{text-anchor:middle;}#cw-mermaid-en-88bd958c .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#cw-mermaid-en-88bd958c .rough-node .label,#cw-mermaid-en-88bd958c .node .label,#cw-mermaid-en-88bd958c .image-shape .label,#cw-mermaid-en-88bd958c .icon-shape .label{text-align:center;}#cw-mermaid-en-88bd958c .node.clickable{cursor:pointer;}#cw-mermaid-en-88bd958c .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#cw-mermaid-en-88bd958c .arrowheadPath{fill:#333333;}#cw-mermaid-en-88bd958c .edgePath .path{stroke:#666;stroke-width:1px;}#cw-mermaid-en-88bd958c .flowchart-link{stroke:#666;fill:none;}#cw-mermaid-en-88bd958c .edgeLabel{background-color:white;text-align:center;}#cw-mermaid-en-88bd958c .edgeLabel p{background-color:white;}#cw-mermaid-en-88bd958c .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#cw-mermaid-en-88bd958c .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#cw-mermaid-en-88bd958c .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#cw-mermaid-en-88bd958c .cluster text{fill:#333;}#cw-mermaid-en-88bd958c .cluster span{color:#333;}#cw-mermaid-en-88bd958c div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#cw-mermaid-en-88bd958c .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#cw-mermaid-en-88bd958c rect.text{fill:none;stroke-width:0;}#cw-mermaid-en-88bd958c .icon-shape,#cw-mermaid-en-88bd958c .image-shape{background-color:white;text-align:center;}#cw-mermaid-en-88bd958c .icon-shape p,#cw-mermaid-en-88bd958c .image-shape p{background-color:white;padding:2px;}#cw-mermaid-en-88bd958c .icon-shape .label rect,#cw-mermaid-en-88bd958c .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#cw-mermaid-en-88bd958c .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#cw-mermaid-en-88bd958c .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#cw-mermaid-en-88bd958c .node .neo-node{stroke:#999;}#cw-mermaid-en-88bd958c [data-look="neo"].node rect,#cw-mermaid-en-88bd958c [data-look="neo"].cluster rect,#cw-mermaid-en-88bd958c [data-look="neo"].node polygon{stroke:url(#cw-mermaid-en-88bd958c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-88bd958c [data-look="neo"].swimlane.cluster rect{filter:none;}#cw-mermaid-en-88bd958c [data-look="neo"].node path{stroke:url(#cw-mermaid-en-88bd958c-gradient);stroke-width:1px;}#cw-mermaid-en-88bd958c [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-88bd958c [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#cw-mermaid-en-88bd958c [data-look="neo"].node circle{stroke:url(#cw-mermaid-en-88bd958c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-88bd958c [data-look="neo"].node circle .state-start{fill:#000000;}#cw-mermaid-en-88bd958c [data-look="neo"].icon-shape .icon{fill:url(#cw-mermaid-en-88bd958c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-88bd958c [data-look="neo"].icon-shape .icon-neo path{stroke:url(#cw-mermaid-en-88bd958c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-88bd958c :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="cw-mermaid-en-88bd958c_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="cw-mermaid-en-88bd958c_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M660.408,190.096L685.408,188.732L706.415,189.931" id="cw-mermaid-en-88bd958c-L_C_H_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_H_0" data-points="W3sieCI6NjYwLjQwODIwMzEyNSwieSI6MTkwLjA5NjM1ODUzNzE5MTI0fSx7IngiOjY4NS40MDgyMDMxMjUsInkiOjE4OC43MzI0MjE4NzV9LHsieCI6NzEwLjQwODIwMzEyNSwieSI6MTkwLjE1ODgwODM1MzMwMTk0fV0=" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/><path d="M660.408,207.368L685.408,208.732L706.415,207.534" id="cw-mermaid-en-88bd958c-L_C_H_2" class=" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_H_2" data-points="W3sieCI6NjYwLjQwODIwMzEyNSwieSI6MjA3LjM2ODQ4NTIxMjgwODc2fSx7IngiOjY4NS40MDgyMDMxMjUsInkiOjIwOC43MzI0MjE4NzV9LHsieCI6NzEwLjQwODIwMzEyNSwieSI6MjA3LjMwNjAzNTM5NjY5ODA2fV0=" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/><path d="M293.822,190.221L318.822,188.732L339.828,189.878" id="cw-mermaid-en-88bd958c-L_B_N_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_N_0" data-points="W3sieCI6MjkzLjgyMjI2NTYyNSwieSI6MTkwLjIyMTMwNDY4OTQ1Mzh9LHsieCI6MzE4LjgyMjI2NTYyNSwieSI6MTg4LjczMjQyMTg3NX0seyJ4IjozNDMuODIyMjY1NjI1LCJ5IjoxOTAuMDk2MzU4NTM3MTkxMjR9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/><path d="M293.822,207.244L318.822,208.732L339.828,207.586" id="cw-mermaid-en-88bd958c-L_B_N_2" class=" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_N_2" data-points="W3sieCI6MjkzLjgyMjI2NTYyNSwieSI6MjA3LjI0MzUzOTA2MDU0NjJ9LHsieCI6MzE4LjgyMjI2NTYyNSwieSI6MjA4LjczMjQyMTg3NX0seyJ4IjozNDMuODIyMjY1NjI1LCJ5IjoyMDcuMzY4NDg1MjEyODA4NzZ9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_C_H_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_C_H_2" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_B_N_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_B_N_2" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g></g><g class="nodes"><g class="root" transform="translate(702.408203125, 0)"><g class="clusters"><g class="cluster " id="cw-mermaid-en-88bd958c-S3" data-look="classic"><rect style="" x="8" y="8" width="300.5361328125" height="381.46484375"/><g class="cluster-label " transform="translate(90.35400390625, 8)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Evidence</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> &amp;</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Verification</tspan></tspan></text></g></g></g></g><g class="edgePaths"><path d="M158.268,91.5L158.268,129L158.268,162.5" id="cw-mermaid-en-88bd958c-L_H_V_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_H_V_0" data-points="W3sieCI6MTU4LjI2ODA2NjQwNjI1LCJ5Ijo5MS41fSx7IngiOjE1OC4yNjgwNjY0MDYyNSwieSI6MTI5fSx7IngiOjE1OC4yNjgwNjY0MDYyNSwieSI6MTY2LjV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_H_V_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g></g><g class="nodes"><g class="node default  " id="cw-mermaid-en-88bd958c-flowchart-H-9" data-look="classic" transform="translate(158.26806640625, 68.5)"><rect class="basic label-container" style="" x="-115.26806640625" y="-22.999999523162842" width="230.5361328125" height="45.999999046325684"/><g class="label" style="" transform="translate(0, -7.999999523162842)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">HISTORY.md</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (Evidence</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Log)</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-88bd958c-flowchart-V-11" data-look="classic" transform="translate(158.26806640625, 259.232421875)"><polygon points="92.73242139816284,0 185.46484279632568,-92.73242139816284 92.73242139816284,-185.46484279632568 0,-92.73242139816284" class="label-container" transform="translate(-92.23242139816284, 92.73242139816284)"/><g class="label" style="" transform="translate(0, -7.499999523162842)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Cross-Platform</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Validator</tspan></tspan></text></g></g></g></g></g><g class="root" transform="translate(335.822265625, 70.232421875)"><g class="clusters"><g class="cluster " id="cw-mermaid-en-88bd958c-S2" data-look="classic"><rect style="" x="8" y="8" width="316.5859375" height="241"/><g class="cluster-label " transform="translate(104.08203125, 8)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Decision</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> &amp;</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Execution</tspan></tspan></text></g></g></g></g><g class="edgePaths"><path d="M140.006,91.5L97.146,129L137.342,163.878" id="cw-mermaid-en-88bd958c-L_N_C_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_N_C_0" data-points="W3sieCI6MTQwLjAwNTg3NTUxNjUyODkzLCJ5Ijo5MS41fSx7IngiOjk3LjE0NjQ4NDM3NSwieSI6MTI5fSx7IngiOjE0MC4zNjMwMzcxMDkzNzUsInkiOjE2Ni41fV0=" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/><path d="M192.58,91.5L235.439,129L195.244,163.878" id="cw-mermaid-en-88bd958c-L_N_C_2" class=" edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_N_C_2" data-points="W3sieCI6MTkyLjU4MDA2MTk4MzQ3MTA3LCJ5Ijo5MS41fSx7IngiOjIzNS40Mzk0NTMxMjUsInkiOjEyOX0seyJ4IjoxOTIuMjIyOTAwMzkwNjI1LCJ5IjoxNjYuNX1d" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_N_C_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_N_C_2" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g></g><g class="nodes"><g class="node default  " id="cw-mermaid-en-88bd958c-flowchart-N-5" data-look="classic" transform="translate(166.29296875, 68.5)"><rect class="basic label-container" style="" x="-123.29296875" y="-22.999999523162842" width="246.5859375" height="45.999999046325684"/><g class="label" style="" transform="translate(0, -7.999999523162842)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">NOTES.md</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (Decision</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Rationale)</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-88bd958c-flowchart-C-7" data-look="classic" transform="translate(166.29296875, 189)"><rect class="basic label-container" style="" x="-84.03125" y="-22.499999523162842" width="168.0625" height="44.999999046325684"/><g class="label" style="" transform="translate(0, -7.499999523162842)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Code</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> &amp;</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Task</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Trace</tspan></tspan></text></g></g></g></g></g><g class="root" transform="translate(0, 10.232421875)"><g class="clusters"><g class="cluster " id="cw-mermaid-en-88bd958c-S1" data-look="classic"><rect style="" x="8" y="8" width="285.822265625" height="361"/><g class="cluster-label " transform="translate(119.0283203125, 8)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Orientation</tspan></tspan></text></g></g></g></g><g class="edgePaths"><path d="M150.911,90.5L150.911,128L150.911,161.5" id="cw-mermaid-en-88bd958c-L_A_S_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_S_0" data-points="W3sieCI6MTUwLjkxMTEzMjgxMjUsInkiOjkwLjV9LHsieCI6MTUwLjkxMTEzMjgxMjUsInkiOjEyOH0seyJ4IjoxNTAuOTExMTMyODEyNSwieSI6MTY1LjV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/><path d="M150.911,210.5L150.911,248L150.911,281.5" id="cw-mermaid-en-88bd958c-L_S_B_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S_B_0" data-points="W3sieCI6MTUwLjkxMTEzMjgxMjUsInkiOjIxMC41fSx7IngiOjE1MC45MTExMzI4MTI1LCJ5IjoyNDh9LHsieCI6MTUwLjkxMTEzMjgxMjUsInkiOjI4NS41fV0=" data-look="classic" marker-end="url(#cw-mermaid-en-88bd958c_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_A_S_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_S_B_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g></g><g class="nodes"><g class="node default  " id="cw-mermaid-en-88bd958c-flowchart-A-0" data-look="classic" transform="translate(150.9111328125, 68)"><rect class="basic label-container" style="" x="-68.3125" y="-22.499999523162842" width="136.625" height="44.999999046325684"/><g class="label" style="" transform="translate(0, -7.499999523162842)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">AGENTS.md</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-88bd958c-flowchart-S-1" data-look="classic" transform="translate(150.9111328125, 188)"><rect class="basic label-container" style="" x="-68.3125" y="-22.499999523162842" width="136.625" height="44.999999046325684"/><g class="label" style="" transform="translate(0, -7.499999523162842)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">SYSTEM.md</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-88bd958c-flowchart-B-3" data-look="classic" transform="translate(150.9111328125, 308.5)"><rect class="basic label-container" style="" x="-107.9111328125" y="-22.999999523162842" width="215.822265625" height="45.999999046325684"/><g class="label" style="" transform="translate(0, -7.999999523162842)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">BOARD.md</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (Active</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Tasks)</tspan></tspan></text></g></g></g></g></g></g></g></g><defs><filter id="cw-mermaid-en-88bd958c-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="cw-mermaid-en-88bd958c-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><linearGradient id="cw-mermaid-en-88bd958c-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="hsl(0, 0%, 83.3333333333%)" stop-opacity="1"/><stop offset="100%" stop-color="hsl(0, 0%, 88.9215686275%)" stop-opacity="1"/></linearGradient></svg>
  </div>
</div>


<h2>Scope and Boundaries</h2>
<p>ContextRail <strong>does:</strong></p>
<ul>
<li>Provide agents with a clear, single entry point at session initialization.</li>
<li>Decouple active work, decision rationales, and historical evidence into distinct lifecycle tiers.</li>
<li>Direct agents toward targeted file reading instead of broad repository scanning.</li>
<li>Anchor tasks and decisions via stable, unique identifiers.</li>
<li>Govern third-party specifications through a structured handoff adoption workflow.</li>
<li>Maintain permanent behavior boundaries in code via task-linked code traces.</li>
<li>Mechanically validate metadata contracts across Linux, macOS, and Windows.</li>
<li>Integrate into existing project test, build, and lint pipelines.</li>
</ul>
<p>ContextRail <strong>does not:</strong></p>
<ul>
<li>Impose a new programming language or framework.</li>
<li>Introduce heavy runtime SDKs or libraries.</li>
<li>Replace the project&#8217;s native test frameworks.</li>
<li>Depend on embeddings, semantic search, or graph databases.</li>
<li>Supplant the agent&#8217;s internal planning loop.</li>
</ul>
<h2>Solution Architecture</h2>
<h3>Lifecycle Separation</h3>
<p>Information is organized strictly by lifecycle rather than arbitrary file counts:</p>
<ul>
<li><code>AGENTS.md</code> → Operating rules and navigation map</li>
<li><code>SYSTEM.md</code> → Project boundary, core architecture, system invariants</li>
<li><code>BOARD.md</code> → Active backlog and task state</li>
<li><code>NOTES.md</code> → Permanent rationale and technical constraints</li>
<li><code>HISTORY.md</code> → Chronological evidence of completed tasks</li>
</ul>
<p>The agent reads <code>BOARD.md</code> to discover its active assignment. It follows task-referenced decision IDs to query only relevant subsections of <code>NOTES.md</code>, referencing <code>HISTORY.md</code> only when verifying past implementations.</p>
<h3>External Handoff Mechanism</h3>
<p>Unprocessed specifications, audits, and design proposals land in <code>handoffs/incoming/</code>. The agent processes them via <code>handoffs/HANDOFF.md</code>: checking existing IDs, transcribing permanent context into Notes, deriving verifiable Board tasks, reporting discrepancies, and archiving or removing the source artifacts only upon successful validation.</p>
<h3>Task-Linked Code Traceability</h3>
<p>Durable invariants are anchored in code using concise inline comments:</p>
<pre><code class="language-text">ContextRail: TASK-0042
Invariant: Persistent mutation requires explicit authorization.
</code></pre>
<p>The task ID carries the comprehensive context, design rationale, and relational dependencies. The code comment simply references the governing task rather than logging historical diffs, and identical anchors are attached to accompanying regression tests.</p>
<h3>Agent Compatibility Layer</h3>
<p>Platform-specific instruction files route directly to the canonical guide:</p>
<ul>
<li><code>CLAUDE.md</code> → Claude Code</li>
<li><code>GEMINI.md</code> → Gemini</li>
<li><code>.github/copilot-instructions.md</code> → GitHub Copilot</li>
<li><code>.cursor/rules/00-agents.mdc</code> → Cursor</li>
</ul>
<p>Each file contains the single directive: <em>&#8220;Read and follow AGENTS.md at repository root.&#8221;</em></p>
<h3>Cross-Platform Validators</h3>
<pre><code class="language-text">scripts/
  validate-linux.sh
  validate-macos.sh
  validate-windows.ps1
</code></pre>
<p>The validator scripts operate independently of application runtimes. They inspect Markdown metadata contracts directly:</p>
<ul>
<li>Enforcing mandatory files and system schema completeness.</li>
<li>Guarding against lifecycle entries erroneously written into <code>SYSTEM.md</code>.</li>
<li>Detecting duplicate IDs or conflicting titles.</li>
<li>Validating task statuses and required evidence fields.</li>
<li>Ensuring bidirectional reference integrity across superseded and related records.</li>
<li>Verifying code traces against active lifecycle entities.</li>
</ul>
<h3>Two Repositories, Dual Distribution, Single Point of Truth</h3>
<ul>
<li><code>minimum-governed-harness</code>: Core development, governance rules, and release artifacts.</li>
<li><code>contextrail-template</code>: Clean, user-facing template repository for fresh projects.</li>
</ul>
<p>New projects initialize directly from the GitHub template, while existing codebases install versioned release ZIP packages accompanied by SHA-256 checksum manifests.</p>
<h2>Governance Guidelines</h2>
<p>ContextRail formalizes operational discipline for agent workflows:</p>
<ul>
<li><strong>External Handoff Adoption:</strong> Structured ingestion of external plans preventing duplication and hallucinated scope.</li>
<li><strong>Task-Linked Code Trace:</strong> Invariants explicitly tied to tasks in code and regression suites.</li>
<li><strong>Root Cause Before Patch:</strong> Agents must isolate broken invariants or transitions before attempting fixes.</li>
<li><strong>Independent Review:</strong> Self-evaluating changes against objective acceptance criteria prior to completion.</li>
<li><strong>Controlled Incidental Findings:</strong> Incidental issues discovered during tasks are documented with evidence rather than silently altered.</li>
<li><strong>Unified Validation Integration:</strong> Combining project test suites with ContextRail validators into a single gating check.</li>
<li><strong>Governed Delegation:</strong> Subagents execute scoped, low-risk routines while architectural state remains with the lead agent.</li>
</ul>
<h2>Open Source Distribution</h2>
<ul>
<li><strong>Core Repository:</strong> <a href="https://github.com/muisik/minimum-governed-harness" rel="nofollow noopener" target="_blank">github.com/muisik/minimum-governed-harness</a> — Public, MIT License</li>
<li><strong>Template Repository:</strong> <a href="https://github.com/muisik/contextrail-template" rel="nofollow noopener" target="_blank">github.com/muisik/contextrail-template</a> — GitHub Template</li>
<li><strong>Releases:</strong> Downloadable ZIP distributions with checksum verification</li>
<li><strong>Supported Agents:</strong> Codex, Claude Code, Gemini, Cursor, GitHub Copilot</li>
</ul>
<hr class="wp-block-separator has-alpha-channel-opacity"/>

<h2><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Related Links</h2>
<blockquote>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Technical Deep Dive:</strong> <a href="https://muisik.com/en/agentic-harness-yasam-dongusune-gore-baglam/">Teach the Agent Where to Look, Not Everything at Once</a><br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Core Repository:</strong> <a href="https://github.com/muisik/minimum-governed-harness" rel="nofollow noopener" target="_blank">github.com/muisik/minimum-governed-harness</a><br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Template Repository:</strong> <a href="https://github.com/muisik/contextrail-template" rel="nofollow noopener" target="_blank">github.com/muisik/contextrail-template</a></p>
</blockquote>
<hr class="wp-block-separator has-alpha-channel-opacity"/>

<p><em>Last updated: October 2026 | Version: 1.0</em></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Video to Slide: Lecture Video Slide Extraction Tool</title>
		<link>https://muisik.com/en/video-to-slide-lecture-slide-extractor/</link>
		
		<dc:creator><![CDATA[Muhammet Işık]]></dc:creator>
		<pubDate>Sun, 13 Sep 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Projects and Tools]]></category>
		<category><![CDATA[Education Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MVP and PoC Delivery]]></category>
		<category><![CDATA[Robotic Process Automation]]></category>
		<category><![CDATA[Systems Architecture]]></category>
		<guid isPermaLink="false">https://muisik.com/?p=2920</guid>

					<description><![CDATA[An open-source desktop application that extracts clean lecture slides from YouTube or local videos before instructor annotations appear, compiling them into presentations.]]></description>
										<content:encoded><![CDATA[<p><em>An open-source desktop tool that captures clean lecture slides from YouTube and local recordings before instructor annotations appear.</em></p>
<p>Video to Slide is an open-source desktop tool designed to automatically capture lecture slides from YouTube videos, full playlists, or local video files. By filtering out whiteboard marker strokes and isolating the earliest clean frames, it converts lecture recordings into high-resolution PNG images, consolidated PDF documents, and editable PowerPoint (.pptx) presentations. It eliminates the tedious chore of pausing videos to take manual screenshots, providing students and researchers with clean digital study materials.</p>


<hr class="wp-block-separator has-alpha-channel-opacity"/>


<h2>Project Overview</h2>
<table>
<thead>
<tr>
<th>Property</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Role</strong></td>
<td>Design, algorithm, development</td>
</tr>
<tr>
<td><strong>Status</strong></td>
<td>Open Source (Public Release)</td>
</tr>
<tr>
<td><strong>Scope</strong></td>
<td>Video processing, slide detection, and document compilation</td>
</tr>
<tr>
<td><strong>Technologies</strong></td>
<td>Python, OpenCV, yt-dlp, python-pptx, PyInstaller</td>
</tr>
<tr>
<td><strong>License</strong></td>
<td>MIT</td>
</tr>
<tr>
<td><strong>Distribution</strong></td>
<td>GitHub Release (Portable Windows, macOS, Linux) + Source Code</td>
</tr>
</tbody>
</table>
<h2>Motivation and Background</h2>
<p>Taking comprehensive notes from video lectures is traditionally a slow, repetitive process. Viewers constantly pause playback, capture screenshots, crop boundaries, and paste images into notes.</p>
<p>Beyond the manual friction lies a common visual problem: instructors frequently annotate slides with digital pens or colored markers immediately after a slide appears. Conventional scene-detection tools typically grab the final state of each scene, resulting in saved images cluttered with scribbles, annotations, and partial occlusions.</p>
<p>Video to Slide was built to resolve this practical challenge:</p>
<ul>
<li>Process video links or local files with a single action,</li>
<li>Automatically detect and capture the initial pristine slide frame before handwriting begins,</li>
<li>Filter out colored marker strokes during frame comparisons to accurately identify slide transitions,</li>
<li>Compile results directly into clean PDF documents and editable PowerPoint decks.</li>
</ul>
<h2>Algorithmic Approach</h2>
<p>As the engine scans video streams frame by frame, it applies two core computer vision heuristics:</p>

<div class="cw-diagram-container" style="width: 100%; margin: 2rem 0; text-align: center; overflow-x: auto;">
  <div style="width: 100%; display: inline-block; border: 1px solid #e2e8f0; border-radius: 8px; padding: 1.25rem; background: #fafafa; box-shadow: 0 2px 8px rgba(0,0,0,0.04); box-sizing: border-box;">
    <svg id="cw-mermaid-en-53831310" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 1348.763671875px;" viewBox="0 0 1348.763671875 77.4000015258789" role="graphics-document document" aria-roledescription="flowchart-v2" xmlns:xlink="http://www.w3.org/1999/xlink"><style xmlns="http://www.w3.org/1999/xhtml">@import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css");</style><style>#cw-mermaid-en-53831310{font-size:14px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#cw-mermaid-en-53831310 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#cw-mermaid-en-53831310 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#cw-mermaid-en-53831310 .error-icon{fill:#552222;}#cw-mermaid-en-53831310 .error-text{fill:#552222;stroke:#552222;}#cw-mermaid-en-53831310 .edge-thickness-normal{stroke-width:1px;}#cw-mermaid-en-53831310 .edge-thickness-thick{stroke-width:3.5px;}#cw-mermaid-en-53831310 .edge-pattern-solid{stroke-dasharray:0;}#cw-mermaid-en-53831310 .edge-thickness-invisible{stroke-width:0;fill:none;}#cw-mermaid-en-53831310 .edge-pattern-dashed{stroke-dasharray:3;}#cw-mermaid-en-53831310 .edge-pattern-dotted{stroke-dasharray:2;}#cw-mermaid-en-53831310 .marker{fill:#666;stroke:#666;}#cw-mermaid-en-53831310 .marker.cross{stroke:#666;}#cw-mermaid-en-53831310 svg{font-size:14px;}#cw-mermaid-en-53831310 p{margin:0;}#cw-mermaid-en-53831310 .label{color:#000000;}#cw-mermaid-en-53831310 .cluster-label text{fill:#333;}#cw-mermaid-en-53831310 .cluster-label span{color:#333;}#cw-mermaid-en-53831310 .cluster-label span p{background-color:transparent;}#cw-mermaid-en-53831310 .label text,#cw-mermaid-en-53831310 span{fill:#000000;color:#000000;}#cw-mermaid-en-53831310 .node rect,#cw-mermaid-en-53831310 .node circle,#cw-mermaid-en-53831310 .node ellipse,#cw-mermaid-en-53831310 .node polygon,#cw-mermaid-en-53831310 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#cw-mermaid-en-53831310 .rough-node .label text,#cw-mermaid-en-53831310 .node .label text,#cw-mermaid-en-53831310 .image-shape .label,#cw-mermaid-en-53831310 .icon-shape .label{text-anchor:middle;}#cw-mermaid-en-53831310 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#cw-mermaid-en-53831310 .rough-node .label,#cw-mermaid-en-53831310 .node .label,#cw-mermaid-en-53831310 .image-shape .label,#cw-mermaid-en-53831310 .icon-shape .label{text-align:center;}#cw-mermaid-en-53831310 .node.clickable{cursor:pointer;}#cw-mermaid-en-53831310 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#cw-mermaid-en-53831310 .arrowheadPath{fill:#333333;}#cw-mermaid-en-53831310 .edgePath .path{stroke:#666;stroke-width:1px;}#cw-mermaid-en-53831310 .flowchart-link{stroke:#666;fill:none;}#cw-mermaid-en-53831310 .edgeLabel{background-color:white;text-align:center;}#cw-mermaid-en-53831310 .edgeLabel p{background-color:white;}#cw-mermaid-en-53831310 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#cw-mermaid-en-53831310 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#cw-mermaid-en-53831310 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#cw-mermaid-en-53831310 .cluster text{fill:#333;}#cw-mermaid-en-53831310 .cluster span{color:#333;}#cw-mermaid-en-53831310 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#cw-mermaid-en-53831310 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#cw-mermaid-en-53831310 rect.text{fill:none;stroke-width:0;}#cw-mermaid-en-53831310 .icon-shape,#cw-mermaid-en-53831310 .image-shape{background-color:white;text-align:center;}#cw-mermaid-en-53831310 .icon-shape p,#cw-mermaid-en-53831310 .image-shape p{background-color:white;padding:2px;}#cw-mermaid-en-53831310 .icon-shape .label rect,#cw-mermaid-en-53831310 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#cw-mermaid-en-53831310 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#cw-mermaid-en-53831310 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#cw-mermaid-en-53831310 .node .neo-node{stroke:#999;}#cw-mermaid-en-53831310 [data-look="neo"].node rect,#cw-mermaid-en-53831310 [data-look="neo"].cluster rect,#cw-mermaid-en-53831310 [data-look="neo"].node polygon{stroke:url(#cw-mermaid-en-53831310-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-53831310 [data-look="neo"].swimlane.cluster rect{filter:none;}#cw-mermaid-en-53831310 [data-look="neo"].node path{stroke:url(#cw-mermaid-en-53831310-gradient);stroke-width:1px;}#cw-mermaid-en-53831310 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-53831310 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#cw-mermaid-en-53831310 [data-look="neo"].node circle{stroke:url(#cw-mermaid-en-53831310-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-53831310 [data-look="neo"].node circle .state-start{fill:#000000;}#cw-mermaid-en-53831310 [data-look="neo"].icon-shape .icon{fill:url(#cw-mermaid-en-53831310-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-53831310 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#cw-mermaid-en-53831310-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-53831310 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="cw-mermaid-en-53831310_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="cw-mermaid-en-53831310_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M227.686,38.7L252.686,38.7L273.686,38.7" id="cw-mermaid-en-53831310-L_A_B_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_B_0" data-points="W3sieCI6MjI3LjY4NTU0Njg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6MjUyLjY4NTU0Njg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6Mjc3LjY4NTU0Njg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-53831310_flowchart-v2-pointEnd)"/><path d="M444.998,38.7L469.998,38.7L490.998,38.7" id="cw-mermaid-en-53831310-L_B_C_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_C_0" data-points="W3sieCI6NDQ0Ljk5ODA0Njg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6NDY5Ljk5ODA0Njg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6NDk0Ljk5ODA0Njg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-53831310_flowchart-v2-pointEnd)"/><path d="M656.107,38.7L681.107,38.7L702.107,38.7" id="cw-mermaid-en-53831310-L_C_D_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_D_0" data-points="W3sieCI6NjU2LjEwNzQyMTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6NjgxLjEwNzQyMTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6NzA2LjEwNzQyMTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-53831310_flowchart-v2-pointEnd)"/><path d="M907.264,38.7L932.264,38.7L953.264,38.7" id="cw-mermaid-en-53831310-L_D_E_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_E_0" data-points="W3sieCI6OTA3LjI2MzY3MTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6OTMyLjI2MzY3MTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6OTU3LjI2MzY3MTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-53831310_flowchart-v2-pointEnd)"/><path d="M1120.295,38.7L1145.295,38.7L1166.295,38.7" id="cw-mermaid-en-53831310-L_E_F_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_E_F_0" data-points="W3sieCI6MTEyMC4yOTQ5MjE4NzUsInkiOjM4LjcwMDAwMDc2MjkzOTQ1fSx7IngiOjExNDUuMjk0OTIxODc1LCJ5IjozOC43MDAwMDA3NjI5Mzk0NX0seyJ4IjoxMTcwLjI5NDkyMTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-53831310_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_A_B_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_B_C_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_C_D_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_D_E_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_E_F_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g></g><g class="nodes"><g class="node default  " id="cw-mermaid-en-53831310-flowchart-A-0" data-look="classic" transform="translate(117.8427734375, 38.70000076293945)"><rect class="basic label-container" style="" x="-109.8427734375" y="-30.700000762939453" width="219.685546875" height="61.400001525878906"/><g class="label" style="" transform="translate(0, -15.700000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Input</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Video</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(YouTube</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> URL</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> /</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Local</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> File)</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-53831310-flowchart-B-1" data-look="classic" transform="translate(361.341796875, 38.70000076293945)"><rect class="basic label-container" style="" x="-83.65625" y="-30.200000762939453" width="167.3125" height="60.400001525878906"/><g class="label" style="" transform="translate(0, -15.200000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Frame</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Capture</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> and</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Motion</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Analysis</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-53831310-flowchart-C-3" data-look="classic" transform="translate(575.552734375, 38.70000076293945)"><rect class="basic label-container" style="" x="-80.5546875" y="-30.200000762939453" width="161.109375" height="60.400001525878906"/><g class="label" style="" transform="translate(0, -15.200000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">First</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Clean</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Frame</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Detection</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-53831310-flowchart-D-5" data-look="classic" transform="translate(806.685546875, 38.70000076293945)"><rect class="basic label-container" style="" x="-100.578125" y="-30.200000762939453" width="201.15625" height="60.400001525878906"/><g class="label" style="" transform="translate(0, -15.200000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Marker</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Stroke</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> and</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Noise</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Filtering</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-53831310-flowchart-E-7" data-look="classic" transform="translate(1038.779296875, 38.70000076293945)"><rect class="basic label-container" style="" x="-81.515625" y="-30.200000762939453" width="163.03125" height="60.400001525878906"/><g class="label" style="" transform="translate(0, -15.200000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Deduplication</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> and</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Cropping</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-53831310-flowchart-F-9" data-look="classic" transform="translate(1255.529296875, 38.70000076293945)"><rect class="basic label-container" style="" x="-85.234375" y="-30.700000762939453" width="170.46875" height="61.400001525878906"/><g class="label" style="" transform="translate(0, -15.700000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Document</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Outputs</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(PNG,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> PDF,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> PPTX)</tspan></tspan></text></g></g></g></g></g></g><defs><filter id="cw-mermaid-en-53831310-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="cw-mermaid-en-53831310-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><linearGradient id="cw-mermaid-en-53831310-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="hsl(0, 0%, 83.3333333333%)" stop-opacity="1"/><stop offset="100%" stop-color="hsl(0, 0%, 88.9215686275%)" stop-opacity="1"/></linearGradient></svg>
  </div>
</div>


<h3>First Clean Frame Detection</h3>
<p>When a slide advances during a lecture, the display stabilizes briefly before the instructor begins drawing or gesturing. Once the transition is recognized, the algorithm locks onto the earliest stable frame before motion thresholds are breached. This ensures that subsequent handwritten annotations do not degrade the captured slide.</p>
<h3>Whiteboard Marker Filtering</h3>
<p>Vibrant marker strokes can distort conventional frame-difference calculations. The comparison pipeline isolates and filters these high-saturation strokes, distinguishing true slide transitions from local handwriting without sacrificing the quality of the underlying original image.</p>
<h2>Key Capabilities and Formats</h2>
<ul>
<li><strong>Multi-Source Ingestion:</strong> Ingests individual YouTube URLs, complete playlists, local <code>.mp4</code>, <code>.mkv</code>, <code>.mov</code>, <code>.webm</code> files, or entire directories of recordings in batch mode.</li>
<li><strong>Versatile Output Formats:</strong> </li>
<li>High-resolution individual <strong>PNG</strong> slide images,</li>
<li>Merged <strong>PDF</strong> lecture notes,</li>
<li>Editable <strong>PowerPoint (.pptx)</strong> presentations with slides arranged sequentially.</li>
<li><strong>Bilingual Interface:</strong> Instant one-click toggle between English and Turkish.</li>
<li><strong>Parameter Controls:</strong> Allows straightforward adjustment of motion thresholds, cropping margins, and compression quality through the desktop UI.</li>
</ul>
<h2>Cross-Platform Distribution</h2>
<p>Video to Slide is packaged to run independently without requiring Python installations or complex environment setup:</p>
<ul>
<li>Available as standalone, portable executables for Windows, Linux, and macOS.</li>
<li>Built with a clean, fast desktop interface.</li>
<li>Executes entirely on the local processor without hosted APIs or remote cloud dependencies.</li>
</ul>
<h2>Project Status and Availability</h2>
<p>Video to Slide is developed openly under the MIT license. Full source code, documentation, and pre-built binaries are maintained on GitHub.</p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>

<h2><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Related Links</h2>
<blockquote>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>LinkedIn Post:</strong> <a href="https://www.linkedin.com/feed/update/urn:li:activity:7495691055606947840/" rel="nofollow noopener" target="_blank">Video to Slide: Open-Source Lecture Slide Extractor</a><br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>GitHub Repository:</strong> <a href="https://github.com/muisik/video-to-slide" rel="nofollow noopener" target="_blank">github.com/muisik/video-to-slide</a><br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Related Project:</strong> <a href="https://muisik.com/en/tender-tracker-local-public-procurement-monitoring-tool/">Tender Tracker: Local Public Procurement Monitoring Tool</a><br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Related Project:</strong> <a href="https://muisik.com/en/contextrail-minimum-governed-harness/">ContextRail: Minimum Governed Project Memory</a></p>
</blockquote>
<hr class="wp-block-separator has-alpha-channel-opacity"/>

<p><em>Last updated: September 2026 | Version: 1.0</em></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tender Tracker: Local Public Procurement Monitoring Tool</title>
		<link>https://muisik.com/en/tender-tracker-local-public-procurement-monitoring-tool/</link>
		
		<dc:creator><![CDATA[Muhammet Işık]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Projects and Tools]]></category>
		<category><![CDATA[API Design]]></category>
		<category><![CDATA[Enterprise Software]]></category>
		<category><![CDATA[Procurement Strategy]]></category>
		<category><![CDATA[Robotic Process Automation]]></category>
		<category><![CDATA[Systems Architecture]]></category>
		<guid isPermaLink="false">https://muisik.com/?p=2914</guid>

					<description><![CDATA[An open-source desktop tool that collects public procurement announcements across multiple sources, applies rule-based filtering, and delivers alerts locally.]]></description>
										<content:encoded><![CDATA[<p><em>An open-source, local-first desktop tool that collects, deduplicates, and classifies public procurement tenders across multiple sources.</em></p>
<p>Tender Tracker is an open-source desktop application designed to collect public tender announcements from multiple portals, filter out duplicate records, classify opportunities using rule-based criteria, and deliver updates via a local dashboard, email, or Telegram. Operating entirely on the user&#8217;s workstation without requiring external server infrastructure or recurring subscriptions, it eliminates manual searching workflows for technical sales, presales, and business development teams.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<h2>Project Overview</h2>
<table>
<thead>
<tr>
<th>Property</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Role</strong></td>
<td>Design, architecture, development</td>
</tr>
<tr>
<td><strong>Status</strong></td>
<td>Open Source (Public PoC)</td>
</tr>
<tr>
<td><strong>Scope</strong></td>
<td>Procurement data collection, filtering, and notification</td>
</tr>
<tr>
<td><strong>Technologies</strong></td>
<td>Python 3.12, FastAPI, SQLite, SQLAlchemy, PyInstaller</td>
</tr>
<tr>
<td><strong>License</strong></td>
<td>MIT</td>
</tr>
<tr>
<td><strong>Distribution</strong></td>
<td>GitHub Release (Portable Windows EXE) + Source Code</td>
</tr>
</tbody>
</table>
<h2>Motivation and Background</h2>
<p>Tracking public procurement notices across various state portals is traditionally a manual, repetitive chore. Every morning, sales and capture teams navigate multiple portals, filter out irrelevant listings, and manually log matching opportunities into tracking sheets. This workflow consumes valuable engineering hours and frequently results in missed deadlines.</p>
<p>Tender Tracker was created to automate this repetitive operational overhead within a private, local environment:</p>
<ul>
<li>Centralize multiple tender portals into a unified pipeline,</li>
<li>Automatically drop generic categories such as catering or cleaning services,</li>
<li>Route relevant technical tenders to specific sector queues using keyword rules,</li>
<li>Notify users through a local browser dashboard, email digests, or Telegram alerts,</li>
<li>Keep all tender history and configuration data entirely on the user&#8217;s computer.</li>
</ul>
<h2>Architecture and Pipeline</h2>
<p>The application functions through an isolated, deterministic pipeline without relying on hosted cloud backends. A core design decision is placing rule-based filters first, ensuring fast, transparent, and cost-free execution.</p>

<div class="cw-diagram-container" style="width: 100%; margin: 2rem 0; text-align: center; overflow-x: auto;">
  <div style="width: 100%; display: inline-block; border: 1px solid #e2e8f0; border-radius: 8px; padding: 1.25rem; background: #fafafa; box-shadow: 0 2px 8px rgba(0,0,0,0.04); box-sizing: border-box;">
    <svg id="cw-mermaid-en-0b6fc496" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 1295.0556640625px;" viewBox="0 0 1295.0556640625 77.4000015258789" role="graphics-document document" aria-roledescription="flowchart-v2" xmlns:xlink="http://www.w3.org/1999/xlink"><style xmlns="http://www.w3.org/1999/xhtml">@import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css");</style><style>#cw-mermaid-en-0b6fc496{font-size:14px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#cw-mermaid-en-0b6fc496 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#cw-mermaid-en-0b6fc496 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#cw-mermaid-en-0b6fc496 .error-icon{fill:#552222;}#cw-mermaid-en-0b6fc496 .error-text{fill:#552222;stroke:#552222;}#cw-mermaid-en-0b6fc496 .edge-thickness-normal{stroke-width:1px;}#cw-mermaid-en-0b6fc496 .edge-thickness-thick{stroke-width:3.5px;}#cw-mermaid-en-0b6fc496 .edge-pattern-solid{stroke-dasharray:0;}#cw-mermaid-en-0b6fc496 .edge-thickness-invisible{stroke-width:0;fill:none;}#cw-mermaid-en-0b6fc496 .edge-pattern-dashed{stroke-dasharray:3;}#cw-mermaid-en-0b6fc496 .edge-pattern-dotted{stroke-dasharray:2;}#cw-mermaid-en-0b6fc496 .marker{fill:#666;stroke:#666;}#cw-mermaid-en-0b6fc496 .marker.cross{stroke:#666;}#cw-mermaid-en-0b6fc496 svg{font-size:14px;}#cw-mermaid-en-0b6fc496 p{margin:0;}#cw-mermaid-en-0b6fc496 .label{color:#000000;}#cw-mermaid-en-0b6fc496 .cluster-label text{fill:#333;}#cw-mermaid-en-0b6fc496 .cluster-label span{color:#333;}#cw-mermaid-en-0b6fc496 .cluster-label span p{background-color:transparent;}#cw-mermaid-en-0b6fc496 .label text,#cw-mermaid-en-0b6fc496 span{fill:#000000;color:#000000;}#cw-mermaid-en-0b6fc496 .node rect,#cw-mermaid-en-0b6fc496 .node circle,#cw-mermaid-en-0b6fc496 .node ellipse,#cw-mermaid-en-0b6fc496 .node polygon,#cw-mermaid-en-0b6fc496 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#cw-mermaid-en-0b6fc496 .rough-node .label text,#cw-mermaid-en-0b6fc496 .node .label text,#cw-mermaid-en-0b6fc496 .image-shape .label,#cw-mermaid-en-0b6fc496 .icon-shape .label{text-anchor:middle;}#cw-mermaid-en-0b6fc496 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#cw-mermaid-en-0b6fc496 .rough-node .label,#cw-mermaid-en-0b6fc496 .node .label,#cw-mermaid-en-0b6fc496 .image-shape .label,#cw-mermaid-en-0b6fc496 .icon-shape .label{text-align:center;}#cw-mermaid-en-0b6fc496 .node.clickable{cursor:pointer;}#cw-mermaid-en-0b6fc496 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#cw-mermaid-en-0b6fc496 .arrowheadPath{fill:#333333;}#cw-mermaid-en-0b6fc496 .edgePath .path{stroke:#666;stroke-width:1px;}#cw-mermaid-en-0b6fc496 .flowchart-link{stroke:#666;fill:none;}#cw-mermaid-en-0b6fc496 .edgeLabel{background-color:white;text-align:center;}#cw-mermaid-en-0b6fc496 .edgeLabel p{background-color:white;}#cw-mermaid-en-0b6fc496 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#cw-mermaid-en-0b6fc496 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#cw-mermaid-en-0b6fc496 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#cw-mermaid-en-0b6fc496 .cluster text{fill:#333;}#cw-mermaid-en-0b6fc496 .cluster span{color:#333;}#cw-mermaid-en-0b6fc496 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#cw-mermaid-en-0b6fc496 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#cw-mermaid-en-0b6fc496 rect.text{fill:none;stroke-width:0;}#cw-mermaid-en-0b6fc496 .icon-shape,#cw-mermaid-en-0b6fc496 .image-shape{background-color:white;text-align:center;}#cw-mermaid-en-0b6fc496 .icon-shape p,#cw-mermaid-en-0b6fc496 .image-shape p{background-color:white;padding:2px;}#cw-mermaid-en-0b6fc496 .icon-shape .label rect,#cw-mermaid-en-0b6fc496 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#cw-mermaid-en-0b6fc496 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#cw-mermaid-en-0b6fc496 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#cw-mermaid-en-0b6fc496 .node .neo-node{stroke:#999;}#cw-mermaid-en-0b6fc496 [data-look="neo"].node rect,#cw-mermaid-en-0b6fc496 [data-look="neo"].cluster rect,#cw-mermaid-en-0b6fc496 [data-look="neo"].node polygon{stroke:url(#cw-mermaid-en-0b6fc496-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-0b6fc496 [data-look="neo"].swimlane.cluster rect{filter:none;}#cw-mermaid-en-0b6fc496 [data-look="neo"].node path{stroke:url(#cw-mermaid-en-0b6fc496-gradient);stroke-width:1px;}#cw-mermaid-en-0b6fc496 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-0b6fc496 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#cw-mermaid-en-0b6fc496 [data-look="neo"].node circle{stroke:url(#cw-mermaid-en-0b6fc496-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-0b6fc496 [data-look="neo"].node circle .state-start{fill:#000000;}#cw-mermaid-en-0b6fc496 [data-look="neo"].icon-shape .icon{fill:url(#cw-mermaid-en-0b6fc496-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-0b6fc496 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#cw-mermaid-en-0b6fc496-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#cw-mermaid-en-0b6fc496 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="cw-mermaid-en-0b6fc496_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M205.605,38.7L230.605,38.7L251.605,38.7" id="cw-mermaid-en-0b6fc496-L_A_B_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_B_0" data-points="W3sieCI6MjA1LjYwNTQ2ODc1LCJ5IjozOC43MDAwMDA3NjI5Mzk0NX0seyJ4IjoyMzAuNjA1NDY4NzUsInkiOjM4LjcwMDAwMDc2MjkzOTQ1fSx7IngiOjI1NS42MDU0Njg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-0b6fc496_flowchart-v2-pointEnd)"/><path d="M407.762,38.7L432.762,38.7L453.762,38.7" id="cw-mermaid-en-0b6fc496-L_B_C_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_C_0" data-points="W3sieCI6NDA3Ljc2MTcxODc1LCJ5IjozOC43MDAwMDA3NjI5Mzk0NX0seyJ4Ijo0MzIuNzYxNzE4NzUsInkiOjM4LjcwMDAwMDc2MjkzOTQ1fSx7IngiOjQ1Ny43NjE3MTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-0b6fc496_flowchart-v2-pointEnd)"/><path d="M620.824,38.7L645.824,38.7L666.824,38.7" id="cw-mermaid-en-0b6fc496-L_C_D_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_D_0" data-points="W3sieCI6NjIwLjgyNDIxODc1LCJ5IjozOC43MDAwMDA3NjI5Mzk0NX0seyJ4Ijo2NDUuODI0MjE4NzUsInkiOjM4LjcwMDAwMDc2MjkzOTQ1fSx7IngiOjY3MC44MjQyMTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-0b6fc496_flowchart-v2-pointEnd)"/><path d="M835.824,38.7L860.824,38.7L881.824,38.7" id="cw-mermaid-en-0b6fc496-L_D_E_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_E_0" data-points="W3sieCI6ODM1LjgyNDIxODc1LCJ5IjozOC43MDAwMDA3NjI5Mzk0NX0seyJ4Ijo4NjAuODI0MjE4NzUsInkiOjM4LjcwMDAwMDc2MjkzOTQ1fSx7IngiOjg4NS44MjQyMTg3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-0b6fc496_flowchart-v2-pointEnd)"/><path d="M1023.965,38.7L1048.965,38.7L1069.965,38.7" id="cw-mermaid-en-0b6fc496-L_E_F_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_E_F_0" data-points="W3sieCI6MTAyMy45NjQ4NDM3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6MTA0OC45NjQ4NDM3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9LHsieCI6MTA3My45NjQ4NDM3NSwieSI6MzguNzAwMDAwNzYyOTM5NDV9XQ==" data-look="classic" marker-end="url(#cw-mermaid-en-0b6fc496_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_A_B_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_B_C_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_C_D_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_D_E_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_E_F_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g></g><g class="nodes"><g class="node default  " id="cw-mermaid-en-0b6fc496-flowchart-A-0" data-look="classic" transform="translate(106.802734375, 38.70000076293945)"><rect class="basic label-container" style="" x="-98.802734375" y="-30.700000762939453" width="197.60546875" height="61.400001525878906"/><g class="label" style="" transform="translate(0, -15.700000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Procurement</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Sources</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(State</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Portals,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Bulletins)</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-0b6fc496-flowchart-B-1" data-look="classic" transform="translate(331.68359375, 38.70000076293945)"><rect class="basic label-container" style="" x="-76.078125" y="-30.700000762939453" width="152.15625" height="61.400001525878906"/><g class="label" style="" transform="translate(0, -15.700000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Source</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Adapters</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(Normalization)</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-0b6fc496-flowchart-C-3" data-look="classic" transform="translate(539.29296875, 38.70000076293945)"><rect class="basic label-container" style="" x="-81.53125" y="-30.200000762939453" width="163.0625" height="60.400001525878906"/><g class="label" style="" transform="translate(0, -15.200000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Deduplication</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> and</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Global</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Exclusions</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-0b6fc496-flowchart-D-5" data-look="classic" transform="translate(753.32421875, 38.70000076293945)"><rect class="basic label-container" style="" x="-82.5" y="-30.700000762939453" width="165" height="61.400001525878906"/><g class="label" style="" transform="translate(0, -15.700000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Sector</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Rule</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Filters</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(Deterministic)</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-0b6fc496-flowchart-E-7" data-look="classic" transform="translate(954.89453125, 38.70000076293945)"><rect class="basic label-container" style="" x="-69.0703125" y="-30.700000762939453" width="138.140625" height="61.400001525878906"/><g class="label" style="" transform="translate(0, -15.700000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Local</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Storage</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(SQLite)</tspan></tspan></text></g></g></g><g class="node default  " id="cw-mermaid-en-0b6fc496-flowchart-F-9" data-look="classic" transform="translate(1180.51025390625, 38.70000076293945)"><rect class="basic label-container" style="" x="-106.54541015625" y="-30.700000762939453" width="213.0908203125" height="61.400001525878906"/><g class="label" style="" transform="translate(0, -15.700000762939453)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Notification</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Channels</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(Web</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> UI,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Telegram,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Email)</tspan></tspan></text></g></g></g></g></g></g><defs><filter id="cw-mermaid-en-0b6fc496-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="cw-mermaid-en-0b6fc496-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><linearGradient id="cw-mermaid-en-0b6fc496-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="hsl(0, 0%, 83.3333333333%)" stop-opacity="1"/><stop offset="100%" stop-color="hsl(0, 0%, 88.9215686275%)" stop-opacity="1"/></linearGradient></svg>
  </div>
</div>


<h3>Processing Stages</h3>
<ol>
<li><strong>Ingestion:</strong> Dedicated adapters fetch listings from public endpoints and normalize them into a uniform schema.</li>
<li><strong>Deduplication:</strong> Listings published across multiple portals or recurring over multiple days are deduplicated.</li>
<li><strong>Exclusions:</strong> Global negative keywords weed out non-target industries immediately.</li>
<li><strong>Classification:</strong> Surviving announcements are mapped to defined sectors based on positive keyword heuristics. Optional language model filters can be enabled for secondary semantic evaluation.</li>
<li><strong>Storage and Alerting:</strong> Matched records are stored in a local SQLite database, displayed in the dashboard, and dispatched through configured notification channels.</li>
</ol>
<h2>Key Capabilities</h2>
<h3>Supported Sources</h3>
<p>Tender Tracker ingests public records across four primary outlets:</p>
<ul>
<li><strong>EKAPv2:</strong> Initial scans and incremental synchronization of public tender notices.</li>
<li><strong>DMO:</strong> Active procurement and catalog listings from the State Supply Office.</li>
<li><strong>ilan.gov.tr:</strong> Paginated JSON querying of official public announcements.</li>
<li><strong>Yatırımlar Dergisi:</strong> Structured parsing of sector investment and tender reports.</li>
</ul>
<p><em>Note: The tool strictly consumes public announcements and does not bypass credentials, e-signatures, or closed sessions.</em></p>
<h3>Local Management Dashboard and CLI</h3>
<p>The application offers two distinct operating modes:</p>
<ul>
<li><strong>Local Web Interface:</strong> Powered by FastAPI, providing an intuitive local dashboard for managing listings, sector keywords, and notification rules.</li>
<li><strong>Command-Line Interface (CLI):</strong> Features <code>--once</code> mode for one-shot scanning and <code>--daemon</code> mode for continuous background polling. This allows simple scheduling via Windows Task Scheduler at daily shift startup.</li>
</ul>
<h3>Portable, Serverless Deployment</h3>
<p>Tender Tracker is built as a self-contained desktop tool rather than a managed SaaS platform:</p>
<ul>
<li>Distributed as a portable Windows executable compiled with PyInstaller.</li>
<li>Local SQLite database stored as a single file, making backups as simple as copying a directory.</li>
<li>Direct outbound SMTP and Telegram API calls executed locally from the host machine.</li>
</ul>
<h2>Project Status and Availability</h2>
<p>Tender Tracker is developed openly under the permissive MIT license. Source code, release binaries, and setup documentation are maintained on GitHub.</p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>

<h2><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Related Links</h2>
<blockquote>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>GitHub Repository:</strong> <a href="https://github.com/muisik/tender-tracker" rel="nofollow noopener" target="_blank">github.com/muisik/tender-tracker</a><br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Related Architecture:</strong> <a href="https://muisik.com/en/contextrail-minimum-governed-harness/">ContextRail: Minimum Effective Project Memory</a><br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Systems Governance:</strong> <a href="https://muisik.com/en/the-rule-of-dancing-with-llms-agentic-micromanagement/">The Rule of Dancing with LLMs: Governing the System</a></p>
</blockquote>
<hr class="wp-block-separator has-alpha-channel-opacity"/>

<p><em>Last updated: July 2026 | Version: 1.0</em></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fieldbus Integration in Safety-Critical HMI Systems</title>
		<link>https://muisik.com/en/fieldbus-integration-in-safety-critical-hmi-systems/</link>
		
		<dc:creator><![CDATA[Muhammet Işık]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 18:39:40 +0000</pubDate>
				<category><![CDATA[Projects and Tools]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[HMI (Human Machine Interface)]]></category>
		<category><![CDATA[Industrial Communication Protocols]]></category>
		<category><![CDATA[Railway Signalling]]></category>
		<category><![CDATA[Safety Controllers]]></category>
		<category><![CDATA[Safety Critical Systems]]></category>
		<category><![CDATA[System Integration]]></category>
		<guid isPermaLink="false">https://muisik.com/?p=2413</guid>

					<description><![CDATA[A standard C99-based middleware designed on the ANSYS SCADE Display platform, enabling HMI screens to communicate with field-level HIMA HiMatrix F35 safety PLCs via Modbus TCP/IP.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Scope: academic proof of concept validated on a laboratory testbed. The middleware described is not a SIL-certified or safety-certified component.</em></p>



<p class="wp-block-paragraph">A standard C99-based middleware designed on the ANSYS SCADE Display platform, enabling HMI screens to communicate with field-level&nbsp;<strong>HIMA HiMatrix F35</strong>&nbsp;safety PLCs via&nbsp;<strong>Modbus TCP/IP</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Scope:</strong>&nbsp;An integration application operating on the zero-copy principle, developed to establish data exchange between SCADE&#8217;s closed-loop structure and the control layer.</p>
</blockquote>





<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="project-portfolio">Project Portfolio</h2>


<div class="kb-table-container kb-table-container2413_296c6c-08 wp-block-kadence-table"><table class="kb-table kb-table2413_296c6c-08">
<tr class="kb-table-row kb-table-row2413_aa8485-30">
<th  scope="col" class="kb-table-data kb-table-data2413_7d50c0-20">

<p class="wp-block-paragraph">Parameter</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2413_168897-53">

<p class="wp-block-paragraph">Value</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row2413_e102c8-11">
<td  class="kb-table-data kb-table-data2413_cfb0c1-2e">

<p class="wp-block-paragraph"><strong>Category</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_ce6cec-dc">

<p class="wp-block-paragraph">System Integration</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_1c9db7-5f">
<td  class="kb-table-data kb-table-data2413_f50230-29">

<p class="wp-block-paragraph"><strong>Delivery Type</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_46fe53-e7">

<p class="wp-block-paragraph">Embedded Middleware</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_e9a5be-00">
<td  class="kb-table-data kb-table-data2413_b5160d-36">

<p class="wp-block-paragraph"><strong>Status</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_9730e4-d5">

<p class="wp-block-paragraph">Proof of Concept / Academic Paper Published</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_fff32e-02">
<td  class="kb-table-data kb-table-data2413_386d96-fe">

<p class="wp-block-paragraph"><strong>Scale / Scope</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_274e78-7c">

<p class="wp-block-paragraph">Local Communication (4 Track Circuits, 6 Signals, 1 Switch)</p>

</td>
</tr>
</table></div>


<h2 class="wp-block-heading" id="current-situation-and-problem">Current Situation and Problem</h2>



<p class="wp-block-paragraph"><strong>Context:</strong>&nbsp;The necessity to migrate the interlocking simulation system (4 tracks, 6 signals, 1 switch) at the ITU Railway Systems Laboratory to a SCADE Display-supported HMI architecture compliant with industrial and certifiable standards.&nbsp;<strong>Critical Issues:</strong>&nbsp;The absence of a native Modbus interface within SCADE Display and the platform&#8217;s closed-network design. The inability of the HMI interface to communicate directly with actual HIMA HiMatrix F35 safety controllers, and the lack of dynamic field configuration for IP/port maps.</p>


<div class="kb-table-container kb-table-container2413_b129f2-4e wp-block-kadence-table"><table class="kb-table kb-table2413_b129f2-4e">
<tr class="kb-table-row kb-table-row2413_2d19ce-c6">
<th  scope="col" class="kb-table-data kb-table-data2413_9de0c4-7e">

<p class="wp-block-paragraph">Component</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2413_49d23c-7d">

<p class="wp-block-paragraph">Status / Requirement</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row2413_b57dba-d0">
<td  class="kb-table-data kb-table-data2413_1c3cfb-b7">

<p class="wp-block-paragraph"><strong>HMI Platform</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_66c686-3a">

<p class="wp-block-paragraph">Lack of a native Modbus interface within SCADE Display</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_c5b01f-5b">
<td  class="kb-table-data kb-table-data2413_61a89d-aa">

<p class="wp-block-paragraph"><strong>Control Layer</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_ffb557-da">

<p class="wp-block-paragraph">Mandatory communication with HIMA HiMatrix F35 PLCs via Modbus TCP/IP</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_5bf099-a4">
<td  class="kb-table-data kb-table-data2413_c7ed61-ab">

<p class="wp-block-paragraph"><strong>Field Configuration</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_8581c0-b6">

<p class="wp-block-paragraph">Runtime management of varying IP/port and register maps per station</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_43caa2-cf">
<td  class="kb-table-data kb-table-data2413_abbf07-ac">

<p class="wp-block-paragraph"><strong>System Size</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_2f2362-31">

<p class="wp-block-paragraph">Local interlocking circuit comprising 4 track circuits, 6 signals, 1 switch, and 4 routes</p>

</td>
</tr>
</table></div>


<h2 class="wp-block-heading" id="solution-architecture-and-execution">Solution Architecture and Execution</h2>



<h3 class="wp-block-heading" id="architectural-approach">Architectural Approach</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Architectural Constraint Assessment:</strong>&nbsp;The generated SCADE application used in this setup provided no native Modbus interface. An external C middleware layer was therefore developed to exchange data with the HIMA controller while keeping the HMI logic separate from the communication layer. This is consistent with EN 50128 practice for separating application logic from communication.</p>
</blockquote>



<p class="wp-block-paragraph">A&nbsp;<strong>C99 middleware wrapper</strong>&nbsp;layer was designed between SCADE&#8217;s generated code and the libmodbus library:</p>



<figure class="wp-block-kadence-image kb-image2413_5430a3-6a size-full"><img fetchpriority="high" decoding="async" width="633" height="252" src="https://muisik.com/wp-content/uploads/2026/03/scade-middleware-mimari.png" alt="" class="kb-img wp-image-2411" srcset="https://muisik.com/wp-content/uploads/2026/03/scade-middleware-mimari.png 633w, https://muisik.com/wp-content/uploads/2026/03/scade-middleware-mimari-300x119.png 300w" sizes="(max-width: 633px) 100vw, 633px" /></figure>



<h3 class="wp-block-heading" id="communication-flow">Communication Flow</h3>



<figure class="wp-block-kadence-image kb-image2413_ac6211-4a size-full"><img decoding="async" width="691" height="242" src="https://muisik.com/wp-content/uploads/2026/03/scade-middleware-haberlesme.png" alt="" class="kb-img wp-image-2410" srcset="https://muisik.com/wp-content/uploads/2026/03/scade-middleware-haberlesme.png 691w, https://muisik.com/wp-content/uploads/2026/03/scade-middleware-haberlesme-300x105.png 300w" sizes="(max-width: 691px) 100vw, 691px" /></figure>



<h3 class="wp-block-heading" id="applied-methodology">Applied Methodology</h3>



<ul class="wp-block-list">
<li><strong>Zero-Copy Integration:</strong>&nbsp;Copy overhead was eliminated by hooking directly into the SCADE main loop.</li>



<li><strong>Dynamic Configuration:</strong>&nbsp;A&nbsp;<strong>3-region INI file</strong>&nbsp;was used to prevent recompilation requirements during field deployment.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Fallback behaviour:</strong>&nbsp;If the configuration file is missing or invalid, the PoC writes a local default configuration for laboratory use. A production implementation should fail safely or require explicit operator confirmation.</p>
</blockquote>



<ul class="wp-block-list">
<li><strong>Auto-Reconnection:</strong>&nbsp;Connection drops in industrial environments are inevitable; an autonomous auto-reconnect cycle was activated.</li>



<li><strong>Change Detection:</strong>&nbsp;A&nbsp;<strong>batch read and selective write</strong>&nbsp;strategy was implemented to optimize network traffic.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Architectural Decision:</strong>&nbsp;Since HMI hardware&#8217;s capability for simultaneous physical command processing is limited, outputs are evaluated in a sequential loop. This structural preference prevents unnecessary fieldbus network congestion.</p>
</blockquote>



<ul class="wp-block-list">
<li><strong>Thread-Safe Logging:</strong>&nbsp;Every event in critical systems must be logged securely.</li>
</ul>



<h3 class="wp-block-heading" id="interlocking-scope">Interlocking Scope</h3>


<div class="kb-table-container kb-table-container2413_a93f6b-4f wp-block-kadence-table"><table class="kb-table kb-table2413_a93f6b-4f">
<tr class="kb-table-row kb-table-row2413_861738-f0">
<th  scope="col" class="kb-table-data kb-table-data2413_e8f6f1-e7">

<p class="wp-block-paragraph">Component</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2413_18e129-a5">

<p class="wp-block-paragraph">Quantity</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2413_abf6ec-c3">

<p class="wp-block-paragraph">Details</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row2413_c91380-69">
<td  class="kb-table-data kb-table-data2413_f0e105-80">

<p class="wp-block-paragraph"><strong>Track Circuit (TC)</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_918113-5d">

<p class="wp-block-paragraph">4</p>

</td>

<td  class="kb-table-data kb-table-data2413_08f453-92">

<p class="wp-block-paragraph">TC01–TC04</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_189543-f1">
<td  class="kb-table-data kb-table-data2413_84b9df-85">

<p class="wp-block-paragraph"><strong>Signal (SN)</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_7e14fd-3a">

<p class="wp-block-paragraph">6</p>

</td>

<td  class="kb-table-data kb-table-data2413_d8e4a8-22">

<p class="wp-block-paragraph">Input + output signals</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_e5ba77-05">
<td  class="kb-table-data kb-table-data2413_ec6f78-96">

<p class="wp-block-paragraph"><strong>Switch (SW)</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_2786bf-0a">

<p class="wp-block-paragraph">1</p>

</td>

<td  class="kb-table-data kb-table-data2413_5fd265-ee">

<p class="wp-block-paragraph">Normal / Reverse</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_43c89f-bf">
<td  class="kb-table-data kb-table-data2413_b7ce63-1b">

<p class="wp-block-paragraph"><strong>Route (RT)</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_264b2f-f2">

<p class="wp-block-paragraph">4</p>

</td>

<td  class="kb-table-data kb-table-data2413_c58649-25">

<p class="wp-block-paragraph">RT01–RT04 combinations</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph"><strong>Example route:</strong>&nbsp;RT01: SN01E → TC01 → TC04 → TC02 → SN02E (Switch: Normal)</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Safety Rule:</strong>&nbsp;Based on critical design principles, all signals not explicitly demanded by the system are configured to default to a restrictive state (red).</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="results-and-operational-takeaways">Results and Operational Takeaways</h2>



<p class="wp-block-paragraph"><strong>Quantitative Gain:</strong>&nbsp;<em>(Potential values obtained during laboratory PoC tests)</em></p>


<div class="kb-table-container kb-table-container2413_58f337-5d wp-block-kadence-table"><table class="kb-table kb-table2413_58f337-5d">
<tr class="kb-table-row kb-table-row2413_d38a1d-a8">
<th  scope="col" class="kb-table-data kb-table-data2413_a57201-97">

<p class="wp-block-paragraph">Metric</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2413_a8b23b-5d">

<p class="wp-block-paragraph">Value / Status</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row2413_5b8769-a0">
<td  class="kb-table-data kb-table-data2413_8f2efe-73">

<p class="wp-block-paragraph"><strong>Cycle Time</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_f00e4e-04">

<p class="wp-block-paragraph">~8ms average latency</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_e120b1-ef">
<td  class="kb-table-data kb-table-data2413_c5eaa0-29">

<p class="wp-block-paragraph"><strong>Connection Mgmt</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_0eaa93-e3">

<p class="wp-block-paragraph">Automatic automatic reconnection upon connection loss</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_0c09b9-d2">
<td  class="kb-table-data kb-table-data2413_1020ff-ce">

<p class="wp-block-paragraph"><strong>Configuration</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_fd288e-f4">

<p class="wp-block-paragraph">Compilation-independent commissioning via parametric structure</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_aa5057-fa">
<td  class="kb-table-data kb-table-data2413_f07991-e4">

<p class="wp-block-paragraph"><strong>Network Traffic</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_597fd2-e8">

<p class="wp-block-paragraph">Transmission of solely changed registers via change detection algorithms</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2413_a69b14-59">
<td  class="kb-table-data kb-table-data2413_1cbe22-f5">

<p class="wp-block-paragraph"><strong>Validation</strong></p>

</td>

<td  class="kb-table-data kb-table-data2413_c5312b-e5">

<p class="wp-block-paragraph">Validated on HIMA HiMatrix F35 PLC (SILworX) and physical testbed</p>

</td>
</tr>
</table></div>


<h2 class="wp-block-heading" id="project-visuals">Project Visuals</h2>


<div class="kb-gallery-wrap-id-2413_3a83b2-bb alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-2413_3a83b2-bb kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img decoding="async" src="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-hmi-1024x802.png" width="1024" height="802" alt="" data-full-image="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-hmi.png" data-light-image="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-hmi.png" data-id="2407" class="wp-image-2407 skip-lazy" srcset="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-hmi-1024x802.png 1024w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-hmi-300x235.png 300w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-hmi-768x601.png 768w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-hmi.png 1295w" sizes="(max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img decoding="async" src="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab3.jpg" width="777" height="518" alt="Model train layout in spacious room" data-full-image="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab3.jpg" data-light-image="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab3.jpg" data-id="2406" class="wp-image-2406 skip-lazy" srcset="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab3.jpg 777w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab3-300x200.jpg 300w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab3-768x512.jpg 768w" sizes="(max-width: 777px) 100vw, 777px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img decoding="async" src="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab1.jpg" width="777" height="518" alt="" data-full-image="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab1.jpg" data-light-image="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab1.jpg" data-id="2408" class="wp-image-2408 skip-lazy" srcset="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab1.jpg 777w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab1-300x200.jpg 300w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab1-768x512.jpg 768w" sizes="(max-width: 777px) 100vw, 777px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img decoding="async" src="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab2.jpg" width="777" height="518" alt="" data-full-image="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab2.jpg" data-light-image="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab2.jpg" data-id="2409" class="wp-image-2409 skip-lazy" srcset="https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab2.jpg 777w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab2-300x200.jpg 300w, https://muisik.com/wp-content/uploads/2026/03/scade-modbus-lab2-768x512.jpg 768w" sizes="(max-width: 777px) 100vw, 777px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<h2 class="wp-block-heading" id="related-links"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Related Links</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<strong>Source Code:</strong>&nbsp;<a href="https://github.com/muisik/ansys-scade-modbus-integration-middleware" rel="nofollow noopener" target="_blank">Github/ansys-scade-modbus-integration-middleware</a>&nbsp;<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Download TOK 2025 Paper:</strong>&nbsp;<a href="https://muisik.com/wp-content/uploads/2026/03/demiryolu_scade_modbus_makale.pdf">SCADE Modbus Conference Paper</a></p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>Authors:</strong>&nbsp;Dora Demir¹, İbrahim Can Kolotoğlu², Muhammet Işık², Serhat Boynukalın³, Mehmet Turan Söylemez²<br>¹ ITU Electronics and Communication Eng. | ² ITU Control and Automation Eng. | ³ ITU Graduate School</p>



<p class="wp-block-paragraph"><em>This work was conducted at the ITU EEF Railway Systems Laboratory and published at the&nbsp;<strong>Turkish Automatic Control 2025 (TOK 2025)</strong>&nbsp;conference.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Last update: March 2026 | Version: 1.0</em></p>

<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p><em>Last updated: March 2026 | Version: 1.0</em></p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
