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

@mysadigital/buzzboard-ui

v0.1.2

Published

Shared React component library for BuzzBoard v2

Readme

BuzzBoard v2

A productivity app built by Reece Preston at Mysa Digital. Combines task management, habit tracking, bullet journalling, goal setting, mood/energy tracking, and an AI assistant.


Live Deployments

| Environment | URL | Status | |-------------|-----|--------| | Primary (mysaserv) | https://buzzboard.mysa.live | ✅ Active | | Fly.io | — | ❌ Decommissioned |

The mysaserv deployment is the sole active deployment. Fly.io was fully decommissioned on 22 April 2026.


Tech Stack

| Layer | Technology | |-------|------------| | Frontend | React + Vite | | Backend | Express + Prisma | | Database | MySQL 8.0 | | Sessions | Redis 7 | | Auth | Email/password, Google OAuth, GitHub OAuth | | Package manager | pnpm (workspaces monorepo) | | Node version | 20 | | Component library | @mysadigital/[email protected] (published to npm) |


Repository Structure

~/buzzboard/                                  # Monorepo root
└── buzzboard-hosted/
    ├── packages/
    │   ├── backend/                          # Express + Prisma + MySQL
    │   │   ├── src/
    │   │   │   ├── app.ts                    # Express app setup
    │   │   │   ├── ai/
    │   │   │   │   └── LLMProvider.ts        # AI provider abstraction
    │   │   │   ├── modules/
    │   │   │   │   ├── auth/
    │   │   │   │   │   ├── passport.ts       # OAuth strategies
    │   │   │   │   │   └── auth.controller.ts
    │   │   │   │   └── ai/
    │   │   │   │       ├── ai.service.ts     # AI feature logic
    │   │   │   │       ├── ai.controller.ts
    │   │   │   │       └── ai.routes.ts
    │   │   │   ├── adapters/
    │   │   │   │   ├── DataAdapter.ts
    │   │   │   │   └── PrismaDataAdapter.ts
    │   │   │   └── config/
    │   │   │       └── env.ts
    │   │   └── prisma/
    │   │       └── schema.prisma             # MySQL Prisma schema
    │   └── frontend/                         # React + Vite
    │       └── nginx.conf                    # nginx config inside Docker container
    ├── docker-compose.yml                    # All containers defined here
    └── .env.production                       # Environment variables (on mysaserv only, not in git)

mysaserv Infrastructure

Server: Ubuntu 24, home server at 192.168.0.160 SSH: ssh [email protected]

Docker Containers

| Container | Purpose | Port | |-----------|---------|------| | buzzboard-hosted-frontend-1 | nginx serving React build | 8090 | | buzzboard-hosted-backend-1 | Express API | 3001 | | buzzboard-hosted-mysql-1 | MySQL 8.0 database | — | | buzzboard-hosted-redis-1 | Redis 7 sessions | — |

Routing

Internet → Cloudflare Tunnel → mysaserv nginx (port 80) → localhost:8090 → frontend container
                                                         → /api/* → backend container (port 3001)
  • nginx config: /etc/nginx/sites-available/buzzboard
  • Cloudflare tunnel ID: a686d6e6-2664-469f-809e-8bbc75bf4a41
  • Important: The Cloudflare tunnel uses remotely managed config. The local file at /etc/cloudflared/config.yml is ignored. Any ingress changes must be made via the Cloudflare dashboard or API.

Key Config Already Applied

  • proxy_set_header X-Forwarded-Proto https in nginx (required for session cookies)
  • proxy: true in Passport Google and GitHub strategies
  • OAuth callbacks point to https://buzzboard.mysa.live/api/v1/auth/oauth/google/callback and .../github/callback
  • oauthCallback redirects to ${FRONTEND_URL}/dashboard
  • Prisma schema uses mysql provider
  • resolve.dedupe: ['react', 'react-dom'] in vite.config.ts
  • shamefully-hoist=true in root .npmrc

Environment Variables

Located at ~/buzzboard/buzzboard-hosted/.env.production on mysaserv. Never committed to git.

| Variable | Purpose | Status | |----------|---------|--------| | MYSQL_ROOT_PASSWORD | MySQL root password | ✅ Set | | MYSQL_DATABASE | Database name | ✅ Set | | MYSQL_USER | Database user | ✅ Set | | MYSQL_PASSWORD | Database password | ✅ Set | | DATABASE_URL | Prisma connection string | ✅ Set | | SESSION_SECRET | Express session secret | ✅ Set | | REDIS_URL | Redis connection string | ✅ Set | | FRONTEND_URL | https://buzzboard.mysa.live | ✅ Set | | COOKIE_DOMAIN | buzzboard.mysa.live | ✅ Set | | GOOGLE_CLIENT_ID | Google OAuth | ✅ Set | | GOOGLE_CLIENT_SECRET | Google OAuth | ✅ Set | | GITHUB_CLIENT_ID | GitHub OAuth | ✅ Set | | GITHUB_CLIENT_SECRET | GitHub OAuth | ✅ Set | | OPENAI_API_KEY | OpenAI API | ✅ Set | | ANTHROPIC_API_KEY | Anthropic API | ✅ Set | | SENTRY_DSN | Sentry backend error tracking | ✅ Set | | VITE_SENTRY_DSN | Sentry frontend error tracking | ✅ Set | | SENTRY_TRACES_SAMPLE_RATE | 0.1 (10% of transactions) | ✅ Set |


AI Configuration

BuzzBoard uses a primary/fallback LLM provider pattern defined in packages/backend/src/ai/LLMProvider.ts.

| Role | Provider | Model | |------|----------|-------| | Primary | OpenAI | gpt-5.4-mini | | Fallback | Anthropic | claude-haiku-4-5-20251001 |

The fallback kicks in automatically on transient errors (429, 5xx, timeouts, network failures). If the primary fails mid-stream before any tokens are emitted, the fallback takes over seamlessly.

AI Features

  • Brain dump parsing -- extracts tasks and habits from freeform text
  • Weekly review -- generates a coached summary of the past 7 days
  • Habit suggestions -- recommends habits based on a goal
  • Reshuffle by energy -- reschedules tasks around predicted energy windows
  • Pattern spotting -- analyses 60 days of data for behavioural patterns (Pro plan only)
  • AI chat -- streaming conversational assistant with live user context

Sentry Monitoring

Two Sentry projects under the mysa-digital organisation:

| Project | Platform | DSN env var | |---------|----------|-------------| | buzzboard-backend | Express | SENTRY_DSN | | buzzboard-frontend | React | VITE_SENTRY_DSN |

VITE_SENTRY_DSN is baked into the frontend at build time by Vite, so a full rebuild is required when changing it.


Deployment Process

Full rebuild and redeploy (backend + frontend changes)

ssh [email protected]

cd ~/buzzboard
git pull origin main

# Build backend
cd ~/buzzboard/buzzboard-hosted/packages/backend
npx prisma generate --schema=prisma/schema.prisma
pnpm build

# Build frontend
cd ~/buzzboard/buzzboard-hosted
pnpm --filter @mysa/buzzboard-hosted-frontend build

# Rebuild and restart containers
cd ~/buzzboard/buzzboard-hosted
docker compose up -d --build

# Commit
cd ~/buzzboard
git add .
git commit -m "your message"
git push origin main

Backend-only changes (no frontend changes)

cd ~/buzzboard/buzzboard-hosted/packages/backend
pnpm build

cd ~/buzzboard/buzzboard-hosted
docker compose up -d --build

Environment variable changes only (no code changes)

# Edit the env file
nano ~/buzzboard/buzzboard-hosted/.env.production

# Restart containers (no rebuild needed)
cd ~/buzzboard/buzzboard-hosted
docker compose down && docker compose up -d

Frontend-only changes

cd ~/buzzboard/buzzboard-hosted
pnpm --filter @mysa/buzzboard-hosted-frontend build
docker compose up -d --build

Component Library

The shared UI component library is published to npm as @mysadigital/buzzboard-ui.

To publish updates:

# From the monorepo root on your Mac
cd ~/buzzboard

# Bump version in root package.json first, then:
pnpm build
npm publish --access public

Then update the version reference in buzzboard-hosted/packages/frontend/package.json and redeploy.


Git Config (mysaserv)

user.name = Reece Preston
user.email = [email protected]

Useful Commands

# Check container status
docker ps

# View backend logs
docker logs buzzboard-hosted-backend-1 --tail 50 -f

# View frontend logs
docker logs buzzboard-hosted-frontend-1 --tail 50 -f

# Restart a single container
docker restart buzzboard-hosted-backend-1

# Connect to MySQL
docker exec -it buzzboard-hosted-mysql-1 mysql -u buzzboard -p buzzboard

# Run Prisma migrations
cd ~/buzzboard/buzzboard-hosted/packages/backend
npx prisma migrate deploy --schema=prisma/schema.prisma

Auth Flow

  • Email/password, Google OAuth and GitHub OAuth all working
  • OAuth callback URLs: https://buzzboard.mysa.live/api/v1/auth/oauth/google/callback and .../github/callback
  • Sessions stored in Redis, cookies scoped to buzzboard.mysa.live

Last updated: 22 April 2026