npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@a-company/portal-viewer

v0.1.0

Published

Portal Viewer - Real-time visualization and testing dashboard for portal activations

Downloads

30

Readme

@a-company/portal-viewer

Real-time visualization and testing dashboard for portal (gate) activations.

Features

  • Live Constellation View: Gates displayed as interconnected stars that "light up" when activated
  • Event Timeline: Scrolling log of all portal events with filtering
  • Testing Checklist: Auto-ticking checklist for QA verification
  • Session Recording: Capture test sessions for reporting
  • Flow Visualization: Track progress through multi-gate flows
  • Webhook Reporting: Send session reports to Slack, Discord, email, or custom endpoints

Installation

npm install @a-company/portal-viewer

Usage

As a CLI (via paradigm)

# Start the portal viewer
paradigm portal watch

Programmatically

import { ViewerServer } from '@a-company/portal-viewer';

const server = new ViewerServer({
  port: 42196,     // WebSocket port for SDK connections (marathon + 1)
  uiPort: 42195,   // HTTP port for UI (marathon: 42.195km)
  configPath: './portal.yaml',
});

await server.start();

Architecture

┌─────────────────────┐      ┌─────────────────────┐
│   Your App (:8080)  │      │ Portal Viewer       │
│                     │      │                     │
│  ┌───────────────┐  │      │  ┌───────────────┐  │
│  │  Portal SDK   │──┼─────►│  │ WebSocket     │  │
│  │               │  │      │  │ Server(:42196)│  │
│  │ portal.check()│  │      │  └───────┬───────┘  │
│  └───────────────┘  │      │          │          │
│                     │      │  ┌───────▼───────┐  │
└─────────────────────┘      │  │ Constellation │  │
                             │  │ UI (:42195)   │  │
                             │  └───────────────┘  │
                             └─────────────────────┘

Ports

| Port | Purpose | |------|---------| | 42195 | HTTP server for UI (marathon: 42.195km) | | 42196 | WebSocket server for SDK connections |

Views

Constellation View

A visual star map where each portal is a node. When portal events occur:

  • Checking: Yellow pulse animation
  • Passed: Green glow effect
  • Failed: Red glow effect

Checklist View

List of all gates with checkboxes that auto-tick when gates are hit:

  • ⬜ Unchecked - gate not yet visited
  • ✅ Passed - gate was allowed
  • ❌ Failed - gate was denied
  • ⚠️ Mixed - gate had both passes and failures

Timeline View

Scrolling log of all events with:

  • Gate name
  • Decision (allow/deny)
  • Reason
  • Entity ID
  • Timestamp
  • Duration

Session Recording

Start a session to capture all events:

1. Click "Start Recording"
2. Run your tests
3. Click "End Session"
4. Export or send to webhooks

Webhook Integration

Configure webhooks in .paradigm/portal-webhooks.yaml:

webhooks:
  slack-qa:
    type: slack
    url: https://hooks.slack.com/services/xxx/yyy/zzz
    enabled: true
    triggers: [session-end, gate-fail]

Development

# Install dependencies
npm install

# Start dev server (UI only)
npm run dev

# Start WebSocket server
npm run dev:server

# Build everything
npm run build

License

MIT