Files
Remote-Terminal-for-MeshCore/frontend/index.html
2026-02-16 16:45:05 -08:00

36 lines
1.7 KiB
HTML

<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="apple-mobile-web-app-title" content="MCTerm" />
<meta name="theme-color" content="#111419" />
<meta name="description" content="Web interface for MeshCore mesh radio networks. Send and receive messages, manage contacts and channels, and configure your radio." />
<title>RemoteTerm for MeshCore</title>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
</head>
<body>
<div id="root"></div>
<script>
// Start critical data fetches before React loads — shaves ~1-2s off startup.
// React hooks consume the promises via window.__prefetch.
var j = function(r) { return r.json(); };
window.__prefetch = {
config: fetch('/api/radio/config').then(j),
settings: fetch('/api/settings').then(j),
channels: fetch('/api/channels').then(j),
contacts: fetch('/api/contacts?limit=1000&offset=0').then(j),
unreads: fetch('/api/read-state/unreads').then(j),
undecryptedCount: fetch('/api/packets/undecrypted/count').then(j),
};
</script>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>