diff --git a/SPECS.md b/SPECS.md
index c4c7e6d..0ec7454 100644
--- a/SPECS.md
+++ b/SPECS.md
@@ -114,6 +114,10 @@ tyre pressures, GPS (lat, lon, elevation, heading) and the is_* flags. It does *
INGEST_TOKEN) into git and pushed it. Commit amended and force-pushed; both values regenerated in
the now gitignored `k8s/secrets.yaml` (since moved to `k8s/secrets/secrets.yaml`, outside
`kubectl apply -f k8s/`). Filled-in secrets live only there from now on.
+- 2026-10-17 — App 2.7.1: the voice key works. The car's key report, read off the on-screen log:
+ `android.intent.extra.hardkey.keycode` (Integer), `.down` (Boolean, a report per press and per
+ release), `.longpress` (Boolean). 2.7.0 looked only for short names and never found the code.
+ Floating button removed (it did not show over the MG4 launcher).
- 2026-10-17 — App 2.7.0: a double press of the steering wheel's voice key (code 287) opens the
app, from the head unit's `com.saic.keyevent.hardkey.report` broadcast. Its extras are not
documented; the usual names are tried and every report is listed raw on the Logs tab. The
diff --git a/app/build.gradle b/app/build.gradle
index d2e59ae..f38b18d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -34,8 +34,8 @@ android {
applicationId "com.stinnesbeck.nilsmg4"
minSdk 27
targetSdk 36
- versionCode 64
- versionName "2.7.0"
+ versionCode 65
+ versionName "2.7.1"
// Nothing about the server ships in the APK: its URL and ingest token are entered in
// the app's Server tab (ServerConfig), and the database is only reachable by the server.
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 191f880..36b8413 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,8 +13,6 @@
-
-