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

fairhello

v0.2.1

Published

Draft replies to guests of short-term rentals, on the host's computer: the house file, the prompt, the checks before sending (fresh, no prices, access codes only during the stay). No network, no files, no dependencies.

Readme

fairhello

Draft replies to the guests of a short-term rental, on the host's computer. 0.1.0, in development.

Fairhello is the part of OpenStay that answers guests. Hosts use it through the fairnight risposte commands and the /risposte page of fairnight-cli: messages are read from Smoobu or Beds24 with the host's own key, a model writes a draft, and the host approves every reply before it is sent. Nothing is sent on its own.

This package is the library underneath: no network, no files, no dependencies.

What it does

  • The house file (parseHouse): casa/<listing>.md, plain Markdown written by the host. Every ## heading is a section the assistant may use. The access codes section (## Codici, ## Códigos, ## Access codes) is kept apart, and amounts of money in the file are reported so the host can take them out.
  • The request (buildPrompt): the rules and the house file in the system part, the same for every message of a listing so a provider can cache it; the stay, the conversation and, only during the stay, the access codes in the user part. The guest's words are inside tags and treated as text to answer, never as instructions.
    • No prices, ever. The model never sees one, is told never to write one, and a draft that contains one anyway (findPrices) cannot be approved until the host edits it.
    • Access codes (codesState): from the day of check-in to the day of check-out, and, when the listing registers its guests with Fairguest, only once someone is registered.
    • Language: the reply is in the language of the guest's last message.
    • Context from the other OpenStay tools: check-in and check-out times, whether the guest registration is done, and the free nights right before and after the stay (dates only).
  • Freshness (checkFreshness): a draft can be sent only if it is the newest of its conversation, answers the guest's last message, the booking is not cancelled and the stay ended at most 2 days ago. The same check runs when the draft is shown and again right before sending.
  • Sensitive topics (topicsOf): money, complaints, cancellations and emergencies in Italian, Spanish, English, French, German and Portuguese. The draft is marked for the host.
  • The model (anthropicRequest/readAnthropic, ollamaRequest/readOllama): the shapes of the requests and answers for Anthropic (default claude-haiku-5-5, with the host's own key) and for a model running on the host's computer with Ollama. The caller sends them.
  • Plain text (plainText): markdown taken out of the draft, since the channels do not render it.
  • Matching names (matchName): suggests which listing a channel's name belongs to. Two units that tie are reported as ambiguous, never guessed.

License

AGPL-3.0-only. See LICENSE.