open-index/open-npm huggingface dataset:
npm package: @ndabene/bmad-marketing
Description: BMad Marketing - AI-powered marketing content generation CLI tool
Author: Nicolas Dabene
Latest version: 1.0.2

# BMad Marketing

> AI-powered marketing content generation CLI tool

[![npm version](https://img.shields.io/npm/v/@ndabene/bmad-marketing.svg)](https://www.npmjs.com/package/@ndabene/bmad-marketing)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

 BMAD Marketing is a command-line interface tool designed to assist developers and marketers in generating high-quality marketing content using AI.

## Features

- **CLI-First**: Built for developer productivity.
- **AI-Powered**: Leverages advanced language models for content generation.
- **Workflow Automation**: Streamlines marketing tasks.

## Installation

```bash
npm install -g @ndabene/bmad-marketing
```

Or run without global install:

```bash
npx @ndabene/bmad-marketing --help
```

## Configuration

BMad Marketing supports multiple LLM providers. You can configure them using environment variables or a `.env` file in your project root.

1. Copy the example environment file:
   ```bash
   cp .env.example .env
   ```

2. Edit `.env` and add your API keys:
   ```bash
   # OpenAI
   OPENAI_API_KEY=your_key_here

   # Anthropic
   ANTHROPIC_API_KEY=your_key_here
   ```

**Supported Modes:**
- **AI Assistant**: Automatically detects if running inside Cursor, Antigravity, or Claude Code (No API key required).
- **Direct API**: Uses OpenAI or Anthropic API keys from environment.
- **Interactive**: Prompts for configuration if no other method is detected.

## Documentation

- [Agent Customization Guide](docs/agent-customization.md)
- [Default Brand Voice Rules](docs/default-lint-rules.md)

## Brand Voice Linting

The linter runs automatically at the end of content workflows (blog post and campaign brief) and appends a **Brand Voice Linting Report** with grouped violations and summary stats. You can customize or disable rules in `config.yaml`.

## Usage

```bash
bmad-marketing --help
```

## Quick Start

1. Initialize workspace in your project:
   ```bash
   bmad-marketing install
   ```
2. Generate a blog post:
   ```bash
   bmad-marketing blog-post "How AI improves B2B marketing"
   ```
3. Create a campaign brief (interactive):
   ```bash
   bmad-marketing campaign-brief
   ```
4. Run competitive analysis:
   ```bash
   bmad-marketing competitive-scan https://example.com https://competitor.com
   ```

## Commands

- `bmad-marketing install [-f|--force] [-v|--verbose]`
- `bmad-marketing blog-post [topic] [-i|--interactive]`
- `bmad-marketing campaign-brief`
- `bmad-marketing competitive-scan [urls...] [-i|--interactive]`

## License

MIT
npm package: @ndarilek/janus
Description: Simple API for the Janus media server
Author: Nolan Darilek
Latest version: 0.5.1

# A Leaner, Cleaner JavaScript API for the [Janus WebRTC Gateway](https://janus.conf.meetecho.com/)

`npm install @ndarilek/janus`

Works on the server via Node, in the browser via any WebRTC library ([WebRTC Adapter](https://github.com/webrtc/adapter) known to work for sure) and, hopefully, [React Native](https://facebook.github.io/react-native/).

## A Note About Fetch

This module expects a `fetch` implementation to be present in global scope. Unfortunately, providing this automatically is somewhat error-prone because React Native seems to throw a fit if this module tries to set up `isomorphic-fetch`. The best way to do this is to depend on `isomorphic-fetch` in consuming modules, and:

`import "isomorphic-fetch"`

in consuming code to set things up correctly. In React Native this isn't necessary and shouldn't be done since `fetch` is already set up.

## Example

Here is an example of part of the code I use to set up a WebRTC session with Janus in the browser. This is from a React component, with various event-handlers passed in from its container component, and using [Toastr](https://github.com/CodeSeven/toastr) for alerts:

```
navigator.mediaDevices.getUserMedia({audio: true, video: {facingMode: "environment"}})
.then((stream) => {
  console.log("Got stream", stream.getAudioTracks())
  console.log("Attaching", this.refs.localVideo)
  this.refs.localVideo.srcObject = stream
  pc.addStream(stream)
  const session = new Session(this.props.janusEndpoint)
  if(this.props.onSessionCreated)
    this.props.onSessionCreated(session)
  this.setState({session})
  session.on("connected", () => {
    session.attach(this.props.plugin)
    .then((handle) => {
      this.setState({handle})
      if(this.props.onHandleReceived)
        this.props.onHandleReceived(handle)
      pc.createOffer()
      .then(gotOffer)
      handle.on("event", (data) => {
        if(this.props.onHandleEvent)
          this.props.onHandleEvent(data)
        if(data.jsep) {
          pc.setRemoteDescription(new RTCSessionDescription(data.jsep))
        }
      })
    })
  })
  session.on("webrtcup", () => {
    toastr.success("Connected")
    if(this.props.onWebRTCUp)
      this.props.onWebRTCUp()
  })
  session.on("media", (data) => {
    if(this.props.onMediaStateChanged)
      this.props.onMediaStateChanged(data)
  })
  session.on("hangup", () => {
    toastr.success("Disconnected")
    if(this.props.onHangup)
      this.props.onHangup()
  })
  session.on("destroyed", () => {
    toastr.success("Disconnected")
    if(this.props.onHangup)
      this.props.onHangup()
  })
})
```

## API

### Session

`Session` represents the entrypoint into the Janus API. In addition to creating new plugin `Handle` instances, `Session` also long-polls the Janus API for new events.

#### Methods

#### Events

### Handle

A `Handle` is obtained by attaching to a plugin from a `Session`. It supports directly messaging plugins, in addition to receiving plugin-specific events.

#### Methods

#### Events
npm package: @ndau/ndaujs
Description: A JavaScript common repository for ndau
Author: Oneiro
Latest version: 1.4.0
Deprecated: false

# ndaujs
This is a common JavaScript repository. This will contain any code that can be shared by the ndau JavaScript codebase.

To use this repository you must add is as a private repository within your `package.json`. To do that simply run this command:

`npm install ndau/ndaujs#master`

This will add the repo to your `package.json`. See below for the available functions.

## Testing
Testing is the only way to run these functions so there should be as many tests as you can think of for your functions in this repo. When you run the test command below, the code is transpiled with babel into the bin folder and then run there. This is to make this library consumable in ES5.

`yarn test`

## Functions Availble
Please check the top level `index.js` for all functions available and how to add your own.

## Code styles

### Error messages and logging

When errors are caught but no action is performed, they are simply logged at the `error` level. When an action is performed or expected, caught errors are logged with the `debug` level. Error messages, unless specifically meant for app users are lowercase with minimal punctuation for ease of concatenation. They laregly follow the format `could not X: ${e.message}`. All error messages should be unique so they are easy to search for in the code. Avoid error messages like `throw new Error('failed')` and use for example `throw new Error('could not post to ${address} while sending ${txType}')`.