{% extends "base.html" %} {% import "_ui.html" as ui %} {% block title %}Tadpole: phone{% endblock %} {% block body %} {% call ui.title('i-phone', 'Your phone') %}The Tadpole app on your phone keeps your diary on the phone itself. Pairing connects it to this computer so a copy of the diary is kept here, and so history and documents can be sent to the phone. It works over your home Wi-Fi, and over Tailscale if you use it. Making a key here shows a pairing code once: scan it with your phone's camera app and tap the link, or copy the link into the app under Settings. Cancel a key to unpair that phone.{% endcall %}
{% call ui.head('i-app', 'The phone app') %}A small app ({{ apk_kb }} KB) that keeps your diary on your phone and has the home-screen widget. It is signed with this computer's own key and is not on any store, so Android will ask permission to install from your browser the first time. Installing it over an older Tadpole widget app keeps the widget but starts with an empty diary on the phone: pair it below to bring your diary across.{% endcall %} {% if apk %}Download the phone app{% else %}

The phone app has not been built on this computer yet.

{% endif %}
{% call ui.head('i-new', 'Pair a phone') %}Give the phone a name so you can tell phones apart later. The code includes a secret key, so only show it to the phone you are pairing.{% endcall %} {% if not tls_ready %}
The home Wi-Fi listener is not set up on this computer yet, so only Tailscale addresses will work. Run the companion setup once to enable it.
{% endif %}
{% if new_token %}
{% call ui.head('i-code', 'Scan this with your phone') %}Open your phone's camera app, point it at the code, and tap the link that appears to open Tadpole. If nothing happens, copy the long link below into the app: Settings, Computer, paste the pairing link. The code and the key are shown only once. The phone needs to be on the same Wi-Fi as this computer, or on Tailscale.{% endcall %}
{{ qr|safe }}

{% for u in urls %}{{ u.label }}: {{ u.url }}{% if not loop.last %} · {% endif %}{% endfor %}{% if not urls %}No address found to give the phone.{% endif %}

{% endif %}

Paired phones

{% for k in phones %} {% else %}{% endfor %}
NameMadeLast synced
{{ k.name }}{{ k.created_at[:10] }}{{ (k.last_used_at or 'never')[:16]|replace('T', ' ') }} {% if k.revoked_at %}cancelled{% else %}
{% endif %}
No phones yet.
{% endblock %}