<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aser Nasr</title>
    <description>The latest articles on DEV Community by Aser Nasr (@asernasr_0).</description>
    <link>https://dev.to/asernasr_0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4083308%2Fec485c0f-04cf-4af6-9930-9f01e9e6b541.jpg</url>
      <title>DEV Community: Aser Nasr</title>
      <link>https://dev.to/asernasr_0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asernasr_0"/>
    <language>en</language>
    <item>
      <title>Why I Built Another Browser Automation Platform</title>
      <dc:creator>Aser Nasr</dc:creator>
      <pubDate>Sat, 22 Aug 2026 18:29:06 +0000</pubDate>
      <link>https://dev.to/asernasr_0/why-i-built-another-browser-automation-platform-6gb</link>
      <guid>https://dev.to/asernasr_0/why-i-built-another-browser-automation-platform-6gb</guid>
      <description>&lt;p&gt;Browser automation is already a solved problem.&lt;/p&gt;

&lt;p&gt;At least, that's what I thought before I started working on Figranium.&lt;/p&gt;

&lt;p&gt;There are excellent projects for controlling browsers programmatically, particularly Playwright and Skyvern. If all you need is to open a browser, click things, fill forms, extract information, and interact with a website, the basic capabilities are already there.&lt;/p&gt;

&lt;p&gt;So why build another platform?&lt;/p&gt;

&lt;p&gt;The problem I wanted to solve was a little different.&lt;/p&gt;

&lt;h2&gt;
  
  
  From browser automation to reusable automation
&lt;/h2&gt;

&lt;p&gt;Writing a browser automation script is one thing.&lt;/p&gt;

&lt;p&gt;Turning that script into something another application can reliably call is another.&lt;/p&gt;

&lt;p&gt;You eventually end up building infrastructure around the automation itself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How is the workflow configured?&lt;/li&gt;
&lt;li&gt;How are inputs passed to it?&lt;/li&gt;
&lt;li&gt;How is it deployed?&lt;/li&gt;
&lt;li&gt;How does another application trigger it?&lt;/li&gt;
&lt;li&gt;How do you reuse the same workflow?&lt;/li&gt;
&lt;li&gt;How do you make the automation accessible without embedding browser-control code everywhere?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted the browser workflow to be the reusable unit.&lt;/p&gt;

&lt;p&gt;That became the basic idea behind Figranium.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build visually, execute through an API
&lt;/h2&gt;

&lt;p&gt;Figranium lets you construct browser automation workflows visually and then execute those workflows through an API.&lt;/p&gt;

&lt;p&gt;The conceptual model is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual workflow → browser automation → API endpoint&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of every automation becoming a custom application, the workflow itself can become an operation that other software can call.&lt;/p&gt;

&lt;p&gt;That makes the browser part feel more like infrastructure rather than something that has to be manually wired into every project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use Playwright?
&lt;/h2&gt;

&lt;p&gt;Playwright is one of the technologies that makes this possible in the first place.&lt;/p&gt;

&lt;p&gt;Figranium isn't intended to replace the underlying browser automation technology.&lt;/p&gt;

&lt;p&gt;The distinction is more about abstraction.&lt;/p&gt;

&lt;p&gt;Playwright gives you powerful browser-control primitives.&lt;/p&gt;

&lt;p&gt;Figranium focuses on turning browser workflows into reusable, executable tasks.&lt;/p&gt;

&lt;p&gt;There are situations where writing Playwright directly is absolutely the better choice. If you're building a complex test suite or need very fine-grained programmatic control, a framework like Playwright gives you exactly that.&lt;/p&gt;

&lt;p&gt;But if the goal is closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I want this browser workflow to exist as a reusable operation that my application can call."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then a higher-level abstraction starts to make sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dockerized execution
&lt;/h2&gt;

&lt;p&gt;Another important part of the project is deployment.&lt;/p&gt;

&lt;p&gt;Browser automation has a reputation for becoming annoying once you move it from a development machine into an actual server environment.&lt;/p&gt;

&lt;p&gt;Browsers, dependencies, system libraries, processes, and configuration all have to coexist.&lt;/p&gt;

&lt;p&gt;That's one reason I wanted Figranium to be Docker-friendly from the beginning.&lt;/p&gt;

&lt;p&gt;The goal is to make the workflow something you can actually run as infrastructure rather than something that only works conveniently on the machine where it was created.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;One of the biggest things I've learned while building this is that browser automation isn't just about browser actions.&lt;/p&gt;

&lt;p&gt;The difficult parts quickly become things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workflow representation&lt;/li&gt;
&lt;li&gt;execution state&lt;/li&gt;
&lt;li&gt;deployment&lt;/li&gt;
&lt;li&gt;API boundaries&lt;/li&gt;
&lt;li&gt;error handling&lt;/li&gt;
&lt;li&gt;reproducibility&lt;/li&gt;
&lt;li&gt;making visual workflows expressive enough without making them overwhelming&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A visual interface looks simple from the outside, but the system underneath still needs to represent real automation logic.&lt;/p&gt;

&lt;p&gt;That has probably been one of the most interesting parts of building Figranium.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Figranium is going
&lt;/h2&gt;

&lt;p&gt;There are still plenty of things I'd like to improve.&lt;/p&gt;

&lt;p&gt;I'm particularly interested in making browser workflows easier to build, reuse, deploy, and integrate with other software without forcing every user to become an expert in browser automation infrastructure.&lt;/p&gt;

&lt;p&gt;Figranium is open source, so I'm also interested in hearing from people who have tried similar approaches.&lt;/p&gt;

&lt;p&gt;If you've built browser automation systems before:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did you end up having to build around Playwright/Selenium to make your automations actually usable as infrastructure?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/figranium/figranium" rel="noopener noreferrer"&gt;https://github.com/figranium/figranium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>automation</category>
      <category>playwright</category>
      <category>browser</category>
    </item>
    <item>
      <title>I got tired of Apify’s proxy bills and SaaS limits, so I built an open-source visual browser engine</title>
      <dc:creator>Aser Nasr</dc:creator>
      <pubDate>Tue, 18 Aug 2026 14:05:38 +0000</pubDate>
      <link>https://dev.to/asernasr_0/i-got-tired-of-apifys-proxy-bills-and-saas-limits-so-i-built-an-open-source-visual-browser-engine-3ee</link>
      <guid>https://dev.to/asernasr_0/i-got-tired-of-apifys-proxy-bills-and-saas-limits-so-i-built-an-open-source-visual-browser-engine-3ee</guid>
      <description>&lt;p&gt;Headless browser automation usually forces you to choose between two extremes: writing raw Playwright/Selenium scripts from scratch, or relying on heavy SaaS platforms that lock basic API access behind paywalls and charge exorbitant fees for AI execution.&lt;/p&gt;

&lt;p&gt;When speed, predictability, and local execution matter, AI-powered execution guesses often introduce unnecessary latency and failure points. Older deterministic tools like UI.Vision exist, but they lack clean API-first integration or modern visual orchestration interfaces.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Figranium&lt;/strong&gt; to fill that gap: an open-source, self-hosted browser automation platform designed around deterministic execution, visual block editing, and instant REST API triggers.&lt;/p&gt;

&lt;p&gt;&lt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2r8uzjax3ixtgqq0lb3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2r8uzjax3ixtgqq0lb3.gif" alt="Figranium Workflow Demo" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Technical Architecture
&lt;/h2&gt;

&lt;p&gt;Figranium is structured as a decoupled, lightweight control plane running inside Docker containers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual Studio (Frontend):&lt;/strong&gt; Built with &lt;strong&gt;Vite&lt;/strong&gt;, &lt;strong&gt;TypeScript&lt;/strong&gt;, and a custom canvas editor for building and organizing execution graphs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution Engine (Worker):&lt;/strong&gt; A &lt;strong&gt;Node.js&lt;/strong&gt; execution environment leveraging &lt;strong&gt;Playwright&lt;/strong&gt; for headless Chromium control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Engine &amp;amp; Orchestrator:&lt;/strong&gt; Exposes saved JSON workflow configurations as executable REST endpoints, allowing external services to trigger automation flows on demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Speed-First &amp;amp; Deterministic Matter
&lt;/h2&gt;

&lt;p&gt;Many modern automation platforms rely heavily on LLM-based element parsing. While useful for dynamic layout changes, LLM execution is nondeterministic, significantly slower, and introduces recurring API token costs. &lt;/p&gt;

&lt;p&gt;Figranium prioritizes &lt;strong&gt;execution speed and selector reliability&lt;/strong&gt;. Workflows execute directly against Playwright's native DOM selection engine (CSS/XPath), making runs predictable and fast without extra cloud dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture Trade-offs
&lt;/h2&gt;

&lt;p&gt;Building a self-hosted visual automation tool comes with clear trade-offs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Memory Bounds:&lt;/strong&gt; Concurrent execution is strictly bound by host system memory when spawning multiple headless browser instances simultaneously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow DOM Traversal:&lt;/strong&gt; Complex nested shadow DOMs still require targeted custom execution blocks rather than pure visual selectors.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;Figranium is completely open-source (GPLv3-licensed) and fully self-hosted.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Homepage:&lt;/strong&gt; &lt;a href="https://figranium.dev" rel="noopener noreferrer"&gt;https://figranium.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/figranium/figranium" rel="noopener noreferrer"&gt;https://github.com/figranium/figranium&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are running web scraping pipelines, synthetic monitoring, or automated testing, I’d love to get your feedback on the architecture and API integration!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
