Peanut Suite self-updates
Marketing toolkit for WordPress - UTM tracking, links, contacts, popups, and analytics
by Peanut Graphic · github.com/peanut-graphic/peanut-suite · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/peanut-graphic/peanut-suite/archive/refs/heads/main.zipShips its own WordPress updater (built-in updater), so new versions show up under Dashboard → Updates.
Peanut Suite - Firebase Backend
Dependency updates:
renovate.jsonextendslocal>peanutgraphic/renovate-config, but Renovate is not installed on the Peanut-Graphic GitHub org, so it has never opened a PR here..github/dependabot.ymlprovides automated dependency PRs instead — see that file to add/adjust ecosystems.
Read Firebase Ownership and End State before using any Firebase CLI command. Source review and local tests are safe; authentication, deployment, data access, IAM, billing, credential, and recovery operations require fresh project-specific approval.
Shared Firebase backend for the Peanut Suite of comedy industry tools:
- Notebook (iOS) - Personal material management for comedians
- Booker (WordPress) - Two-sided booking marketplace
- Festival (WordPress) - Festival/event production platform
Architecture
The distributed WordPress plugin requires WordPress 6.0 or newer and PHP 8.1 or newer.
peanut-suite/
├── functions/ # Cloud Functions (TypeScript)
│ └── src/
│ ├── api/ # REST API endpoints
│ │ ├── account.ts
│ │ ├── performer.ts
│ │ ├── venue.ts
│ │ └── booking.ts
│ ├── models/ # TypeScript interfaces
│ └── utils/ # Auth middleware
├── firestore.rules # Security rules
├── storage.rules # Storage security
└── firebase.json # Firebase config
API Endpoints
Account API (/api/v1/account)
| Method | Endpoint | Description |
|---|---|---|
| POST | /create |
Create Peanut Account |
| GET | /:peanutId |
Get account details |
| PATCH | /:peanutId |
Update account |
| POST | /:peanutId/link-booker |
Link Booker profile |
| POST | /:peanutId/link-festival |
Link Festival role |
Performer API (/api/v1/performer)
| Method | Endpoint | Description |
|---|---|---|
| GET | / |
List performers (with filters) |
| GET | /:performerId |
Get public profile |
| GET | /by-peanut/:peanutId |
Get by Peanut ID |
| POST | / |
Create profile |
| PATCH | /:performerId |
Update profile |
| POST | /:performerId/notebook-stats |
Update Notebook stats |
Venue API (/api/v1/venue)
| Method | Endpoint | Description |
|---|---|---|
| GET | / |
List venues (with filters) |
| GET | /search |
Search by name/location |
| GET | /:venueId |
Get venue details |
| POST | / |
Create venue |
| PATCH | /:venueId |
Update venue |
Booking API (/api/v1/booking)
| Method | Endpoint | Description |
|---|---|---|
| GET | /for-performer/:peanutId |
Get performer's bookings |
| GET | /:bookingId |
Get booking details |
| POST | / |
Create booking (webhook) |
| PATCH | /:bookingId |
Update status |
| POST | /:bookingId/notebook-link |
Link to Notebook |
Setup
Prerequisites
- Node.js 18+
- Firebase CLI:
npm install -g firebase-tools - Firebase project created at console.firebase.google.com
Installation
# Clone the repo
cd peanut-suite
# Install dependencies
cd functions && npm install
# Build TypeScript
npm run build
# Login to Firebase
firebase login
# Set project
firebase use peanut-suite
Local Development
# Start emulators
firebase emulators:start
# Or just functions
npm run serve
Deployment
# Deploy everything
firebase deploy
# Deploy only functions
firebase deploy --only functions
# Deploy only rules
firebase deploy --only firestore:rules,storage:rules
Firebase Console Setup
-
Create Project
- Go to Firebase Console
- Create project:
peanut-suite - Enable Google Analytics (optional)
-
Enable Authentication
- Go to Authentication > Sign-in method
- Enable: Email/Password, Apple, Google
-
Enable Firestore
- Go to Firestore Database
- Create database in production mode
- Rules will be deployed from
firestore.rules
-
Enable Storage
- Go to Storage
- Get started
- Rules will be deployed from
storage.rules
-
Configure Apps
- Add iOS app (for Notebook): Bundle ID
com.notebook.app - Add Web app (for Booker/Festival)
- Download config files
- Add iOS app (for Notebook): Bundle ID
Environment Variables
For Cloud Functions, set these in Firebase:
firebase functions:config:set webhook.secret="your-webhook-secret"
Security
- All authenticated endpoints require Firebase ID token
- Webhook endpoints require HMAC-SHA256 signature
- Firestore rules enforce data ownership
- Storage rules limit file sizes and types
Firestore Collections
| Collection | Description |
|---|---|
/accounts/{peanutId} |
Core identity |
/accounts_by_uid/{uid} |
UID to Peanut ID mapping |
/performers/{performerId} |
Public performer profiles |
/venues/{venueId} |
Shared venue database |
/bookings/{bookingId} |
Cross-app bookings |
/open_mics/{openMicId} |
Community open mic listings |
/festivals/{festivalId} |
Festival events |
License
Private - Peanut Graphic