🔐

ADMIN ACCESS

Enter your admin password to manage the Night Owl knowledge base.

Night Owl Cookies
👤 Team
🦉

HOW CAN I HELP?

Ask me how to handle any customer situation and I'll pull from the Night Owl playbook.

Customer doesn't like their cookie
Someone wants a refund
Customer has a food allergy
Admin mode · API key active
Google Sheet Sync NOT CONNECTED

Your sheet should have two tabs: Playbook (Situation / What to do) and Logins (Username / Password).

Manual Scenarios 0
PDF Documents 0
📂
Upload PDFs
Staff handbook, menus, policies…
Setup Guide
Sheet Tab 1 — "Playbook"
Columns: Situation | What to do. Add a new row for every scenario.
Sheet Tab 2 — "Logins"
Columns: Username | Password. Add a row per team member.
Apps Script
Go to Extensions → Apps Script, paste the script below, deploy as Web App (access: Anyone), paste URL above.
Hosting
Drag this file to netlify.com/drop for a free shareable URL.
Apps Script Code

This script reads both your Playbook and Logins tabs and sends them to the site.

function doGet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // Read Playbook tab
  var playbook = ss.getSheetByName('Playbook');
  var pbData = playbook.getDataRange().getValues();
  var scenarios = [];
  for (var i = 1; i < pbData.length; i++) {
    if (pbData[i][0] && pbData[i][1]) {
      scenarios.push({
        situation: pbData[i][0],
        action: pbData[i][1]
      });
    }
  }

  // Read Logins tab
  var logins = ss.getSheetByName('Logins');
  var lgData = logins.getDataRange().getValues();
  var users = [];
  for (var j = 1; j < lgData.length; j++) {
    if (lgData[j][0] && lgData[j][1]) {
      users.push({
        username: String(lgData[j][0]).toLowerCase(),
        password: String(lgData[j][1])
      });
    }
  }

  return ContentService
    .createTextOutput(JSON.stringify({ scenarios: scenarios, users: users }))
    .setMimeType(ContentService.MimeType.JSON);
}