Public web-only release: SvxPortal front-end + auth backend, install templates and INSTALL.md

Stripped from the internal repo: per-box deploy trees, Go services (nodelist/astmeta/proxy/svxdr),
deploy/sync scripts and all secrets. Config templates for nginx, PHP-FPM, Redis and tmpfiles
live in install/ with CHANGEME placeholders.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-26 23:07:05 +02:00
co-authored by Claude Fable 5.1
commit 25b481e2ae
93 changed files with 13357 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
'use strict';
function renderList(nodes){
const tbody = document.getElementById('rows');
if(!tbody) return;
tbody.innerHTML = "";
const calls = Object.keys(nodes || {}).sort();
for(const cs of calls){
const n = nodes[cs] || {};
const tr = document.createElement('tr');
const tdCS = document.createElement('td');
tdCS.textContent = cs;
const tdTG = document.createElement('td');
tdTG.textContent = (n.restrictedTG ? "*" : "") + (n.tg ?? "");
const tdLoc = document.createElement('td');
let loc = "";
if(Array.isArray(n.qth) && n.qth.length && n.qth[0].name) loc = n.qth[0].name;
tdLoc.textContent = loc;
tr.appendChild(tdCS);
tr.appendChild(tdTG);
tr.appendChild(tdLoc);
tbody.appendChild(tr);
}
document.getElementById('nodeCount').textContent = calls.length;
}