Entering edge computing, I noticed existing bot detection tools were slow and intrusive. Initially choosing AssemblyScript for compatibility with our Deno-based stack, I faced performance limitations and quickly pivoted to Rust for superior WebAssembly support.
This led to "The Silent Sentinel," a fast, client-side WASM module running via WebWorkers, seamlessly detecting bots at the CDN edge—offering a competitive alternative to market leaders like Cloudflare and Google reCAPTCHA.
I'm Barış Güler, an engineering leader with several years in software engineering, currently based in Berlin. My passion lies at the intersection of technology leadership, serverless architectures, and AI-driven solutions. I've led diverse teams at companies like Intel, Delivery Hero, Blacklane, and Würth (Cloud Services)—building scalable products, mentoring engineers, and aligning tech strategies with business goals. I'm deeply interested in emerging technologies like Rust, WASM and Deno, and I enjoy sharing my experiences through talks, articles, and open-source contributions.
Building other solutions on Nginx Unit & Synthetic Data.
I've spent 20+ years convincing computers to do what I want—usually successfully. If not, I just pretend it was an AI experiment.
– Me
We need to refactor our architecture as it becomes unscalable and unmanagable.
– A CTO at a CDN Company
How about building a client bot detection tool, first?
– Me
Silent Sentinel?
A Bot detection tooling for CDN customers to let them detect & block unexpected visits to their web apss and pages.
CDNs & Edge
The ideation phase focused on leveraging the CDN's global edge network to distribute bot detection efficiently.
Build from Scratch
Starting from zero, we developed a WASM module in AssemblyScript for static bot detection, ensuring lightweight, high-performance execution in browsers.
Distribution & Launch
The product was deployed globally through CDN infrastructure, ensuring low latency and wide accessibility.
Discovery of requirements for a WASM module.
Analysis of the current market players
Setting the SLOs and SLAs in combination with the additional feature sets
Review and Iterate on the execution of development
Plan the development phase with Vertical Slicing in support with product target audience
Build the project to an MVP to test and evaluate. Iterate using these learnings.
Tool | Pros | Cons |
---|---|---|
AssemblyScript | TS Linguistics | Type Conversions |
Deno | Easy to start | Ecosystem not mature yet |
NATS | Service communication made easy | Learning curve and setup on-premises |
ScyllaDB | Distributed nature | N/A |
A Typescript-like Language
for WebAssembly
– AssemblyScript
Build the Module
During the ideation phase, we explored AssemblyScript for its seamless integration with our Deno-based ecosystem.
Compile to WASM
The AssemblyScript code was compiled into a lightweight WebAssembly module, optimized for performance and portability.
Embed via SDK
A client-side SDK was developed to dynamically load the WASM module via a CDN cache into a WebWorker created on-the-fly.
Begin by identifying the limitations of the current AssemblyScript implementation and defining the goals for the migration
Investigate Rust’s capabilities for WebAssembly compilation and compare them with AssemblyScript
Creating a Plan that sets the requirements for the design and build phases
Test each iteration to validate functionality against benchmarks from the AssemblyScript version
Develop a comprehensive migration plan
Deploy the MVP globally through CDN infrastructure, leveraging caching for efficient distribution
Migration from AssemblyScript to Rust
Build the Module
During the ideation phase, expect to discuss the project in depth to clearly understand the goals and requirements.
Compile to WASM
Our team makes each part of the build phase seamless with regular check-ins and deliverables.
Embed via SDK
It's time to take the product live - the end if the build phase but the beginning of being in market.
Metric | Level | Contact |
---|---|---|
False Positive Rate | Medium | <0.01% |
Bot Detection Rate | High | >99% |
Detection Response Time | High | <50ms |
Customer Satisfaction | High | >95% |
await init(clientKey, { monitoringMode });
is_bot("example.com", "Mozilla/5.0", 1024, 768, 5, 10, "NVIDIA Corporation"), "example.com");
Start with the hardest problem to solve: Get the simple result from the WASM Module
Inlclude an e2e test on top of what's implemented to be run each time in the CI/CD
Iterate until you've reached to the point that satisfies the first sprint goal
Showcase how it works to the C-levels / Directors & get feedback
Review the first sprint, collect what went well or wrong and apply in the upcoming iteration
Start the next sprint with the whole outcome and feedback collected
Send the payload to the Collector Service and transform data into its expected shape
Streamline the analytics to the Bot Management Service and persist
Trigger a CDC (Change Data Capture) & publish the data through the event bus
Trigger CDC to let BFF (Backend-for-Frontend) Service know what's updated & persist it for analytics / dashboard purposes
Capture the sanitized data published to a topic, persist it within the Bot Management Service
Ping the whatever client it is listened from with SSE (Server-sent Events)
https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon
Vertical Slicing
Event-driven Approach
Trunk-based
Start first, make it better, and make the best!
Everything is events!
Go live immediately, activate later!
Key Takeaways