Do this from scratch?

⚙️ AppSheet Build Steps

✅ Step 1: Start App

  • Go to AppSheet
  • Choose: “Start with your own data”
  • Select the Google Sheet with the two tables above

✅ Step 2: Table Settings

  • Add both Members and Transfers sheets as tables
  • Enable auto timestamp for Transfers[Timestamp] using AppFormula: NOW()

✅ Step 3: Views

A.

Members

View (Table)

  • Columns: Phone, Credits
  • View type: Table or Deck
  • Name it: “Balances”

B.

Transfers

View (Table)

  • Columns: FromPhone, ToPhone, Amount, Timestamp
  • View type: Table
  • Name it: “Transfer History”

✅ Step 4: Credit Transfer Form (optional for future)

If you later want users to send credits, we can:

  • Enable a form view to submit rows to Transfers
  • Use Bots to:
    • Subtract credits from sender
    • Add credits to receiver

✅ But for now: read-only, public info only

✅ Step 5: Make It Public

  • Security → Turn user sign-in OFF
  • Set Members and Transfers tables to read-only

📱 Final Public App Features

Make it make sense

function doPost(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const params = JSON.parse(e.postData.contents);
const phone = params.phone || ”;
const referrer = params.referrer || ”;
const coins = 100;
const timestamp = new Date();

const data = sheet.getDataRange().getValues();
if (data.some(row => row[0] === phone)) {
return ContentService.createTextOutput(‘This number is already registered!’); }

sheet.appendRow([phone, referrer || ‘None’, coins, timestamp]);

for (let i = 1; i < data.length; i++) {
if (data[i][0] === referrer) {
const refRow = i + 1;
const current = sheet.getRange(refRow, 3).getValue();
sheet.getRange(refRow, 3).setValue(current + 100);
return ContentService.createTextOutput(`Signup complete. You earned 100 coins. Referrer ${referrer} earned 100 too!`); }
}

return ContentService.createTextOutput(‘Signup complete. You earned 100 coins!’); }

function doGet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const data = sheet.getDataRange().getValues();
const users = data.slice(1).map(row => ({
phone: row[0],
referrer: row[1],
coins: row[2],
timestamp: row[3]
}));
return ContentService.createTextOutput(JSON.stringify(users)).setMimeType(ContentService.MimeType.JSON); }