⚙️ Engine Deployment Guide
HydroStack is a zero-backend platform. Your database lives entirely inside your own Google Drive,
guaranteeing 100% data privacy. Follow these 5 steps to initialize your Engine (takes ~2 minutes).
Go to script.google.com
and click New Project .
Delete the default code and paste the script below .
Click Deploy → New Deployment .
Select Type: Web App .
Set "Execute as" to Me .
Set "Who has access" to Anyone .
Click Deploy , authorize access,
and copy the Web App URL .
Paste it into the HydroStack login screen!
function doPost(e) {
try {
var params = JSON.parse(e.postData.contents);
var action = params.action;
if (action === 'init') {
var files = DriveApp.getFilesByName("_HydroStack_Workspace_DB");
var ss;
if (files.hasNext()) {
ss = SpreadsheetApp.open(files.next());
} else {
ss = SpreadsheetApp.create("_HydroStack_Workspace_DB");
ss.insertSheet("Modules");
ss.insertSheet("Users");
ss.insertSheet("Forms");
ss.insertSheet("Submissions");
var sheet1 = ss.getSheetByName('Sheet1');
if (sheet1) ss.deleteSheet(sheet1);
}
return ContentService.createTextOutput(JSON.stringify({ success: true, spreadsheetId: ss.getId() })).setMimeType(ContentService.MimeType.JSON);
}
if (action === 'append') {
var ss = SpreadsheetApp.openById(params.sheetId);
var sheet = ss.getSheetByName(params.tabName);
if (Array.isArray(params.values[0])) {
var startRow = sheet.getLastRow() + 1;
if(params.values.length > 0) sheet.getRange(startRow, 1, params.values.length, params.values[0].length).setValues(params.values);
} else { sheet.appendRow(params.values); }
return ContentService.createTextOutput(JSON.stringify({ success: true })).setMimeType(ContentService.MimeType.JSON);
}
if (action === 'get') {
var ss = SpreadsheetApp.openById(params.sheetId);
var sheet = ss.getSheetByName(params.tabName);
var data = sheet.getDataRange().getValues();
return ContentService.createTextOutput(JSON.stringify({ success: true, values: data })).setMimeType(ContentService.MimeType.JSON);
}
if (action === 'upload') {
var data = Utilities.base64Decode(params.base64);
var blob = Utilities.newBlob(data, params.mimeType, params.filename);
var file = DriveApp.createFile(blob);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
return ContentService.createTextOutput(JSON.stringify({ success: true, url: file.getUrl() })).setMimeType(ContentService.MimeType.JSON);
}
} catch(err) {
return ContentService.createTextOutput(JSON.stringify({ error: err.toString() })).setMimeType(ContentService.MimeType.JSON);
}
}
Close Guide