Today's collection spans agent workflow design, accessibility hygiene, static analysis tooling, and form UX fundamentals. Each piece offers specific patterns or cautions that sharpen how we build and evaluate web products under the pressure of AI assistance and evolving standards.
3 Years of Graph Engineering with LangGraph
LangGraph structures agentic systems as directed graphs where nodes can hold deterministic code, LLM calls, or full nested agents, and edges route conditionally based on outputs. The framework's 65M monthly downloads reflect a broader shift: production agents need cycles for retry logic and human-in-the-loop approval gates, not just linear prompt chains. Instead of treating every decision as an LLM call, modern graphs wrap predictable steps in code and reserve the model for genuine ambiguity.
// Conceptual: node returns decision; edge routes conditionally
const workflow = new StateGraph()
.addNode("analyze", analyzeRequest)
.addNode("humanReview", waitForApproval)
.addConditionalEdges("analyze", (state) =>
state.confidence > 0.9 ? "submit" : "humanReview"
);Tweaking Text Level Styles, Reprised
Adrian Roselli's updated guidance on <mark>, <del>, <ins>, and <s> consolidates years of screen reader testing and concludes that native HTML elements now Just Work across NVDA, JAWS, VoiceOver, and Narrator. The key takeaway: resist the urge to override defaults with CSS generated content or aria-roledescription, both of which confuse or silence announcements. As browser support matured, the baroque workarounds from 2017 became liabilities rather than fixes.
/* Don't do this */
mark::before { content: " [highlight start] "; }
/* Native element announces correctly without decoration */
<mark>quarterly revenue</mark>How to Clean Up AI-Generated Code with Fallow
Fallow is a Rust-based static analyzer for TypeScript and JavaScript that surfaces dead code, duplication, and cyclomatic complexity in sub-second runs. It's especially useful after AI code generation, which tends to produce redundant functions and uncalled helpers. The tool outputs JSON for programmatic consumption and can integrate with AI agents via its MCP server interface, creating a feedback loop where the agent generates code and the analyzer flags waste before it hits main.
# Example: detect duplicates and dead exports
fallow analyze src/ --report duplication --threshold 5Don't Disable Form Controls
Disabled submit buttons and form fields fail users by hiding actionable feedback and exempting contrast rules under WCAG. Instead of disabled, use preventDefault() in your submit handler and show polite, specific validation messages that explain what's missing. Always handle double-submit protection server-side because script can fail, and never rely on the disabled state as a substitute for clear instructions or inline error text.
form.addEventListener("submit", (e) => {
if (!isValid(formData)) {
e.preventDefault();
showErrors(validationMessages); // visible, focusable
}
});Closing
Graph-based agent control, semantic HTML respect, static analysis hygiene, and form validation transparency all reinforce the same theme: explicit structure and user-visible feedback beat invisible constraints. Whether you're orchestrating LLM workflows or styling <ins>, clarity wins.