diff --git a/README.md b/README.md new file mode 100644 index 0000000..b065a0a --- /dev/null +++ b/README.md @@ -0,0 +1,104 @@ +# NoGooleApps + +**Everyday Android apps without Google.** Privacy-friendly rebuilds of the standard Google apps, for people who want the polish of the originals without Play Services, tracking or an account. Made with GrapheneOS, CalyxOS, /e/OS and LineageOS in mind, and works the same on any stock Android phone. + +> Not affiliated with, endorsed by or connected to Google. These are independent, clean-room rebuilds: no Google code, assets, icons, fonts or text are used. + +## Apps + +| App | Replaces | Status | Install | +| --- | --- | --- | --- | +| **Wetter** (`wetter/`) | Google Weather / Pixel Weather | alpha, in daily testing | [Obtainium](#install-with-obtainium) · F-Droid: not yet | + +More apps will follow, one folder each. Each one goes through the same pipeline (see [How these apps are made](#how-these-apps-are-made)). + +### Wetter + +A weather app with the look and feel of Pixel Weather: an animated sky that changes with the conditions, a large hero temperature, hourly and 10-day forecasts, and shaped Material 3 Expressive detail tiles (wind, sun, UV, air quality, visibility, humidity, pressure, pollen). + +- **No Google Play Services.** Location uses the platform's own providers (including the AOSP fused provider), so it works on GrapheneOS without sandboxed Play. +- **No account, no tracking, no analytics.** Everything stays on the device. Coordinates are rounded to two decimals (about 1 km) before they reach the weather service. +- **Open data sources only:** [Open-Meteo](https://open-meteo.com) for forecasts, 15-minute precipitation, air quality, pollen and place search (CC BY 4.0), and [Nominatim / OpenStreetMap](https://nominatim.org) for naming your current location. +- **Features today:** current location and saved cities (swipe between them), search with a full preview before saving, precipitation-in-the-next-hours card, a rule-based daily summary, day detail view, units and theme settings, light and dark mode, and two home-screen widgets ("Now" 2×1/2×2 and "Forecast" 4×2/4×3). +- **Coming next:** severe weather alerts (DWD / MeteoAlarm), more widget sizes and a widget configuration screen, precipitation radar map, card reordering, notifications. + +Requires Android 10 (API 29) or newer. + +## Install with Obtainium + +[Obtainium](https://github.com/ImranR98/Obtainium) installs and updates apps straight from this repository's releases, with no store in between. + +**One-tap link for Wetter** (open it on your phone with Obtainium installed): + +[Add Wetter to Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22app.wetter%22%2C%22url%22%3A%22https%3A%2F%2Fgit.mrblake.cc%2FMrBlake%2FNoGooleApps%22%2C%22author%22%3A%22MrBlake%22%2C%22name%22%3A%22Wetter%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22apkFilterRegEx%5C%22%3A%20%5C%22wetter%5C%22%2C%20%5C%22filterReleaseTitlesByRegEx%5C%22%3A%20%5C%22%5EWetter%5C%22%2C%20%5C%22includePrereleases%5C%22%3A%20true%2C%20%5C%22fallbackToOlderReleases%5C%22%3A%20true%2C%20%5C%22autoApkFilterByArch%5C%22%3A%20true%7D%22%7D) + +**Or add it by hand:** in Obtainium tap *Add app*, paste `https://git.mrblake.cc/MrBlake/NoGooleApps`, and set: + +- *Override source*: **Forgejo / Codeberg** (this repository runs on a self-hosted Gitea, which speaks the same release API) +- *Filter release titles by regular expression*: `^Wetter` +- *Filter APKs by regular expression*: `wetter` + +Because several apps live in one repository, every release is titled after its app (for example `Wetter 0.1.0`) and its APK is named after it (`wetter-0.1.0.apk`). The filters above make sure Obtainium only ever picks up the weather app. + +**F-Droid:** not available yet. The apps contain no proprietary libraries, so an F-Droid build is planned (either the main repository or a self-hosted F-Droid repo). + +## How these apps are made + +### The Replica pipeline + +Every app is rebuilt with **[Replica](https://github.com/Jakeschincariol/replica-skill)**, an open set of eleven Claude Code skills by Jake Schincariol for cloning an app's *functionality and UX patterns* clean-room style. Each skill writes files the next one reads, and everything is kept in [`replica/`](replica/): + +| Step | Skill | What it produced for Wetter | +| --- | --- | --- | +| 1 | `replica-recon` | [Recon map](replica/recon.md) built from public sources (help center, reviews, store listing): 15 screens, 9 user flows, components, inferred data model, [feature matrix](replica/features.csv) | +| 2 | `replica-architect` | [Architecture](replica/architecture.md) and [schema](replica/schema.sql): native Kotlin, offline-first, no server, public APIs only | +| 3 | `replica-design` | [Design tokens](replica/design/tokens.json) and [component specs](replica/design/components.md), WCAG AA contrast checked (70 colour pairs), generated into Compose code | +| 4 | `replica-build` | The app itself, screen by screen, with a [build log](replica/build-log.md) and [screenshots](replica/clone-screens/) rendered from a real API response | +| next | `replica-test`, `replica-diff`, `replica-entrepreneur`, `replica-brand`, `replica-launch`, `replica-deploy`, `replica-backend` | QA, parity scoring against the original, reading real user reviews for improvements, naming and branding, store listing, release | + +The rules Replica enforces, and that this project follows: + +- **Public sources and our own devices only.** No decompiling, no private APIs, no reading the original's code or network traffic. +- **Everything written fresh.** Code, icons, weather glyphs, the animated sky and every label are made from scratch. Reference screenshots of the originals live in `replica/screens/` for layout comparison only and never ship. +- **What cannot be cloned is left out on purpose:** Google's own forecast models, Gemini summaries, Calendar/Gmail-based insights and account sync. Open alternatives replace them where it makes sense. + +### Built with AI, steered by a human + +The code, the design system and this README were written by **Claude Opus 5.5** (Anthropic's model, ID `claude-opus-5-5`) running in **Claude Code**, working through the Replica skills step by step. The human side of the project (that's [@MrBlake](https://git.mrblake.cc/MrBlake)) sets direction, supplies reference screenshots, tests every build on a real Pixel phone and reports what feels wrong. Issues found that way, like stutter during scrolling or slow location, are measured on the device and fixed. A typical loop: + +1. A skill produces its document or code; the human reviews it. +2. The app is built and rendered to screenshots on the JVM (Roborazzi), and the screenshots are checked against the reference. +3. The release build is installed on the phone over adb and used for real; frame timings (`dumpsys gfxinfo`) and logs guide the fixes. + +Each commit says what changed and carries a `Co-Authored-By` line for the AI. + +## Building from source + +Requirements: JDK 17 or newer and the Android SDK (platform 36). + +```bash +cd wetter +./gradlew :app:assembleRelease # APK in app/build/outputs/apk/release/ +./gradlew :app:testDebugUnitTest # unit + screenshot tests +./gradlew :app:recordRoborazziDebug # re-render replica/clone-screens/ +``` + +Local release builds are signed with the debug key so they install over each other. Published releases will use a dedicated signing key. + +## Repository layout + +``` +replica/ recon, architecture, design system, build log, screenshots +wetter/ the weather app (Kotlin, Jetpack Compose, Glance widgets, Room, WorkManager) +``` + +## Credits + +- Weather data: [Open-Meteo.com](https://open-meteo.com), CC BY 4.0 +- Place names: © [OpenStreetMap](https://www.openstreetmap.org/copyright) contributors, via Nominatim +- UI icons: [Material Symbols](https://fonts.google.com/icons), Apache 2.0 +- Method: [Replica](https://github.com/Jakeschincariol/replica-skill) by Jake Schincariol + +## License + +Not chosen yet. Until a license file is added, all rights are reserved by the author.