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

@johndimm/constellations

v1.0.11

Published

**Universal, AI-powered bipartite knowledge graphs.**

Readme

🌌 Constellations

Universal, AI-powered bipartite knowledge graphs.

Hacker News License: MIT

Live Demo | LinkedIn Post

The Evolution: From History to Everything

Originally designed to map world history, Constellations has evolved into a Universal Bipartite Explorer. It uses LLMs to identify the fundamental "Atomic" building blocks and the "Composite" collections that connect them in any domain.

Locked bipartite pairs (chosen once at the start)

Constellations now locks a single bipartite pair per graph, chosen from the first input node (and then does not switch):

  • Person ↔ Event
  • Ingredient ↔ Recipe
  • Symptom ↔ Disease
  • Author ↔ Paper

This makes exploration more reliable (no mid-graph “ontology drift”), while still supporting multiple domains.

Domains + text input (single unified UI)

Constellations supports both free text search and curated domain seed lists in the same UI:

  • Pick a domain and tap a seed to begin quickly.
  • Or type any query to start from an arbitrary entity.
  • Curate domains/seeds in-app: add ?admin=1

Universal Examples:

| Culinary (Beef) | Sports (LeBron James) | Medicine (Sore Throat) | | :---: | :---: | :---: | | Beef | LeBron James | Sore Throat |

Philosophy & Design

The core idea is to create collaboration graphs on the fly with zero pre-computed database. The graph constructs a local neighborhood around a given node using live LLM queries and expands outward.

The Bipartite Realization

The app strictly follows a bipartite structure:

  • Atomic Nodes (Circles): Fundamental entities (People, Ingredients, Symptoms).
  • Composite Nodes (Cards): Collections or events that bring Atomics together (Movies, Recipes, Diseases).
  • Edges: Only connect Atomics to the Composites they belong to.

This prevents "hallucinated connections" and forces a logical structure onto the space. The AI explains its classification reasoning in the sidebar for every node, and the chosen bipartite pair is locked at the start of each graph.

The Godfather and Marlon Brando

Vibe Coding: The Journey

This project was 100% "vibe coded" from start to finish—presenting problems to AI agents and iterating on their solutions. The journey took me through the current landscape of AI development tools:

  1. Google AI Studio: A great start, but I pushed it too far and it took a wrong turn. When it couldn't revert a day's worth of work, I had to "liberate" the project.
  2. Antigravity: My second stop, which worked well until I hit my quota.
  3. Cursor: Where I spent the bulk of the time. It’s a powerful tool but occasionally the "weakest link"—prone to doom loops and finding the best solution only after exhausting every possible alternative.
  4. Codex: When Cursor stalled on complex save/restore and export/import logic, Codex stepped in to finish the job. It was a step up in logic, though not cheap!

Methodology: I tried to present the agents with problems and kept my own implementation ideas to myself until I saw what they came up with. I've learned that the "Aha!" moment often comes from the agent's alternative path.

Key Views

Network & Timeline

The graph engine is built on D3.js, using a custom force-directed layout (forceSimulation, forceLink, forceManyBody, forceCenter, and collision detection). You can switch between the network view and a chronological timeline with one click.

Godfather Timeline View

Path-seeking

Trace connections across history. Here is a path from John von Neumann to Geoffrey Hinton:

John von Neumann to Geoffrey Hinton

Browse People

For inspiration, I scored the 5,000 "top" biographies from Simple Wikipedia based on log article length and link density. It's a fascinating, if occasionally quirky, cross-section of world history.

Browse People

Technical Architecture

  • Live Queries: Uses Gemini models to identify connections on the fly (configurable via VITE_GEMINI_MODEL).
  • Multi-source context + metadata: Uses Wikipedia/Wikidata plus academic corpora/metadata APIs (currently OpenAlex, with Crossref/DOI metadata as a fallback) when helpful.
  • Image Logic: Currently queries Wikipedia Commons for images rather than the LLM (which the agents claimed would be too error-prone, though the current way has its own quirks!).
  • Persistence: Saved graphs and LLM responses are cached in a PostgreSQL (Supabase) database to reduce tokens and speed up recurring paths.
  • Frontend: React 19 + Tailwind CSS.

Getting Started

  1. Clone & Install:

    git clone https://github.com/johndimm/Constellations.git
    cd Constellations
    npm install
  2. Setup Env: Create a .env file with your Gemini API key and Supabase URL.

    VITE_GEMINI_API_KEY=your_key_here
    # Optional:
    VITE_GEMINI_MODEL=gemini-2.5-flash
    VITE_GEMINI_MODEL_CLASSIFY=gemini-2.5-pro
    DATABASE_URL=your_postgres_url
  3. Run:

    npm run start:cache  # Starts the backend (cache/db)
    npm run dev          # Starts the frontend

Built with ❤️ and a small army of AI agents.