v6.8.15: the Android app is out for testing
- Android APK download, served from securebit.chat (/downloads/, never committed): a "Download Android APK" badge next to the Snap Store one, drawn for both themes, and an Android entry in the download menu (recommended on Android devices). nginx serves .apk as an attachment; the service worker leaves /downloads/ alone. The APK version is one constant in three places, checked by tests/desktop-download-links.test.mjs. - Roadmap versions follow the real releases: Group Communications v6.0 shipped, Mobile Edition v6.8 is current, Quantum-Resistant v7.0 is in development (2027), then v8.0 and v9.0. - "Download desktop app" is now "Download the app"; the "You're on Web" pill in the download menu is gone.
This commit is contained in:
+22
-22
@@ -30,18 +30,18 @@
|
||||
|
||||
<!-- PWA Manifest -->
|
||||
<link rel="manifest" href="/ru/manifest.json">
|
||||
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1790548306121">
|
||||
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1790572497433">
|
||||
|
||||
<!-- Blocking, and above the stylesheet on purpose: this stamps data-theme on <html>
|
||||
from localStorage while the parser is still in <head>, so the page paints in the
|
||||
chosen theme on the first frame instead of flashing dark and correcting itself.
|
||||
Cannot be inline (CSP is script-src 'self') and cannot be a module (deferred). -->
|
||||
<script src="/src/scripts/theme-boot.js?v=1790548306121"></script>
|
||||
<script src="/src/scripts/theme-boot.js?v=1790572497433"></script>
|
||||
|
||||
<!-- Blocking, and in <head> on purpose: beforeinstallprompt fires once and is
|
||||
not replayed, so the listener has to exist before Chrome decides the page
|
||||
is installable. Deferred/module scripts are already too late. -->
|
||||
<script src="/src/scripts/pwa-install-capture.js?v=1790548306121"></script>
|
||||
<script src="/src/scripts/pwa-install-capture.js?v=1790572497433"></script>
|
||||
|
||||
<!-- PWA Meta Tags -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
@@ -116,7 +116,7 @@
|
||||
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
|
||||
|
||||
<!-- Apple Touch Icons -->
|
||||
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1790548306121">
|
||||
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1790572497433">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
|
||||
@@ -125,7 +125,7 @@
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1790548306121">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1790572497433">
|
||||
|
||||
<!-- Microsoft Tiles -->
|
||||
<meta name="msapplication-TileColor" content="#ff6b35">
|
||||
@@ -264,7 +264,7 @@
|
||||
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
|
||||
both execute in document order after parsing, so React still runs before the
|
||||
app modules below, but the parser / first paint is no longer blocked. -->
|
||||
<script defer src="/config/ice-servers.js?v=1790548306121"></script>
|
||||
<script defer src="/config/ice-servers.js?v=1790572497433"></script>
|
||||
<script defer src="/libs/react/react.production.min.js"></script>
|
||||
<script defer src="/libs/react-dom/react-dom.production.min.js"></script>
|
||||
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
|
||||
@@ -278,8 +278,8 @@
|
||||
the end of <body>: 21 KB of CSS in total, but eight round trips before the
|
||||
browser could paint, which GTmetrix measured at 441 ms on a throttled mobile
|
||||
connection. Bytes were never the problem; requests were. -->
|
||||
<link rel="stylesheet" href="/assets/app.css?v=1790548306121">
|
||||
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1790548306121">
|
||||
<link rel="stylesheet" href="/assets/app.css?v=1790572497433">
|
||||
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1790572497433">
|
||||
<!-- Preload only the fonts needed for first paint. Inter is one variable file that
|
||||
answers for every weight, so there is one to preload rather than the two of five
|
||||
copies this used to name. fa-solid covers the bulk of UI icons; fa-regular and
|
||||
@@ -287,19 +287,19 @@
|
||||
<link rel="preload" href="/assets/fontawesome/webfonts/fa-solid-900.subset.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/assets/fonts/inter/files/inter-latin.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
|
||||
<script defer src="/src/scripts/load-async-css.js?v=1790548306121"></script>
|
||||
<script defer src="/src/scripts/load-async-css.js?v=1790572497433"></script>
|
||||
<noscript>
|
||||
<link rel="stylesheet" href="/libs/prism/prism.css">
|
||||
</noscript>
|
||||
<script defer src="/src/scripts/fa-check.js?v=1790548306121"></script>
|
||||
<script defer src="/src/scripts/fa-check.js?v=1790572497433"></script>
|
||||
<!-- This locale's dictionary, registered before anything can ask for a string.
|
||||
Only the default locale's is bundled (src/i18n/index.js imports it, because t()
|
||||
falls back to it); every other page loads its own here instead of all thirteen
|
||||
riding along inside dist/app.js. Absent on the default locale's own page. -->
|
||||
<script type="module" src="/src/i18n/dict/ru.js?v=1790548306121"></script>
|
||||
<script type="module" src="/src/i18n/dict/ru.js?v=1790572497433"></script>
|
||||
<!-- Update Manager - система принудительного обновления -->
|
||||
<script defer src="/src/utils/updateManager.js?v=1790548306121"></script>
|
||||
<script type="module" src="/src/components/UpdateChecker.jsx?v=1790548306121"></script>
|
||||
<script defer src="/src/utils/updateManager.js?v=1790572497433"></script>
|
||||
<script type="module" src="/src/components/UpdateChecker.jsx?v=1790572497433"></script>
|
||||
<!-- /dist/qr-local.js is deliberately absent: app-boot.js fetches it once the
|
||||
app has mounted and the browser is idle, so the 142 KB it weighs is off the
|
||||
first load. src/components/QRScanner.js used to be here too and registered
|
||||
@@ -439,17 +439,17 @@
|
||||
</li>
|
||||
<li>
|
||||
<h3>Групповое общение</h3>
|
||||
<span class="sb-pre-when">Сейчас</span>
|
||||
<span class="sb-pre-when">Осень 2026</span>
|
||||
<p>Групповые чаты без потери приватности</p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Mobile Edition</h3>
|
||||
<span class="sb-pre-when">II квартал 2027</span>
|
||||
<span class="sb-pre-when">Сейчас</span>
|
||||
<p>Отдельные приложения для iOS и Android</p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Стойкость к квантовым вычислениям</h3>
|
||||
<span class="sb-pre-when">IV квартал 2027</span>
|
||||
<span class="sb-pre-when">2027</span>
|
||||
<p>Защита от квантовых компьютеров</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -487,12 +487,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/dist/app-boot.js?v=1790548306121"></script>
|
||||
<script type="module" src="/dist/app.js?v=1790548306121"></script>
|
||||
<script type="module" src="/dist/app-boot.js?v=1790572497433"></script>
|
||||
<script type="module" src="/dist/app.js?v=1790572497433"></script>
|
||||
|
||||
<script defer src="/src/scripts/pwa-register.js?v=1790548306121"></script>
|
||||
<script src="/src/pwa/install-prompt.js?v=1790548306121" type="module"></script>
|
||||
<script src="/src/pwa/pwa-manager.js?v=1790548306121" type="module"></script>
|
||||
<script defer src="/src/scripts/pwa-offline-test.js?v=1790548306121"></script>
|
||||
<script defer src="/src/scripts/pwa-register.js?v=1790572497433"></script>
|
||||
<script src="/src/pwa/install-prompt.js?v=1790572497433" type="module"></script>
|
||||
<script src="/src/pwa/pwa-manager.js?v=1790572497433" type="module"></script>
|
||||
<script defer src="/src/scripts/pwa-offline-test.js?v=1790572497433"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user