summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-11-05 10:56:52 +0100
committerDanilo M. <danix@danix.xyz>2026-11-05 10:56:52 +0100
commitd0b09ad8115c29d67bcbbc4c7b5aab0a41f16fa2 (patch)
tree38a70272a395b0e74f94207ea51f806aaa2811ce
parent6d5e2e7bc9877fc9b29d3eee4ec6879bcbbd4bec (diff)
downloaddanixxyz-d0b09ad8115c29d67bcbbc4c7b5aab0a41f16fa2.tar.gz
danixxyz-d0b09ad8115c29d67bcbbc4c7b5aab0a41f16fa2.zip
content: write HardenedPass reference and landing pages
Every setting, the security model, troubleshooting and the landing page, in both languages. Also adds the Firefox save prompt tip and full menu paths on the sync and autofill pages. Still drafts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-rw-r--r--content/en/hardenedpass/_index.md33
-rw-r--r--content/en/hardenedpass/reference/_index.md8
-rw-r--r--content/en/hardenedpass/reference/security/index.md59
-rw-r--r--content/en/hardenedpass/reference/settings/index.md65
-rw-r--r--content/en/hardenedpass/reference/troubleshooting/index.md76
-rw-r--r--content/en/hardenedpass/using/autofill/index.md5
-rw-r--r--content/en/hardenedpass/using/sync/index.md2
-rw-r--r--content/it/hardenedpass/_index.md33
-rw-r--r--content/it/hardenedpass/reference/_index.md8
-rw-r--r--content/it/hardenedpass/reference/security/index.md60
-rw-r--r--content/it/hardenedpass/reference/settings/index.md65
-rw-r--r--content/it/hardenedpass/reference/troubleshooting/index.md84
-rw-r--r--content/it/hardenedpass/using/autofill/index.md5
-rw-r--r--content/it/hardenedpass/using/sync/index.md2
-rw-r--r--static/uppies/2026/11/hardenedpass-banner.pngbin0 -> 46661 bytes
15 files changed, 455 insertions, 50 deletions
diff --git a/content/en/hardenedpass/_index.md b/content/en/hardenedpass/_index.md
index b3421a0..6175565 100644
--- a/content/en/hardenedpass/_index.md
+++ b/content/en/hardenedpass/_index.md
@@ -1,12 +1,37 @@
+++
title = "HardenedPass"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "HardenedPass is an Android client for pass, the standard Unix password manager: OpenPGP-encrypted files in a git repository, no Google Play Services, no telemetry."
draft = true
+++
-Placeholder.
+{{< image src="/uppies/2026/11/hardenedpass-banner.png" alt="The HardenedPass banner: a shield-shaped padlock with a git branch cut through it, next to the app's name." />}}
-## First heading
+I keep my passwords in [pass](https://www.passwordstore.org/): plain files, encrypted
+with OpenPGP, in a git repository I host myself. On the phone I used Android Password
+Store, until it was archived in October 2024. My phone runs GrapheneOS, I wanted a
+client I could trust there, and I did not want to go shopping for a password manager
+with a cloud. So I forked it.
-Text.
+HardenedPass picks up from upstream's last commit. The goal is simple: work flawlessly
+on GrapheneOS, with no Google Play Services and no telemetry. All the credit for the
+original work goes to the Android Password Store authors.
+
+## What is different from upstream
+
+- Reads what modern GnuPG writes. Upstream rejected the OCB messages GnuPG 2.3 and later
+ produce by default.
+- Rejects keys that have no encryption subkey when you import them.
+- Updated cryptography libraries, fixing known advisories.
+- Other apps can no longer reach the decrypt screen with arbitrary file paths.
+- No crash reporting, no Google Play Services, one single FOSS build.
+- A new interface, built with Jetpack Compose.
+- Its own application ID: it installs next to upstream instead of over it.
+
+## Where to start
+
+- Never used `pass`? Start with [Concepts]({{< relref "/hardenedpass/getting-started/concepts" >}}).
+- Have a store already? [Install]({{< relref "/hardenedpass/getting-started/install" >}}) the app, then [connect it]({{< relref "/hardenedpass/getting-started/connect" >}}).
+
+The code is on [GitHub](https://github.com/danixland/HardenedPass), under the GPL-3.0.
+Bugs and ideas go on the [issue tracker](https://github.com/danixland/HardenedPass/issues).
diff --git a/content/en/hardenedpass/reference/_index.md b/content/en/hardenedpass/reference/_index.md
index 9a07df6..7b14a54 100644
--- a/content/en/hardenedpass/reference/_index.md
+++ b/content/en/hardenedpass/reference/_index.md
@@ -1,13 +1,9 @@
+++
title = "Reference"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Reference pages for HardenedPass: every setting, the security model and fixes for common errors."
weight = 30
draft = true
+++
-Placeholder.
-
-## First heading
-
-Text.
+Look things up here when you need them. There is no need to read these pages in order.
diff --git a/content/en/hardenedpass/reference/security/index.md b/content/en/hardenedpass/reference/security/index.md
index 0c1ba30..c865c1d 100644
--- a/content/en/hardenedpass/reference/security/index.md
+++ b/content/en/hardenedpass/reference/security/index.md
@@ -1,13 +1,64 @@
+++
title = "Security"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "What HardenedPass protects, where each secret lives, what it sends over the network and which threats it does not cover."
weight = 100
draft = true
+++
-Placeholder.
+This page says what the app does for you and, just as important, what it does not do.
-## First heading
+## Where your secrets live
+
+| Secret | Where it is | How it is protected |
+|---|---|---|
+| Entries | Files in the app's private storage, and on your git server | OpenPGP, the same as `pass` on a computer |
+| OpenPGP private key | The app's private storage | Its own passphrase |
+| Key passphrase | Nowhere, unless you enable caching | If cached: AES-GCM under an Android Keystore key |
+| Git and proxy passwords | The app's private storage, if you tell it to remember them | AES-GCM under an Android Keystore key |
+| SSH key made on the phone | Android Keystore | The system, plus your screen lock if you ask for it |
+| SSH key you imported | The app's private storage | Its own passphrase, if it has one |
+
+Android Keystore keys are held by the system and cannot be copied out of the phone, even
+by the app that uses them.
+
+## What the app does
+
+- **No telemetry.** No analytics, no crash reports, no Google Play Services. The app
+ only connects to the git server you configured, and to your proxy if you set one.
+- **Blocks screenshots of secrets.** Entries, the editor, the generator, passphrase
+ dialogs and autofill windows cannot be captured by screenshots, and do not appear in
+ the recent apps view.
+- **Clears the clipboard.** A copied password is removed after a timeout.
+- **Checks the SSH server.** The server's host key is saved on first connection and
+ checked after that. The first connection is trusted without asking, so make it on a
+ network you trust.
+- **Trusts known browsers only.** Autofill works only in browsers whose signing
+ certificate the app recognizes, and warns you if an app's publisher changes. See
+ [Autofill]({{< relref "/hardenedpass/using/autofill" >}}).
+- **Refuses outside files.** Other apps can open the app, but it only opens paths that
+ really are inside your store.
+
+## What the app does not protect you from
+
+- **A compromised phone.** Malware that controls an unlocked phone can see what you
+ see. Keep the system up to date.
+- **Your keyboard.** A keyboard app sees everything you type, the passphrase included.
+ Use one you trust, with network access off if your system allows that.
+- **Other apps reading the clipboard** before the timeout runs out. Autofill avoids the
+ clipboard altogether.
+- **A weak passphrase.** If someone gets your key file, the passphrase is all that is
+ left.
+- **Your git server seeing names.** Entry and folder names are file names, and they are
+ not encrypted, so the server can read them, along with the dates of your commits.
+- **Biometric lock as encryption.** **Enable biometric authentication** is a gate at app
+ start. It keeps out someone holding your unlocked phone for a moment, and it does not
+ encrypt anything.
+- **Losing your key.** No one can recover a store without its private key and passphrase.
+
+## Passphrase caching
+
+Caching is convenient, but while the passphrase is cached, anyone who gets into the
+unlocked app can open every entry. It is experimental. If you use it, turn on
+**Automatically clear passphrase cache** as well.
-Text.
diff --git a/content/en/hardenedpass/reference/settings/index.md b/content/en/hardenedpass/reference/settings/index.md
index 81a68ad..d856f93 100644
--- a/content/en/hardenedpass/reference/settings/index.md
+++ b/content/en/hardenedpass/reference/settings/index.md
@@ -1,13 +1,70 @@
+++
title = "Settings"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Every HardenedPass setting and what it does, section by section: general, autofill, passwords, repository, misc and PGP."
weight = 90
draft = true
+++
-Placeholder.
+Open **Settings** from the three dots in the list's search bar, or from the welcome
+screen. Settings are grouped in six sections.
-## First heading
+## General
-Text.
+| Setting | What it does |
+|---|---|
+| **App theme** | Light, dark or following the battery saver. |
+| **Password file organization** | How autofill names the files it saves, for example `work/example.org.gpg` or `work/example.org/alice@example.org.gpg`. |
+| **Password sort order** | Folders first, or recently used first. |
+| **Disable pull to sync action** | Stops the pull down gesture on the list from starting a sync. |
+| **Recursive filtering** | Search also looks inside the folders below the current one. |
+| **Open search on start** | Opens the search bar when the app starts. |
+| **Show all files and folders** | Lists files that are not passwords as well. |
+| **Enable biometric authentication** | Asks for your fingerprint when the app starts. See [Security]({{< relref "/hardenedpass/reference/security" >}}) for what this does and does not protect. |
+
+## Autofill
+
+| Setting | What it does |
+|---|---|
+| **Enable Autofill** | Makes HardenedPass the autofill service. See [Autofill]({{< relref "/hardenedpass/using/autofill" >}}). |
+| **Default username** | Used when autofill cannot find a username in the entry or its path. |
+| **Custom domains** | Domains whose subdomains autofill treats as separate sites. |
+
+## Passwords
+
+| Setting | What it does |
+|---|---|
+| **Password generator type** | The generator that opens first: Classic (the Random tab) or Diceware. |
+| **Password copy timeout** | Seconds a copied password stays in the clipboard, 45 by default. 0 means forever. |
+| **Show the password** | Whether a decrypted password is visible right away. Copying still works when it is hidden. |
+| **Automatically copy password** | Copies the password as soon as an entry is decrypted. |
+
+## Repository
+
+| Setting | What it does |
+|---|---|
+| **Rebase on pull** | On, your local commits go on top of the server's. Off, a merge commit is made instead. On by default. |
+| **Edit Git server settings** | Changes the repository URL and how you log in. |
+| **HTTP(S) proxy settings** | Sets a proxy. Shown for HTTPS remotes only. |
+| **Local Git config & utilities** | Commit name and email, commit log, and the recovery tools described in [Sync]({{< relref "/hardenedpass/using/sync" >}}). |
+| **Import SSH key** | Reads a private SSH key from a file. |
+| **Generate SSH key pair** | Makes a new SSH key on the phone. |
+| **View generated public SSH key** | Shows the public half, to add to your server. |
+| **Delete repository** | Deletes the local copy of the store. The server's copy is not touched, and neither are local commits you did not sync: those are gone. |
+
+## Misc
+
+| Setting | What it does |
+|---|---|
+| **Export passwords** | Copies the store, still encrypted, to a folder you choose. |
+| **Workaround clipboard history feature** | On phones with a clipboard history, fills it with numbers to push passwords out. |
+| **Debug logging** | Turns on debug logs, after an app restart. Release builds only. |
+
+## PGP settings
+
+| Setting | What it does |
+|---|---|
+| **Key manager** | Lists imported keys, imports new ones and deletes old ones. |
+| **Encrypt in ASCII armor mode** | Writes entries as text instead of binary. Leave it off unless you know you need it. |
+| **Enable passphrase caching** | Remembers the key's passphrase, so that entries open without asking. Experimental, and needs an active screen lock. |
+| **Automatically clear passphrase cache** | Forgets the passphrase when the screen turns off. |
diff --git a/content/en/hardenedpass/reference/troubleshooting/index.md b/content/en/hardenedpass/reference/troubleshooting/index.md
index 4221c83..3dfce92 100644
--- a/content/en/hardenedpass/reference/troubleshooting/index.md
+++ b/content/en/hardenedpass/reference/troubleshooting/index.md
@@ -1,13 +1,81 @@
+++
title = "Troubleshooting"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Common HardenedPass errors, what they mean and how to fix them: passphrase, keys, SSH, push rejected, detached head, autofill."
weight = 110
draft = true
+++
-Placeholder.
+## Keys and passphrases
-## First heading
+**The app asks for the passphrase again and says it is wrong.** The passphrase does not
+match the private key. If you changed the key's passphrase on a computer, the app
+needs the new one. If caching is on, it asks again and replaces the old value.
-Text.
+**`Failed to import PGP key`.** The file is not a key the app can use. Keys without an
+encryption subkey are rejected, because they could not decrypt anything. Check that you
+exported the **private** key, with `gpg --armor --export-secret-keys`.
+
+**An entry will not open and no key matches.** The store is encrypted for a key that is
+not imported. Compare **Store recipients** on the import screen, or the `.gpg-id` file,
+with the keys in **Key manager**. A public key alone cannot decrypt: import the private
+one.
+
+**The key is on a smartcard.** GnuPG exports a stub for such a key, with no secret
+material in it. The app cannot decrypt with that. It needs the real private key.
+
+**`Found .gpg-id, but it contains an invalid key ID, fingerprint or user ID`.** The
+`.gpg-id` file has something the app does not understand. Check it on a computer: one
+key ID, fingerprint or address per line.
+
+## Connecting
+
+**`The provided repository URL is not valid`.** See the address forms in
+[Connect the app]({{< relref "/hardenedpass/getting-started/connect" >}}).
+
+**`Wrong password` or `Wrong passphrase`.** For a repository password or an SSH key's
+passphrase. Many hosting services want an access token rather than the account password.
+
+**`Selected file does not appear to be an SSH private key`.** You picked the public key,
+or a file in another format. Choose the file without `.pub`.
+
+**The sync fails after the server was reinstalled or moved.** Its host key changed. If
+you are sure why, use **Clear saved host key** on the repository screen, under **Edit
+Git server settings**. If you are not, treat it as an attack until you know better.
+
+**SSH login is refused.** Check that the public key is on the server, for the right
+account. **View generated public SSH key** shows it for a key made on the phone.
+
+## Syncing
+
+**`Push was rejected by remote, run pull before pushing again`.** The server has commits
+you do not have. Use **Synchronize repository**, which pulls and then pushes.
+
+**`Pull has failed, you're in a detached head`.** A conflict stopped the rebase.
+[Sync]({{< relref "/hardenedpass/using/sync" >}}) has the steps.
+
+**`Merge has failed, you're in a conflicting state`.** The same conflict, with **Rebase
+on pull** off. The way out is the hard reset in
+[Sync]({{< relref "/hardenedpass/using/sync" >}}), after saving anything you need.
+
+**`The repository must be cloned before syncing changes`.** The store on the phone has no
+remote. Set one under **Edit Git server settings** and clone it.
+
+## Autofill
+
+**No suggestions appear.** Check that HardenedPass is the selected autofill service in
+Android's settings, and that the browser is on the list in
+[Autofill]({{< relref "/hardenedpass/using/autofill" >}}).
+
+**Only the password gets filled.** That is the browser's support level, as with Vanadium.
+
+**`This app is currently not supported`.** The app cannot save from there. You can still
+add the entry by hand.
+
+**Nothing happens after tapping Save.** Android 14 and later hold back background
+windows, and the app has a workaround: update to the latest version.
+
+## Still stuck?
+
+Open an issue on the [tracker](https://github.com/danixland/HardenedPass/issues). Say
+which version you run and what you did. Never paste passwords, keys or real entry names.
diff --git a/content/en/hardenedpass/using/autofill/index.md b/content/en/hardenedpass/using/autofill/index.md
index 43b7855..7455c23 100644
--- a/content/en/hardenedpass/using/autofill/index.md
+++ b/content/en/hardenedpass/using/autofill/index.md
@@ -11,7 +11,7 @@ not need to copy anything.
## Turn it on
-Open **Settings** and turn on **Enable Autofill**. The app explains what will happen and
+Open **Settings**, then **Autofill**, and turn on **Enable Autofill**. The app explains what will happen and
lists your installed browsers with how well each one is supported. Tap OK, choose
HardenedPass in Android's autofill settings and confirm.
@@ -52,7 +52,8 @@ filled in. Save the entry there, then remember to
[sync]({{< relref "/hardenedpass/using/sync" >}}).
Firefox also shows its own save prompt. That one is Firefox's password manager, not
-HardenedPass, and you can dismiss it.
+HardenedPass, and you can dismiss it. To stop it for good, turn off saving passwords in
+Firefox's settings: only the HardenedPass prompt remains.
## The phishing warning
diff --git a/content/en/hardenedpass/using/sync/index.md b/content/en/hardenedpass/using/sync/index.md
index 2351d5b..fe00355 100644
--- a/content/en/hardenedpass/using/sync/index.md
+++ b/content/en/hardenedpass/using/sync/index.md
@@ -32,7 +32,7 @@ pick a winner. The app uses a rebase by default (**Rebase on pull**), and the sy
stops with an error saying the pull failed and that you are in a detached head. Your
work is not lost.
-Open **Settings**, then **Local Git config & utilities**. You have two ways out:
+Open **Settings**, then **Repository**, then **Local Git config & utilities**. You have two ways out:
### Keep your changes
diff --git a/content/it/hardenedpass/_index.md b/content/it/hardenedpass/_index.md
index b3421a0..ab4e027 100644
--- a/content/it/hardenedpass/_index.md
+++ b/content/it/hardenedpass/_index.md
@@ -1,12 +1,37 @@
+++
title = "HardenedPass"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "HardenedPass è un client Android per pass, il gestore di password standard di Unix: file cifrati con OpenPGP in un repository git, senza Google Play Services e senza telemetria."
draft = true
+++
-Placeholder.
+{{< image src="/uppies/2026/11/hardenedpass-banner.png" alt="Il banner di HardenedPass: un lucchetto a forma di scudo attraversato da un ramo git, accanto al nome dell'app." />}}
-## First heading
+Tengo le mie password in [pass](https://www.passwordstore.org/): semplici file, cifrati con
+OpenPGP, in un repository git che ospito io. Sul telefono usavo Android Password Store, finché
+non è stato archiviato a ottobre 2024. Il mio telefono usa GrapheneOS, volevo un client di cui
+fidarmi lì, e non avevo voglia di andare a cercare un gestore di password con il suo cloud.
+Così ne ho fatto un fork.
-Text.
+HardenedPass riparte dall'ultimo commit di upstream. L'obiettivo è semplice: funzionare in modo
+impeccabile su GrapheneOS, senza Google Play Services e senza telemetria. Tutto il merito del
+lavoro originale va agli autori di Android Password Store.
+
+## Cosa cambia rispetto a upstream
+
+- Legge quello che scrive il GnuPG moderno. Upstream rifiutava i messaggi OCB che GnuPG 2.3 e
+ successivi producono di default.
+- Rifiuta in fase di importazione le chiavi senza sottochiave di cifratura.
+- Librerie crittografiche aggiornate, che risolvono vulnerabilità note.
+- Le altre app non possono più raggiungere la schermata di decifratura con percorsi arbitrari.
+- Niente report di crash, niente Google Play Services, un'unica build FOSS.
+- Una nuova interfaccia, fatta con Jetpack Compose.
+- Un application ID tutto suo: si installa accanto a upstream, non sopra.
+
+## Da dove partire
+
+- Non hai mai usato `pass`? Parti da [Concetti]({{< relref "/hardenedpass/getting-started/concepts" >}}).
+- Hai già un archivio? [Installa]({{< relref "/hardenedpass/getting-started/install" >}}) l'app, poi [collegala]({{< relref "/hardenedpass/getting-started/connect" >}}).
+
+Il codice è su [GitHub](https://github.com/danixland/HardenedPass), sotto licenza GPL-3.0.
+Bug e idee vanno sul [tracker](https://github.com/danixland/HardenedPass/issues).
diff --git a/content/it/hardenedpass/reference/_index.md b/content/it/hardenedpass/reference/_index.md
index 9c2811b..5b27491 100644
--- a/content/it/hardenedpass/reference/_index.md
+++ b/content/it/hardenedpass/reference/_index.md
@@ -1,13 +1,9 @@
+++
title = "Riferimento"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Le pagine di riferimento di HardenedPass: ogni impostazione, il modello di sicurezza e le soluzioni agli errori più comuni."
weight = 30
draft = true
+++
-Placeholder.
-
-## First heading
-
-Text.
+Consulta queste pagine quando ti servono. Non c'è bisogno di leggerle in ordine.
diff --git a/content/it/hardenedpass/reference/security/index.md b/content/it/hardenedpass/reference/security/index.md
index 7b8cd2b..aef0f43 100644
--- a/content/it/hardenedpass/reference/security/index.md
+++ b/content/it/hardenedpass/reference/security/index.md
@@ -1,13 +1,65 @@
+++
title = "Sicurezza"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Cosa protegge HardenedPass, dove sta ogni segreto, cosa invia in rete e quali minacce non copre."
weight = 100
draft = true
+++
-Placeholder.
+Questa pagina dice cosa fa l'app per te e, altrettanto importante, cosa non fa.
-## First heading
+## Dove stanno i tuoi segreti
-Text.
+| Segreto | Dove sta | Come è protetto |
+|---|---|---|
+| Voci | File nella memoria privata dell'app e sul tuo server git | OpenPGP, come `pass` su un computer |
+| Chiave privata OpenPGP | Memoria privata dell'app | La sua passphrase |
+| Passphrase della chiave | Da nessuna parte, a meno che attivi la memorizzazione | Se memorizzata: AES-GCM con una chiave Android Keystore |
+| Password di git e del proxy | Memoria privata dell'app, se le fai ricordare | AES-GCM con una chiave Android Keystore |
+| Chiave SSH creata sul telefono | Android Keystore | Il sistema, più il blocco schermo se lo richiedi |
+| Chiave SSH importata | Memoria privata dell'app | La sua passphrase, se ne ha una |
+
+Le chiavi di Android Keystore sono custodite dal sistema e non si possono copiare fuori dal
+telefono, nemmeno dall'app che le usa.
+
+## Cosa fa l'app
+
+- **Nessuna telemetria.** Niente analytics, niente report di crash, niente Google Play
+ Services. L'app si collega solo al server git che hai configurato, e al proxy se ne
+ hai impostato uno.
+- **Blocca gli screenshot dei segreti.** Voci, editor, generatore, finestre della
+ passphrase e finestre della compilazione automatica non si possono catturare con uno
+ screenshot e non appaiono tra le app recenti.
+- **Pulisce gli appunti.** Una password copiata viene rimossa dopo un timeout.
+- **Controlla il server SSH.** La chiave host del server viene salvata alla prima
+ connessione e controllata in seguito. La prima connessione viene accettata senza
+ chiedere, quindi falla da una rete di cui ti fidi.
+- **Si fida solo dei browser noti.** La compilazione automatica funziona solo nei browser
+ di cui l'app riconosce il certificato di firma, e ti avvisa se l'editore di un'app
+ cambia. Vedi [Autofill]({{< relref "/hardenedpass/using/autofill" >}}).
+- **Rifiuta i file esterni.** Altre app possono aprire l'app, ma questa apre solo percorsi
+ che stanno davvero dentro il tuo archivio.
+
+## Da cosa l'app non ti protegge
+
+- **Un telefono compromesso.** Un malware che controlla un telefono sbloccato vede quello
+ che vedi tu. Tieni aggiornato il sistema.
+- **La tua tastiera.** Un'app tastiera vede tutto quello che digiti, passphrase compresa.
+ Usane una di cui ti fidi, senza accesso alla rete se il sistema lo permette.
+- **Altre app che leggono gli appunti** prima che scada il timeout. La compilazione
+ automatica evita del tutto gli appunti.
+- **Una passphrase debole.** Se qualcuno ottiene il file della chiave, la passphrase è
+ tutto quello che resta.
+- **Il server git che vede i nomi.** I nomi di voci e cartelle sono nomi di file, non sono
+ cifrati, quindi il server li può leggere, insieme alle date dei commit.
+- **Il blocco biometrico come cifratura.** **Abilita autenticazione biometrica** è un
+ cancello all'avvio dell'app. Ferma chi ha in mano per un attimo il tuo telefono sbloccato,
+ ma non cifra nulla.
+- **La perdita della chiave.** Nessuno può recuperare un archivio senza chiave privata e
+ passphrase.
+
+## Memorizzare la passphrase
+
+È comodo, ma finché la passphrase è memorizzata chiunque entri nell'app sbloccata può aprire
+ogni voce. La funzione è sperimentale. Se la usi, attiva anche **Cancella automaticamente le
+frasi segrete memorizzate**.
diff --git a/content/it/hardenedpass/reference/settings/index.md b/content/it/hardenedpass/reference/settings/index.md
index c21dade..d0f8733 100644
--- a/content/it/hardenedpass/reference/settings/index.md
+++ b/content/it/hardenedpass/reference/settings/index.md
@@ -1,13 +1,70 @@
+++
title = "Impostazioni"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Ogni impostazione di HardenedPass e cosa fa, sezione per sezione: generale, autofill, password, repository, varie e PGP."
weight = 90
draft = true
+++
-Placeholder.
+Apri **Impostazioni** dai tre puntini nella barra di ricerca dell'elenco, o dalla
+schermata di benvenuto. Le impostazioni sono divise in sei sezioni.
-## First heading
+## Generale
-Text.
+| Impostazione | Cosa fa |
+|---|---|
+| **Tema dell'App** | Chiaro, scuro, o secondo il risparmio energetico. |
+| **Organizzazione dei file delle password** | Come la compilazione automatica nomina i file che salva, per esempio `work/example.org.gpg` o `work/example.org/alice@example.org.gpg`. |
+| **Ordine password** | Prima le cartelle, oppure prima le usate di recente. |
+| **Disattiva la sincronizzazione trascinando** | Il gesto di trascinare in basso l'elenco non avvia più una sincronizzazione. |
+| **Filtro ricorsivo** | La ricerca guarda anche nelle cartelle sotto quella corrente. |
+| **Apri ricerca all'avvio** | Apre la barra di ricerca all'avvio dell'app. |
+| **Mostra tutti i file e cartelle** | Elenca anche i file che non sono password. |
+| **Abilita autenticazione biometrica** | Chiede l'impronta all'avvio dell'app. In [Sicurezza]({{< relref "/hardenedpass/reference/security" >}}) trovi cosa protegge e cosa no. |
+
+## Autofill
+
+| Impostazione | Cosa fa |
+|---|---|
+| **Attiva la compilazione automatica** | Rende HardenedPass il servizio di compilazione automatica. Vedi [Autofill]({{< relref "/hardenedpass/using/autofill" >}}). |
+| **Nome utente predefinito** | Usato quando la compilazione automatica non trova un nome utente nella voce o nel suo percorso. |
+| **Domini personalizzati** | Domini i cui sottodomini vengono trattati come siti separati. |
+
+## Password
+
+| Impostazione | Cosa fa |
+|---|---|
+| **Tipo di generatore di password** | Il generatore che si apre per primo: Classic (la scheda Casuale) o Diceware. |
+| **Timeout copia della password** | Per quanti secondi una password copiata resta negli appunti, 45 di default. 0 significa per sempre. |
+| **Mostra la password** | Se una password decifrata è subito visibile. La copia funziona anche quando è nascosta. |
+| **Copia automaticamente la password** | Copia la password appena una voce viene decifrata. |
+
+## Repository
+
+| Impostazione | Cosa fa |
+|---|---|
+| **Rebase al pull** | Attivo, i tuoi commit locali vanno sopra quelli del server. Spento, viene creato un merge commit. Attivo di default. |
+| **Modifica impostazioni del server di Git** | Cambia l'URL del repository e il modo di accedere. |
+| **Impostazioni proxy HTTP(S)** | Imposta un proxy. Appare solo per i remote HTTPS. |
+| **Configurazione Git locale e utilità** | Nome ed email dei commit, cronologia e gli strumenti di recupero descritti in [Sincronizzazione]({{< relref "/hardenedpass/using/sync" >}}). |
+| **Importa chiave SSH** | Legge una chiave SSH privata da un file. |
+| **Genera coppia di chiavi SSH** | Crea una nuova chiave SSH sul telefono. |
+| **Visualizza la chiave SSH pubblica generata** | Mostra la metà pubblica, da aggiungere al server. |
+| **Elimina repository** | Elimina la copia locale dell'archivio. Quella sul server non viene toccata, ma i commit locali non sincronizzati vanno persi. |
+
+## Varie
+
+| Impostazione | Cosa fa |
+|---|---|
+| **Esporta password** | Copia l'archivio, sempre cifrato, in una cartella a tua scelta. |
+| **Aggira la cronologia degli appunti** | Sui telefoni con una cronologia degli appunti, la riempie di numeri per farne uscire le password. |
+| **Registrazione di debug** | Attiva i log di debug, dopo un riavvio dell'app. Solo nelle build di release. |
+
+## Impostazioni PGP
+
+| Impostazione | Cosa fa |
+|---|---|
+| **Gestione chiavi** | Elenca le chiavi importate, ne importa di nuove ed elimina le vecchie. |
+| **Cifra in formato ASCII armor** | Scrive le voci come testo invece che in binario. Lascialo spento se non sai di averne bisogno. |
+| **Memorizza le frasi segrete** | Ricorda la passphrase della chiave, così le voci si aprono senza chiederla. Sperimentale, e richiede un blocco schermo attivo. |
+| **Cancella automaticamente le frasi segrete memorizzate** | Dimentica la passphrase allo spegnimento dello schermo. |
diff --git a/content/it/hardenedpass/reference/troubleshooting/index.md b/content/it/hardenedpass/reference/troubleshooting/index.md
index c87671c..43253b9 100644
--- a/content/it/hardenedpass/reference/troubleshooting/index.md
+++ b/content/it/hardenedpass/reference/troubleshooting/index.md
@@ -1,13 +1,89 @@
+++
title = "Risoluzione dei problemi"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Gli errori più comuni di HardenedPass, cosa significano e come risolverli: passphrase, chiavi, SSH, push rifiutato, detached HEAD, autofill."
weight = 110
draft = true
+++
-Placeholder.
+I messaggi qui sotto sono riportati in inglese, come nel codice dell'app. Con l'app in
+italiano ne vedi la traduzione.
-## First heading
+## Chiavi e passphrase
-Text.
+**L'app chiede di nuovo la passphrase e dice che è sbagliata.** La passphrase non
+corrisponde alla chiave privata. Se hai cambiato la passphrase della chiave su un computer,
+l'app vuole quella nuova. Con la memorizzazione attiva, la richiede e sostituisce il vecchio
+valore.
+
+**`Failed to import PGP key`.** Il file non è una chiave che l'app può usare. Le chiavi senza
+una sottochiave di cifratura vengono rifiutate, perché non potrebbero decifrare nulla.
+Controlla di aver esportato la chiave **privata**, con `gpg --armor --export-secret-keys`.
+
+**Una voce non si apre e nessuna chiave corrisponde.** L'archivio è cifrato per una chiave
+non importata. Confronta **Destinatari dell'archivio** nella schermata di importazione, o il
+file `.gpg-id`, con le chiavi in **Gestione chiavi**. Una chiave pubblica da sola non può
+decifrare: importa quella privata.
+
+**La chiave sta su una smartcard.** Per una chiave così GnuPG esporta uno stub, senza alcun
+materiale segreto. Con quello l'app non può decifrare: serve la vera chiave privata.
+
+**`Found .gpg-id, but it contains an invalid key ID, fingerprint or user ID`.** Il file
+`.gpg-id` contiene qualcosa che l'app non capisce. Controllalo su un computer: un ID chiave,
+fingerprint o indirizzo per riga.
+
+## Connessione
+
+**`The provided repository URL is not valid`.** Guarda le forme di indirizzo in
+[Collega l'app]({{< relref "/hardenedpass/getting-started/connect" >}}).
+
+**`Wrong password` o `Wrong passphrase`.** Riguarda la password del repository o la passphrase
+di una chiave SSH. Molti servizi di hosting vogliono un token di accesso invece della password
+dell'account.
+
+**`Selected file does not appear to be an SSH private key`.** Hai scelto la chiave pubblica,
+o un file in un altro formato. Scegli il file senza `.pub`.
+
+**La sincronizzazione fallisce dopo che il server è stato reinstallato o spostato.** La sua
+chiave host è cambiata. Se sei sicuro del motivo, usa **Cancella la chiave host salvata**
+nella schermata del repository, in **Modifica impostazioni del server di Git**. Se non lo sei,
+consideralo un attacco finché non ne sai di più.
+
+**L'accesso SSH viene rifiutato.** Controlla che la chiave pubblica sia sul server, per
+l'account giusto. **Visualizza la chiave SSH pubblica generata** la mostra per una chiave
+creata sul telefono.
+
+## Sincronizzazione
+
+**`Push was rejected by remote, run pull before pushing again`.** Il server ha commit che tu
+non hai. Usa **Sincronizza repository**, che fa pull e poi push.
+
+**`Pull has failed, you're in a detached head`.** Un conflitto ha fermato il rebase. I passi
+sono in [Sincronizzazione]({{< relref "/hardenedpass/using/sync" >}}).
+
+**`Merge has failed, you're in a conflicting state`.** Lo stesso conflitto, con **Rebase al
+pull** spento. La via d'uscita è l'hard reset descritto in
+[Sincronizzazione]({{< relref "/hardenedpass/using/sync" >}}), dopo aver salvato ciò che ti
+serve.
+
+**`The repository must be cloned before syncing changes`.** L'archivio sul telefono non ha un
+remote. Impostane uno in **Modifica impostazioni del server di Git** e clonalo.
+
+## Autofill
+
+**Non appare nessun suggerimento.** Controlla che HardenedPass sia il servizio di compilazione
+automatica scelto nelle impostazioni di Android, e che il browser sia nell'elenco in
+[Autofill]({{< relref "/hardenedpass/using/autofill" >}}).
+
+**Viene compilata solo la password.** È il livello di supporto del browser, come per Vanadium.
+
+**`This app is currently not supported`.** Da lì l'app non può salvare. Puoi comunque
+aggiungere la voce a mano.
+
+**Non succede nulla dopo aver toccato Salva.** Android 14 e successivi trattengono le finestre
+in background, e l'app ha un rimedio: aggiorna all'ultima versione.
+
+## Ancora bloccato?
+
+Apri una segnalazione sul [tracker](https://github.com/danixland/HardenedPass/issues). Indica
+quale versione usi e cosa hai fatto. Non incollare mai password, chiavi o nomi di voci reali.
diff --git a/content/it/hardenedpass/using/autofill/index.md b/content/it/hardenedpass/using/autofill/index.md
index eb9b4e0..f14113a 100644
--- a/content/it/hardenedpass/using/autofill/index.md
+++ b/content/it/hardenedpass/using/autofill/index.md
@@ -11,7 +11,7 @@ app e nei browser, senza bisogno di copiare nulla.
## Attivala
-Apri **Impostazioni** e attiva **Attiva la compilazione automatica**. L'app spiega cosa
+Apri **Impostazioni**, poi **Autofill**, e attiva **Attiva la compilazione automatica**. L'app spiega cosa
succederà ed elenca i browser installati con il livello di supporto di ciascuno. Tocca
OK, scegli HardenedPass nelle impostazioni di compilazione automatica di Android e
conferma.
@@ -54,7 +54,8 @@ password già compilati. Salva lì la voce, poi ricordati di
[sincronizzare]({{< relref "/hardenedpass/using/sync" >}}).
Firefox mostra anche una sua richiesta di salvataggio. Quella è del gestore di password di
-Firefox, non di HardenedPass, e puoi ignorarla.
+Firefox, non di HardenedPass, e puoi ignorarla. Per non vederla più, disattiva il salvataggio
+delle password nelle impostazioni di Firefox: resta solo la richiesta di HardenedPass.
## L'avviso di phishing
diff --git a/content/it/hardenedpass/using/sync/index.md b/content/it/hardenedpass/using/sync/index.md
index 7a2e1de..d931c00 100644
--- a/content/it/hardenedpass/using/sync/index.md
+++ b/content/it/hardenedpass/using/sync/index.md
@@ -32,7 +32,7 @@ può scegliere un vincitore. L'app usa di default un rebase (**Rebase al pull**)
sincronizzazione si ferma con un errore che dice che il pull non è riuscito e che sei in
detached HEAD. Il tuo lavoro non è perso.
-Apri **Impostazioni**, poi **Configurazione Git locale e utilità**. Hai due vie d'uscita:
+Apri **Impostazioni**, poi **Repository**, poi **Configurazione Git locale e utilità**. Hai due vie d'uscita:
### Tieni le tue modifiche
diff --git a/static/uppies/2026/11/hardenedpass-banner.png b/static/uppies/2026/11/hardenedpass-banner.png
new file mode 100644
index 0000000..da5664c
--- /dev/null
+++ b/static/uppies/2026/11/hardenedpass-banner.png
Binary files differ