- LiveKit call E2EE: CallE2EEManager exchanges encryption keys via Matrix to-device events (m.rtc.encryption_keys) for interop with Element X - Olm bootstrapped in index.html before Flutter init; main.dart logs result - Encrypted messages shown with lock icon and informative fallback text - Profile screen: key restore dialog + security setup (cross-signing/backup) - Jitsi feature: welcome screen (public, no login), conference tab, full-screen embed via JitsiMeetExternalAPI, JitsiLink parser for all common link formats - Help tab: expandable cards for encryption, video calls, account management - Web security model: no session persistence — device ID only across visits - Media auth: MSC3916 authenticated endpoint for avatars (Synapse 1.120+) - Router: welcome route as public landing page; jitsi route as public - Manifest/index.html: M8Chat branding, dark theme colours Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
36 lines
926 B
JSON
36 lines
926 B
JSON
{
|
|
"name": "M8Chat",
|
|
"short_name": "M8Chat",
|
|
"start_url": ".",
|
|
"display": "standalone",
|
|
"background_color": "#0F0F1A",
|
|
"theme_color": "#5C35C9",
|
|
"description": "M8Chat — secure chat and conferencing.",
|
|
"orientation": "portrait-primary",
|
|
"prefer_related_applications": false,
|
|
"icons": [
|
|
{
|
|
"src": "icons/Icon-192.png",
|
|
"sizes": "192x192",
|
|
"type": "image/png"
|
|
},
|
|
{
|
|
"src": "icons/Icon-512.png",
|
|
"sizes": "512x512",
|
|
"type": "image/png"
|
|
},
|
|
{
|
|
"src": "icons/Icon-maskable-192.png",
|
|
"sizes": "192x192",
|
|
"type": "image/png",
|
|
"purpose": "maskable"
|
|
},
|
|
{
|
|
"src": "icons/Icon-maskable-512.png",
|
|
"sizes": "512x512",
|
|
"type": "image/png",
|
|
"purpose": "maskable"
|
|
}
|
|
]
|
|
}
|