Skip to main content
Pulp
  • Company
Access Demo
    • human interfaces
    • critical decisions
    • persona engine
    • machine health
    • data storytelling
    • persuasive intelligence
    • workforce optimization
    • custom ai/ml
    • policy & governance
    • marketing & media
    • consulting & management
    • finance & markets
    • public engagement
    • thinkwell™ workstation
    • thinkwell™ plugin
    • pulp™ api
  • Company
Access Demo

Overview

  • Introduction
  • Getting started

Guides

  • From draft to decision
  • Score a Reddit thread
  • Ground a claim in evidence
  • Simulate an audience
  • AI Debate Tournament

SDKs

  • Server-Side SDK
    • Radiance
      • RootWords
        • Docs
        • Sections
        • Paras
        • Sentences
        • Clauses
        • Claims
        • Phrases
        • Named Entities
        • Words
        • Characters
        • Special Characters
        • Special Patterns
      • RootCause
      • StemReferences
      • AdCanopy
    • Windfall
      • TrueAura
        • Demographics
        • Psychographics
        • Mindstate
        • Environment
        • Memory
        • Vision
      • NectarRewards
      • PoisonIvy
      • GrapeVine
    • Groundwater
      • WebSoil
      • DomainCrust
      • CodeMantle
      • ServerCore
  • Web SDK
    • loosethreads UI/UX
      • WarpDisplays
      • WeftConversations
      • DyeMedia
      • BightInteractions
      • Component Library
        • Sandbox
          • Cards & panels
            • Expandable card
            • Debug panel
          • Text effects
            • Morphing text
            • Video text
          • Device & browser frames
            • Safari frame
            • iPhone frame
            • Android frame
          • Canvas & 3D
            • Crowd canvas
            • Interactive robot
          • Data & visualization
            • Location map
            • Leaderboard
            • Structured Discussion Bracket
          • Controls & inputs
            • Region Selector
          • Scroll effects
            • Scroll-stack cards
            • Perspective scroll showcase
            • Scroll Scrubber
        • Production

Reference

  • References catalogSoon
  • Conventions
  • PricingSoon
  • Status and roadmapSoon
Introduction
Getting started
$pip install pulp-sdk
From draft to decision
Score a Reddit thread
Ground a claim in evidence
Simulate an audience
AI Debate Tournament
Server-Side SDK
Radiance
RootWords
Docs
📄sample.txt2 paras · 160 chars
Sections
§1 Introduction
Paras
¶1: first paragraph block
¶2: second paragraph block
Sentences
S1S2S3S4
Clauses
C1C2C3C4C5C6
Claims
Claim 1Claim 2Claim 3
Phrases
NPVPNPVPPPNP
Named Entities
Pulp [ORG]
Words
ifwewaitforcertaintywewillbe+20 more
Characters
0 → 159
Special Characters
spaces × 27punct × 8nbsp × 0
Special Patterns
0 patterns detected
RootCause
Ethos
—
Pathos
—
Logos
—
Kairos
—
Style
—
Clarity
—
Focus
—
Awareness
—
Persuasive Velocity—
StemReferences
CensusFECCongressFed. Reg.RegulationsLegiScanGovInfoGDELTCivicWikimediaData.govPodcast Idx
AdCanopy
rank
Windfall
TrueAura
Demographics
life_stageyoung_adult
education_levelbachelors
locationurban
occupationtech
Psychographics
Impelling
Compelling
Repelling
Mindstate
alpha 10 Hzcalm
Environment
vision onhearing onsmell offtouch offtaste off
Memory
purchases 12content 48brands 5
Vision
motivationdesirefear
NectarRewards
define
PoisonIvy
apply
GrapeVine
post
Groundwater
WebSoil
heatmap
DomainCrust
price
CodeMantle
trace
ServerCore
uptimeresize
Web SDK
loosethreads UI/UX
WarpDisplays
📄q3-report.pdf
🖼chart.png
▶keynote.mp4
WeftConversations
ThreadsChatInlineSide panels
DyeMedia
TextToday
ImageToday
SoundSoon
VideoSoon
BightInteractions
MouseKeyboardVoice · soonCombos · soon
Component Library
Sandbox
Cards & panels
Expandable card
Debug panel
Text effects
Morphing text
Video text
Device & browser frames
Safari frame
iPhone frame
Android frame
Canvas & 3D
Crowd canvas
Interactive robot
Data & visualization
Location map
Leaderboard
Structured Discussion Bracket
Controls & inputs
Region Selector
Scroll effects
Scroll-stack cards
Perspective scroll showcase
Scroll Scrubber
Production
Coming soon
Conventions
  1. Web SDK
  2. loosethreads UI/UX
  3. Component Library
  4. Sandbox
  5. Cards & panels
  6. Debug panel

Debug panel

A live readout of your app's runtime state, printed as a JSON object that updates the moment values change. Move your cursor, click, or press a key to watch it react.

Overview

The debug panel is a live, JSON-shaped readout of runtime values. Pass it the pieces of state you want to watch and it prints each on its own key: value; line inside braces, updating in real time as the values change. It is built for demos, walkthroughs, and development, where seeing reactive state move is the point.

Coordinate props are Framer Motion MotionValues rather than plain numbers: the panel subscribes to them directly, so high-frequency updates like cursor position stream to the DOM without re-rendering React on every move.

Installation

Import the pattern from loosethreads:

tsx
import { DebugPanel } from "@pulp/loosethreads/patterns"

Usage

Wire each prop to the value you want to inspect. Numeric and string values can come straight from state; cursor coordinates use a MotionValue so the readout stays smooth:

tsx
import { DebugPanel } from "@pulp/loosethreads/patterns"
import { useMotionValue } from "framer-motion"
import { useState } from "react"

function CursorReadout() {
  const mouseX = useMotionValue(0)
  const mouseY = useMotionValue(0)
  const [count, setCount] = useState(0)

  return (
    <div
      onMouseMove={(e) => {
        mouseX.set(e.clientX)
        mouseY.set(e.clientY)
      }}
      onClick={() => setCount((c) => c + 1)}
    >
      <DebugPanel count={count} mouseX={mouseX} mouseY={mouseY} keyPressed="" />
    </div>
  )
}

Props

PropTypeDefaultDescription
countnumberRequiredNumeric value shown on the count row. Typically bound to component state.
mouseXMotionValue<number>RequiredLive horizontal cursor coordinate. A Framer Motion value, so updates bypass React re-renders and stream straight to the DOM.
mouseYMotionValue<number>RequiredLive vertical cursor coordinate. Same treatment as mouseX.
keyPressedstringRequiredThe most recently pressed key. Pass an empty string when nothing has been pressed yet.

Anatomy

The panel renders a single object literal. Each prop becomes one line: a periwinkle key, a muted separator, the current value, and a trailing semicolon. String and number values print as text; a MotionValue renders through a motion.span so it can update without a React render pass.

Mixing motion packages breaks live values. A MotionValue from one package will not render inside a motion element from another. Import both from the same framer-motion entry point.

Accessibility

  • Labels. Key and separator text sits at the WCAG AA alpha floor so every line clears 4.5:1 on the dark surface.
  • Motion. Nothing auto-plays. Updates are driven by user input (cursor, click, keypress), so there is no ambient animation to gate behind prefers-reduced-motion.

Next: Morphing text. Back to Cards & panels.

{
count: 0;
mouseX: 0;
mouseY: 0;
keyPressed: ;
}
Click, move the cursor, or press a key