SysAdmin 0b756788c2 fix(updater): self-register SilverDROID in installed_apps before update check
The worker exited early when the DB was empty (fresh installs via browser).
Now upserts a self-record for slug='silverdroid' before the isEmpty guard
so update notifications fire even when no other apps have been installed
via the AppStore.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 22:43:29 +00:00

SilverDROID

Android WASM/PWA Launcher with Glassmorphism UI

A modern Android launcher application for Progressive Web Apps (PWAs) and WebAssembly (WASM) applications, featuring a beautiful glassmorphism design inspired by SilverPOWERSHELL.

Features

Core Functionality

  • 🚀 PWA Launcher - Install and manage Progressive Web Apps
  • 🌐 WASM Support - Full WebAssembly support via optimized WebView
  • 📱 Native Container - PWAs run in a native Android wrapper
  • 💾 Offline Support - Apps work offline with cached resources
  • 🔔 Notifications - PWA push notification forwarding

Beautiful UI

  • Glassmorphism Design - Frosted glass effects throughout
  • 🎨 Material Design 3 - Modern Android design language
  • 🌓 Dynamic Theming - Adapts to system theme (light/dark)
  • 🖼️ App Grid - Beautiful card-based launcher grid
  • 💫 Smooth Animations - Fluid transitions and effects

Technical

  • Jetpack Compose - Modern declarative UI
  • 🏗️ Clean Architecture - MVVM + Repository pattern
  • 💿 Room Database - Efficient local app storage
  • 🔧 WebView Optimization - Enhanced for WASM/PWA performance

🎯 Technology Stack

  • Language: Kotlin
  • UI Framework: Jetpack Compose + Material Design 3
  • WebView: Android System WebView (Chromium)
  • Database: Room Persistence Library
  • Architecture: MVVM with Clean Architecture
  • Min SDK: 26 (Android 8.0)
  • Target SDK: 35 (Android 15)

🏗️ Architecture

SilverDROID/
├── ui/
│   ├── launcher/          # Main launcher screen
│   │   ├── LauncherScreen.kt
│   │   └── LauncherViewModel.kt
│   ├── webview/           # PWA container
│   │   ├── WebViewActivity.kt
│   │   └── WasmWebView.kt
│   ├── components/        # Reusable glass components
│   │   └── GlassComponents.kt
│   └── theme/             # Material Design 3 theme
│       ├── Color.kt
│       ├── Theme.kt
│       └── Type.kt
├── data/
│   ├── model/             # Data models
│   │   └── PwaApp.kt
│   ├── repository/        # Data repositories
│   │   └── PwaRepository.kt
│   ├── PwaDatabase.kt     # Room database
│   └── PwaAppDao.kt       # DAO interface
└── MainActivity.kt        # App entry point

🚀 Getting Started

Prerequisites

  • Android Studio Ladybug (2024.2.1) or later
  • JDK 17 or later
  • Android SDK 26+

Building the Project

  1. Clone the repository

    git clone https://gitlab.silverlabs.uk/SilverLABS/silverdroid.git
    cd silverdroid
    
  2. Open in Android Studio

    • Open Android Studio
    • File → Open → Select the SilverDROID folder
  3. Sync Gradle

    • Android Studio will automatically sync Gradle dependencies
    • Wait for the sync to complete
  4. Run the app

    • Connect an Android device or start an emulator
    • Click the "Run" button (▶️) in Android Studio

Quick Start Commands

# Build debug APK
./gradlew assembleDebug

# Build release APK
./gradlew assembleRelease

# Install on connected device
./gradlew installDebug

# Run tests
./gradlew test

📦 Building for Production

  1. Generate a signing key (first time only)

    keytool -genkey -v -keystore silverdroid.keystore \
      -alias silverdroid -keyalg RSA -keysize 2048 -validity 10000
    
  2. Configure signing in app/build.gradle.kts

    android {
        signingConfigs {
            create("release") {
                storeFile = file("../silverdroid.keystore")
                storePassword = "your_password"
                keyAlias = "silverdroid"
                keyPassword = "your_password"
            }
        }
    }
    
  3. Build release APK

    ./gradlew assembleRelease
    
  4. Output location

    app/build/outputs/apk/release/app-release.apk
    

🎨 Glassmorphism Components

SilverDROID includes custom glassmorphism components:

GlassCard

GlassCard(
    modifier = Modifier.fillMaxWidth(),
    cornerRadius = 16.dp
) {
    Text("Frosted glass card")
}

FrostedGlassPanel

FrostedGlassPanel(
    cornerRadius = 20.dp
) {
    // Your content
}

GlassBackground

GlassBackground() // Gradient background

📱 Adding Apps

Manually

  1. Tap the + button
  2. Enter the PWA URL (e.g., https://twitter.com)
  3. Optionally enter a custom name
  4. Tap Add

Sample Apps

The app includes sample PWAs you can add:

  • Twitter (mobile.twitter.com)
  • Spotify (open.spotify.com)
  • YouTube (m.youtube.com)
  • WebAssembly Demo (webassembly.org/demo)

🔧 WebView Configuration

SilverDROID's WebView is optimized for PWA/WASM:

  • JavaScript enabled
  • DOM Storage enabled
  • Database storage enabled
  • App cache enabled
  • Mixed content allowed (dev)
  • File access enabled
  • Wide viewport support
  • WebAssembly support

🤝 Contributing

Contributions are welcome! This is a SilverLABS project.

📄 License

Copyright © 2025 SilverLABS. All rights reserved.

🆘 Support

For issues or questions:

🎉 Credits

Built with ❤️ by SilverLABS

Inspired by:

  • SilverPOWERSHELL - Electron + Svelte architecture
  • Material Design 3 - Google's design system
  • Glassmorphism - Modern UI trend

Note: This launcher is designed for PWAs and WASM apps. Regular Android apps from Google Play Store are not supported.

Description
SilverSHELL AppStore Android client
Readme 130 MiB
Languages
Kotlin 88.6%
PowerShell 6.7%
Shell 4.7%