I Added Real Playable Demo Maps to RPGMapEditor.com

I’m building RPG Map Editor, a browser-based map editor for tabletop RPGs, D&D sessions, Roll20 maps, and Foundry VTT workflows.

One of the biggest problems with creative SaaS landing pages is that they usually show fake proof.

You get a shiny hero section, some screenshots, a few feature cards, and a call-to-action.

But if you are building a tool for Dungeon Masters, game masters, or worldbuilders, screenshots are not enough.

People want to know:

  • Can I open a real map?
  • Can I edit it?
  • Can I export something useful?
  • Is this actually a product, or just a pretty landing page?
  • Does it work before I sign up?

So I added real playable demo maps directly to the RPGMapEditor.com homepage.

But there was a catch.

I wanted users and crawlers to see real product proof, but I did not want Google indexing a bunch of thin /demo/* editor shell pages.

So the final architecture became:

Make the homepage indexable. Make the demos playable. Keep the editor utility routes noindex.

This is how I built it.

The product problem

RPGMapEditor.com is meant to be a lightweight browser-based alternative for creating RPG and D&D battle maps without installing a desktop app.

The target user is someone who wants to quickly create a usable session map, export it, and use it in a tabletop workflow.

That means the landing page cannot only say:

“Create beautiful RPG maps.”

It has to prove it.

So instead of only showing static marketing screenshots, I wanted the homepage to show real demo projects:

  • A top-down encounter map
  • A multi-room map
  • An entity playground
  • Real .rpgmap.json files
  • Real editor links
  • Real preview images
  • Real export workflow copy

The homepage needed to become product proof, not just product description.

The SEO problem

The naive version would be simple:

/demo/typical-topdown
/demo/multi-room-world
/demo/entity-playground

Each page would load the editor and let users try a map.

That works for users.

But it is bad for search.

Those pages are mostly utility routes. They are not strong landing pages. They are not meant to rank for searches like:

D&D battle map maker
browser RPG map editor
Roll20 battle map export
Foundry VTT map tool
online tabletop map maker

The homepage and dedicated landing pages should target those searches.

The demo routes should support conversion, not compete in search results.

So the rule became:

/                -> indexable product page
/battle-map-maker -> indexable intent page
/roll20-battle-map-export -> indexable workflow page
/foundry-vtt-battle-map-export -> indexable workflow page
/demo/*          -> playable, but noindex

That keeps the site focused.

The architecture

The whole demo system is driven by one manifest file:

`map-editor/public/demo-projects/manifest.json

That manifest is the source of truth for:

Homepage demo cards
Editor boot config
Demo route resolution
Preview images
JSON-LD structured data
Internal validation
Product copy for each demo

The key principle is simple:

If the marketing page says a demo exists, the editor must actually be able to load it.

No fake screenshots.

No stale copy.

No card that says “open in editor” and then breaks.

Example manifest entry

A demo project entry looks roughly like this:

{
"slug": "typical-topdown",
"title": "Top-Down Encounter Sample",
"description": "A small editable battle map designed for a quick tabletop encounter.",
"intent": "Use this to test terrain, props, grid alignment, and PNG export.",
"projectUrl": "/demo-projects/typical-topdown.rpgmap.json",
"previewUrl": "/demo-projects/typical-topdown.webp",
"demoUrl": "/demo/typical-topdown",
"width": 32,
"height": 24,
"grid": "square"
}

This gives the homepage everything it needs:

A readable title
A useful description
A preview image
A real project file
A playable editor URL
Grid metadata
Search-friendly text
Structured data fields

The demo card and the editor both come from the same data.

That matters because marketing drift is real.

It is very easy for a landing page to say one thing while the actual product does another.

Server-side validation

The Rust server validates the demo manifest before rendering the homepage.

The validation checks that:

The manifest version is valid
Slugs are unique
Demo URLs are same-origin
Preview images exist
Project files exist
Project JSON parses correctly
Demo projects do not depend on remote http(s) asset URLs

That last point is important.

A demo map should not silently depend on a remote image or tileset that can disappear later.

For RPGMapEditor.com, demo projects need to be self-contained so they load quickly and reliably.

If validation fails, the homepage does not advertise broken demo cards.

That is better than showing “Open in editor” and sending users into a dead route.

Server-rendered proof cards

The homepage renders demo projects as real HTML.

Not a JavaScript-only carousel.

Not a hidden JSON blob.

Not an empty

that only appears after hydration.

Real server-rendered cards.

Example:
`

Start from a real encounter


src=”/demo-projects/typical-topdown.webp”
alt=”Top-Down Encounter Sample editable demo battle map preview”
width=”1200″
height=”800″
loading=”lazy”
decoding=”async”
>

<h3>Top-Down Encounter Sample</h3>
<p>A small editable battle map designed for a quick tabletop encounter.</p>
<p>32 × 24 square grid</p>

<a href="/demo/typical-topdown">Open in editor</a>

`

This gives both users and search engines actual proof:

RPGMapEditor.com has real demo maps
The maps are editable
The links are visible
The previews have descriptive alt text
The product is not just a mockup

That matters for a new SaaS.

A new product has no trust by default.

The fastest way to earn trust is to let people try something real.

The demo routes are playable, but noindex

Each demo link opens the real editor.

For example:

https://www.rpgmapeditor.com/demo/typical-topdown

The server resolves the slug against the manifest and injects a boot config:

window.RPGME_EDITOR_BOOT = {
mode: "demo",
projectUrl: "/demo-projects/typical-topdown.rpgmap.json",
copyApiUrl: "/api/demo-projects/typical-topdown/copy",
signupNextUrl: "/signup?next=/demo/typical-topdown"
};

But the demo route also includes:

<meta name="robots" content="noindex, nofollow">

That is intentional.

The demo route exists for product experience.

The homepage exists for search.

The journey is:

Google / Dev.to / social post
↓
RPGMapEditor.com homepage
↓
Demo card
↓
Open real editor
↓
Try map
↓
Export / sign up / copy project

The demo page helps conversion.

It does not need to rank.

Structured data mirrors the visible page

The homepage also outputs JSON-LD structured data.

The important part is that the structured data is generated from the same manifest as the visible demo cards.

Example:

{
“@context“: “https://schema.org“,
“@type”: “ItemList”,
“itemListElement”: [
{
“@type”: “ListItem”,
“position”: 1,
“name”: “Top-Down Encounter Sample”,
“url”: “https://www.rpgmapeditor.com/demo/typical-topdown“
}
]
}

There is also FAQ schema generated from visible FAQ content on the page.

The rule is:

Structured data should describe what users can actually see.

If the manifest fails and demo cards are not rendered, the ItemList schema is not rendered either.

No fake schema.

No invisible SEO content.

No pretending the page contains things it does not.

Performance choices

The homepage also has a visual hero section, but I did not want it to destroy performance.

The hero uses:

A static WebP poster
fetchpriority=”high”
Preload for important visual assets
Optional Three.js overlay
Motion preference checks
Desktop viewport checks
IntersectionObserver before loading heavy JavaScript

The demo preview images are lazy-loaded below the fold.

Heavy animation is deferred.

The homepage should still make sense before JavaScript loads.

This matters because technical SEO is not only meta tags.

If the page is slow, unstable, or blank until JavaScript runs, the implementation is weak.

Why this matters for RPGMapEditor.com

For a new map editor, the hard part is not only building tools.

The hard part is proving that the product deserves attention in a crowded space.

There are already established tools for tabletop maps.

So RPGMapEditor.com needs to show its positioning clearly:

Browser-based
No desktop install required
Real editable demo maps
Fast try-before-signup flow
Useful for D&D and tabletop sessions
PNG workflow for Roll20 and Foundry VTT
Honest about what is shipped and what is not

The demo maps are not just a nice visual section.

They are part of the product strategy.

They reduce the gap between:

“This looks interesting.”

And:

“I opened a real map and tested it.”

That gap is where most SaaS landing pages lose users.

The reusable pattern

This architecture is not only useful for website.

You can use the same pattern for any creative SaaS product:

Browser editors
Diagram tools
Design tools
Code playgrounds
Game tools
Image tools
Website builders
Workflow builders

The pattern is:

  1. Create real example projects
  2. Store metadata in one manifest
  3. Validate the manifest server-side
  4. Render example cards as HTML
  5. Link examples to real playable routes
  6. Mark utility routes noindex
  7. Generate structured data from the same manifest
  8. Track opens, exports, signups, and conversion

The principle:

Index the proof. Noindex the playground.

What I am watching next

This is still an experiment.

The implementation is technically cleaner, but the business question is whether it converts.

The metrics that matter are:

Homepage click-through rate to demos
Demo open rate
Demo-to-signup conversion
Export attempts
Returning users
Search impressions for map editor queries
Queries mentioning Roll20, Foundry, D&D, and battle maps
Whether users understand what is shipped today

If people open the demo but do not sign up, the problem may be onboarding.

If people never open the demo, the homepage copy or card placement is weak.

If people sign up but do not export, the editor workflow needs work.

That is the point of building it this way.

The demos are not only SEO content.

They are a product validation loop.

Final thought

I do not think a new creative SaaS product should hide behind polished screenshots.

If the product is real, the landing page should prove it.

For RPGMapEditor.com, that meant putting real demo maps on the homepage, rendering them as crawlable HTML, validating them through a manifest, linking them into the real editor, and keeping the utility editor pages out of the search index.

It is a simple split:

The homepage ranks.
The demo routes convert.
The manifest keeps everything honest.

That is the architecture I would use again.

If you are building a browser-based creative tool, do not just say what it can do.

Let people open something real.

NPM Supply Chain Compromise, cPanel Root RCE, AWS Pathfinding Labs

NPM Supply Chain Compromise, cPanel Root RCE, AWS Pathfinding Labs

Today’s Highlights

A major npm supply chain attack compromised over 300 packages, while a critical cPanel CVE-2026-29205 allows pre-auth root file reads. Simultaneously, new AWS Pathfinding Labs offer hands-on training for cloud vulnerability exploitation and defense.

314 npm packages just got compromised, 271 @antv, echarts-for-react, size-sensor, timeago.js (r/cybersecurity)

Source: https://reddit.com/r/cybersecurity/comments/1thcbcf/314_npm_packages_just_got_compromised_271_antv/

This item details a significant and widespread supply chain attack that recently hit the npm ecosystem, impacting 314 distinct packages. The attack originated from the compromise of a maintainer’s account associated with the atool project, which was then used to push malicious versions across a vast array of popular packages. Affected libraries include @antv, echarts-for-react, size-sensor, and timeago.js, all widely used in web development projects. The malicious code injected into these packages is designed to exfiltrate sensitive developer credentials and environment variables, specifically targeting AWS keys, GitHub tokens, and other critical secrets from compromised build environments or individual developer machines. This incident underscores the profound and persistent risk posed by account compromises within package repositories, highlighting the urgent need for enhanced security measures.

Developers are strongly advised to meticulously review their project dependencies, particularly if they utilize any of the listed affected packages, to ensure no compromised versions are present in their dependency trees. This attack serves as a stark reminder of the critical importance of implementing robust supply chain security practices. These include mandatory multi-factor authentication for all package maintainers, rigorous automated scanning of dependencies for known malicious code or suspicious behavior, and strict access controls on development and deployment environments. Organizations should also consider adopting policies for regular credential rotation and adhering to the principle of least privilege, minimizing the scope of permissions granted to automated build systems and development tools. Proactive vigilance and layered defense are paramount in mitigating such sophisticated supply chain threats.

Comment: This is a classic supply chain attack scenario. Always verify package integrity and implement strong MFA on package manager accounts. Use tools to scan your node_modules for known malicious versions.

New Age of Collisions: Reading Arbitrary Files Pre-Auth as root in cPanel (CVE-2026-29205) (r/netsec)

Source: https://reddit.com/r/netsec/comments/1th9bpu/new_age_of_collisions_reading_arbitrary_files/

A critical vulnerability, CVE-2026-29205, has been disclosed in cPanel, allowing for pre-authenticated arbitrary file reading with root privileges. Dubbed “New Age of Collisions,” this flaw could enable attackers to read sensitive configuration files, authentication tokens, or even private keys from affected cPanel installations without needing any prior authentication. The impact is severe, as access to such files could lead to full system compromise, data exfiltration, or further lateral movement within a network. This vulnerability poses a significant risk to the vast number of web hosting providers and individual users who rely on cPanel for server management.

The technical write-up details how specific file collision techniques can be leveraged to exploit a weakness in cPanel’s handling of certain requests, bypassing authentication mechanisms and achieving high-privilege file access. Users running cPanel are strongly advised to apply patches immediately as they become available and to monitor their systems for any signs of compromise. Furthermore, hardening measures such as restricting network access to cPanel interfaces and implementing intrusion detection systems are crucial to mitigate the risks associated with such critical vulnerabilities.

Comment: A pre-auth root file read in cPanel is as bad as it sounds. Patch immediately, and audit your cPanel deployments for suspicious activity.

Pathfinding Labs: Deploy, test, and learn from 100+ intentionally vulnerable AWS environments (r/netsec)

Source: https://reddit.com/r/netsec/comments/1thjpl5/pathfinding_labs_deploy_test_and_learn_from_100/

Pathfinding Labs offers a unique and highly practical resource for cybersecurity professionals and developers seeking to deepen their understanding of AWS cloud security. This platform allows users to deploy, test, and learn from over 100 intentionally vulnerable AWS environments. Each lab is designed to simulate real-world misconfigurations and common vulnerabilities, covering areas like IAM privilege escalation, S3 bucket misconfigurations, vulnerable Lambda functions, and insecure network configurations. It’s an invaluable tool for hands-on practice, allowing users to safely experiment with attack techniques and understand their impact in a controlled environment.

The labs are structured to support a comprehensive learning experience, from identifying initial access vectors to achieving full compromise and exploring remediation strategies. This directly addresses the need for practical hardening guides and defensive techniques in cloud environments. By providing a sandbox for exploitation and defense, Pathfinding Labs empowers users to build practical skills in identifying, exploiting, and securing common AWS vulnerabilities, making it an essential resource for anyone involved in cloud security.

Comment: This is a fantastic resource for anyone wanting to get hands-on with AWS security. Spin up a lab, break it, fix it – the best way to learn practical cloud hardening.

AI Agents Observability, Python Logging for OTel, & PySpark Code Linter

AI Agents Observability, Python Logging for OTel, & PySpark Code Linter

Today’s Highlights

This week’s highlights focus on critical tooling and observability for AI systems in production. We cover essential tracing for AI agents, unifying Python logging with OpenTelemetry, and a PySpark linter for robust data pipelines.

Agent Traces Need to Cross the MCP Boundary (Dev.to Top)

Source: https://dev.to/focused_dot_io/agent-traces-need-to-cross-the-mcp-boundary-focused-labs-5f2l

This article delves into a critical observability challenge for AI agents operating within a “Multi-Component Pipeline” (MCP) architecture: the lack of comprehensive tracing across tool calls. As AI agents increasingly integrate external tools and services to achieve complex tasks, the execution flow often crosses the boundary between the agent’s core logic and these external tool invocations. The author highlights that while agent internal logic might be well-traced, the moment an agent makes a “tool call” through an MCP, the trace context often gets lost or becomes fragmented.

This gap in observability makes debugging, performance monitoring, and understanding agent behavior significantly harder. Without end-to-end traces that encompass the full lifecycle of a tool call – from initiation by the agent, through the MCP, to the tool’s execution and result return – developers struggle to pinpoint failures, identify bottlenecks, or even confirm successful operations. The piece emphasizes the need for a unified tracing mechanism that can propagate trace contexts seamlessly across these boundaries, enabling developers to gain complete visibility into their AI agent’s interactions with its environment and external services, which is crucial for robust production deployments.

Comment: This is a crucial read for anyone deploying AI agents; fragmented traces across tool calls are a silent killer for debugging and production stability. Implementing robust cross-boundary observability is non-negotiable for complex agent systems.

Bridging Python’s Logging Module to OpenTelemetry (Complete Guide) (r/Python)

Source: https://reddit.com/r/Python/comments/1thpfg9/bridging_pythons_logging_module_to_opentelemetry/

This guide provides a comprehensive walkthrough on integrating Python’s standard logging module with OpenTelemetry, a vendor-agnostic observability framework. The core challenge addressed is how to enrich existing Python log records with OpenTelemetry trace context without requiring extensive code changes to an application’s logging calls. This is particularly valuable for applications, including those using AI frameworks, that have established logging practices and need to transition to a more unified observability strategy.

The guide likely details how to configure a custom logging handler or filter that can automatically extract the current OpenTelemetry span and trace IDs and embed them into log records. This allows developers to correlate traditional log messages with distributed traces, providing a much richer context for debugging and performance analysis in complex microservice architectures or AI pipelines. By bridging these two systems, teams can leverage the detailed insights from OpenTelemetry traces while maintaining their familiar Python logging patterns, facilitating easier adoption of advanced observability practices in production environments.

Comment: A solid guide for unifying Python logging with OpenTelemetry. Essential for any production AI system to correlate logs with traces, especially in distributed agent or RAG setups.

I built a linter for PySpark Code (r/dataengineering)

Source: https://reddit.com/r/dataengineering/comments/1thic69/i_built_a_linter_for_pyspark_code/

This Reddit post announces a new VS Code extension designed to lint PySpark code, offering valuable assistance to data engineers and machine learning practitioners working with Apache Spark. The linter’s primary function is to identify unoptimized code, keep track of data types, and detect common Spark anti-patterns, which are crucial for ensuring efficient and robust data processing pipelines. Given that PySpark is a fundamental component in many large-scale data processing and machine learning workflows, a tool that helps maintain code quality and performance directly impacts the reliability and cost-effectiveness of these systems.

The extension provides real-time feedback within the VS Code environment, highlighting potential issues and suggesting improvements. This proactive approach helps developers write better-performing PySpark code from the outset, reducing the need for costly refactoring or debugging in later stages of development or production. Furthermore, the inclusion of Databricks support suggests its utility in cloud-based ML platforms, making it a practical tool for those deploying and managing AI-related data pipelines at scale.

Comment: As someone who wrangles PySpark for ML pipelines, an intelligent linter detecting anti-patterns and optimizing code is incredibly useful for maintaining robust and efficient systems. Pip install this to avoid common performance pitfalls.

PostgreSQL: New Time-Series Extension & Replication Monitor; DuckDB in Production

PostgreSQL: New Time-Series Extension & Replication Monitor; DuckDB in Production

Today’s Highlights

This week’s highlights feature new PostgreSQL tools for time-series data and robust replication monitoring, alongside a practical discussion on deploying DuckDB in production environments. Developers can explore an Apache-licensed time-series extension and an HTTP discovery service for streaming replication with read-your-writes consistency.

pg_deltax (δx): Fast time-series extension for PostgreSQL (r/PostgreSQL)

Source: https://reddit.com/r/PostgreSQL/comments/1thvq2k/pg_deltax_δx_fast_timeseries_extension_for/

The pg_deltax project introduces an Apache-licensed time-series extension designed to enhance PostgreSQL’s capabilities for handling high-volume temporal data. Positioned as a fast, open-source alternative to specialized time-series databases or proprietary extensions like TimescaleDB, it aims to tackle common challenges associated with time-series workloads, such as efficient data ingestion, optimized storage, and rapid analytical querying.

Time-series data, prevalent in IoT, financial applications, and system monitoring, demands specialized indexing and compression techniques to ensure performance and reduce storage footprint. pg_deltax likely implements these optimizations at a lower level within PostgreSQL, potentially offering faster aggregations, time-window queries, and data retention policies crucial for these use cases. Its open-source nature with an Apache license promotes broader adoption and community contributions, offering a flexible and powerful tool for developers and data engineers building scalable data platforms around PostgreSQL.

Comment: This extension is a game-changer for anyone struggling with time-series performance on vanilla PostgreSQL. I’m keen to test its benchmarks against existing solutions and integrate it into my monitoring stack.

pg-status 2.1.0 — HTTP discovery for PostgreSQL streaming replication, now with read-your-writes (r/PostgreSQL)

Source: https://reddit.com/r/PostgreSQL/comments/1thok27/pgstatus_210_http_discovery_for_postgresql/

pg-status is a lightweight C microservice that provides an HTTP API for discovering and monitoring the status of PostgreSQL streaming replication. The newly released version 2.1.0 introduces a significant feature: read-your-writes consistency. This enhancement ensures that applications querying replica databases can guarantee they see data that has been committed to the primary, even in scenarios where replication lag exists.

This capability is critical for maintaining data integrity in distributed systems, where stale reads from lagging replicas can lead to inconsistent application states. pg-status achieves this by exposing detailed replication metrics, including lag, which can be leveraged by load balancers or application logic to route read queries only to replicas that meet specific freshness requirements. Its compact C implementation ensures minimal overhead, making it an efficient solution for improving the robustness and reliability of PostgreSQL-backed services that rely heavily on streaming replication for high availability and read scalability.

Comment: Achieving read-your-writes consistency across PostgreSQL replicas often requires complex application-level logic. This microservice streamlines that, making it much easier to build resilient, distributed systems.

DuckDB (r/dataengineering)

Source: https://reddit.com/r/dataengineering/comments/1thm69a/duckdb/

This discussion thread on r/dataengineering explores the practical experiences and considerations of implementing DuckDB in a production-grade environment. DuckDB, an in-process analytical SQL database, has gained significant traction for its performance and ease of use in local data analysis and embedded scenarios. The community conversation likely delves into its suitability for real-world, scalable deployments, addressing aspects like concurrency management, persistent storage strategies, integration with existing data pipelines, and potential trade-offs compared to traditional client-server OLAP databases.

A key point of discussion revolves around the current lack of a managed cloud service for DuckDB. This highlights a common operational challenge for organizations aiming to leverage DuckDB’s benefits without incurring the overhead of self-managed infrastructure for backups, scaling, and high availability. Insights from the thread are invaluable for data architects and engineers evaluating DuckDB, offering a nuanced view of its strengths as an embedded analytical engine for specific production use cases, such as local data transformation, edge computing analytics, or as a component in a broader hybrid data architecture.

Comment: Moving DuckDB from a local tool to production is a common dilemma. This discussion offers critical real-world insights into its operational challenges and the need for a managed service for broader enterprise adoption.

Intel Xe3P Leaks 160GB LPDDR5X; FlashAttention-2 in CuTe & Custom CUDA GPT-2 Engine

Intel Xe3P Leaks 160GB LPDDR5X; FlashAttention-2 in CuTe & Custom CUDA GPT-2 Engine

Today’s Highlights

Intel’s Xe3P “Crescent Island” GPU leaks reveal 160GB LPDDR5X VRAM, sidestepping HBM shortages and showcasing a powerful new silicon roadmap. Meanwhile, developers are diving deep into CUDA with a line-by-line FlashAttention-2 CuTe walkthrough and a GPT-2 inference engine built from scratch.

FlashAttention-2 in CuTe, From Scratch: A Line-by-Line Walkthrough (r/CUDA)

Source: https://reddit.com/r/CUDA/comments/1thw5o1/flashattention2_in_cute_from_scratch_a_linebyline/

This article provides an in-depth, line-by-line walkthrough of re-implementing FlashAttention-2 using NVIDIA’s CuTe library on Ampere architecture. The author, having spent months mastering CuTe, meticulously breaks down Tri Dao’s original source code to explain the complex memory management, tiling strategies, and kernel optimizations essential for high-performance attention mechanisms on modern GPUs. This resource is invaluable for CUDA developers aiming to understand and apply advanced VRAM optimization techniques directly relevant to large language models.

The walkthrough delves into how CuTe facilitates fine-grained control over GPU hardware, enabling developers to write highly optimized kernels that maximize memory bandwidth and reduce latency. It covers critical aspects such as shared memory usage, register blocking, and the intricate choreography required to handle data movement efficiently within the GPU’s memory hierarchy. By dissecting FlashAttention-2, a cornerstone technique for reducing VRAM consumption and increasing throughput in transformer models, the article empowers readers to build their own optimized CUDA kernels for machine learning workloads.

Comment: This walkthrough is a masterclass in modern CUDA programming, offering unparalleled insight into VRAM optimization with CuTe. Any developer looking to squeeze maximum performance from their NVIDIA GPUs for LLMs needs to read this and apply the techniques.

Intel Crescent Island PCB Leaks: Massive Xe3P GPU with 160GB LPDDR5X (r/LocalLLaMA)

Source: https://reddit.com/r/LocalLLaMA/comments/1thxig9/intels_crescent_island_pcb_leaks_showing_a/

Leaked PCB images for Intel’s upcoming “Crescent Island” data center GPU reveal a massive Xe3P architecture, signaling Intel’s aggressive entry into the high-performance computing market. A standout feature is the inclusion of 20 8GB LPDDR5X modules, providing an unprecedented 160GB of total VRAM. This strategic choice of LPDDR5X over High Bandwidth Memory (HBM) is likely a direct response to the ongoing HBM supply shortages, allowing Intel to maintain high memory capacity while potentially sidestepping production bottlenecks.

The leak also indicates a substantial 640-bit wide memory interface, suggesting a formidable memory bandwidth designed to feed the large Xe3P GPU. This move highlights Intel’s silicon roadmap for data center accelerators, focusing on high memory capacity and alternative memory solutions to meet the growing demands of AI and large language model workloads. The 16-pin connector further implies significant power delivery requirements, aligning with expectations for a high-performance, enterprise-grade GPU.

Comment: Intel’s pivot to LPDDR5X for 160GB VRAM on Xe3P is a fascinating workaround for HBM shortages, potentially disrupting the data center GPU memory landscape. This leak offers a crucial glimpse into their next-gen hardware strategy.

GPT-2 Inference Engine Built From Scratch in CUDA (r/CUDA)

Source: https://reddit.com/r/CUDA/comments/1tgnqif/built_a_gpt2_inference_engine_from_scratch_in_cuda/

A developer has announced the creation of a GPT-2 inference engine entirely from scratch using CUDA, demonstrating a deep understanding of GPU architecture and parallel programming for transformer models. This project is a robust example of how to implement the core components of an LLM efficiently on NVIDIA GPUs, offering a valuable learning resource for those looking to optimize AI workloads at a low level. It features key optimizations such as tiled GEMM (General Matrix Multiply) kernels and fused attention + softmax kernels, which are crucial for minimizing memory access and maximizing computational throughput.

The engine also incorporates multi-head causal self-attention and complete transformer blocks, along with MLPs (Multi-Layer Perceptrons) and a KV cache for autoregressive token generation. By building these components from first principles in CUDA, the project provides a highly optimized foundation for running transformer-based models, directly addressing performance and VRAM efficiency. This initiative serves as a practical blueprint for developers aiming to build or enhance their own custom inference solutions for generative AI.

Comment: Building a GPT-2 engine in raw CUDA is an impressive feat, showcasing practical GPU optimization for LLMs. This project is a goldmine for understanding how to write performant CUDA kernels for transformer components like GEMM, attention, and KV cache.

Turns AI development needs all the same things Human development does

For a while I’ve been “experimenting” with AI-assisted development; which meant opening a chat window, describing what I wanted, and hoping for the best. This is about what I built to make it more reliable than that — and how every fix turned out to be something good engineering teams already do.

The project

I work in a field where software reliability genuinely matters — we have contracts with local government, SLAs, and the kind of accountability where “the AI did it” is not a defensible answer. So before bringing AI-first development into that context, I wanted to stress-test it somewhere lower-stakes but structurally similar.

In my spare time I’ve built and maintain Muddle — a meal planner I built for my own household. It’s a real Rails app, in daily use, and my household depends on it to actually plan meals. I can’t vibe-code changes into production — there are hungry people who would notice if the weekly plan disappeared. The constraints that mattered at work showed up here too: existing project, real users, code quality that another human could read and maintain. Just at a friendlier scale.

Stage one: just asking, and why that didn’t work

The obvious starting point is also the one everyone tries first: describe what you want, let the model run with it. And it’s fine for throwaway scripts or isolated functions. But for a living codebase with existing conventions and real users, it breaks down quickly.

The problems I kept running into were:

Plain old misunderstood requirements. I’d ask for a change and get something that technically works but not what I actually wanted. It was in the wrong place, or it worked in a way that didn’t make sense to me or the users.

Drift from conventions. The app has a particular way of doing things — Rails idioms, ViewComponent patterns, specific test structures. A generic prompt produced generic code that didn’t fit.

No checkpoint. The model would make three decisions I’d have made differently, and I’d only find out when I looked at the diff. By then I was either accepting the whole thing or untangling it manually.

None of these are catastrophic on their own. But they compound. After a few sessions of cleanup work following “successful” prompts, I realised I was spending more time correcting Claude than I would have spent just writing the code.

There’s an old mantra in software engineering: the computer does exactly what you tell it, not what you want. That’s still true with AI — it’s just harder to see. The gap between “what you said” and “what you meant” is buried in the interpretation of natural language rather than a compiler error. The AI fills in blanks well enough that a misunderstanding feels like a reasonable attempt rather than a crash. At least a compiler tells you immediately that you got it wrong.

Stage two: telling Claude how we do things here

Even when Claude understood what to do, the code it produced didn’t look like the rest of the codebase. Not broken — just wrong for this project. Instance variables where we use locals. Rubocop conventions instead of Standard Ruby. Minor things, but the kind that get flagged in a code review. Someone has to clean it up, and that someone is me.

The fix was CLAUDE.md — a file that Claude reads automatically as context for every session. Coding conventions, style rules, migration handling, test structure. It’s the same thing a good CONTRIBUTING.md does in an open source repo: here’s how we work, here’s what we care about, here’s what will get your PR rejected. The agent is just a new contributor who needs the same onboarding.

This worked. The code started looking like it belonged in the codebase.

Stage three: only load what’s relevant

The CLAUDE.md approach introduced a different problem almost immediately. When I was having a conversation about the logo, or thinking through a product decision, the coding rules were sitting in context the whole time. Suggestions had a slight pull toward code. Discussions about what something should look like would drift toward how it might be implemented.

The fix was treating CLAUDE.md as a map rather than a dump. The top-level file became a short index pointing to linked documents, and each conversation only loads what’s relevant to it. None of them load all of it.

The reason for the structure wasn’t agents — it was regular prompts drifting in the wrong direction because of rules that had nothing to do with the conversation at hand. Agents benefited from the same approach later, but that came after. It’s the same instinct as not handing a developer every company policy document before asking them to fix a bug — give people what’s relevant to the task, not everything that exists.

Stage four: better briefs, and the proto-epic

Instead of describing what I wanted, I started asking Claude to reflect the requirement back at me — what it understood, what it would change, what it wouldn’t. This caught misunderstandings before they became diffs. It also forced me to think more clearly about what I actually wanted.

This evolved into something more structured: drafting the requirement in a file, iterating until we both agreed on what success looked like. That’s just acceptance criteria — getting shared agreement on what “done” means before any work starts. I wasn’t inventing anything; I was rediscovering why that practice exists. Those files became the basis for the epic documents in the project. It just turned out that “a well-reasoned, scoped description of what to build and why” is exactly what an epic is.

Stage five: a Head of Product agent

The next gap was that I was still the one deciding what to build. I’m the founder (that’s what Claude keeps calling me — I never asked it to), which means I have the usual blind spots — attached to ideas, optimistic about scope, bad at killing the darlings.

I created a Head of Product agent with a specific brief: consistent product thinking, honest challenge, anchored to the user archetype. Not “build what I say” but “is this actually the right thing to build?” The HoP would push back on briefs that were solving the wrong problem, suggest smaller versions of ideas, or flat out tell me something wasn’t worth building yet.

A side effect of those conversations was that decisions needed somewhere to live. Which ideas were worth building, which were parked and why, what order things should happen in — that’s a roadmap, and it emerged from the conversations rather than being written upfront. Now it lives in the project as a document agents read when making prioritisation decisions, rather than reconstructing the logic from scratch every time.

Stage six: visual identity and brand documentation

Every time I worked on a brief that touched the UI or copy, the same questions came up. What’s the tone? What’s the font? Is this on brand? And I was answering them from scratch each time — or worse, answering them slightly differently each time.

The decisions had been made. I knew the typeface, the colour direction, the brand personality. None of it was written down, which meant every brief that touched design or copy was relitigating it.

So I wrote docs/visual-identity.md and docs/product-positioning.md — not to prevent drift in output, but to stop having the same conversations. Written down once, referenced forever. Briefs got shorter and sharper, and the decisions became easier to challenge and update rather than existing as a fuzzy shared understanding that no one could quite articulate.

Stage seven: feature documentation

Once I started being deliberate about what each prompt loaded, it became obvious that the HoP agent had a different problem: not enough context about the app to do its job without going looking for it.

Left to its own devices, it would explore the entire codebase on every task — burning tokens re-discovering things it had found last session. Or it would ask me questions I’d answered before. Or — most frustrating — write briefs full of conditionals: “if the app already has email infrastructure, do X, otherwise do Y.” That’s not a brief, that’s a brief with a question buried in it.

The fix was feature documentation — a clear enough picture of what the app does and how it’s put together that the HoP could answer those questions itself. Does the app send emails? Yes, here’s how. Is there already a notifications system? No. Written down once, the agent stops asking and the briefs become definitive rather than conditional.

This is the same problem that exists on real teams — a product owner who has to ask a developer how something works before writing a sensible brief, or doesn’t ask and hedges with conditionals instead. The agent just makes the cost of not having documentation more visible, because it’ll ask you the same question every single session.

Stage eight: a Head of Engineering agent

By this point the product thinking was solid and the documentation was good, but I still had the checkpoint problem. Agents would get a brief, understand it correctly, then immediately start making changes — including changes I’d have stopped if I’d been asked.

The Head of Engineering agent was the answer. Its job is to turn a brief into an implementation plan before any code is written. The plan gets reviewed. I can push back on the approach, flag something dangerous, or redirect before anything gets changed. Good teams do this as a matter of course: a tech spec or design review gets signed off before anyone writes a line. The HoE is just that process applied to an agent. It’s much easier to say “don’t touch the authentication layer” at the plan stage than to untangle a diff where it got touched anyway.

What this whole thing actually is

What I ended up building is a lightweight version of the organisational infrastructure that already exists in good engineering teams. The documentation is the same documentation you’d write for a new human engineer. The agents are the roles you’d see in a small product team. The review checkpoints are the checkpoints you’d expect in any professional codebase.

None of this was the plan. I started by trying to get Claude to make a small change to a meal planner. The setup emerged from noticing where things went wrong and adding structure to prevent it — a series of informal retrospectives. Something doesn’t work, you figure out why, you add the structure that would have prevented it. Same thing good teams do after every sprint, just without the sticky notes.

Gemini 3.5 Flash, Claude Design, & LLM Source Reliability Insights

Gemini 3.5 Flash, Claude Design, & LLM Source Reliability Insights

Today’s Highlights

Google rolls out Gemini 3.5 Flash for faster, more cost-effective AI applications, while developers demonstrate innovative, budget-friendly multimodal content creation using Claude Design and Eleven Labs. Simultaneously, new reports highlight critical challenges in LLM transparency, as Claude perplexingly cites Iranian state media without explanation, urging heightened scrutiny for commercial AI outputs.

Google just dropped Gemini 3.5 Flash (r/artificial)

Source: https://reddit.com/r/artificial/comments/1thuxcj/google_just_dropped_gemini_35_flash/

Google has officially released Gemini 3.5 Flash, the latest addition to its commercial Gemini family of models, tailored for developers prioritizing speed and cost-efficiency. This ‘Flash’ variant is engineered to deliver a compelling balance between rapid inference, lower computational costs, and robust performance, making it an optimal choice for high-throughput, latency-sensitive AI applications. Such applications include real-time conversational agents, dynamic content summarization, efficient data extraction, and other scenarios where quick responses are paramount. Developers can integrate Gemini 3.5 Flash via Google’s AI API, benefiting from anticipated optimizations in processing speed and reduced per-token pricing compared to its more powerful, but resource-intensive, siblings like Gemini 3.5 Pro. This update signifies Google’s commitment to providing a versatile suite of AI models, enabling developers to build and scale their AI-powered features across a broader range of use cases while maintaining economic viability. The model is also expected to offer enhanced capabilities in handling multimodal inputs, further extending its utility in complex development environments.

Comment: This is big for real-time applications. If 3.5 Flash lives up to its name, it could drastically lower operational costs and latency for many production systems currently using older Gemini models, making advanced AI more accessible for high-volume tasks.

Checkout this Explainer Video, Made in under $1 with Claude Design + Eleven Labs (r/artificial)

Source: https://reddit.com/r/artificial/comments/1thf55q/checkout_this_explainer_video_made_in_under_1/

This story highlights an innovative and highly practical approach to generating explainer videos at minimal cost, leveraging the synergy between commercial AI services: Claude Design for visual animation and Eleven Labs for high-fidelity synthetic speech. The workflow described tackles a common challenge in AI-powered content creation: seamlessly integrating distinct AI outputs. By using Claude Design, developers can create compelling visual narratives or animations, which are then enhanced with natural-sounding voiceovers generated by Eleven Labs’ advanced text-to-speech API. The process demonstrates how to address issues like audio synchronization and narrative flow, making it possible to produce a complete, polished explainer video for less than a dollar. This showcases the immense potential of multimodal AI integrations, offering a blueprint for developers to rapidly prototype and scale video content production without requiring extensive resources or specialized multimedia skills. It underscores how accessible commercial AI APIs are empowering a new generation of content creators and developers to bring their ideas to life efficiently and affordably.

Comment: Love seeing concrete, affordable multimodal examples like this. It’s a great blueprint for developers to integrate commercial AI services for quick content generation, especially bridging visuals and audio, and it’s something anyone can try today.

Claude Is Citing Iranian State Media. It Doesn’t Know Why. (r/artificial)

Source: https://reddit.com/r/artificial/comments/1ti0dhl/claude_is_citing_iranian_state_media_it_doesnt/

A recent report has brought to light a significant operational challenge for Anthropic’s Claude, a leading commercial AI model: its tendency to cite Iranian state media sources in its responses without a clear, self-explainable rationale. This unprompted behavior raises critical questions for developers and enterprises that integrate commercial AI APIs into their products, particularly concerning data provenance, algorithmic transparency, and potential biases inherent in large language model training data. When an AI generates output referencing sources known for state propaganda, it introduces risks related to misinformation and trust. This incident underscores the imperative for developers to implement robust verification layers and source validation mechanisms within their AI-powered applications. It is a stark reminder that even sophisticated commercial LLMs can exhibit emergent, unexplainable behaviors due to their vast and often opaque training datasets, necessitating careful human oversight and post-processing to ensure the accuracy, neutrality, and reliability of AI-generated content, especially in sensitive or critical domains like news summarization or geopolitical analysis.

Comment: This is a crucial reminder for anyone building with large language models. Always validate sources and be aware that even advanced commercial models can exhibit opaque, problematic behaviors due to their training data, impacting reliability and trust.

Local LLMs: Bytedance Lance 3B Multimodal, llama.cpp MTP, Ollama Client

Local LLMs: Bytedance Lance 3B Multimodal, llama.cpp MTP, Ollama Client

Today’s Highlights

This week, Bytedance unveiled Lance, a 3B parameter open-source multimodal model accessible for consumer GPUs, alongside significant Multi-Threaded Pipelining improvements in llama.cpp boosting local inference speeds. Additionally, the new Horizon Flutter chat client offers multi-platform access for Ollama and other local/cloud AI models, simplifying self-hosted deployment.

Bytedance Releases Open-Source Lance 3B Multimodal Model (r/LocalLLaMA)

Source: https://reddit.com/r/LocalLLaMA/comments/1thkwgk/bytedance_released_an_open_source_model_that/

Bytedance has introduced Lance, a new open-source, lightweight native unified multimodal model boasting only 3 billion parameters. This model is designed to perform a wide array of tasks involving both image and text, making it a versatile option for developers. The low parameter count is a significant advantage, allowing Lance to be potentially run on consumer-grade GPUs, democratizing access to powerful multimodal AI capabilities.

Lance’s focus on a “unified multimodal” architecture means it can process and generate content across different modalities seamlessly, aiming to overcome the limitations of models specialized in only one domain. The release provides a direct link to its Hugging Face repository (https://huggingface.co/bytedance-research/Lance), enabling developers to immediately experiment with the model, integrate it into their projects, or fine-tune it for specific applications. This aligns perfectly with the trend of making advanced AI models accessible for local inference and self-hosted deployments.

Comment: A 3B parameter multimodal model is exciting, as it could open up on-device AI applications for many without needing specialized hardware. The “unified” aspect suggests a truly integrated multimodal capability.

llama.cpp Receives Multi-Threaded Pipelining (MTP) Performance Boost (r/LocalLLaMA)

Source: https://reddit.com/r/LocalLLaMA/comments/1thlmsx/time_to_update_llamacpp_to_get_som_mtp/

A recent update for llama.cpp, the popular C/C++ inference engine for LLaMA and other large language models, introduces significant Multi-Threaded Pipelining (MTP) improvements. This enhancement is crucial for optimizing performance, especially on consumer hardware, by allowing different stages of the inference process to run concurrently across multiple threads. Such optimizations are key for achieving faster token generation rates and lower latency during local LLM inference.

The improvements, detailed in a GitHub pull request (https://github.com/ggml-org/llama.cpp/pull/23269), directly address the need for more efficient resource utilization. For users running llama.cpp on their local machines, this translates to a tangible speed-up in model responsiveness and overall user experience. Maintaining and accelerating core tools like llama.cpp is vital for advancing the local AI ecosystem, making larger and more complex models practical to run outside of cloud environments.

Comment: Any performance boost in llama.cpp is always welcome for local inference enthusiasts. MTP improvements are specifically good for leveraging multi-core CPUs and potentially reducing latency.

Horizon Flutter Client Integrates Ollama for Local & Cloud AI Chat (r/Ollama)

Source: https://reddit.com/r/ollama/comments/1thyy0o/horizon_multiprovider_flutter_chat_client_ollama/

Horizon is a new open-source, multi-provider Flutter chat client designed to work seamlessly with both local and cloud-based AI models, with strong support for Ollama. This cross-platform application extends AI chat capabilities to a wide range of devices, including Android, macOS, Windows, and Linux (.deb / tar.gz), providing a unified interface for interacting with various LLMs. Its multi-provider nature means users can switch between local Ollama models, Claude, OpenAI, and Gemini, offering flexibility in choosing their preferred inference source.

The client allows users to leverage the power of local inference via Ollama, making it an excellent tool for those focused on privacy, cost-efficiency, or simply running open-weight models on their self-hosted setups. By providing a ready-to-use GUI for local models, Horizon simplifies the deployment and interaction experience for everyday users, bypassing the need for complex command-line operations. This development enhances the self-hosted AI ecosystem by offering a practical and accessible way to manage and utilize diverse AI models locally.

Comment: A multi-platform client that integrates Ollama is highly practical for anyone looking for a user-friendly interface for their local LLMs. The ability to switch between local and cloud providers in one app is a big plus.

GitHub Wasn’t Hacked, But Your CI/CD Pipeline Might Be: Lessons from Grafana, CISA, and Shai-Hulud 2.0

GitHub Pipeline Security — Header

GitHub Pipeline Security — Header

GitHub wasn’t hacked on May 19, 2026. GitHub.com is fully operational, all metrics green. But within the same news cycle, three incidents converged — and they all share the same wound: tokens, credentials, and secrets abandoned in CI/CD pipelines.

Grafana Labs lost its entire codebase. CISA, the United States’ own cybersecurity agency, exposed plaintext passwords and cloud keys in a public repository. And Shai-Hulud 2.0, a worm that began in November 2025, has now infected over 30,000 repositories and stolen more than 500 GitHub credentials.

Three stories. One pattern. The enemy isn’t breaking down the door — they’re using the keys we left under the doormat.

1. Grafana Labs — How a GitHub Actions Token Surrendered the Entire Codebase

What Happened

Grafana Labs, the company behind the popular open-source observability stack, disclosed on May 16 that an attacker gained access to their GitHub environment and downloaded their entire private codebase. The extortion group CoinbaseCartel — an offshoot of ShinyHunters, Scattered Spider, and LAPSUS$ — claimed responsibility and demanded ransom. Grafana refused to pay.

How They Got In

The attack vector was surgical. No password cracking, no phishing. The attackers exploited a known vulnerability called “Pwn Request” in GitHub Actions:

  1. They found a workflow using pull_request_target that was misconfigured. This GitHub Actions event runs in the context of the base repository — not the fork — and has access to the original repository’s secrets. If not properly sanitized, anyone can fork the repo, modify the workflow, and execute arbitrary code with privileged permissions.

  2. They forked a public Grafana repository and modified the workflow to inject a curl command that exfiltrated environment variables to a file, encrypting it with the attacker’s private key.

  3. The environment variables contained the privileged token. A GitHub access token that could clone private repositories. Once obtained, the attackers replicated the attack against four additional internal repositories and downloaded the entire codebase.

  4. Covered their tracks. The fork was deleted immediately after the attack.

How They Caught It

Grafana had deployed canary tokens — decoys that, when accessed, trigger an automatic alert to the security team. One of those tokens fired during exfiltration, enabling rapid containment.

What Grafana Did Right

  • Immediately invalidated compromised credentials.
  • Removed the vulnerable GitHub Action.
  • Disabled all workflows in public repositories.
  • Was transparent: communicated the incident via an X thread within 48 hours.
  • Followed FBI guidance: refused to pay ransom.

2. CISA — The U.S. Cybersecurity Agency Exposed Its Own Keys

The irony borders on literary. The Cybersecurity and Infrastructure Security Agency (CISA), responsible for protecting the U.S. federal government’s digital infrastructure, exposed plaintext credentials in a public GitHub repository.

What Happened

A CISA contractor uploaded spreadsheets containing passwords, AWS GovCloud keys, access tokens, and other secrets to a publicly accessible repository. Security researcher Guillaume Valadon of GitGuardian found them before any attacker did. He tested some keys — and they were valid. They had access to CISA and Department of Homeland Security systems.

Valadon reported the finding to journalist Brian Krebs because the CISA contractor did not respond to GitGuardian’s alerts.

What It Reveals

This was not a sophisticated attack. It was basic operational negligence: credentials in unprotected files, in a repository without access controls, maintained by an external contractor without oversight. CISA — the agency that issues cybersecurity guidance for the entire federal government — violated its own first rule.

CISA stated there is “no indication that any sensitive data was compromised.” But the fact that the keys were still valid when Valadon found them means the exposure window was real.

3. Shai-Hulud 2.0 — The Silent Worm That Infected 30,000 Repos

What Happened

Shai-Hulud 2.0 is a supply chain malware campaign that began in November 2025 and remains active. As of May 2026, Wiz Research tracks:

  • 30,000+ compromised repositories
  • 500+ exposed GitHub credentials
  • 60% of stolen npm tokens still valid
  • Malicious packages published under victims’ legitimate accounts

How It Works

The worm spread through malicious npm packages — notably @postman/[email protected] and @asyncapi/[email protected]. Once installed on a CI/CD runner (primarily GitHub Actions), the malware:

  1. Scans the environment for GitHub tokens, npm tokens, and cloud credentials.
  2. Uses TruffleHog to extract secrets from files.
  3. Automatically creates public repositories under the victim’s account, filled with stolen data.
  4. Replicates using one victim’s tokens to infect under another’s identity — what Wiz calls “cross-victim exfiltration.” This makes tracing the origin extremely difficult.

77% of infections occurred on CI/CD runners, not developer machines. Automated environments are the target because they have access to secrets.

The Pattern: Your CI/CD Pipeline Is Your New Security Perimeter

Let’s put the three incidents side by side:

Incident Attack Vector What Was Exposed Who Detected It
Grafana Labs Unsanitized pull_request_target in GitHub Actions GitHub token with access to private codebase Internal canary token
CISA Unprotected spreadsheet in public repo Passwords, AWS GovCloud keys, DHS tokens GitGuardian (external researcher)
Shai-Hulud 2.0 Malicious npm package executing in CI/CD 500+ GitHub credentials, npm tokens, cloud keys Wiz Research

Three different vectors. The same root vulnerability: the CI/CD pipeline has access to production secrets and almost nobody audits it with the same rigor they audit production code.

The pipeline is the new perimeter. And in most organizations, it’s wide open.

Checklist: Is Your Pipeline Exposed?

Audit your repositories and GitHub Actions workflows with these questions. If the answer to any is “I don’t know” or “no,” you have a risk to address:

  1. Do you use pull_request_target in public workflows? If yes, is every step explicitly sanitized to prevent executing code from the fork? If you can’t answer with certainty, disable it until you’ve audited it.

  2. Do your public workflows have access to secrets? Workflows in public repositories should never have access to tokens that can clone private repos, publish packages, or modify infrastructure. Use separate environments with manual approval gates.

  3. Do you rotate CI/CD secrets periodically? A token that doesn’t rotate is a master key with no expiration date. If a token leaked six months ago, the fact that nothing happened doesn’t mean it’s safe — it means the attacker hasn’t used it yet.

  4. Do you have secret detection across all repositories? GitGuardian, TruffleHog, GitHub Secret Scanning — use at least one. But don’t just scan source code: scan issues, wikis, pull requests, and GitHub Actions logs. Secrets show up where you least expect them.

  5. Have you implemented canary tokens? The Grafana lesson: canary tokens turn a silent theft into immediate detection. They’re cheap to deploy and have zero false positives — if one fires, it’s real.

  6. Do you review workflow dependencies? Every third-party action you use in your pipeline (actions/checkout, docker/login-action, etc.) is an attack surface. Pin them to a specific commit hash, not a branch or mutable tag.

  7. Are CI/CD runners isolated from production? A CI runner should not have network access to your production databases, Kubernetes clusters, or internal APIs. If the runner gets compromised, the blast radius should be contained.

  8. Do you know what tokens every external collaborator has? Contractors, freelancers, and external agencies are an underestimated risk vector. CISA learned this the hard way. Audit every external collaborator’s permissions on your repositories.

How Guayoyo Tech Can Help

At Guayoyo Tech, we’re not a traditional cybersecurity company — and that’s exactly the point. We won’t sell you a $15,000/month SOC. We help you with what you actually need: hardening your development pipelines without paralyzing your team.

GitHub Actions & CI/CD Security Audit

  • We review all your public and private workflows.
  • We identify excessive permissions, mismanaged secrets, and attack surfaces like unsanitized pull_request_target.
  • We deliver an executive report with prioritized actions — not a 200-page PDF, but what you need to fix tomorrow.

Continuous Secret Detection

  • We configure GitGuardian, GitHub Secret Scanning, or TruffleHog across your repositories.
  • We automate alerts so an exposed secret doesn’t survive more than minutes.
  • We integrate detection into your pipeline: if a commit contains a credential, the build fails.

Canary Tokens & Integrity Monitoring

  • We deploy canary tokens across your repositories and CI/CD environments.
  • We configure automatic alerts when a decoy token is accessed.
  • We monitor anomalous activity in your workflows: executions from unauthorized forks, environment variable changes, off-hours access.

Automated Secret Rotation

  • We implement periodic rotation of GitHub, npm, Docker Hub, and cloud provider tokens.
  • We integrate with HashiCorp Vault or GitHub Secrets Manager so no secret lives longer than 90 days.

You don’t need to be Grafana for this to happen to you. You just need one misplaced token in the wrong place.

The difference between Grafana and most organizations isn’t that Grafana was more vulnerable — it’s that they had canary tokens and caught it. Most companies don’t find out until their code is already on an extortion forum.

At Guayoyo Tech, we audit CI/CD pipelines and harden development environments. No fear-mongering. Real prevention.

Book a free discovery call. We’ll review your GitHub Actions workflows and tell you exactly what to fix, no commitment.

GitHub No Fue Hackeado, Pero Tu Pipeline Sí Podría Serlo: Lo Que Revelan Grafana, CISA y Shai-Hulud 2.0

GitHub Pipeline Seguridad — Header

GitHub Pipeline Seguridad — Header

El 19 de mayo de 2026 no hackearon GitHub. github.com está operativo, todas sus métricas en verde. Pero en el mismo ciclo de noticias coincidieron tres incidentes que comparten una herida idéntica: tokens, credenciales y secretos abandonados en pipelines de CI/CD.

Grafana Labs perdió su codebase completo. CISA, la agencia de ciberseguridad de Estados Unidos, expuso contraseñas y llaves de nube en texto plano en un repo público. Y Shai-Hulud 2.0, un gusano que empezó en noviembre de 2025, ya infectó más de 30,000 repositorios y robó más de 500 credenciales de GitHub.

Tres historias. Un mismo patrón. El enemigo no está rompiendo la puerta. Está usando las llaves que dejamos en el felpudo.

1. Grafana Labs — Cómo un Token de GitHub Actions Entregó Todo el Codebase

Lo que pasó

Grafana Labs, la empresa detrás del popular stack de observabilidad open-source, reveló el 16 de mayo que un atacante obtuvo acceso a su entorno de GitHub y descargó su codebase privado completo. El grupo de extorsión CoinbaseCartel — un offshoot de ShinyHunters, Scattered Spider y LAPSUS$ — se adjudicó el ataque y exigió un rescate. Grafana se negó a pagar.

Cómo entraron

El vector fue quirúrgico. Los atacantes no reventaron contraseñas ni hicieron phishing. Explotaron una vulnerabilidad conocida como “Pwn Request” en GitHub Actions:

  1. Encontraron un workflow con pull_request_target mal configurado. Este evento de GitHub Actions se ejecuta en el contexto del repositorio base — no del fork — y tiene acceso a secretos del repositorio original. Si no está sanitizado, cualquier persona puede hacer un fork, modificar el workflow y ejecutar código arbitrario con permisos privilegiados.

  2. Hicieron fork de un repo público de Grafana y modificaron el workflow para inyectar un comando curl que exfiltraba variables de entorno a un archivo, cifrándolo con una clave privada del atacante.

  3. Las variables de entorno contenían el token privilegiado. Un token de acceso a GitHub que permitía clonar repositorios privados. Una vez obtenido, replicaron el ataque contra otros cuatro repositorios internos y descargaron todo el codebase.

  4. Borrado de huellas. Eliminaron el fork inmediatamente después del ataque.

Cómo lo detectaron

Grafana tenía canary tokens desplegados — señuelos que, al ser utilizados, disparan una alerta automática al equipo de seguridad. Uno de esos tokens se activó durante la exfiltración, y eso permitió contener el incidente rápidamente.

Lo que Grafana hizo bien

  • Invalidó las credenciales comprometidas de inmediato.
  • Eliminó el GitHub Action vulnerable.
  • Deshabilitó todos los workflows en repositorios públicos.
  • Fue transparente: comunicó el incidente en un hilo de X en menos de 48 horas.
  • Siguió la guía del FBI: no pagó rescate.

2. CISA — La Agencia de Ciberseguridad de EEUU Expuso Sus Propias Llaves

La ironía es casi literaria. La Cybersecurity and Infrastructure Security Agency (CISA), responsable de proteger la infraestructura digital del gobierno estadounidense, expuso credenciales en texto plano en un repositorio público de GitHub.

Lo que pasó

Un contratista de CISA subió spreadsheets con contraseñas, llaves de AWS GovCloud, tokens de acceso y otros secretos a un repositorio accesible públicamente. El investigador Guillaume Valadon, de GitGuardian, los encontró antes que cualquier atacante. Probó algunas llaves — y eran válidas. Tenían acceso a sistemas de CISA y del Department of Homeland Security.

Valadon reportó el hallazgo al periodista Brian Krebs porque el contratista de CISA no respondió a las alertas de GitGuardian.

Lo que revela

Esto no fue un ataque sofisticado. Fue negligencia operativa básica: credenciales en archivos sin protección, en un repo sin controles de acceso, mantenido por un contratista externo sin supervisión. CISA — que emite guías de ciberseguridad para todo el gobierno federal — violó su propia primera regla.

CISA declaró que “no hay indicios de que datos sensibles hayan sido comprometidos.” Pero el hecho de que las llaves estuvieran válidas cuando Valadon las encontró significa que la ventana de exposición fue real.

3. Shai-Hulud 2.0 — El Gusano Silencioso que Infectó 30,000 Repos

Lo que pasó

Shai-Hulud 2.0 es una campaña de malware de supply chain que comenzó en noviembre de 2025 y sigue activa. A mayo de 2026, Wiz Research rastrea:

  • 30,000+ repositorios comprometidos
  • 500+ credenciales de GitHub expuestas
  • 60% de tokens npm robados aún válidos
  • Paquetes maliciosos publicados bajo las cuentas legítimas de las víctimas

Cómo funciona

El gusano se propagó a través de paquetes npm maliciosos — especialmente @postman/[email protected] y @asyncapi/[email protected]. Una vez instalado en un runner de CI/CD (principalmente GitHub Actions), el malware:

  1. Escanea el entorno en busca de tokens de GitHub, npm, y credenciales cloud.
  2. Usa TruffleHog para extraer secretos de archivos.
  3. Crea repositorios públicos automáticamente bajo la cuenta de la víctima, llenos con datos robados.
  4. Se replica usando tokens de una víctima para infectar bajo la identidad de otra — lo que Wiz llama “cross-victim exfiltration”. Esto hace que rastrear el origen sea extremadamente difícil.

El 77% de las infecciones ocurrieron en runners de CI/CD, no en máquinas de desarrolladores. Los entornos automatizados son el blanco porque son los que tienen acceso a secretos.

El Patrón: Tu Pipeline de CI/CD Es Tu Nuevo Perímetro de Seguridad

Pongamos los tres incidentes en perspectiva:

Incidente Vector de ataque Qué se expuso Quién lo detectó
Grafana Labs pull_request_target sin sanitizar en GitHub Actions Token de GitHub con acceso a codebase privado Canary token interno
CISA Spreadsheet con credenciales en repo público sin controles Passwords, llaves AWS GovCloud, tokens DHS GitGuardian (investigador externo)
Shai-Hulud 2.0 Paquete npm malicioso ejecutándose en CI/CD 500+ credenciales GitHub, tokens npm, llaves cloud Wiz Research

Tres vectores distintos. La misma vulnerabilidad raíz: el pipeline de CI/CD tiene acceso a secretos de producción y casi nadie lo está auditando con la misma disciplina que audita el código que corre en producción.

El pipeline es el nuevo perímetro. Y en la mayoría de las empresas, está desprotegido.

Checklist: ¿Está Expuesto Tu Pipeline?

Audita tus repositorios y workflows de GitHub Actions con estas preguntas. Si la respuesta a cualquiera es “no sé” o “no”, hay un riesgo que atender:

  1. ¿Usas pull_request_target en workflows públicos? Si la respuesta es sí, ¿está cada paso explícitamente sanitizado para no ejecutar código del fork? Si no puedes responder con certeza, deshabilítalo hasta auditarlo.

  2. ¿Tus workflows públicos tienen acceso a secretos? Los workflows en repos públicos jamás deberían tener acceso a tokens que puedan clonar repos privados, publicar paquetes o modificar infraestructura. Usa ambientes separados con aprobación manual.

  3. ¿Rotas tus secretos de CI/CD periódicamente? Un token que no rota es una llave maestra sin fecha de vencimiento. Si un token se filtró hace 6 meses, el hecho de que no haya pasado nada no significa que esté seguro — significa que el atacante no lo ha usado aún.

  4. ¿Tienes detección de secretos en todos tus repos? GitGuardian, TruffleHog, GitHub Secret Scanning — usa al menos uno. Pero no solo escanees código fuente: escanea también issues, wikis, pull requests y GitHub Actions logs. Los secretos aparecen donde menos lo esperas.

  5. ¿Has implementado canary tokens? La lección de Grafana: los canary tokens convierten un robo silencioso en una detección inmediata. Son baratos de implementar y no tienen falsos positivos — si se disparan, es real.

  6. ¿Revisas las dependencias de tus workflows? Cada acción de terceros que usas en tu pipeline (actions/checkout, docker/login-action, etc.) es una superficie de ataque. Pinealas a un commit específico, no a una rama o tag mutable.

  7. ¿Tus runners de CI/CD están aislados de producción? Un runner de CI no debería tener acceso de red a tus bases de datos de producción, clusters de Kubernetes o APIs internas. Si el runner se compromete, el daño debe estar contenido.

  8. ¿Sabes qué tokens tiene cada colaborador externo? Los contratistas, freelancers y agencias externas son un vector de riesgo subestimado. CISA lo aprendió por las malas. Audita los permisos de cada colaborador externo con acceso a tus repos.

Cómo Guayoyo Tech Puede Ayudarte

En Guayoyo Tech no somos una empresa de ciberseguridad tradicional — y ese es justamente el punto. No te vendemos un SOC de $15,000 al mes. Te ayudamos con lo que realmente necesitas: blindar tus pipelines de desarrollo sin paralizar tu equipo.

Auditoría de Seguridad de GitHub Actions y CI/CD

  • Revisamos todos tus workflows públicos y privados.
  • Identificamos permisos excesivos, secretos mal gestionados y superficies de ataque como pull_request_target sin sanitizar.
  • Entregamos un informe ejecutivo con acciones priorizadas — no un PDF de 200 páginas, sino lo que tienes que arreglar mañana.

Implementación de Detección Continua de Secretos

  • Configuramos GitGuardian, GitHub Secret Scanning o TruffleHog en tus repos.
  • Automatizamos alertas para que un secreto expuesto no sobreviva más de minutos.
  • Integramos la detección en tu pipeline: si un commit contiene una credencial, el build falla.

Canary Tokens y Monitoreo de Integridad

  • Desplegamos canary tokens en tus repositorios y entornos de CI/CD.
  • Configuramos alertas automáticas cuando un token señuelo es accedido.
  • Monitoreamos actividad anómala en tus workflows: ejecuciones desde forks no autorizados, cambios en variables de entorno, accesos fuera de horario.

Rotación Automatizada de Secretos

  • Implementamos rotación periódica de tokens de GitHub, npm, Docker Hub y cloud providers.
  • Integramos con HashiCorp Vault o GitHub Secrets Manager para que ningún secreto viva más de 90 días.

No necesitas ser Grafana para que te pase. Solo necesitas un token mal puesto en el lugar equivocado.

La diferencia entre Grafana y la mayoría de las empresas no es que ellos fueran más vulnerables — es que ellos tenían canary tokens y pudieron detectarlo. La mayoría de las empresas no se enteran hasta que el código ya está en un foro de extorsión.

En Guayoyo Tech auditamos pipelines de CI/CD y blindamos entornos de desarrollo. Sin vender miedo. Vendiendo prevención real.

Agenda una llamada de exploración gratuita. Revisamos tus workflows de GitHub Actions y te decimos exactamente qué arreglar, sin compromiso.