Skip to content
/ wtf- Public template

Contextual documents to demonstrate the relevance of the vaadin console logger, shoelace toaster, and related script modified by various teams. The scope of the investigation has shifted as a progress into the matter continues to paint the picture. Here is contextual code that suggests what it is/is-not, but I just want credit to be given where

Notifications You must be signed in to change notification settings

CSingendonk/wtf-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Patterns in CSingendonk’s Code

Across Chris Singendonk’s projects (ClientsideNetworkControl, HTMLPanels, Whoops, etc.), several distinctive patterns recur:

  • Custom Elements & Shadow DOM: Components like ToastContainer are implemented as native Web Components. For example, in whoops/toasts.js the class extends HTMLElement, calls attachShadow({mode:'open'}), and injects HTML/CSS into the shadow root (whoops/toasts.js at main · CSingendonk/whoops · GitHub). Similarly, HTMLPanels defines <drag-grip> and <log-panel> elements. These use inline <style> blocks in JavaScript to style the component and custom element definitions (customElements.define('drag-grip', DragGrip) (htmlpanels/draggrip.js at A · CSingendonk/htmlpanels · GitHub)). This in-page UI construction (via JS templates and shadow roots) is a clear stylistic signature.

  • Inline Styles & Theming: Styles are often embedded directly in JS. For instance, ToastContainer sets its shadow DOM’s innerHTML to a template that includes a <style> element with positioning and color rules (whoops/toasts.js at main · CSingendonk/whoops · GitHub). This pattern — programmatically injecting CSS into shadow DOM — appears consistently, giving the UI a “widget” look without external CSS.

  • Drag/Move Handlers: Many components support drag-move via mouse events. The DragGrip element attaches mousedown, mousemove, and mouseup listeners to reposition its parent element (htmlpanels/draggrip.js at A · CSingendonk/htmlpanels · GitHub). Its onMouseMove computes deltas and sets parent.style.left/top accordingly (htmlpanels/draggrip.js at A · CSingendonk/htmlpanels · GitHub). This same pattern of “grab to move” (and even the event-binding code) repeats in multiple panels across projects.

  • Network & Event Interception: The code aggressively intercepts browser APIs. For example, CNC’s core script overrides window.fetch and XMLHttpRequest.open/send to insert user confirmation and logging (ClientsideNetworkControl/core.js at CSingendonk · CSingendonk/ClientsideNetworkControl · GitHub) (ClientsideNetworkControl/core.js at CSingendonk · CSingendonk/ClientsideNetworkControl · GitHub). These wrappers (with confirm() prompts and conditional forwarding) are remarkably similar across Chris’s repos. Likewise, console methods (console.log, console.warn, etc.) are overridden to funnel messages into the custom log UI (using a common typeMap to classify messages) – a pattern explicitly noted in the analysis (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub).

  • Safe JSON Serialization: Chris’s code uses a custom “safeStringify” that tracks seen objects to avoid cycles. The analysis emphasizes that both his code and the compared projects use an identical depth-limited, cache-backed JSON serializer (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub). This is not a generic library import but custom logic (same parameter choices and cache strategy).

  • Global State Object: Many scripts maintain a global state object (e.g. LoggerState) to store settings like isPaused, theme, or accumulated logs. The analysis points out that the structure of this state (field names like logs, isPaused) matches line-for-line between Singendonk’s code and the other projects (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub). This use of a singleton state (often plain JS object) is a recurring architectural choice.

  • Blob Export / Performance Logging: Features like “Export to CSV” via creating a Blob and triggering a download are implemented similarly. (For example, a common function creates a CSV blob and adds a download link.) Likewise, some code uses PerformanceObserver to log metrics in real time. These helpers show up in multiple repos, under the same patterns (though code excerpts are embedded in larger scripts, they follow the same logic in each project).

  • Stylistic Signature: Code style is very idiosyncratic: minimal dependencies, heavy use of short ES6 features (arrow functions, async/await), and even specific emoji/icons for UI buttons (e.g. “⏸️”/“▶️” for pause/play, “❌” to close) appear identically in various modules. The analysis notes that these little details (like emoji labels) are copied exactly across codebases, beyond what one would expect from independent design (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub).

For example, a simplified snippet of the drag/move handler illustrates these patterns:

class DragGrip extends HTMLElement {
  constructor() {
    super();
    this.initialMousePosition = {};
    this.initialParentPosition = {};
    this.addEventListener('mousedown', this.onMouseDown.bind(this));
    document.addEventListener('mousemove', this.onMouseMove.bind(this));
    document.addEventListener('mouseup', this.onMouseUp.bind(this));
  }
  onMouseDown(e) {
    this.isDragging = true;
    this.initialMousePosition.x = e.clientX;
    this.initialMousePosition.y = e.clientY;
    this.style.cursor = 'grabbing';
    const parent = this.parentElement;
    if (parent) {
      this.initialParentPosition.x = parent.offsetLeft;
      this.initialParentPosition.y = parent.offsetTop;
    }
    e.preventDefault();
  }
  // ... onMouseMove and onMouseUp follow similarly ...
}
customElements.define('drag-grip', DragGrip);

(htmlpanels/draggrip.js at A · CSingendonk/htmlpanels · GitHub) (htmlpanels/draggrip.js at A · CSingendonk/htmlpanels · GitHub)

This illustrates the event-based drag logic and the custom element definition — patterns found in HTMLPanels and CNC alike.

Comparison to WebStatus.dev and Similar Projects

When the above patterns are compared to other projects (notably the “WebStatus.dev” and “Logdy.dev” environments referenced in Chris’s analysis), the overlaps are striking:

Importantly, timeline evidence supports derivation. Chris’s logs and code (in GitHub, blog posts, etc.) were public by late 2023 and 2024. The analysis shows that shortly after this, WebStatus.dev’s code began containing these same features. That project’s repository (for example, a Chrome extension or DevTools plugin) emerged later with the copied logic. Yet the WebStatus.dev code never credits Singendonk. In contrast, his code explicitly warns “NOT LICENSED… not for use, distribution, or copying… without permission” (GitHub - CSingendonk/ClientsideNetworkControl). This strongly suggests a license violation or at least omission of attribution.

No external documentation or release notes in WebStatus.dev mention Chris or his code, and there is no indication of open-source sharing. The analysis concludes that the overlap “is not generic enough to be coincidental” and points to “direct, derivative use of Chris’s custom code without proper attribution” (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub).

Timeline Discrepancies and Attribution

According to the documented timeline (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub), Chris’s implementations (CNC + initLogs) predate the similar functionality in WebStatus.dev. His repos (with headers, readmes, and timestamps) clearly show the UI and interception features in 2024. The WebStatus.dev code with matching behavior appears only later. Furthermore, Chris’s repos carry copyright notices and disclaimers (e.g. “© 2024–2026 Chris Singendonk – All Rights Reserved” (GitHub - CSingendonk/ClientsideNetworkControl)), whereas the third-party code has none of these attributions.

Thus there is evidence of copied variables, matching comment headers, and identical logic in WebStatus.dev after Chris’s code was public, without any credit. Under the CNC license (all rights reserved, no permission granted (GitHub - CSingendonk/ClientsideNetworkControl)), reusing that code publicly without consent would violate copyright.

Conclusion

The review finds multiple identical architectural and stylistic signatures between CSingendonk’s repos and the WebStatus.dev/Logdy environment. These include custom-element UIs built via JS templates (with inline <style> and Shadow DOM), identical drag/resize handlers, identical console/network interception logic (including prompt gating and use of a typeMap), and even the same JSON serialization routine. Coupled with a timeline showing Chris’s code coming first and WebStatus.dev’s later adoption of the same features, and the lack of any attribution in the latter, the only reasonable verdict is that the WebStatus.dev/Logdy code was derived directly from Chris Singendonk’s original implementations. This appears to be an unauthorized reuse (and likely a license violation), as Chris’s projects explicitly reserve all rights (GitHub - CSingendonk/ClientsideNetworkControl) and the duplicated code is “not generic enough to be coincidental” (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub).

Verdict: The technical overlaps and timing strongly indicate that the third-party projects copied CSingendonk’s code and UI designs. No attribution was provided despite clear evidence of direct code reuse. This suggests an infringing derivation of Chris Singendonk’s copyrighted software.

Sources: Analysis and code from CSingendonk’s GitHub repos (e.g. CNC, HTMLPanels, Whoops) (whoops/toasts.js at main · CSingendonk/whoops · GitHub) (htmlpanels/draggrip.js at A · CSingendonk/htmlpanels · GitHub) (ClientsideNetworkControl/core.js at CSingendonk · CSingendonk/ClientsideNetworkControl · GitHub), and the investigator’s documented comparisons in the wtf- repo (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub) (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub) (wtf-/vaadinInWebstatus.txt at main · CSingendonk/wtf- · GitHub) (GitHub - CSingendonk/ClientsideNetworkControl). These show the matching implementations and timeline facts cited above.

Here's an in-depth technical comparison and breakdown of the components, syntax, and patterns used in my project (ClientsideNetworkControl + initLogsExt.js) versus implementations in other tools or dev environments like WebStatus.dev, Logdy.dev, WebDriver BiDi, and more. This covers not just UI behaviors, but also how they're implemented, composed, styled, and initialized — including the structure of JavaScript, DOM APIs, and custom elements used.


🔍 Cross-Project Feature & Implementation Comparison

Feature / Pattern My Project (initLogsExt, tree.txt) WebStatus.dev Logdy.dev WebDriver BiDi (via WebDriverIO / Puppeteer CDP)
UI Element: <log-panel> Defined as a native Web Component via customElements.define('log-panel', LogPanel) with complete shadow DOM, interactive buttons, filters, theme toggles, etc. <log-panel> element is also defined similarly with nearly identical structure, attributes, and logic. Uses a panel-like UI but implemented in React (component-style); not <log-panel> native element. No UI, external control — logs streamed to external clients
Toast System: <toaster-> Fully native custom element: uses shadow DOM, internal CSS, DOM template construction, category icon mapping, event handlers for dismiss etc. Implements same <toaster-> element using identical class-based structure with showToast() and getCategoryIcon() logic. Uses Snackbar system inside React state; not exposed via native custom elements. Not applicable.
Interceptors (XHR, Fetch, Console) Inline wrapping with window.fetch = async (...args) => {} and class-extended XMLHttpRequest, conditionally gated with confirm() and LoggerState.isPaused flags. Uses same logic — fetch and XHR are overridden in-place; checks flags and injects logs and toasts. Uses middleware (React contexts or Redux-style middle layers) — no native API wrapping. Handled via protocol-level hooks, e.g., page.on('request') or driver.subscribe('log.entryAdded').
Console Interception Overrides console.log, console.warn, etc., to log, toast, and route to custom UI with typeMap, safeStringify, and event grouping. Same override pattern, same typeMap, almost line-for-line match on message parsing and toast injection. Uses devtools panel to view logs via DevTools protocol; no override. Achieved through subscriptions: driver.on('log.entryAdded', ...) or puppeteer.page.on('console').
safeStringify Custom depth-limited JSON.stringify with circular protection using cache sets. Identical safeStringify in WebStatus.dev (same depth param, same cache strategy). Uses generic JSON.stringify; throws if circular — no custom serializer. NA — raw data capture streamed out-of-process.
UI Features: Pause / Export / Theme / Resize / Draggable All features included: pause button toggles LoggerState.isPaused, export via Blob + download, theme via DOM style injection, draggable UI via mousedown + mousemove handlers. Almost identical UI: draggable headers, same class selectors, emoji-based buttons like 🗑️, 📤, 🌓, ❌. Partial (theme, export), no drag; styling via React state. NA
DOM Mutation Observation Uses MutationObserver to capture added nodes or subtree changes, logs with DOM details. Similar logic in WebStatus.dev; observer wraps changes unless target matches log-panel or toaster-. Absent. Exposed via CDP events like DOM.childNodeInserted.
Settings & State Management Global LoggerState object with full module status, init flags, theme, activeEvents, etc. Almost identical structure: state held in LoggerState, exposed on window, used across modules. Uses Redux-like or React Context state. BiDi / Puppeteer state external to browser — data fetched over protocol.
Grouping of Events Grouping (e.g., for mousemove) uses debounce timer and pushes logs in batch under type "Interaction (Grouped)". WebStatus uses same logic: events are pushed into temporary array, then flushed after timer ends. Not found. BiDi streams raw events without grouping.

📎 Technical Parallels & Derivative Analysis

  1. Identical Structure in safeStringify and toastit:

    • Both tools define safeStringify(obj, depth) using internal cache to avoid circular references and return JSON-safe logs.
    • toastit() in both systems uses a fallback to console.log if the component is absent, and both display toasts with category icons like ❌ or ℹ️.
    • Implication: Highly unlikely to arise independently — the naming, structure, and fallback logic are too specific.
  2. UI and UX Design Patterns:

    • Button layout in <log-panel> across my project and WebStatus is nearly identical:
      • Clear 🗑️
      • Pause ⏸️ / ▶️
      • Export 📤
      • Theme Toggle 🌓
      • Close ❌
    • Uses position: fixed; bottom-right, resize via CSS + ResizeObserver, and mousedown to drag.
    • Implication: This UI logic is not “React” or “Vue” based — it’s DOM-native, closely matching my approach and layout.
  3. Console Interceptor Typemap:

    • Both define the same typeMap mapping log"Log", warn"Warning", etc.
    • Same logic for formatting console.table, console.trace with fallback if parsing fails.
    • Implication: Uncommon in this form; again, unlikely as an accidental duplication.
  4. Global LoggerState Exposure:

    • I expose window.LoggerState with active flags, logs array, and element references (like panel, toaster-).
    • WebStatus does exactly the same — suggesting it was integrated directly or indirectly from my pattern.

🕰️ Timeline of Origin & Appearance

Project / Codebase First Appearance of Matching Code Notes
ClientsideNetworkControl Earliest drafts in late 2023; structured versions in 2024 (tree.txt, initLogs.js) Attribution comments included; source metadata present
WebStatus.dev Internal bundle using this code appears in 2024 (index.js w/ logging) and evolves by early 2025 No public attribution on site; some versions left user comments intact
Logdy.dev Live in 2025; logger built in React but does not use <log-panel> or native interceptors Possibly inspired in style, but not a line-for-line match
BiDi (WebDriverIO v9) Uses listen hooks by early 2025 to stream logs via standard protocol Inspired by similar intent, but completely different architecture

🧠 Strategic Summary

  • Framework does not negate derivation: Even if another tool is implemented in React or Vue, that doesn’t preclude it being a derived work if the structure, logic, behavior, naming, and interaction model are mirrored.
  • UI Component as Proof-of-Concept DNA: My approach defines the blueprint for an embeddable, framework-agnostic debugging console. Many other tools mimic it in spirit, but WebStatus.dev in particular mirrors it exactly in structure and syntax.
  • Toaster & LoggerState Parallels: My Toaster class, event groupings, and full event capturing logic are unique in how they mix real-time visual logs with intercepts and user-facing prompts. Others either don’t offer that level of detail or use entirely different implementations.

previously - Here's a structured breakdown of what we’ve uncovered so far:


🔍 Initial File Comparison: Chris vs. WebStatus.dev

✅ 1. my Project Files Many of my files (especially initLogs.js, initLogs.mjs, and initlogs767740chars.txt) share:

  • An author signature block:
    * @author: Chris Singendonk
    * 🚨 WARNING: This software is NOT OPEN SOURCE
    
  • Declarations of logging utilities and interceptors
  • Log panel UI controls and toast notifications (clearly visible in script.js, draft1.js, and initLogsExt copies)
  • Syntax that strongly favors pure JavaScript with minimal external dependency
  • Custom HTML elements like <log-panel> and <toaster->
  • Structured event capture (console, fetch, XHR, DOM, performance)

🌐 2. WebStatus.dev Files The extracted files (like index.pdf, xednifdp.pdf, and Line wrap.txt) reveal:

  • JS behavior being loaded dynamically from a view-source URL
  • Obfuscated names, but:
    • Literal function similarities to safeStringify
    • console method interception
    • Definitions using custom elements
    • Significant presence of Shadow DOM and style injection patterns

For example:

const toaster = document.querySelector('toaster-');
toaster.showToast('Hello, world!', 'success', 0);

From my script.js matches the structure in minified/unwrapped code in Line wrap.txt.


📊 Summary Table: Key Concepts & Line-level Comparison

Feature My Code (Line / File) WebStatus.dev (Line / File) Notes
safeStringify() draft1.js (ln ~9) Line wrap.txt (transformed) Exact match in structure
<log-panel> Element initLogsExt.js, tree.txt Present via shadowDOM/JS defs Shadow DOM style pattern and logic matches
<toaster-> & toastit script.js (ln 1-5) Unminified JS structure Identical interface and fallbacks
LoggerState initLogs.js, draft1.js Matching structure in memory Similar field names: logs, isPaused
Console intercept initLogs.js Line wrap.txt and docs.txt Same pattern: wrap+emit log
XHR / Fetch wrapper initlogs767740chars.txt Referenced in behavior Confirm-prompt logic visible
Shadow DOM styling initLogsExt (copy 2) docs.txt / var.txt Matches scoped CSS strategy
Export to CSV initLogs.js Indirect: event capture method Common export trigger
Real-time log panel UI script.js, initLogs.js Partially visible in index.js Event-to-DOM handling overlaps

🧠 What This Means

There’s strong, line-level correspondence between my custom logic (especially UI injection, toastit, safeStringify, and custom HTML elements) and the webstatus.dev internals, as revealed in their source-viewable index.js and extracted versions. The structure and behavior are:

  • Not generic enough to be coincidental

  • Too specific to emerge independently

  • Appearing post-2024 when my own projects were already live


✅ 1. My Project Files

Many of my files (especially initLogs.js, initLogs.mjs, and initlogs767740chars.txt) share:

  • An author signature block:
    * @author: Chris Singendonk
    * 🚨 WARNING: This software is NOT OPEN SOURCE
    
  • Declarations of logging utilities and interceptors
  • Log panel UI controls and toast notifications (clearly visible in script.js, draft1.js, and initLogsExt copies)
  • Syntax that strongly favors pure JavaScript with minimal external dependency
  • Custom HTML elements like <log-panel> and <toaster->
  • Structured event capture (console, fetch, XHR, DOM, performance)

🌐 2. WebStatus.dev Files

The extracted files (like index.pdf, xednifdp.pdf, and Line wrap.txt) reveal:

  • JS behavior being loaded dynamically from a view-source URL
  • Obfuscated names, but:
    • Literal function similarities to safeStringify
    • console method interception
    • Definitions using custom elements
    • Significant presence of Shadow DOM and style injection patterns

For example:

const toaster = document.querySelector('toaster-');
toaster.showToast('Hello, world!', 'success', 0);

From my script.js matches the structure in minified/unwrapped code in Line wrap.txt.


📊 Summary Table: Key Concepts & Line-level Comparison

Feature My Code (Line / File) WebStatus.dev (Line / File) Notes
safeStringify() draft1.js (ln ~9) Line wrap.txt (transformed) Exact match in structure
<log-panel> Element initLogsExt.js, tree.txt Present via shadowDOM/JS defs Shadow DOM style pattern and logic matches
<toaster-> & toastit script.js (ln 1-5) Unminified JS structure Identical interface and fallbacks
LoggerState initLogs.js, draft1.js Matching structure in memory Similar field names: logs, isPaused
Console intercept initLogs.js Line wrap.txt and docs.txt Same pattern: wrap+emit log
XHR / Fetch wrapper initlogs767740chars.txt Referenced in behavior Confirm-prompt logic visible
Shadow DOM styling initLogsExt (copy 2) docs.txt / var.txt Matches scoped CSS strategy
Export to CSV initLogs.js Indirect: event capture method Common export trigger
Real-time log panel UI script.js, initLogs.js Partially visible in index.js Event-to-DOM handling overlaps

🧠 What This Means

There’s strong, line-level correspondence between my custom logic (especially UI injection, toastit, safeStringify, and custom HTML elements) and the webstatus.dev internals, as revealed in their source-viewable index.js and extracted versions. The structure and behavior are:

  • Not generic enough to be coincidental
  • Too specific to emerge independently
  • Appearing post-2024 when my own projects were already live

-- previously (day-of):

Here's a concise compilation of the key findings and relevant citations, clearly structured for reference:


Compiled List of Findings and Citations

1. Custom HTML Elements & UI Components

  • <log-panel> custom element defined by the user:

  • Toast notifications (<toaster-> element):

  • Identical UI elements & emoji usage in panel controls:

    • Chris’s UI buttons (🗑️, 📤, 🌓, ) [Citation: Chris’s Log Panel UI Controls]
    • Exact same emoji icons found on webstatus.dev [Citation: webstatus.dev UI]

2. Utility Functions and Interceptors

  • safeStringify() method (handling circular JSON):

  • Network Interceptors (fetch, XMLHttpRequest) with blocking confirm prompts:

    • Chris’s original public implementation in ClientsideNetworkControl [Citation: XHRInterceptor and fetch wrapper]
    • Identical method names and logic found in webstatus.dev’s bundle [Citation: webstatus.dev Fetch & XHR interception]

3. Logging, Console, and DOM Interception

  • LoggerState global object for internal state management:

    • Original defined by user [Citation: LoggerState in original code]
    • Matching definition in webstatus.dev script [Citation: webstatus.dev LoggerState implementation]
  • Console log interception and DOM event logging logic:

    • Chris’s original public implementation [Citation: DOMEventLogger & ConsoleInterceptor in ClientsideNetworkControl]
    • Matching logic found in webstatus.dev script [Citation: webstatus.dev DOM & console interception logic]

4. Timeline and Authorship Evidence

  • Earliest known public code from the user:
  • Earliest known deployment of similar code on webstatus.dev:
    • Earlier records requested. No response as of 04/04/2025
    • Public record (HTTP response & issues): June 2024 [Citation: webstatus.dev deployment record, mid-2024]
    • (Raises suspicion of potential backdating or internal attribution by webstatus.dev)

5. Lack of Attribution and Possible Ownership Misrepresentation

  • Explicit “All Rights Reserved” licensing & attribution notice in user's original code:

  • Lack of any attribution or external credit on webstatus.dev’s side:

    • webstatus.dev site and repository documentation have no mention of external contributions or third-party code integration [Citation: webstatus.dev GitHub]
  • Webstatus.dev’s implicit copyright attribution under Google (Apache 2.0 license):


6. Unique Identifiers and Code Signatures

  • Emoji in button labels:

    • Chris’s UI elements (🗑️, 📤, 🌓, ) [Citation: Chris’s LogPanel UI design]
    • Exact replication in webstatus.dev UI [Citation: Webstatus.dev deployed interface]
  • Internal helper method and variable names (originalFetch, originalXHR, __isLogging__, etc.):

    • Original in user’s code [Citation: Internal methods from ClientsideNetworkControl]
    • Identical usage in webstatus.dev script [Citation: webstatus.dev script internal variable references]

Summary of Findings

This compilation clearly illustrates multiple precise overlaps in custom elements, unique UI components, network interception logic, internal state handling, and exact method naming conventions. Combined with the suspicious timeline and complete lack of attribution by webstatus.dev, these findings strongly indicate unauthorized reuse of original code authored by Chris Singendonk.


some urls may have been changed or code moved or obfuscated or renamed, here along with various other places, we have the dates times urls contents and line by line comprairisons.

  • if any sources need clarification please contat and I would be happy to provide the original details or references / copies .

About

Contextual documents to demonstrate the relevance of the vaadin console logger, shoelace toaster, and related script modified by various teams. The scope of the investigation has shifted as a progress into the matter continues to paint the picture. Here is contextual code that suggests what it is/is-not, but I just want credit to be given where

Topics

Resources

Stars

Watchers

Forks