<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title><![CDATA[Sober Group — Sobriety & Addiction Recovery Community Forums - Website Development]]></title>
		<link>https://sobergroup.com/forums/</link>
		<description><![CDATA[<strong>Sober Group Technical Services excels at providing comprehensive website development services, guiding clients through each phase of the process, from initial wireframe designs to minimal viable products and ultimately to fully functional websites</strong>. Our team of seasoned professionals is dedicated to providing personalized and prompt services, ensuring that the final product meets and exceeds client expectations.
<br /><br />

<a href="https://website-development.sobergroup.com">As evidence of our commitment to security and privacy, we adhere to the stringent HIPAA compliance standards, protecting sensitive information and placing a premium on the protection of user data.</a> As a result, clients can confidently embark on their digital journey with Sober Group Technical Services, knowing their online presence is captivating and secure.]]></description>
		<language>en</language>
		<lastBuildDate>Wed, 03 Jun 2026 18:07:29 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://sobergroup.com/forums/images/misc/rss.png</url>
			<title><![CDATA[Sober Group — Sobriety & Addiction Recovery Community Forums - Website Development]]></title>
			<link>https://sobergroup.com/forums/</link>
		</image>
		<item>
			<title>Forging Her Own Path: Houmahani Kane’s Journey in Creative Development</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19306-forging-her-own-path-houmahani-kane’s-journey-in-creative-development</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>From self-taught beginnings to real client work, I share my journey, key projects, and the challenges that shaped my approach to building interactive...</description>
			<content:encoded><![CDATA[From self-taught beginnings to real client work, I share my journey, key projects, and the challenges that shaped my approach to building interactive experiences.<br />
<br />
<a href="https://tympanus.net/codrops/2026/06/03/forging-her-own-path-houmahani-kanes-journey-in-creative-development/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19306-forging-her-own-path-houmahani-kane’s-journey-in-creative-development</guid>
		</item>
		<item>
			<title>@function</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19305-function</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>The @function at-rule defines CSS custom functions. These custom functions are reusable blocks of CSS that can accept arguments, contain complex...</description>
			<content:encoded><![CDATA[The @function at-rule defines CSS custom functions. These custom functions are reusable blocks of CSS that can accept arguments, contain complex logic, and return values based on that logic. <br />
<br />
<hr /><br />
<a href="https://css-tricks.com/almanac/rules/f/function/" target="_blank">@function</a> originally handwritten and published with love on <a href="https://css-tricks.com" target="_blank">CSS-Tricks</a>. You should really <a href="https://css-tricks.com/newsletters/" target="_blank">get the newsletter</a> as well.<br />
<br />
<br />
<br />
<a href="https://css-tricks.com/almanac/rules/f/function/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19305-function</guid>
		</item>
		<item>
			<title>@custom-media</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19304-custom-media</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>The CSS @custom-media at-rule allows creating aliases for media queries. 
 
 
@custom-media (https://css-tricks.com/almanac/rules/c/custom-media/)...</description>
			<content:encoded><![CDATA[The CSS @custom-media at-rule allows creating aliases for media queries.<br />
<br />
<hr /><br />
<a href="https://css-tricks.com/almanac/rules/c/custom-media/" target="_blank">@custom-media</a> originally handwritten and published with love on <a href="https://css-tricks.com" target="_blank">CSS-Tricks</a>. You should really <a href="https://css-tricks.com/newsletters/" target="_blank">get the newsletter</a> as well.<br />
<br />
<br />
<br />
<a href="https://css-tricks.com/almanac/rules/c/custom-media/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19304-custom-media</guid>
		</item>
		<item>
			<title>offset-path</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19303-offset-path</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>The offset-path property in CSS defines a movement path for an element to follow during animation. 
 
This property began life as motion-path. This,...</description>
			<content:encoded><![CDATA[The offset-path property in CSS defines a movement path for an element to follow during animation.<br />
<br />
This property began life as motion-path. This, and all other related motion-* properties, are being renamed offset-* in <a href="https://drafts.fxtf.org/motion-1/" target="_blank">the spec</a>. We’re changing …<br />
<br />
<hr /><br />
<a href="https://css-tricks.com/almanac/properties/o/offset-path/" target="_blank">offset-path</a> originally handwritten and published with love on <a href="https://css-tricks.com" target="_blank">CSS-Tricks</a>. You should really <a href="https://css-tricks.com/newsletters/" target="_blank">get the newsletter</a> as well.<br />
<br />
<br />
<br />
<a href="https://css-tricks.com/almanac/properties/o/offset-path/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19303-offset-path</guid>
		</item>
		<item>
			<title>How To Make Your Design System AI-Ready</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19302-how-to-make-your-design-system-ai-ready</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description><![CDATA[AI-generated prototypes often don't deliver consistently decent results because of tiny inconsistencies scattered all across a design system. I's...]]></description>
			<content:encoded><![CDATA[<b>AI-generated prototypes</b> often don't deliver consistently decent results because of tiny inconsistencies scattered all across a design system. I's decisions made but not documented, hard-coded values never cleaned up, or <b>relying too much on AI</b> making sense of mock-ups or design flows on its own.<br />
<br />
Yesterday I stumbled upon a <a href="https://hvpandya.com/llm-design-systems" target="_blank">useful practical guide</a> by Hardik Pandya from Atlassian — on <b>how to reduce drifts</b>, minimize mistakes, maintain context, and improve the quality of AI-generated prototypes. Let’s see how it works.<br />
<br />
<img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://files.smashing.media/articles/how-make-design-system-ai-ready/1-traditional-llm-readable-design-systems.jpg" border="0" alt="" /><br />
<br />
1. Design Decisions Are Infrastructure<br />
Unsurprisingly, better AI prototypes <b>come from better data</b> — but also from better human guidance. We shouldn’t assume that AI knows how to choose the right component and how to design with accessibility in mind. It needs priorities, a clear path on how we make decisions, design principles, examples, do’s and don’ts.<br />
<br />
In fact, we should treat design decisions as <b>infrastructure</b>. That means that every time we make a decision — not just a design decision, but even a decision on how to actually prioritize our work and how we make decisions around here — it must find a path into the spec file that is then consumed by AI.<br />
<br />
2. Auditing: FigmaLint<br />
One of the useful tools to audit the quality of the design system is <a href="https://www.figma.com/community/plugin/1521241390290871981/figmalint" target="_blank">FigmaLint</a>. It’s a useful <b>free Figma plugin</b> for auditing tokens, states, accessibility, binding tokens, renaming layers, detecting detached instances, missing interactive states and hard-coded values — and preparing the design documentation.<br />
<br />
<img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://files.smashing.media/articles/how-make-design-system-ai-ready/2-figmalint.jpg" border="0" alt="" /><br />
<br />
If you often have to work with <b>vendors and third parties</b> who supply you with their design systems and component libraries, that’s a great helper to have by your side — especially if you want to improve the quality of prototypes, AI-generated code, and AI-written documentation.<br />
<br />
3. Three Layers: Spec Files + Token Layer + Auditing<br />
To ensure quality, we establish design principles, guidelines, and rules in the form of “<b>spec files”</b>. It’s structured Markdown files that include spacing rules, color choices, component usage guidelines, priorities, etc. AI is going to read and reuse that spec file every time it’s going to generate a prototype.<br />
<br />
<img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://files.smashing.media/articles/how-make-design-system-ai-ready/3-spec-files.jpg" border="0" alt="" /><br />
<br />
Because the spec files are text files, it’s much more <b>cost-effective</b> but also much more accurate, just because we don’t rely on AI recognizing or decoding patterns from mock-ups but get specific guidelines instead. In fact, extending code is often a more effective way than generating code from mock-ups.<br />
<br />
The <b>token layer</b> lists and keeps updated all tokens used throughout the design system. AI always chooses from a closed set of named variables instead of inventing plausible values ad hoc.<br />
<br />
<img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://files.smashing.media/articles/how-make-design-system-ai-ready/4-five-levels-context-engineering.jpg" border="0" alt="" /><br />
<br />
An <b>audit script</b> catches what AI gets wrong. It scans the prototype and flags every hard-coded value and flags it if necessary. It can be a regular software doing that, with AI waiting for its feedback to come back.<br />
<br />
Finally, when a design system <b>ships updates</b>, a sync routine flags which spec files need updating. The goal is to make sure that AI always reads up-to-date, current specs, not the ones written against an outdated version.<br />
<br />
4. Examples of AI-Ready Design Systems<ul><li><a href="https://atlassian.design/llms.txt" target="_blank">Atlassian</a></li>
<li><a href="https://carbondesignsystem.com/llms.txt" target="_blank">Carbon</a></li>
<li><a href="https://design.cms.gov/llms.txt" target="_blank">CMS Design System</a></li>
<li><a href="https://nordhealth.design/ai/" target="_blank">Nordhealth</a></li>
</ul><br />
Wrapping Up<br />
Ultimately, AI <b>cannot magically resolve</b> technical debt or design debt without proper guidance. It relies heavily on clear decisions, established priorities, and well-defined principles.<br />
<br />
The more <b>deliberate and precise</b> designers are in guiding AI, the better the overall outcomes will be. This requires not just cleaning up and improving design systems but also maintaining them over time as decisions need to trickle down into Markdown files. We’ll be busy for years to come.<br />
<br />
Meet “Design Patterns For AI Interfaces”<br />
Meet <a href="https://ai-design-patterns.com/" target="_blank"><b>Design Patterns For AI Interfaces</b></a>, Vitaly’s new <b>video course</b> with 100s of real-life examples and UX guidelines to design AI features that people actually use — with a <a href="https://smashingconf.com/online-workshops/workshops/ai-interfaces-vitaly-friedman/" target="_blank">live UX training</a> later this year. <a href="https://www.youtube.com/watch?v=jhZ3el3n-u0" target="_blank">Jump to a free preview</a>.<br />
<br />
<a href="https://ai-design-patterns.com/" target="_blank"><img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-designer-career-paths/design-patterns-ai-interfaces.png" border="0" alt="" /></a>Meet <a href="https://ai-design-patterns.com/" target="_blank">Design Patterns For AI Interfaces</a>, Vitaly’s video course on interface design &amp; UX.<ul><li><a href="https://sobergroup.com/forums/"><br />
Video + UX Training</a></li>
<li><a href="https://sobergroup.com/forums/">Video only</a></li>
</ul><b>Video + UX Training</b><br /><br />$ 450.00 $ 799.00<br />
<a href="https://smart-interface-design-patterns.thinkific.com/enroll/3476562?price_id=4401578" target="_blank"><br />
Get Video + UX Training<br />
</a>30 video lessons (10h) + <a href="https://smashingconf.com/online-workshops/workshops/ai-interfaces-vitaly-friedman/" target="_blank">Live UX Training</a>.<br />
100 days money-back-guarantee.<br />
<br />
<b>Video only</b><br /><br />$ 275.00$ 395.00<br />
<br />
<a href="https://smart-interface-design-patterns.thinkific.com/enroll/3476562?price_id=4397456" target="_blank"><br />
Get the video course<br />
</a>30 video lessons (10h). Updated yearly.<br />
Also available as a <a href="https://smart-interface-design-patterns.thinkific.com/enroll/3570306?price_id=4503439" target="_blank">UX Bundle with 3 video courses.</a><br />
<br />
<br />
<br />
<br />
<br />
Useful Resources<ul><li><a href="https://www.figma.com/community/plugin/1521241390290871981/figmalint" target="_blank">FigmaLint</a>, by TJ Pitre</li>
<li><a href="https://atlassian.design/" target="_blank">Atlassian AI-Ready Design System Example</a>, by Atlassian</li>
<li><a href="https://carbondesignsystem.com/llms.txt" target="_blank">Carbon AI-Ready Design System Example</a>, by IBM</li>
<li><a href="https://design.cms.gov/llms.txt" target="_blank">CMS Design System AI-Ready Example</a>, by Centers for Medicare &amp; Medicaid Services</li>
<li><a href="https://nordhealth.design/ai/" target="_blank">Nordhealth AI-Ready Design System Example</a>, by Nordhealth</li>
</ul><br />
<br />
<br />
<a href="https://smashingmagazine.com/2026/06/how-make-design-system-ai-ready/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19302-how-to-make-your-design-system-ai-ready</guid>
		</item>
		<item>
			<title>
                     How to Build Responsive Designs and Scroll Effects with CSS Container Queries 
                </title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19301-how-to-build-responsive-designs-and-scroll-effects-with-css-container-queries</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>Container queries let you target specific sections of your webpage and apply styles to create customizable, responsive designs based on the...</description>
			<content:encoded><![CDATA[<br />
                     Container queries let you target specific sections of your webpage and apply styles to create customizable, responsive designs based on the container's size rather than that of the viewport. This guid <br />
                <br />
<br />
<a href="https://www.freecodecamp.org/news/how-to-build-responsive-designs-and-scroll-effects-with-css-container-queries/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19301-how-to-build-responsive-designs-and-scroll-effects-with-css-container-queries</guid>
		</item>
		<item>
			<title>Manual Testing: How We Make Sure Software Works Correctly</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19300-manual-testing-how-we-make-sure-software-works-correctly</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>Have you ever played a video game that suddenly stopped working? Or used an app that showed the wrong answer? That happens when software is not...</description>
			<content:encoded><![CDATA[Have you ever played a video game that suddenly stopped working? Or used an app that showed the wrong answer? That happens when software is not tested properly. That is where <b>Software Testing</b> comes in. Testing is simply the act of checking whether a software application is working the way it is supposed to work.<br />
<br />
<br />
In this blog, I will talk about four very important topics in software testing:<br />
<br />
<ol class="decimal"><li>Common Manual Testing Techniques</li>
<li>Boundary Value Analysis</li>
<li>Decision Table Testing</li>
<li>The Future of Manual Testing in the Age of AI<br />
Let us begin!</li>
</ol><br />
<br />
<br />
<br />
<br />
<b>1. Common Manual Testing Techniques</b><br /><br />Think of manual testing like a human inspector at a factory. Instead of a machine checking the product, a real person uses the software and checks if it works correctly. The person does this step by step, without using any automated tools.<br />
<br />
<br />
Here are the most common ways manual testing is done:<br />
<br />
<br />
<b>Exploratory Testing</b><br /><br />In this technique, the tester does not follow a fixed script. Instead, they explore the software freely — just like how you would explore a new video game without reading the instruction manual. The tester uses their experience and curiosity to find bugs.<br />
<br />
<br />
For example, a tester might try typing very long names in a form or clicking buttons very fast to see if the software breaks.<br />
<br />
<br />
<b>Black Box Testing</b><br /><br />In black box testing, the tester does not know how the software is built inside. They only look at what goes in (input) and what comes out (output). It is like using a TV remote — you press a button and check if the right channel appears. You do not care how the electronics inside work.<br />
<br />
<br />
This is very useful because real users also do not know the internal code. So this testing checks the software from the user's point of view.<br />
<br />
<br />
<b>White Box Testing</b><br /><br />This is the opposite of black box testing. Here, the tester knows the internal code of the software. They check if each part of the code is working correctly. This is like a mechanic opening a car's engine and checking each part carefully.<br />
<br />
<br />
<b>Smoke Testing</b><br /><br />Before doing detailed testing, testers first do a quick check to see if the software starts and basic things work. This is called smoke testing. It is like switching on a new TV — first you just check if it turns on and shows a picture. If that does not work, there is no point checking other features.<br />
<br />
<br />
<b>Regression Testing</b><br /><br />Every time developers make a change or fix a bug, testers check whether the fix accidentally broke something else. This is called regression testing. Imagine if someone fixed a leaking pipe but accidentally broke a window — you would want to check everything after repairs.<br />
<br />
<br />
<b>User Acceptance Testing (UAT)</b><br /><br />Before software is released to real users, it is given to a small group of actual users to test. They check if the software does what they expected. If they are happy, the software is approved for release.<br />
<br />
<br />
<br />
<br />
<br />
<b>2. Boundary Value Analysis</b><br /><br />Now let us talk about a very clever testing technique called <b>Boundary Value Analysis</b>, or BVA.<br />
<br />
<br />
Imagine your school says students must be between 5 and 18 years old to join. The &quot;boundaries&quot; are 5 and 18. Boundary Value Analysis says: <b>most bugs hide near the edges, not in the middle.</b><br />
<br />
<br />
So if a form accepts ages from 5 to 18, a good tester would check:<ul><li><b>Just below the minimum</b>: age 4 (should be rejected)</li>
<li><b>Exactly at the minimum</b>: age 5 (should be accepted)</li>
<li><b>Just above the minimum</b>: age 6 (should be accepted)</li>
<li><b>Just below the maximum</b>: age 17 (should be accepted)</li>
<li><b>Exactly at the maximum</b>: age 18 (should be accepted)</li>
<li><b>Just above the maximum</b>: age 19 (should be rejected)<br />
Why do bugs hide at boundaries? Because when programmers write code, they sometimes make small mistakes like writing &gt; instead of &gt;=. These small mistakes cause the software to behave incorrectly at the edges.</li>
</ul><br />
<br />
<b>Real-life Example at NSDL</b><br /><br />At my workplace, we test demat account opening forms. If a PAN number must be exactly 10 characters, we test with 9 characters, 10 characters, and 11 characters. This way, we catch bugs that only appear at the exact edges of the allowed range.<br />
<br />
<br />
<b>Why BVA is powerful:</b><ul><li>It reduces the number of test cases needed</li>
<li>It finds bugs that normal testing might miss</li>
</ul><br />
<br />
<b>- It is simple, logical, and easy to explain</b><br /><br /><b>3. Decision Table Testing</b><br /><br />Now let us talk about <b>Decision Table Testing</b>. This technique is used when software behaves differently based on different combinations of conditions.<br />
<br />
<br />
Let me give you a fun example. Imagine a pizza app with these rules:<br />
<br />
<br />
<div class="b-bbcode__table--wrapper text_table_"><table class="b-bbcode__table text_table"><tr valign="top" class="text_table_tr"></tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td">Yes</td>
<td class="text_table_td">Yes</td>
<td class="text_table_td">30% off</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td">Yes</td>
<td class="text_table_td">No</td>
<td class="text_table_td">10% off</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td">No</td>
<td class="text_table_td">Yes</td>
<td class="text_table_td">15% off</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td">No</td>
<td class="text_table_td">No</td>
<td class="text_table_td">No discount</td>
</tr>
</table></div>
<br />
<br />
This table shows every possible combination of conditions and what the system should do. This is a Decision Table.<br />
<br />
<br />
<b>Why Do We Need Decision Tables?</b><br /><br />Sometimes software has many rules that interact with each other. It is very easy to miss a combination. A decision table makes sure we test <b>every single combination</b> of conditions.<br />
<br />
<br />
<b>How to Create a Decision Table</b><br /><br />Step 1 — List all the conditions (for example: is the user logged in? Is the payment successful? Is the item in stock?)<br />
<br />
<br />
Step 2 — List all the actions or results (for example: show order confirmation, show error message)<br />
<br />
<br />
Step 3 — Fill in every possible combination of Yes/No for each condition<br />
<br />
<br />
Step 4 — Write test cases for each column of the table<br />
<br />
<br />
<b>Real-life Example</b><br /><br />At NSDL, when we test KYC validation for demat accounts, we deal with multiple conditions:<ul><li>Is the PAN number valid?</li>
<li>Is the KRA database responding?</li>
<li>Is the account type individual or corporate?<br />
Each combination needs to be tested. Decision table testing ensures we do not miss any scenario, which is very important in financial software where errors can affect real money and real accounts.</li>
</ul><br />
<br />
<br />
<br />
<br />
<b>4. The Future of Manual Testing in the Age of AI</b><br /><br />This is the most exciting topic! The world is changing very fast. AI (Artificial Intelligence) tools are becoming part of every industry, including software testing. So what will happen to manual testers like us?<br />
<br />
<br />
<b>What AI Is Already Doing in Testing</b><br /><br />AI tools can now:<ul><li><b>Write test cases automatically</b> by reading the requirements</li>
<li><b>Find bugs faster</b> by learning from past bug patterns</li>
<li><b>Run thousands of tests</b> in a few minutes (automated testing)</li>
<li><b>Predict which parts of the software are likely to have bugs</b><br />
Tools like <b>Selenium</b>, <b>Appium</b>, and AI-powered platforms like <b>Testim</b>, <b>Mabl</b>, and <b>Functionize</b> are already being used by companies to speed up testing.</li>
</ul><br />
<br />
<b>Will AI Replace Manual Testers?</b><br /><br />This is the big question everyone is asking. The honest answer is: <b>AI will not replace manual testers — it will change what manual testers do.</b><br />
<br />
<br />
Here is why:<br />
<br />
<br />
<b>AI is very good at repetitive tasks.</b> Running the same test 1000 times? AI wins. But AI cannot think creatively. It cannot understand human emotions, user experience, or business logic the way a human can.<br />
<br />
<br />
<b>Manual testers are still needed for:</b><ul><li>Exploratory testing, where creativity and curiosity matter</li>
<li>Understanding business requirements and user expectations</li>
<li>Testing usability — does the app feel easy and natural to use?</li>
<li>Ethical testing — is the software fair to all users?</li>
<li>Reviewing AI-generated test results and deciding what they mean<br />
### The New Role of Manual Testers</li>
</ul><br />
<br />
The future manual tester will be someone who:<br />
<br />
<ol class="decimal"><li><b>Understands AI tools</b> and knows how to work with them</li>
<li><b>Writes smart test strategies</b> that AI can execute</li>
<li><b>Focuses on exploratory and risk-based testing</b> — areas where human judgment is needed</li>
<li><b>Knows API testing and database validation</b> — skills that remain relevant</li>
<li><b>Learns automation basics</b> — at least enough to collaborate with automation engineers<br />
### My Personal Journey</li>
</ol><br />
<br />
As a QA engineer at NSDL, I have already started this journey. I independently learned Postman for API testing and built Mock Servers to simulate external systems. I have also started Core Java and Selenium training to move towards automation.<br />
<br />
<br />
The message is clear: <b>upskill, adapt, and stay curious.</b> Manual testers who keep learning will not only survive but thrive in the AI era.<br />
<br />
<br />
<br />
<br />
<br />
<b>Conclusion</b><br /><br />Software testing is not just about finding bugs. It is about making sure that when you press a button in an app, the right thing happens. Techniques like Boundary Value Analysis and Decision Table Testing help testers be smart and organized. And even as AI becomes more powerful, human testers will always be needed to bring judgment, creativity, and business understanding to the table.<br />
<br />
<br />
If you are a beginner in testing — start today. Learn the basics, practice on real projects, and never stop learning. The field is growing, and there is a place for everyone who is willing to work hard.<br />
<br />
<br />
Happy Testing!<br />
<br />
<br />
<br />
<br />
<br />
<i>Published by Gayatri Suryavanshi | QA Engineer | NSDL Mumbai</i><br />
<br />
<i>Connect with me on LinkedIn | GitHub</i><br />
<br />
<br />
<br />
<br />
<a href="https://dev.to/gayatri_s_187f09d90acf9ff/manual-testing-how-we-make-sure-software-works-correctly-543a" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19300-manual-testing-how-we-make-sure-software-works-correctly</guid>
		</item>
		<item>
			<title>NHI Governance Is the Outcome. GitGuardian Is How You Get There</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19299-nhi-governance-is-the-outcome-gitguardian-is-how-you-get-there</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>There is a category mistake that happens all the time in the non-human identity (NHI) market. People talk about governance as if it were a box you...</description>
			<content:encoded><![CDATA[There is a category mistake that happens all the time in the non-human identity (NHI) market. People talk about governance as if it were a box you buy, install, and turn on. It is not.<br />
<br />
<br />
NHI governance is the outcome of the hard work of understanding what you have and whether each identity is in a desired state. It is the condition you reach when your organization can see non-human identities, understand what access they hold, detect when that access becomes risky, and prove remediation efforts were taken when something went wrong.<br />
<br />
<br />
That is exactly why GitGuardian's secrets-first model makes sense for organizations fighting for visibility and control of their sprawling non-human identity inventories.<br />
<br />
<br />
The GitGuardian platform is built around the pragmatic truth that, if a non-human identity authenticates with an API key, token, service credential, or other secret-backed authentication string, that secret becomes the best artifact for discovering the identity, understanding its reach, and explaining the security state of the access it enables. GitGuardian gives teams true visibility over all NHI secrets across infrastructure, tying that visibility to hygiene improvement and breach reduction.<br />
<br />
<br />
Let's take a look at the platform, feature by feature, to understand how we deliver on our promise to help you reach your NHI governance goals.<br />
<br />
<br />
<b>Start With the Secrets You Can Actually See</b><br /><br />GitGuardian helps teams get to NHI governance by starting with the thing most organizations can observe right now: the secrets their non-human identities rely on. These access mechanisms provide a pragmatic approach to mapping your identities across your environments.<br />
<br />
<br />
Most teams do not begin with a complete, clean inventory of every service account, workload identity, automation token, certificate, and API credential in the environment. They begin with fragments. They know some of what lives in cloud IAM. They know some of what lives in their vaults. They know some of what was set up by platform teams, some by developers, and some by vendors. The rest shows up in scattered evidence across the software lifecycle.<br />
<br />
<br />
GitGuardian gives you <a href="https://www.gitguardian.com/monitor-internal-repositories-for-secrets" target="_blank">visibility into your secrets that should never have been left as plaintext</a>, such as source code and configuration files. But it also extends to the systems surrounding software delivery, where credentials are copied, pasted, cached, logged, and forgotten. This includes messaging systems like Slack, ticketing systems like Jira, and container registries like Amazon ECR, among dozens of other places.<br />
<br />
<br />
That is the first governance outcome GitGuardian supports. Teams get a clearer view of the real identity surface, not the planned one. If a secret exists in a system of record but has also spread into a support ticket or a shared internal workspace, the state of that identity has already changed. That secret is now part of a broader exposure story, and GitGuardian gives teams a way to see it.<br />
<br />
<br />
<a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19gjup4m1acrui889s21.png" target="_blank"><img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19gjup4m1acrui889s21.png" border="0" alt="" /></a><br />
<br />
<br />
<b>Extend the View Into the Vaults</b><br /><br />Secrets visibility only goes so far if the picture ends at plaintext exposure. GitGuardian extends the model by indexing secrets from the places teams intentionally store them — enterprise secrets managers such as Hashicorp Vault and CyberArk's Conjur, or cloud providers such as AWS Secrets Manager or Azure Key Vault.<br />
<br />
<br />
GitGuardian collects secret metadata to enrich the inventory without sending secret values in the clear. GitGuardian is no longer only telling you what leaked. It is also helping you understand the managed layer where those secrets are supposed to live.<br />
<br />
<br />
That creates a much more useful inventory across infrastructure. Teams can see the secrets created within approved systems and compare that state with the same credentials discovered elsewhere in the organization. The same secret in a vault, a private repository, and a team chat means something has gone wrong with your governance plan. GitGuardian provides a single view that is much closer to the truth of how access actually works inside modern systems.<br />
<br />
<br />
<b>Confronting Vault Sprawl In NHI Governance</b><br /><br />Vault visibility also surfaces a problem that deserves more attention than it usually gets: <a href="https://blog.gitguardian.com/confronting-vault-sprawl-and-the-risks-it-brings/" target="_blank">vault sprawl</a>.<br />
<br />
<br />
Many organizations have done the right thing in spirit and still carry unnecessary complexity in practice. They have multiple secret managers, overlapping teams, inherited platforms, duplicated values, and different operational habits across cloud, product, and security groups.<br />
<br />
<br />
GitGuardian helps expose that overhead by showing where the same secret is duplicated, reused, or spread across environments. The product's posture policies explicitly include duplicated secrets, reused secrets, and cross-environment secrets.<br />
<br />
<br />
<a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxf2v0xm1qfitlz69f7pl.png" target="_blank"><img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxf2v0xm1qfitlz69f7pl.png" border="0" alt="" /></a><br />
<br />
<br />
The GitGuardian platform does not just tell you that a vault exists. It helps you see whether the state of your vault-backed secrets is clean, duplicated, sprawling, or risky.<br />
<br />
<br />
<b>Turn Secret Discovery Into a Live Inventory</b><br /><br />Turning your detection findings into a living inventory is where the larger governance story starts to come together. GitGuardian's platform provides a centralized NHI inventory connecting discovered identities, secrets, and related context. This makes it easy for teams to search, review, and prioritize what they have across the whole of their enterprise environment. The goal is a unified visibility into the cloud identity footprint, with graph-based relationships across identities, policies, and secrets.<br />
<br />
<br />
That inventory matters most when it reflects state instead of aspiration. A spreadsheet of service accounts does not tell you where credentials have spread. A static export from one platform does not tell you whether the same secret is reused somewhere else, duplicated in another system, or exposed outside the boundary where it was meant to live. GitGuardian brings those questions together because its model starts with the secret itself and then layers in identity, source, ownership, and policy context around it.<br />
<br />
<br />
Each non-human identity has a visual knowledge graph on GitGuardian that maps the systems where they are created, stored, and used, and layers metadata from each source into a unified model. The platform, using ggscout, collects the fingerprint of secrets and related metadata from supported secrets managers, while CI and infrastructure sources add the &quot;where&quot; NHIs are used and consumed. Cloud IAM systems, including Microsoft Entra and AWS IAM, add permissions and policy context, other identity providers extend identity coverage, and SaaS providers add visibility into usage and potential exposure.<br />
<br />
<br />
<a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9xgvfw7o72tbutw987z.png" target="_blank"><img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9xgvfw7o72tbutw987z.png" border="0" alt="" /></a><br />
<br />
<br />
GitGuardian gives you one contextual view of NHI posture. That makes the inventory operational. Which credentials are active? Which ones are leaking across trust boundaries? Which ones are tied to sensitive roles or broad permissions? Which ones are duplicated across storage locations? Governance gets more concrete once the inventory reflects those conditions.<br />
<br />
<br />
<b>Add Ownership to the Inventory</b><br /><br />Inventory alone does not move risk. <a href="https://blog.gitguardian.com/who-actually-owns-this-service-account/" target="_blank">Someone has to own the identities, the credentials, and the cleanup</a>. GitGuardian lets teams assign responsibility to non-human identities directly in the inventory. This helps close the accountability gap for machine identities, speed remediation, and support compliance expectations.<br />
<br />
<br />
Most teams already know the mechanical work of secret rotation, credential cleanup, and policy review. The real slowdown usually comes from ambiguity. Who owns this service principal? Who is responsible for the token tied to this automation? Who decides whether a duplicated credential can be removed? Who gets paged when a leaked secret is tied to a business-critical workflow? GitGuardian makes that ambiguity visible and more manageable by placing ownership alongside the identity record itself.<br />
<br />
<br />
<a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9gfpj5y9hygcn9athuq.png" target="_blank"><img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9gfpj5y9hygcn9athuq.png" border="0" alt="" /></a><br />
<br />
<br />
Ownership also changes how teams can talk about governance internally. The conversation stops being &quot;we found another secret&quot; and becomes &quot;this identity is out of policy, here is the owner, and here is the condition that needs to be resolved.&quot; That is a much healthier operational model. It turns secret incidents into identity decisions, and it gives engineering, platform, and security teams a common object to work on together.<br />
<br />
<br />
<b>Use Policy to Define Acceptable State</b><br /><br />Governance needs a line between acceptable and unacceptable states. GitGuardian's NHI Governance posture policies provide that line in a way that stays close to observable conditions. These policies are informed by the <a href="https://blog.gitguardian.com/owasp-top-10-non-human-identity-risks/" target="_blank">OWASP Top 10 for NHIs</a>, and the currently documented set includes publicly leaked secrets, internally leaked secrets, cross-environment secrets, reused secrets, and duplicated secrets.<br />
<br />
<br />
These policies work because they are concrete. They describe conditions a team can verify. A secret is either publicly exposed or not. A credential is reused across identities, or it is not. A secret crosses environment boundaries or it does not. A value is duplicated across storage locations, or it is not. That makes policy useful as an operational tool instead of a vague aspiration.<br />
<br />
<br />
It also helps teams mature without pretending they need to solve every machine identity problem in one move. A team can start by reducing public exposure. Then it can work on internal sprawl, duplication, and environment separation. From there, it can move toward cleaner ownership, stronger storage patterns, and narrower permissions. GitGuardian supports that progression because the product is built to show the current state, not just the ideal future state.<br />
<br />
<br />
<b>GitGuardian Helps Teams Earn the Outcome</b><br /><br />NHI governance is the result of understanding what exists, its current state, who owns it, and whether that condition is acceptable. What is acceptable to your team can only be determined by your circumstances and risk tolerances.<br />
<br />
<br />
GitGuardian helps teams achieve their desired outcomes by prioritizing secrets visibility first. It finds credentials where they were exposed across the software lifecycle. It extends that picture into the vaults and managed stores where those credentials are supposed to live. It turns those fragments into an identity inventory that can be searched, reviewed, and prioritized. It adds ownership so someone is accountable for cleanup and decision-making. It enriches the picture with identity and permission context so teams can understand the impact. It applies posture policies so governance has a measurable definition.<br />
<br />
<br />
GitGuardian gives teams a better view into the state of their non-human identities by following the secrets those identities depend on. For a problem as messy and distributed as machine identity governance, that is exactly where organizations should start.<br />
<br />
<br />
<a href="https://www.gitguardian.com/book-a-demo" target="_blank">We would be happy to help</a>.<br />
<br />
<br />
<a href="https://www.gitguardian.com/interactive-demo?ref=blog.gitguardian.com" target="_blank"><img itemprop="image" class="bbcode-attachment bbcode-attachment--lightbox js-lightbox" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfcl8kw7m7jyjajdbra1.png" border="0" alt="" /></a><br />
<br />
<br />
<br />
<br />
<a href="https://dev.to/gitguardian/nhi-governance-is-the-outcome-gitguardian-is-how-you-get-there-9co" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19299-nhi-governance-is-the-outcome-gitguardian-is-how-you-get-there</guid>
		</item>
		<item>
			<title><![CDATA[We rewrote Apache Airflow's control plane in Go (and kept the UI)]]></title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19298-we-rewrote-apache-airflow-s-control-plane-in-go-and-kept-the-ui</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>TL;DR — Leoflow v0.0.1 just shipped. It speaks the Airflow API, runs the Airflow 3.2.x UI unmodified, but replaces the Python control plane with Go....</description>
			<content:encoded><![CDATA[<div style="margin-left:40px"><br />
<b>TL;DR</b> — Leoflow v0.0.1 just shipped. It speaks the Airflow API, runs the Airflow 3.2.x UI unmodified, but replaces the Python control plane with Go. Pod-per-task is the only execution mode. Each DAG is its own container image. Fan-in (map-reduce) is a Python list comprehension. Install: curl -fsSL <a href="https://raw.githubusercontent.com/neochaotic/leoflow/main/install.sh" target="_blank">https://raw.githubusercontent.com/ne...ain/install.sh</a> | sh. GitHub: <a href="https://github.com/neochaotic/leoflow" target="_blank">neochaotic/leoflow</a> — stars and issues warmly accepted.<br />
<br />
</div><br />
<br />
<br />
<br />
<b>The 3 AM pager</b><br /><br />You know the one. The scheduler stalled again. Or the triggerer suffocated under 500 sensors. Or a worker leaked file descriptors until Kubernetes OOMKilled it mid-run. Or someone bumped pandas for the new DAG and broke six legacy ones because they all share the same image.<br />
<br />
<br />
Apache Airflow is the most widely deployed workflow orchestrator on earth. It is also the one that bleeds the most in production. None of those wounds are bugs — they are structural consequences of running orchestration through a Python control plane. You cannot patch the GIL. You cannot make DagBag reparse cheap. You cannot make Celery workers ephemeral without rewriting them.<br />
<br />
<br />
So we did the only thing left: we kept everything Airflow got right and replaced everything that bleeds.<br />
<br />
<br />
<b>What &quot;kept&quot; means</b><br /><br />We did not invent a new model. Airflow's KubernetesExecutor proved years ago that pod-per-task is correct: each task gets its own container, its own resources, its own lifecycle. You can't leak a process that exits.<br />
<br />
<br />
We also did not invent a new UI. The Airflow 3.2.x React SPA ships embedded inside the Leoflow server binary. Your team's muscle memory survives the migration.<br />
<br />
<br />
<b>What we kept:</b><ul><li>The pod-per-task execution model</li>
<li>The Airflow 3.2.x UI (literally the same React build, served from /)</li>
<li>The HTTP API shape (/api/v2/dags/..., /api/v2/dagRuns/..., etc.)</li>
<li>The vocabulary: DAG, TaskInstance, DagRun, XCom, Trigger Rules</li>
<li>The DAG-authoring dialect — from airflow.sdk import DAG, task, TaskFlow, classic operators</li>
</ul><br />
<br />
<b>What we threw out:</b><ul><li><b>The Python scheduler.</b> It's Go now.</li>
<li><b>The Python triggerer.</b> Sensors are 2 KB goroutines.</li>
<li><b>The shared /dags folder.</b> Each DAG is its own immutable container image.</li>
<li><b>The &quot;long-lived Celery worker&quot; model.</b> Every task is an ephemeral pod.</li>
</ul><br />
<br />
<br />
<br />
<br />
<b>What it looks like to write a DAG</b><br /><br />Two files. That's the whole project.<br />
<br />
<br />
<b>leoflow.yaml — your deploy concerns</b><br /><br /><br />
<br />
<br />
<br />
dag_id: etl_sales<br />
python_version: &quot;3.11&quot;<br />
dependencies:<br />
  - pandas==2.1.0<br />
  - requests==2.31.0<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<b>dag.py — your DAG, in real Airflow SDK 3.2.x</b><br /><br /><br />
<br />
<br />
<br />
from airflow.sdk import DAG, task<br />
<br />
@task<br />
def fetch() -&gt; list[dict]:<br />
    import requests<br />
    return requests.get(&quot;[https://api.example.com/orders](https://api.example.com/orders)&quot;).json()<br />
<br />
@task<br />
def transform(orders: list[dict]) -&gt; list[dict]:<br />
    return [{&quot;id&quot;: o[&quot;id&quot;], &quot;value&quot;: o[&quot;amount&quot;] * 1.1} for o in orders]<br />
<br />
with DAG(&quot;etl_sales&quot;, schedule=&quot;0 5 * * *&quot;, catchup=False):<br />
    transform(fetch())<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
# generates Dockerfile, builds image, emits dag.json<br />
leoflow compile . <br />
<br />
# registers a new versioned DAG<br />
leoflow push ./dag.json <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
No Dockerfile. No requirements.txt. No Helm values.yaml for this DAG. No pyproject.toml. The compiler reads leoflow.yaml, generates a Dockerfile against the official base image (leoflow/python-runtime:3.11), builds, pushes to your registry, and registers a versioned dag.json with the control plane. That's the whole inner loop.<br />
<br />
<br />
For local development, leoflow lite provisions a managed Postgres, hot-reloads on every save, gives each DAG its own per-DAG virtualenv at ~/.leoflow/dev/venvs//, and auto-detects uv on PATH for 5–10× faster cold installs. Two DAGs that pin conflicting versions of the same package coexist without interference. This is the bit that made me file the issue against Airflow for the first time, ten years ago. We finally have it.<br />
<br />
<br />
<b>Map-reduce, as a Python list comprehension</b><br /><br />Hyperparameter search. K-fold cross-validation. Ensemble training. Monte Carlo. Every parallel ML workload is map-reduce. Most orchestrators make you build it: an operator per fan-out, a broker for the intermediate values, shared storage for the artifacts, a custom reducer that knows how to find them all.<br />
<br />
<br />
Leoflow expresses the whole pattern in two lines of Python:<br />
<br />
<br />
<br />
<br />
<br />
<br />
from airflow.sdk import DAG, task<br />
<br />
@task<br />
def trial(lr: float) -&gt; dict:<br />
    return train_one(lr) # map<br />
<br />
@task<br />
def select_best(trials: list[dict]) -&gt; dict:<br />
    return max(trials, key=lambda r: r[&quot;score&quot;]) # reduce<br />
<br />
with DAG(&quot;hparam_search&quot;, schedule=None):<br />
    select_best([trial(lr) for lr in [0.001, 0.01, 0.05, 0.1, 0.5]])<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
That [trial(lr) for lr in …] is the whole map. trials: list[dict] is the whole reduce.<br />
<br />
<br />
No XCom plumbing, no broker, no shared filesystem, no special operator. The parser captures the list shape at compile time; the runtime assembles upstream XComs in declaration order and delivers them as a real Python list. Per-trial isolation (own pod, own process, own venv if you want). Per-trial retry. Deterministic ordering. A 256 KB cap per upstream value. A null slot for any upstream that legitimately produced no result.<br />
<br />
<br />
If you have ever written a Celery chord by hand, take a moment.<br />
<br />
<br />
<br />
<br />
<br />
<b>Architecture</b><br /><br /><br />
<br />
<br />
<br />
┌─────────────────────────────────────────────────  ──────────────┐<br />
│ Author / CI                                                   │<br />
│ leoflow.yaml + dag.py + (auto-generated) Dockerfile           │<br />
└───────────────────────────────┬─────────────────  ──────────────┘<br />
                                │ leoflow compile / push<br />
▼<br />
┌─────────────────────────────────────────────────  ──────────────┐<br />
│ Control plane — Go                                            │<br />
│   ┌─────────────────────────────────────────────────  ──────────┐<br />
│   │ HTTP API  /api/v2 · JWT · RBAC · multi-tenant             │<br />
│   ├─────────────────────────────────────────────────  ──────────┤<br />
│   │ Scheduler state machine · cron · catchup                  │<br />
│   │           · PG-advisory-lock leader election              │<br />
│   │           · retries with backoff                          │<br />
│   ├─────────────────────────────────────────────────  ──────────┤<br />
│   │ Agent gRPC service  · task spec · state · XCom · logs     │<br />
│   └─────────────────────────────────────────────────  ──────────┘<br />
│       │                                       │<br />
│   Postgres (metadata)                   Redis (XCom + log)    │<br />
└───────┼──────────────────────────────────┼──────  ──────────────┘<br />
        │ dispatch: one pod per task       │<br />
▼                                          │<br />
┌───────────────────────────────────────┐  │<br />
│ Kubernetes                            │  │<br />
│   ┌─────────────────────────────────┐ │  │<br />
│   │ Worker pod = your DAG image     │ │  │<br />
│   │                                 │ │  │<br />
│   │  leoflow-agent (15 MB Go bin)   │ │  │<br />
│   │        ⇅ gRPC                   │ │  │<br />
│   │  your Python / Bash code        │──┼──┘<br />
│   └─────────────────────────────────┘ │<br />
└───────────────────────────────────────┘<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Short-lived http_api tasks skip the pod and run inline as goroutines (capped). Everything else runs pod-per-task, every time. Concurrency is goroutines and pods — no Celery, no triggerer process, no shared worker pool.<br />
<br />
<br />
<b>A few specifics worth calling out:</b><ul><li><b>Leader election</b> is a Postgres advisory lock. No external coordinator. No ZooKeeper, no etcd, no Raft library. It is the kind of decision you can explain to a new hire in 30 seconds.</li>
<li><b>XCom</b> lives in Postgres on Lite (small, no Redis required for laptop dev) and Redis on Pro. 256 KB cap, optional schema validation, last-write-wins.</li>
<li><b>Connections</b> are encrypted at rest with AES-256-GCM and delivered to tasks via Airflow's standard AIRFLOW_CONN_ env var. Postgres / MySQL / SQLite / MSSQL / Redis / HTTP / GCS connectors ship with chain-of-custody-tested integration tests.</li>
<li><b>The agent</b> is a static Go binary, ~15 MB. PID 1 of the task pod. Talks gRPC back to the control plane. Forks one process per task. Does not buffer Python output (-u plus PYTHONUNBUFFERED=1), because watching a SIGKILL race steal half of the user's print() output is its own kind of torment.</li>
</ul><br />
<br />
<br />
<br />
<br />
<b>The numbers (the only honest part of any orchestration README)</b><br /><br />We are not going to claim &quot;1000× faster&quot; because nobody who has run real pipelines believes you. Here is what falls out of replacing the control plane:<br />
<br />
<br />
<div class="b-bbcode__table--wrapper text_table_"><table class="b-bbcode__table text_table"><tr valign="top" class="text_table_tr"></tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td"><b>Scheduler decision latency</b></td>
<td class="text_table_td">3–10 s per task</td>
<td class="text_table_td"></td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td"><b>Sensor concurrency</b></td>
<td class="text_table_td">~500 (asyncio Triggerer)</td>
<td class="text_table_td">100,000+ — each sensor is a 2 KB goroutine</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td"><b>DAG parsing cost</b></td>
<td class="text_table_td">Re-parsed every scheduler loop</td>
<td class="text_table_td">Zero — dag.json is precompiled, immutable</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td"><b>Worker lifecycle</b></td>
<td class="text_table_td">Long-lived, leak-prone</td>
<td class="text_table_td">Ephemeral pod per task — spawn, run, die</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td"><b>Worker image size</b></td>
<td class="text_table_td">1.5 GB+ Airflow base</td>
<td class="text_table_td">~200 MB typical — each DAG is its own slim image</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td"><b>Dependency isolation</b></td>
<td class="text_table_td">Workaround via KubernetesPodOperator</td>
<td class="text_table_td">Native — every DAG is a container</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td"><b>Cold start</b></td>
<td class="text_table_td">15–45 s</td>
<td class="text_table_td">2–5 s target — agent is a 15 MB static binary</td>
</tr>
<tr valign="top" class="text_table_tr"><td class="text_table_td"><b>Observability</b></td>
<td class="text_table_td">Retrofitted with effort</td>
<td class="text_table_td">Native — Prometheus + OpenTelemetry + structured logs from commit one</td>
</tr>
</table></div>
<br />
<br />
These are the structural wins. The marketing-grade &quot;X× faster&quot; depends on your DAG. The scheduler latency drop is universal.<br />
<br />
<br />
<b>What it is not (because we have all read those launch posts)</b><br /><br /><ul><li><b>It is not v1.0.</b> Per ADR 0037, v0.0.1 ends the pre-alpha series; every release after is vX.Y.Z-rc.N → vX.Y.Z. The HTTP API, CLI surface, and Helm values may change between minor versions until v1.0.0 locks them.</li>
<li><b>The UI is still Airflow 3.2.x.</b> It is a tactical choice (your team's muscle memory). A purpose-built Leoflow UI is on the roadmap (ADR 0018).</li>
<li><b>Pro is Kubernetes-only. Lite runs anywhere.</b> Pro means a real cluster, external Postgres + Redis, the Helm chart. There is deliberately no Docker-Compose &quot;Pro&quot; path; we explained why in ADR 0015.</li>
<li><b>It is not a drop-in for every Airflow plugin.</b> The Airflow operator catalog has 30+ years of accreted Python; we ship a closed set (python, bash, http_api) plus first-party connectors. ADR 0036 defines a runtime shim for from airflow.providers..hooks. import Hook so the common cases keep working — but if your DAG depends on three obscure providers we have not vendored, you will hit a wall today. File an issue; we are gating the next batch by demand.</li>
</ul><br />
<br />
<br />
<br />
<br />
<b>Try it in 60 seconds</b><br /><br /><br />
<br />
<br />
<br />
curl -fsSL [<a href="https://raw.githubusercontent.com/neochaotic/leoflow/main/install.sh](https://raw.githubusercontent.com/neochaotic/leoflow/main/install.sh" target="_blank">https://raw.githubusercontent.com/ne...ain/install.sh</a>) | sh<br />
leoflow lite # <a href="http://localhost:8088" target="_blank">http://localhost:8088</a> (LITE badge)<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
The Lite installer is a single shell script that installs three static Go binaries into ~/.leoflow/bin, runs leoflow setup (managed CPython, parser, workspace), and starts a control plane against a managed local Postgres. First leoflow lite boot drops example DAGs in ~/leoflow/examples/, hot-reloads on save, and exposes an embedded code editor at /ide (Python/YAML highlighting, contextual create targets, collapse/expand carets, recursive folder delete). Recover the admin password any time with leoflow lite reset-password. Open the Lite cookbook for the rest.<br />
<br />
<br />
For production, the Helm chart deploys against external Postgres 13+ and Redis 6+ (Cloud SQL / RDS / Memorystore / ElastiCache / Azure Cache all work):<br />
<br />
<br />
<br />
<br />
<br />
<br />
kubectl create namespace leoflow<br />
helm install lf oci://ghcr.io/neochaotic/leoflow -n leoflow \<br />
  --version v0.0.1 \<br />
  --set database.url='postgres://USER:PASS@HOST:5432/leoflow?sslmode=verify-full' \<br />
  --set redis.url='rediss://HOST:6380/0' \<br />
  --set auth.jwtSecret=&quot;$(openssl rand -base64 64)&quot; \<br />
  --set secretKey=&quot;$(openssl rand -hex 16)&quot;<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Read the chart docs for every value.<br />
<br />
<br />
<b>Engineering discipline (the stuff you would actually want to know)</b><br /><br />If you are evaluating Leoflow as a load-bearing piece of your data platform, the answers are in the repo, but the short version:<ul><li><b>Strict TDD.</b> Every line of production code is preceded by a failing test (ADR 0011). Per-package coverage floors enforced in CI.</li>
<li><b>Go Report Card A+</b> as the quality floor (ADR 0012). gocyclo ≤ 15 per function. GoDocs on every exported identifier.</li>
<li><b>Supply chain from commit one.</b> govulncheck, gosec, Trivy, CodeQL, gitleaks, OpenSSF Scorecard, OpenSSF Best Practices badge. Releases signed with cosign. SBOMs published per platform.</li>
<li><b>Every architectural decision is an ADR.</b> 37 of them at the time of writing. They are the single best place to start if you want to understand the <i>why</i>.</li>
<li>The repo also runs an end-to-end install smoke against seven Linux distros (ubuntu:24.04, debian:12, fedora:41, alpine:3.20, opensuse/leap:15, archlinux:latest, rockylinux:9) on every release, plus a prealpha.N → v0.0.1 upgrade smoke. The v0.0.1 release got the green light because every one of those passed.</li>
</ul><br />
<br />
<b>Help us ship the next milestone</b><br /><br />We are at v0.0.1. The next steps are visible — pick any:<ul><li><b>Star the repo</b> at <a href="https://www.google.com/url?sa=E&amp;source=gmail&amp;q=https://github.com/neochaotic/leoflow" target="_blank">github.com/neochaotic/leoflow</a>. It is the cheapest way to tell us this matters to you.</li>
<li><b>Open an issue</b> with a chronic Airflow pain we have not closed yet. Pre-1.0 is the time to shape the API.</li>
<li><b>File a PR.</b> Strict TDD applies. The CONTRIBUTING guide is the entry point. We review fast.</li>
<li><b>Try the Lite quick start</b> (60 seconds, above). If something does not work, that is an issue worth filing.</li>
<li><b>Run the Helm chart</b> against a real cluster and tell us what bit you. Pro alpha needs real-world miles before it gets a Pro v1.0.0.</li>
</ul><br />
<br />
<b>What is on the post-v0.0.1 table</b><br /><br />Visible work toward v0.1.0:<ul><li>Optimized backfill (parallel execution with throttling)</li>
<li>UI scaling for 10,000+ DAGs (caching, server-side pagination)</li>
<li>Dynamic task mapping</li>
<li>OIDC authentication (Google, Azure AD, Keycloak, Okta)</li>
<li>Deferrable tasks (ADR 0016) — efficient dispatch + long-poll pattern, native Go, no separate Triggerer process</li>
<li>A purpose-built Leoflow UI (ADR 0018)</li>
</ul><br />
<br />
We are deliberately keeping the surface small until it is boring and reliable. Workflow orchestrators have to be boring to be useful.<br />
<br />
<br />
<b>License &amp; credits</b><br /><br />Apache 2.0. We stand on the shoulders of Airflow — the team behind it defined the vocabulary, proved the architecture, and built the UI we reuse without modification today. We also studied Argo Workflows, Prefect, and Dagster carefully; each made decisions worth borrowing, and we did.<br />
<br />
<br />
If you have ever waited five seconds for an Airflow task to start, you know why we built this.<br />
<br />
<br />
→ <a href="https://www.google.com/url?sa=E&amp;source=gmail&amp;q=https://github.com/neochaotic/leoflow" target="_blank">github.com/neochaotic/leoflow</a> — the v0.0.1 release notes are at /releases/tag/v0.0.1.<br />
<br />
<br />
Thanks for reading. Tell us what hurts.<br />
<br />
<br />
<br />
<br />
<a href="https://dev.to/neochaotic/we-rewrote-apache-airflows-control-plane-in-go-and-kept-the-ui-1fh5" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19298-we-rewrote-apache-airflow-s-control-plane-in-go-and-kept-the-ui</guid>
		</item>
		<item>
			<title>Building an Advanced LangChain AI Workflow Automation with LangGraph</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19297-building-an-advanced-langchain-ai-workflow-automation-with-langgraph</link>
			<pubDate>Wed, 03 Jun 2026 16:30:01 GMT</pubDate>
			<description>🚀 Technical Briefing: This tutorial is part of our deep-dive series on Agentic Workflows at Gate of AI (https://gateofai.com). For the full technical...</description>
			<content:encoded><![CDATA[<div style="margin-left:40px"><br />
<b>🚀 Technical Briefing:</b> This tutorial is part of our deep-dive series on Agentic Workflows at <a href="https://gateofai.com" target="_blank">Gate of AI</a>. For the full technical breakdown, interactive code sandbox, and the native Arabic translation, visit the <a href="https://gateofai.com/tutorial/langchain-tutorial-advanced-workflow-automation/" target="_blank">original article here</a>.<br />
<br />
</div><br />
<br />
Tutorial<br />
Advanced<br />
⏱ 45 min read<br />
© Gate of AI 2026-06-03<br />
<br />
<br />
<br />
<br />
<br />
Build a production-grade multi-agent workflow using LangGraph v1.2. Use state-based orchestration to manage autonomous reasoning loops securely.<br />
<br />
<br />
<br />
<b>Prerequisites</b><br /><br /><ul><li>Python 3.10+</li>
<li>LangChain v1.3.4+ and LangGraph v1.2.4+</li>
<li>OpenAI API Key (GPT-4o)</li>
<li>Understanding of Pydantic and TypedDict for state management</li>
</ul><br />
<br />
<br />
<b>Installation</b><br /><br /><br />
  <br />
pip install langchain==1.3.4 langgraph==1.2.4 langchain-openai<br />
<br />
<br />
<b>Step 1: Define the State Schema</b><br /><br /><br />
  In modern agentic workflows, &quot;Memory&quot; is replaced by an explicit <b>State Schema</b>. This allows the graph to pass data between nodes with type safety.<br />
<br />
<br />
<br />
  <br />
from typing import TypedDict, Annotated<br />
<br />
import operator<br />
<br />
from langchain_core.messages import BaseMessage<br />
<br />
class AgentState(TypedDict):<br />
<br />
  # Annotate as 'list' to append new messages instead of overwriting<br />
<br />
  messages: Annotated[list[BaseMessage], operator.add]<br />
<br />
  task_goal: str<br />
<br />
  generated_topology: str<br />
<br />
<br />
<br />
<b>Step 2: Orchestrate with LangGraph</b><br /><br /><br />
  We replace the legacy Agent class with <b>Nodes</b> and <b>Edges</b>. This allows for &quot;Time-Travel Debugging&quot; and human-in-the-loop checkpoints.<br />
<br />
<br />
<br />
  <br />
from langgraph.graph import StateGraph, END<br />
<br />
from langchain_openai import ChatOpenAI<br />
<br />
llm = ChatOpenAI(model=&quot;gpt-4o&quot;, temperature=0.2)<br />
<br />
<b>Define Node Logic</b><br /><br />def understand_task(state: AgentState):<br />
<br />
  # ... logic to parse natural language ...<br />
<br />
  return {&quot;task_goal&quot;: &quot;Optimized Ethylene Cracking&quot;}<br />
<br />
<br />
def generate_topology(state: AgentState):<br />
<br />
  # ... logic to output process structure ...<br />
<br />
  return {&quot;generated_topology&quot;: &quot;C2H4 -&gt; C2H2 + H2&quot;}<br />
<br />
<b>Build the Graph</b><br /><br />workflow = StateGraph(AgentState)<br />
<br />
workflow.add_node(&quot;understand&quot;, understand_task)<br />
<br />
workflow.add_node(&quot;topology&quot;, generate_topology)<br />
<br />
<br />
workflow.set_entry_point(&quot;understand&quot;)<br />
<br />
workflow.add_edge(&quot;understand&quot;, &quot;topology&quot;)<br />
<br />
workflow.add_edge(&quot;topology&quot;, END)<br />
<br />
<br />
app = workflow.compile()<br />
<br />
<br />
<br />
<b>Testing the Workflow</b><br /><br /><br />
  To run the production-grade agent, we invoke the graph with an initial state.<br />
<br />
<br />
<br />
  <br />
result = app.invoke({&quot;messages&quot;: [&quot;Design an ethylene cracking process&quot;]})<br />
<br />
print(result[&quot;generated_topology&quot;])<br />
<br />
<br />
<br />
<a href="https://dev.to/gateofai/building-an-advanced-langchain-ai-workflow-automation-with-langgraph-345o" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19297-building-an-advanced-langchain-ai-workflow-automation-with-langgraph</guid>
		</item>
		<item>
			<title>::search-text</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19276-search-text</link>
			<pubDate>Tue, 02 Jun 2026 23:30:02 GMT</pubDate>
			<description><![CDATA[The CSS ::search-text pseudo-element selects the matching text from your browser's &quot;find in page&quot; feature.  
 
 
::search-text...]]></description>
			<content:encoded><![CDATA[The CSS ::search-text pseudo-element selects the matching text from your browser's &quot;find in page&quot; feature. <br />
<br />
<hr /><br />
<a href="https://css-tricks.com/almanac/pseudo-selectors/s/search-text/" target="_blank">::search-text</a> originally handwritten and published with love on <a href="https://css-tricks.com" target="_blank">CSS-Tricks</a>. You should really <a href="https://css-tricks.com/newsletters/" target="_blank">get the newsletter</a> as well.<br />
<br />
<br />
<br />
<a href="https://css-tricks.com/almanac/pseudo-selectors/s/search-text/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19276-search-text</guid>
		</item>
		<item>
			<title>Build Your Own AI Agent</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19275-build-your-own-ai-agent</link>
			<pubDate>Tue, 02 Jun 2026 23:30:02 GMT</pubDate>
			<description>We just posted a course on the freeCodeCamp.org YouTube channel that will teach you how to build and deploy intelligent AI agents that bridge the gap...</description>
			<content:encoded><![CDATA[<br />
                     We just posted a course on the freeCodeCamp.org YouTube channel that will teach you how to build and deploy intelligent AI agents that bridge the gap between Large Language Models (LLMs) and real-worl <br />
                <br />
<br />
<a href="https://www.freecodecamp.org/news/build-your-own-ai-agent/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19275-build-your-own-ai-agent</guid>
		</item>
		<item>
			<title>From Flutter to Backend: How to Build Production-Grade REST APIs with Dart and Serverpod</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19274-from-flutter-to-backend-how-to-build-production-grade-rest-apis-with-dart-and-serverpod</link>
			<pubDate>Tue, 02 Jun 2026 23:30:02 GMT</pubDate>
			<description><![CDATA[Serverpod is one of the most performant backend frameworks built on Dart. It's a fully opinionated backend framework that comes with its own ORM, its...]]></description>
			<content:encoded><![CDATA[<br />
                     Serverpod is one of the most performant backend frameworks built on Dart. It's a fully opinionated backend framework that comes with its own ORM, its own code generation system, migration tooling, aut <br />
                <br />
<br />
<a href="https://www.freecodecamp.org/news/how-to-build-production-grade-rest-apis-with-dart-and-serverpod/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19274-from-flutter-to-backend-how-to-build-production-grade-rest-apis-with-dart-and-serverpod</guid>
		</item>
		<item>
			<title>The AWS FinOps Guide for Series A Startups: The 8 Cost Patterns That Appear After Product-Market Fit</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19273-the-aws-finops-guide-for-series-a-startups-the-8-cost-patterns-that-appear-after-product-market-fit</link>
			<pubDate>Tue, 02 Jun 2026 23:30:02 GMT</pubDate>
			<description>You raised your Series A. Engineering hired fast. Features shipped faster. And somewhere between month six and month twelve, someone forwarded you an...</description>
			<content:encoded><![CDATA[<br />
                     You raised your Series A. Engineering hired fast. Features shipped faster. And somewhere between month six and month twelve, someone forwarded you an AWS Cost Explorer screenshot with a line that only <br />
                <br />
<br />
<a href="https://www.freecodecamp.org/news/the-aws-finops-guide-for-series-a-startups/" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19273-the-aws-finops-guide-for-series-a-startups-the-8-cost-patterns-that-appear-after-product-market-fit</guid>
		</item>
		<item>
			<title>How TradingAgents (82K★) could slash 70% of LLM costs with a gateway layer</title>
			<link>https://sobergroup.com/forums/forum/services/website-development/19272-how-tradingagents-82k★-could-slash-70-of-llm-costs-with-a-gateway-layer</link>
			<pubDate>Tue, 02 Jun 2026 23:30:02 GMT</pubDate>
			<description>More... (https://dev.to/lynkr/how-tradingagents-82k-could-slash-70-of-llm-costs-with-a-gateway-layer-40p5)</description>
			<content:encoded><![CDATA[<br />
<br />
<a href="https://dev.to/lynkr/how-tradingagents-82k-could-slash-70-of-llm-costs-with-a-gateway-layer-40p5" target="_blank">More...</a>]]></content:encoded>
			<category domain="https://sobergroup.com/forums/forum/services/website-development">Website Development</category>
			<dc:creator>MyrinNew</dc:creator>
			<guid isPermaLink="true">https://sobergroup.com/forums/forum/services/website-development/19272-how-tradingagents-82k★-could-slash-70-of-llm-costs-with-a-gateway-layer</guid>
		</item>
	</channel>
</rss>
