Dashboard
High Frequency Infusions · Medellín Operations
Exchange Rate
3,550
COP per 1 USD
Members PW
HFIM2026
Portal access code
Next Event
May 17
Alta Fuego
Dimaria Split
80/20
HFI / Dimaria
Amanda Royalty
1,500
COP per bottle
Class Ticket
80,000
COP per student
Quick Links
Key Contacts
| Name | Role | Contact | Notes |
|---|---|---|---|
| Amanda Robinson | Director Wellness & Events | Bancolombia acct | Tea production, events, wellness |
| Tiarra Earls | Social Media Manager | tiarraearlsdigital@gmail.com | Post-production & publishing |
| Khalif | Video Content | — | Kitchen + product videos |
| Chef Luis Makia | Chef — Alta Fuego | — | HFI dinner series, Chef Series |
| Jonathan / Ron | Secrito Jardin | — | Venue rental only — no product deal |
Revenue Tracker
All income by channel → Google Sheet: Revenue tab
Log
| Date | Channel | Description | COP | USD | Notes |
|---|---|---|---|---|---|
| Click Refresh to load from Sheet | |||||
Expenses & Supplies
All spending → Google Sheet: Expenses & Supplies tab
Log
| Date | Category | Item | Vendor | Qty | COP | USD | Type | Notes |
|---|---|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||||
Product COGS
Cost per SKU → Google Sheet: Product COGS tab
COGS Table
| SKU | Category | Batch | Ingr COP | Labor | Packaging | Total COGS | Per Unit | Sale Price | Margin % | Notes |
|---|---|---|---|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||||||
Event P&L
Per-event profit & loss → Google Sheet: Event P&L tab
Event Log
| Event | Date | Type | Guests | Gross | Costs | NET |
|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||
Infusion Class P&L
Per-class tracker | 80,000 COP ticket | 300,000 COP instructor fee (you)
Ticket Price
80,000
COP per student
Max Students
8
per class
Instructor Fee
300,000
COP flat (Jas)
Materials (8 students)
~36,360
COP total
Net at Capacity
~303,640
COP (no venue cost)
Class Log
| Date | Topic | Students | Revenue | Costs | NET | Notes |
|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||
Batch Production Log
Every production run → Google Sheet: Batch Production Log tab
Batch Log
| Date | Code | Product | Producer | Flower(g) | mg/unit | Units | COGS | Expiry |
|---|---|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||||
Inventory
Current stock on hand → Google Sheet: Inventory tab
Inventory Log
| SKU | Action | Qty | Location | Date | Notes |
|---|---|---|---|---|---|
| Click Refresh to load | |||||
Potency Calculator
One-off batch calculations — VG Tincture · Infused Oil · Honey · Chocolate
VG Tincture
Infused Oil / Ghee
Infused Honey
Chocolate
Inputs
Total THC in Batch
—
milligrams
Potency per ml
—
mg / ml
Raw THC potential—
After efficiency loss—
Per 0.5ml dose—
Per 1ml dose—
Doses in batch (0.5ml)—
Recipe Library
All HFI production recipes — search and expand
Amanda Robinson — Compensation
Director of Wellness & Events | Tea Royalties · Event Fees · Wellness Division
Tea Royalty
1,500
COP/bottle, all channels
Event Fee
15%
HFI net per event
Wellness Division
20%
division net monthly
Reimbursement
~$200
USD due Month 3
Tea Royalties
Event Fees
Wellness Division
Tea Royalty Log
| Month | Bottles | Earned COP | Paid COP | Pay Date | Status |
|---|---|---|---|---|---|
| Click Refresh to load | |||||
Dimaria Gelateria Tracker
80/20 HFI/Dimaria | 50 comp bites/month | Weekly Sunday cash pickup
HFI Split
80%
Dimaria
20%
Comp Bites
50/mo
Pickup Day
Sunday
Pickup Log
| Date | Restocked | Sold | Gross | HFI 80% | Dimaria 20% | Cash Recv | Comp | Notes |
|---|---|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||||
MedCity Tracker
Retail partner log → Google Sheet: MedCity Tracker tab
Log
| Date | Restocked | Sold | Gross | Split% | HFI Amt | Received | Status | Notes |
|---|---|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||||
Secrito Jardin — Venue Log
VENUE RENTAL ONLY | Cl. 35 #83-25, Laureles | Contact: Jonathan & Ron | No product deal
Venue Log
| Date | Event | Rental COP | Status | Contact | Notes |
|---|---|---|---|---|---|
| Click Refresh to load | |||||
Guest Tracker
All event RSVPs and guest info → Google Sheet: Guest Tracker tab
Guest List
| Name | Event | Date | Party | Tier | Payment | Notes | |
|---|---|---|---|---|---|---|---|
| Click Refresh to load | |||||||
Private Events
Inquiries and bookings → Google Sheet: Private Events tab
Private Event Log
| Client | Date | Package | Quoted | Deposit | Balance | Status | Notes |
|---|---|---|---|---|---|---|---|
| Click Refresh to load | |||||||
Member Log
All HFI members → Google Sheet: Member Log tab
Member Log
| Name | Tier | Joined | Renewal | Status | Box | |
|---|---|---|---|---|---|---|
| Click Refresh to load | ||||||
Chef Series Box Fulfillment
Monthly box tracking → Google Sheet: Chef Series Fulfillment tab
Box Log
| Month | Member | Tier | Contents | Cost | Produced | Delivered | Status |
|---|---|---|---|---|---|---|---|
| Click Refresh to load | |||||||
Contact Directory
Vendors, partners, contractors, VIP guests → Google Sheet: Contact Directory tab
Directory
| Name | Role | Category | Phone | Notes | |
|---|---|---|---|---|---|
| Click Refresh to load | |||||
Import Data (CSV)
Upload CSV exports from IndiVend or any spreadsheet — data appends to Google Sheet
Click to select a CSV file — or drag & drop here
Supports .csv exports from IndiVend, Excel, Google Sheets
How to export from IndiVend
1
Log into IndiVend → highfrequencyinfusions.indivend.com
2
Go to Orders, Members, or Events — whichever you need
3
Click the Export or Download CSV button (top right of the list)
4
Come back here, select the matching tab above, and upload the file
5
Click Send to Sheet — data appends to your Google Sheet automatically
Google Sheet Setup
One-time setup — connects every form to your HFI Operations Master sheet
⚠ Complete this setup ONCE before using any form. Without it data will not save to Google Sheets.
Step-by-Step
1
Open your sheet: HFI Operations Master ↗
2
Click Extensions → Apps Script
3
Delete all existing code and paste the script below
4
Click Save, then Deploy → New Deployment
5
Type: Web App | Execute as: Me | Access: Anyone | Click Deploy
6
Copy the Web App URL that appears and paste it below
Apps Script — Paste into Google Apps Script editor
const SHEET_ID = '12O58aEGCQRw4RnYy74LC-GjYTsoZJCO7LwRFiGAQQD8';
const HEADERS = {
'Revenue': ['Date','Channel','Description','Amount COP','Amount USD','Notes'],
'Expenses & Supplies': ['Date','Category','Item','Vendor','Qty/Unit','Amount COP','Amount USD','Type','Notes'],
'Product COGS': ['SKU','Category','Batch Size','Ingr Cost COP','Labor COP','Packaging COP','Total COGS','Cost/Unit','Sale Price','Margin %','Notes'],
'Event P&L': ['Event','Date','Type','Headcount','Ticket Rev','Product Sales','Gross','Venue','Supplies','Chef','Amanda Fee','Other','Total Costs','NET','Notes'],
'Infusion Class P&L': ['Date','Topic','Students','Ticket Revenue','Materials','Venue','Instructor Fee','NET','Notes'],
'Batch Production Log': ['Date','Batch Code','Product','Producer','Flower (g)','Carrier/Base','mg/unit','Units','COGS COP','Expiry','Notes'],
'Inventory': ['SKU','Action','Qty','Location','Date','Notes'],
'Amanda Compensation': ['Month/Event','Bottles/Net','Earned/Fee','Paid','Pay Date','Status'],
'Dimaria Tracker': ['Date','Restocked','Sold','Gross COP','HFI 80%','Dimaria 20%','Cash Received','Comp Bites','Notes'],
'MedCity Tracker': ['Date','Restocked','Sold','Gross COP','Split %','HFI Amount','Received','Status','Notes'],
'Secrito Venue Log': ['Date','Event','Rental COP','Status','Contact','Notes'],
'Guest Tracker': ['Name','Email','Event','Event Date','Party Size','Member Tier','Payment Status','Notes'],
'Private Events': ['Client','Contact','Inquiry Date','Event Date','Package','Headcount','Quoted COP','Deposit','Balance','Status','Notes'],
'Member Log': ['Name','Email','Tier','Join Date','Renewal Date','Status','Chef Series Box','Address','Notes'],
'Chef Series Fulfillment': ['Month','Member','Tier','Contents','Cost COP','Produced','Delivered','Status'],
'Contact Directory': ['Name','Role','Category','Phone','Email','Notes'],
};
function doPost(e) {
try {
const data = JSON.parse(e.postData.contents);
const tab = data.tab;
const row = data.row;
const ss = SpreadsheetApp.openById(SHEET_ID);
let sheet = ss.getSheetByName(tab);
if (!sheet) sheet = ss.insertSheet(tab);
if (sheet.getLastRow() === 0 && HEADERS[tab]) {
sheet.appendRow(HEADERS[tab]);
sheet.getRange(1, 1, 1, HEADERS[tab].length)
.setBackground('#1A1208').setFontColor('#C87941')
.setFontWeight('bold');
}
sheet.appendRow(row);
return ContentService.createTextOutput(JSON.stringify({success:true}))
.setMimeType(ContentService.MimeType.JSON);
} catch(err) {
return ContentService.createTextOutput(JSON.stringify({success:false,error:err.toString()}))
.setMimeType(ContentService.MimeType.JSON);
}
}
function doGet(e) {
try {
const tab = e.parameter.tab;
const ss = SpreadsheetApp.openById(SHEET_ID);
const sheet = ss.getSheetByName(tab);
if (!sheet || sheet.getLastRow() < 2) return json({rows:[]});
const data = sheet.getDataRange().getValues();
const headers = data[0];
const rows = data.slice(1).map(r => {
const obj = {};
headers.forEach((h,i) => obj[h] = r[i]);
return obj;
});
return json({rows});
} catch(err) { return json({rows:[],error:err.toString()}); }
}
function json(obj) {
return ContentService.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}