diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c081dcb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+hauk
diff --git a/frontend/assets/controls/locate-active.svg b/frontend/assets/controls/locate-active.svg
new file mode 100644
index 0000000..0593e59
--- /dev/null
+++ b/frontend/assets/controls/locate-active.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/frontend/assets/controls/locate-inactive.svg b/frontend/assets/controls/locate-inactive.svg
new file mode 100644
index 0000000..b8c82ef
--- /dev/null
+++ b/frontend/assets/controls/locate-inactive.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/frontend/assets/controls/locate-pending.svg b/frontend/assets/controls/locate-pending.svg
new file mode 100644
index 0000000..e4d6f82
--- /dev/null
+++ b/frontend/assets/controls/locate-pending.svg
@@ -0,0 +1,9 @@
+
+
+
diff --git a/frontend/assets/controls/radar.svg b/frontend/assets/controls/radar.svg
new file mode 100644
index 0000000..18bcc49
--- /dev/null
+++ b/frontend/assets/controls/radar.svg
@@ -0,0 +1,9 @@
+
+
diff --git a/frontend/assets/favicon.png b/frontend/assets/favicon.png
new file mode 100644
index 0000000..624af61
Binary files /dev/null and b/frontend/assets/favicon.png differ
diff --git a/frontend/assets/favicon.svg b/frontend/assets/favicon.svg
new file mode 100644
index 0000000..e7208ff
--- /dev/null
+++ b/frontend/assets/favicon.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/frontend/assets/lang/ca.json b/frontend/assets/lang/ca.json
new file mode 100644
index 0000000..bf005f4
--- /dev/null
+++ b/frontend/assets/lang/ca.json
@@ -0,0 +1,28 @@
+{
+ "google_play_badge_url": "https://play.google.com/intl/ca_ES/badges/static/images/badges/ca_badge_web_generic.png",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-ca.png",
+ "btn_decrypt": "Desxifrar",
+ "btn_cancel": "Cancel·la",
+ "btn_dismiss": "Rebutjar",
+ "last_update_days": "Fa {{time}} dies",
+ "last_update_hours": "Fa {{time}} hores",
+ "last_update_minutes": "Fa {{time}} minuts",
+ "last_update_seconds": "Fa {{time}} segons",
+ "status_offline": "Fora de línia",
+ "status_expired": "Caducat",
+ "dialog_connection_body": "S'ha perdut la connexió amb el servidor Hauk. Hauk intentarà tornar a connectar en segon pla. Comproveu que teniu connexió a la xarxa.",
+ "dialog_connection_head": "Error de connexió",
+ "dialog_expired_body": "Aquesta compartició d’ubicació ha caducat.",
+ "dialog_expired_head": "La compartició ha caducat",
+ "point_app_to": "Apunteu l'aplicació Hauk a aquest servidor per compartir la vostra ubicació:",
+ "gnss_signal_body": "El remitent està esperant el senyal GPS",
+ "gnss_signal_head": "Si us plau, esperi",
+ "e2e_unsupported": "Aquest compartiment està protegit per xifrat d'extrem a extrem. Sembla que el vostre navegador no admet les funcions criptogràfiques necessàries per desxifrar aquestes accions. Torneu-ho a provar amb un altre navegador web.",
+ "e2e_unavailable_secure": "Aquest compartiment està protegit per xifrat d'extrem a extrem. Actualment, el desxiframent no està disponible perquè no utilitzeu HTTPS. Assegureu-vos que utilitzeu HTTPS i, després, torneu-ho a provar.",
+ "e2e_incorrect": "La contrasenya de xifrat que heu introduït no és correcta. Si us plau torna-ho a provar.",
+ "e2e_password_prompt": "Aquest compartiment està protegit per xifrat d'extrem a extrem. Introduïu la contrasenya de xifratge per accedir al recurs compartit.",
+ "e2e_placeholder": "Contrasenya de xifrat",
+ "e2e_title": "Xifrat d'extrem a extrem",
+ "expired_body": "La ubicació compartida a la qual heu intentat accedir no s'ha trobat al servidor. Si aquest enllaç funcionava abans, la participació podria haver caducat.",
+ "expired_head": "L'ubicació ha expirat"
+}
diff --git a/frontend/assets/lang/de.json b/frontend/assets/lang/de.json
new file mode 100644
index 0000000..b1fcd55
--- /dev/null
+++ b/frontend/assets/lang/de.json
@@ -0,0 +1,36 @@
+{
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on.png",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/de_badge_web_generic.png",
+ "btn_dismiss": "Verwerfen",
+ "status_offline": "Offline",
+ "status_expired": "Abgelaufen",
+ "dialog_connection_body": "Die Verbindung zum Hauk-Server wurde unterbrochen. Hauk wird versuchen, sich im Hintergrund wieder zu verbinden. Bitte prüfen Sie, ob Sie über eine Netzwerkverbindung verfügen.",
+ "dialog_connection_head": "Verbindungsfehler",
+ "dialog_expired_body": "Diese Standortfreigabe ist abgelaufen.",
+ "dialog_expired_head": "Freigabe abgelaufen",
+ "point_app_to": "In der Hauk App diese URL eingeben, um Ihren Standort zu teilen:",
+ "gnss_signal_body": "Der Sender wartet auf ein GPS-Signal",
+ "gnss_signal_head": "Bitte warten",
+ "expired_body": "Die Standortfreigabe, auf die Sie zugreifen wollen, wurde nicht auf dem Server gefunden. Wenn dieser Link zuvor funktioniert hat, ist die Freigabe möglicherweise abgelaufen.",
+ "expired_head": "Standortfreigabe abgelaufen",
+ "btn_decrypt": "Entsperren",
+ "btn_cancel": "Abbrechen",
+ "last_update_days": "{{time}}T her",
+ "last_update_hours": "{{time}}S her",
+ "last_update_minutes": "{{time}}M her",
+ "last_update_seconds": "{{time}}S her",
+ "e2e_unsupported": "Diese Freigabe ist passwortgeschützt. Dem Browser fehlt die Funktionalität solche Freigaben zu öffnen. Bitte mit einem anderen Browser noch einmal probieren.",
+ "e2e_unavailable_secure": "Diese Freigabe ist passwortgeschützt. Die Freigabe kann nicht entsperrt werden, da kein HTTPS benutzt wird. Bitte sicherstellen, dass HTTPS benutzt wird, dann noch einmal probieren.",
+ "e2e_incorrect": "Das eingegebene Passwort ist falsch. Bitte noch einmal probieren.",
+ "e2e_password_prompt": "Diese Freigabe ist passwortgeschützt. Bitte das Passwort eingeben, um der Freigabe beizutreten.",
+ "e2e_placeholder": "Passwort eingeben",
+ "e2e_title": "Passwortgeschützt",
+ "google_play_badge_text": "Hole es von Google Play",
+ "f_droid_badge_text": "Hole es von F-Droid",
+ "btn_show_all": "Zeige alle",
+ "btn_close": "Schließen",
+ "control_show_self": "Zeige meine Position",
+ "dialog_user_navigate": "Navigiere zu",
+ "dialog_user_follow": "Auf der Karte zeigen",
+ "dialog_active_head": "Aktive Personen"
+}
diff --git a/frontend/assets/lang/en.json b/frontend/assets/lang/en.json
new file mode 100644
index 0000000..e7c75d6
--- /dev/null
+++ b/frontend/assets/lang/en.json
@@ -0,0 +1,36 @@
+{
+ "expired_head": "Location expired",
+ "expired_body": "The shared location you tried to access was not found on the server. If this link worked before, the share might have expired.",
+ "e2e_title": "Password protected",
+ "e2e_placeholder": "Enter password",
+ "e2e_password_prompt": "This share is password protected. Please enter the password to access the share.",
+ "e2e_incorrect": "The password you entered was wrong. Please try again.",
+ "e2e_unavailable_secure": "This share is password protected. You cannot unlock this share because you are not using HTTPS. Please ensure you are using HTTPS, then try again.",
+ "e2e_unsupported": "This share is password protected. Your browser lacks the functionality required to open such shares. Please try again with another web browser.",
+ "gnss_signal_head": "Please wait",
+ "gnss_signal_body": "Sender is waiting for GPS signal",
+ "point_app_to": "Point the Hauk app to this server to share your location:",
+ "dialog_expired_head": "Share expired",
+ "dialog_expired_body": "This location share has expired.",
+ "dialog_connection_head": "Connection error",
+ "dialog_connection_body": "Connection to the Hauk server was lost. Hauk will try to reconnect in the background. Please check that you have network connectivity.",
+ "dialog_active_head": "Active users",
+ "dialog_user_follow": "Show on map",
+ "dialog_user_navigate": "Navigate to",
+ "status_expired": "Expired",
+ "status_offline": "Offline",
+ "control_show_self": "Show my location",
+ "last_update_seconds": "{{time}}s ago",
+ "last_update_minutes": "{{time}}m ago",
+ "last_update_hours": "{{time}}h ago",
+ "last_update_days": "{{time}}d ago",
+ "btn_dismiss": "Dismiss",
+ "btn_cancel": "Cancel",
+ "btn_decrypt": "Unlock",
+ "btn_close": "Close",
+ "btn_show_all": "Show all",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on.png",
+ "f_droid_badge_text": "Get it on F-Droid",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png",
+ "google_play_badge_text": "Get it on Google Play"
+}
diff --git a/frontend/assets/lang/eu.json b/frontend/assets/lang/eu.json
new file mode 100644
index 0000000..050f216
--- /dev/null
+++ b/frontend/assets/lang/eu.json
@@ -0,0 +1,16 @@
+{
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-eu.png",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/eu_badge_web_generic.png",
+ "btn_dismiss": "Baztertu",
+ "status_offline": "Deskonektatuta",
+ "status_expired": "Iraungita",
+ "dialog_connection_body": "Hauk zerbitzariarekin konexioa galdu da. Hauk bigarren planoan konektatzen saiatuko da. Egiaztatu baduzula sarera konexioa.",
+ "dialog_connection_head": "Konexio errorea",
+ "dialog_expired_body": "Kokaleku partekatze honek iraungi du.",
+ "dialog_expired_head": "Partekatzea iraungita",
+ "point_app_to": "Zuzendu Hauk aplikazioa zerbitzari honetara kokalekua partekatzeko:",
+ "gnss_signal_body": "Igorlea GPS seinalearen zain dago",
+ "gnss_signal_head": "Itxaron mesedez",
+ "expired_body": "Atzitzen saiatu zaren partekatutako kokalekua ez da zerbitzarian aurkitu. Esteka honek lehen funtzionatzen bazuen, agian partekatzeak iraungi du.",
+ "expired_head": "Kokalekua iraungita"
+}
diff --git a/frontend/assets/lang/fr.json b/frontend/assets/lang/fr.json
new file mode 100644
index 0000000..06e7281
--- /dev/null
+++ b/frontend/assets/lang/fr.json
@@ -0,0 +1,36 @@
+{
+ "btn_dismiss": "Annuler",
+ "status_offline": "Hors ligne",
+ "status_expired": "Expiré",
+ "dialog_connection_body": "La connection avec le serveur Hauk a été perdue. Hauk essayera de se reconnecter en tâche de fond. Veuillez vérifier votre connexion réseau.",
+ "dialog_connection_head": "Erreur de connection",
+ "dialog_expired_body": "Ce partage de localisation a expiré.",
+ "dialog_expired_head": "Partage expiré",
+ "point_app_to": "Renseignez ce serveur dans votre application Hauk pour partager votre localisation:",
+ "gnss_signal_body": "La source manque de signal GPS",
+ "gnss_signal_head": "Veuillez patienter",
+ "expired_body": "La localisation que vous recherchez n'a pas été trouvée. Si ce lien fonctionnait, le partage de localisation a peut-être expiré.",
+ "expired_head": "Localisation expirée",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-fr.png",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/fr_badge_web_generic.png",
+ "e2e_password_prompt": "Ce partage est protégé par un mot de passe. Entrez le mot de passe pour y accéder.",
+ "google_play_badge_text": "Installer par Google Play",
+ "f_droid_badge_text": "Installer par F-Droid",
+ "btn_show_all": "Monter tout",
+ "btn_close": "Fermer",
+ "btn_decrypt": "Déverrouiller",
+ "btn_cancel": "Annuler",
+ "last_update_days": "Il y a {{time}}j",
+ "last_update_hours": "Il y a {{time}}h",
+ "last_update_minutes": "Il y a {{time}}m",
+ "last_update_seconds": "Il y a {{time}}s",
+ "control_show_self": "Montrer ma position",
+ "dialog_user_navigate": "Aller à",
+ "dialog_user_follow": "Monter sur la carte",
+ "dialog_active_head": "Utilisateurs actifs",
+ "e2e_unsupported": "Ce partage est protégé par un mot de passe. Votre navigateur ne dispose pas de la fonctionnalité permettant d'ouvrir ce type de partage. Merci de réessayer avec un autre navigateur.",
+ "e2e_unavailable_secure": "Ce partage est protégé par un mot de passe. Vous ne pouvez pas le débloquer car vous n'utilisez pas HTTPS. Assurez-vous d'utiliser HTTPS, puis réessayez.",
+ "e2e_incorrect": "Le mot de passe que vous avez saisi est incorrect. Veuillez réessayer.",
+ "e2e_placeholder": "Entrez votre mot de passe",
+ "e2e_title": "Protégé par mot de passe"
+}
diff --git a/frontend/assets/lang/it.json b/frontend/assets/lang/it.json
new file mode 100644
index 0000000..ab73839
--- /dev/null
+++ b/frontend/assets/lang/it.json
@@ -0,0 +1,36 @@
+{
+ "google_play_badge_text": "Disponibile su Google Play",
+ "google_play_badge_url": "https://play.google.com/intl/it_it/badges/static/images/badges/it_badge_web_generic.png",
+ "f_droid_badge_text": "Disponibile su F-Droid",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-it.png",
+ "btn_show_all": "Mostra tutto",
+ "btn_close": "Chiudi",
+ "btn_decrypt": "Sblocca",
+ "btn_cancel": "Annulla",
+ "btn_dismiss": "Ignora",
+ "last_update_days": "{{time}}g fa",
+ "last_update_hours": "{{time}} ore fa",
+ "last_update_minutes": "{{time}}min fa",
+ "last_update_seconds": "{{time}}sec fa",
+ "control_show_self": "Mostra la mia posizione",
+ "status_offline": "Non in linea",
+ "status_expired": "Scaduto",
+ "dialog_user_navigate": "Naviga verso",
+ "dialog_user_follow": "Mostra sulla mappa",
+ "dialog_active_head": "Utenti attivi",
+ "dialog_connection_body": "La connessione al server Hauk è stata perduta. Hauk tenterà di riconnersi. Controlla di avere una connessione di rete attiva.",
+ "dialog_connection_head": "Errore di connessione",
+ "dialog_expired_body": "Questa condivisione della posizione è scaduta.",
+ "dialog_expired_head": "Condivisione scaduta",
+ "point_app_to": "Inserisci il seguente link nell'app Hauk per condividere la tua posizione:",
+ "gnss_signal_body": "Il mittente è in attesa del segnale GPS",
+ "gnss_signal_head": "Attendere prego",
+ "e2e_unsupported": "Questa condivisione è protetta da password. Il tuo browser non ha le funzionalità necessarie per accedervi. Riprova con un altro browser.",
+ "e2e_unavailable_secure": "La condivisione è protetta da password. Non puoi accedervi perché non stai usando HTTPS. Assicurati di star usando HTTPS e riprova.",
+ "e2e_incorrect": "La password inserita non è corretta. Riprova.",
+ "e2e_password_prompt": "Questa condivisione è protetta da password. Inserire la password per accedervi.",
+ "e2e_placeholder": "Inserire password",
+ "e2e_title": "Protetto da password",
+ "expired_body": "La posizione condivisa a cui hai tentato di accedere non è stata trovata sul server. Se questo indirizzo funzionava in passato, la condivisione potrebbe essere scaduta.",
+ "expired_head": "Posizione scaduta"
+}
diff --git a/frontend/assets/lang/ko.json b/frontend/assets/lang/ko.json
new file mode 100644
index 0000000..411d4e5
--- /dev/null
+++ b/frontend/assets/lang/ko.json
@@ -0,0 +1,36 @@
+{
+ "btn_dismiss": "닫기",
+ "google_play_badge_text": "Google Play 에서 다운로드",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/ko_badge_web_generic.png",
+ "f_droid_badge_text": "F-Droid 에서 다운로드",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-ko.png",
+ "btn_show_all": "모두 보기",
+ "btn_close": "닫기",
+ "btn_decrypt": "잠금 해제",
+ "btn_cancel": "취소",
+ "last_update_days": "{{time}}일 전",
+ "last_update_hours": "{{time}}시간 전",
+ "last_update_minutes": "{{time}}분 전",
+ "last_update_seconds": "{{time}}초 전",
+ "control_show_self": "내 위치 표시하기",
+ "status_offline": "오프라인",
+ "status_expired": "만료됨",
+ "dialog_user_navigate": "이 위치로 안내",
+ "dialog_user_follow": "지도에서 보기",
+ "dialog_active_head": "활성 사용자들",
+ "dialog_connection_body": "Hauk 서버로의 접속이 끊겼습니다. Hauk은 백그라운드에서 재접속을 시도하겠습니다. 네트워크 접속 여부를 확인해주세요.",
+ "dialog_connection_head": "접속 오류",
+ "dialog_expired_body": "이 위치 공유가 만료되었습니다.",
+ "dialog_expired_head": "링크가 만료됨",
+ "point_app_to": "위치를 공유하기 위해 Hauk 앱을 이 서버로 설정하여 주십시오:",
+ "gnss_signal_body": "발신자가 GPS 신호를 기다리고 있습니다",
+ "gnss_signal_head": "잠시만 기다려주세요",
+ "e2e_unsupported": "이 링크는 비밀번호로 보호되어 있습니다. 사용하고 계시는 브라우저는 잠금을 해제하기 위한 기능을 지원하지 않습니다. 다른 브라우저로 다시 시도해주세요.",
+ "e2e_unavailable_secure": "이 링크는 비밀번호로 보호되어 있습니다. HTTPS를 사용하고 있지 않기 때문에 보호를 해제할 수 없습니다. HTTPS를 사용중인지 확인하시고 다시 시도해주세요.",
+ "e2e_incorrect": "입력한 비밀번호가 올바르지 않습니다. 다시 시도해주세요.",
+ "e2e_password_prompt": "이 링크는 비밀번호로 보호되어 있습니다. 링크에 접근하기 위해 비밀번호를 입력해주세요.",
+ "e2e_placeholder": "비밀번호를 입력하세요",
+ "e2e_title": "비밀번호로 보호됨",
+ "expired_body": "요청하신 위치정보를 서버에서 찾을 수 없습니다. 기존에 작동하던 링크라면, 위치 공유가 만료되었을 수 있습니다.",
+ "expired_head": "위치 정보가 만료됨"
+}
diff --git a/frontend/assets/lang/nb_NO.json b/frontend/assets/lang/nb_NO.json
new file mode 100644
index 0000000..1ab2928
--- /dev/null
+++ b/frontend/assets/lang/nb_NO.json
@@ -0,0 +1,36 @@
+{
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-no.png",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/no_badge_web_generic.png",
+ "btn_dismiss": "Lukk",
+ "status_offline": "Frakoblet",
+ "status_expired": "Utløpt",
+ "dialog_connection_body": "Tilkoblingen til Hauk-serveren forsvant. Hauk vil prøve å koble til igjen i bakgrunnen. Vennligst sjekk at du er tilkoblet nettet.",
+ "dialog_connection_head": "Tilkoblingsfeil",
+ "dialog_expired_body": "Den delte posisjonen du fulgte har utløpt.",
+ "dialog_expired_head": "Deling utløpt",
+ "point_app_to": "Skriv inn følgende link i Hauk-appen for å dele posisjonen din:",
+ "gnss_signal_body": "Sender venter på GPS-signal",
+ "gnss_signal_head": "Vennligst vent",
+ "expired_body": "Den delte posisjonen du prøvde å åpne ble ikke funnet på serveren. Hvis denne linken virket tidligere, kan det hende at delingen har utløpt.",
+ "expired_head": "Posisjon utløpt",
+ "btn_decrypt": "Åpne",
+ "btn_cancel": "Avbryt",
+ "e2e_unsupported": "Denne delte posisjonen er passordbeskyttet. Nettleseren din mangler funksjonaliteten som kreves for å åpne slike delinger. Vennligst prøv igjen med en annen nettleser.",
+ "e2e_unavailable_secure": "Denne delte posisjonen er passordbeskyttet. Du kan ikke åpne denne delingen fordi du ikke bruker HTTPS for øyeblikket. Vennligst last inn siden med HTTPS og prøv igjen.",
+ "e2e_incorrect": "Passordet du skrev inn er feil. Vennligst prøv igjen.",
+ "e2e_password_prompt": "Denne delte posisjonen er passordbeskyttet Vennligst skriv inn passordet for å få tilgang til delingen.",
+ "e2e_placeholder": "Skriv inn passord",
+ "e2e_title": "Passordbeskyttet",
+ "last_update_days": "{{time}}d siden",
+ "last_update_hours": "{{time}}t siden",
+ "last_update_minutes": "{{time}}m siden",
+ "last_update_seconds": "{{time}}s siden",
+ "btn_show_all": "Vis alle",
+ "btn_close": "Lukk",
+ "control_show_self": "Vis posisjonen min",
+ "dialog_user_navigate": "Naviger til",
+ "dialog_user_follow": "Vis på kartet",
+ "dialog_active_head": "Aktive brukere",
+ "google_play_badge_text": "Tilgjengelig på Google Play",
+ "f_droid_badge_text": "Tilgjengelig på F-Droid"
+}
diff --git a/frontend/assets/lang/nl.json b/frontend/assets/lang/nl.json
new file mode 100644
index 0000000..fd67b17
--- /dev/null
+++ b/frontend/assets/lang/nl.json
@@ -0,0 +1,36 @@
+{
+ "dialog_expired_body": "De locatiedeling is verlopen.",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-nl.png",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/nl_badge_web_generic.png",
+ "btn_dismiss": "Sluiten",
+ "status_offline": "Offline",
+ "status_expired": "Verlopen",
+ "dialog_connection_body": "De verbinding met de Hauk server is verbroken. Hauk zal proberen om opnieuw te verbinden in de achtergrond. Controleer alstublieft dat u een werkende internetverbinding heeft.",
+ "dialog_connection_head": "Verbindingsfout",
+ "dialog_expired_head": "Locatiedeling verlopen",
+ "point_app_to": "Stuur de Hauk app naar deze server om uw locatie te delen:",
+ "gnss_signal_body": "Verzender is aan het wachten op GPS signaal",
+ "gnss_signal_head": "Wacht alstublieft",
+ "expired_body": "The locatiedeling die u probeerde te bekijken kon niet gevonden worden op de server. Als deze link eerder wel werkte, dan zou de sessie verlopen kunnen zijn.",
+ "expired_head": "Locatie verlopen",
+ "btn_decrypt": "Ontgrendelen",
+ "btn_cancel": "Annuleren",
+ "last_update_days": "{{time}}d geleden",
+ "last_update_hours": "{{time}}u geleden",
+ "last_update_minutes": "{{time}}m geleden",
+ "last_update_seconds": "{{time}}s geleden",
+ "e2e_unsupported": "Deze locatiedeling is met wachtwoord beveiligd. Uw browser mist functionaliteit vereist om deze locatiedelingen te openen. Probeer het alstublieft met een andere browser.",
+ "e2e_unavailable_secure": "Deze locatiedeling is met wachtwoord beveiligd. U kunt de locatiedeling niet ontgrendelen omdat u geen HTTPS gebruikt. Zorg ervoor dat u met HTTPS verbindt, en probeer het dan opnieuw.",
+ "e2e_incorrect": "Het ingevoerde wachtwoord is incorrect. Probeer het alstublieft nog eens.",
+ "e2e_password_prompt": "Deze deling is met wachtwoord beveiligd. Vul het wachtwoord in om toegang te krijgen tot de deling.",
+ "e2e_placeholder": "Voer wachtwoord in",
+ "e2e_title": "Beveiligd met wachtwoord",
+ "google_play_badge_text": "Download op Google Play",
+ "f_droid_badge_text": "Download op F-Droid",
+ "btn_show_all": "Toon alle",
+ "btn_close": "Sluiten",
+ "control_show_self": "Toon mijn locatie",
+ "dialog_user_navigate": "Navigeer naar",
+ "dialog_user_follow": "Toon op kaart",
+ "dialog_active_head": "Actieve gebruikers"
+}
diff --git a/frontend/assets/lang/nn.json b/frontend/assets/lang/nn.json
new file mode 100644
index 0000000..8dac2ca
--- /dev/null
+++ b/frontend/assets/lang/nn.json
@@ -0,0 +1,36 @@
+{
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-no.png",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/no_badge_web_generic.png",
+ "btn_dismiss": "Lukk",
+ "status_offline": "Fråkopla",
+ "status_expired": "Gått ut",
+ "dialog_connection_body": "Tilkoplinga til Hauk-serveren forsvann. Hauk vil prøva å kopla til igjen i bakgrunnen. Vennlegast sjekk at du er tilkopla nett.",
+ "dialog_connection_head": "Tilkoplingsfeil",
+ "dialog_expired_body": "Den delte posisjonen du følgde har gått ut.",
+ "dialog_expired_head": "Deling gått ut",
+ "point_app_to": "Skriv inn følgjande link i Hauk-appen for å dela posisjonen din:",
+ "gnss_signal_body": "Sendar ventar på GPS-signal",
+ "gnss_signal_head": "Ver vennleg og vent",
+ "expired_body": "Den delte posisjonen du prøvde å opna vart ikkje funne på serveren. Viss denne linken verkte tidlegare, kan det hendet at delingen har gått ut.",
+ "expired_head": "Posisjon gått ut",
+ "btn_decrypt": "Opne",
+ "btn_cancel": "Avbryt",
+ "e2e_unsupported": "Denne delte posisjonen krev passord for å opnast. Nettlesaren din mangler dei funksjonane som krevjast for å opna slike delingar. Ver vennleg og prøv igjen med ein annan nettlesar.",
+ "e2e_unavailable_secure": "Denne delte posisjonen krev passord for å opnast. Du kan ikkje opna denne delingen fordi du ikkje bruker HTTPS. Ver venleg og last inn sidan med HTTPS og prøv igjen.",
+ "e2e_incorrect": "Passordet du skreiv inn er feil. Ver vennleg og prøv igjen.",
+ "e2e_password_prompt": "Denne delte posisjonen krev passord for å opnast. Ver vennleg og skriv inn passordet for å få tilgang til delinga.",
+ "e2e_placeholder": "Skriv inn passord",
+ "e2e_title": "Passord krevjast",
+ "last_update_days": "{{time}}d sidan",
+ "last_update_hours": "{{time}}t sidan",
+ "last_update_minutes": "{{time}}m sidan",
+ "last_update_seconds": "{{time}}s sidan",
+ "btn_show_all": "Vis alle",
+ "btn_close": "Lukk",
+ "control_show_self": "Vis posisjonen min",
+ "dialog_user_navigate": "Naviger til",
+ "dialog_user_follow": "Vis på kartet",
+ "dialog_active_head": "Aktive brukarar",
+ "google_play_badge_text": "Tilgjengeleg på Google Play",
+ "f_droid_badge_text": "Tilgjengeleg på F-Droid"
+}
diff --git a/frontend/assets/lang/pl.json b/frontend/assets/lang/pl.json
new file mode 100644
index 0000000..80f9410
--- /dev/null
+++ b/frontend/assets/lang/pl.json
@@ -0,0 +1,36 @@
+{
+ "google_play_badge_text": "Pobierz z Google Play",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/pl_badge_web_generic.png",
+ "f_droid_badge_text": "Pobierz z F-Droid",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-pl.png",
+ "btn_show_all": "Pokaż wszystko",
+ "btn_close": "Zamknij",
+ "btn_decrypt": "Odblokuj",
+ "btn_cancel": "Anuluj",
+ "btn_dismiss": "Odrzuć",
+ "last_update_days": "{{time}} dni temu",
+ "last_update_hours": "{{time}}h temu",
+ "last_update_minutes": "{{time}}m temu",
+ "last_update_seconds": "{{time}s temu",
+ "control_show_self": "Pokaż moją lokalizację",
+ "status_offline": "Offline",
+ "status_expired": "Wygasło",
+ "dialog_user_navigate": "Nawiguj do",
+ "dialog_user_follow": "Pokaż na mapie",
+ "dialog_active_head": "Aktywni użytkownicy",
+ "dialog_connection_body": "Połączenie z serwerem Hauk zostało utracone. Hauk spróbuje odzyskać połączenie. Proszę sprawdzić swoje połączenie sieciowe.",
+ "dialog_connection_head": "Błąd połączenia",
+ "dialog_expired_body": "Ta sesja udostępniania wygasła.",
+ "dialog_expired_head": "Sesja wygasła",
+ "point_app_to": "Wprowadź w aplikacji Hauk ten adres serwera:",
+ "gnss_signal_body": "Nadawca oczekuje na sygnał GPS",
+ "gnss_signal_head": "Proszę czekać",
+ "e2e_unsupported": "Ta sesja jest chroniona hasłem. Twoja przeglądarka nie obsługuje funkcji potrzebnych do otwierania takich sesji. Spróbuj użyć innej przeglądarki.",
+ "e2e_unavailable_secure": "Ta sesja jest chroniona hasłem. Nie można jej odblokować, gdyż nie używasz protokołu HTTPS. Upewnij się, że używasz protokołu HTTPS i spróbuj ponownie.",
+ "e2e_incorrect": "Niepoprawne hasło. Spróbuj ponownie.",
+ "e2e_password_prompt": "Ta sesja jest chroniona hasłem. Wprowadź hasło.",
+ "e2e_placeholder": "Wprowadź hasło",
+ "e2e_title": "Chronione hasłem",
+ "expired_body": "Lokalizacja którą próbujesz zobaczyć nie została odnaleziona na serwerze. Jeśli ten link wcześniej działał, oznacza to, że sesja udostępniania mogła wygasnąć.",
+ "expired_head": "Lokalizacja wygasła"
+}
diff --git a/frontend/assets/lang/pt_BR.json b/frontend/assets/lang/pt_BR.json
new file mode 100644
index 0000000..ef3f167
--- /dev/null
+++ b/frontend/assets/lang/pt_BR.json
@@ -0,0 +1,36 @@
+{
+ "expired_head": "Localização Expirada",
+ "expired_body": "O local compartilhado que você tentou acessar não foi encontrado no servidor. Se esse link funcionou antes, o compartilhamento pode ter expirado.",
+ "e2e_title": "Senha protegia",
+ "e2e_placeholder": "Digite a senha",
+ "e2e_password_prompt": "Esse compartilhamento é protegido por senha. Digite a senha para acessar o compartilhamento.",
+ "e2e_incorrect": "A senha que você digitou estava errada. Por favor, tente novamente.",
+ "e2e_unavailable_secure": "Esse compartilhamento é protegido por senha. Você não pode desbloquear esse compartilhamento porque não está usando HTTPS. Verifique se você está usando HTTPS e tente novamente.",
+ "e2e_unsupported": "Esse compartilhamento é protegido por senha. Seu navegador não possui a funcionalidade necessária para abrir esses compartilhamentos. Tente novamente com outro navegador da web.",
+ "gnss_signal_head": "Por favor, aguarde",
+ "gnss_signal_body": "Remetente está aguardando sinal de GPS",
+ "point_app_to": "Aponte o aplicativo Hauk para este servidor para compartilhar sua localização:",
+ "dialog_expired_head": "Compartilhamento expirado",
+ "dialog_expired_body": "Este compartilhamento de local expirou.",
+ "dialog_connection_head": "Erro na conecção",
+ "dialog_connection_body": "A conexão com o servidor Hauk foi perdida. Hauk tentará se reconectar em segundo plano. Verifique se você possui conectividade de rede.",
+ "dialog_active_head": "Usuarios Ativos",
+ "dialog_user_follow": "Mostrar no mapa",
+ "dialog_user_navigate": "Navegar para",
+ "status_expired": "Expirado",
+ "status_offline": "Offline",
+ "control_show_self": "Mostrar minha localização",
+ "last_update_seconds": "{{time}} segundos atras",
+ "last_update_minutes": "{{time}} minutos atras",
+ "last_update_hours": "{{time}} horas atras",
+ "last_update_days": "{{time}} dias atras",
+ "btn_dismiss": "Dispensar",
+ "btn_cancel": "Cancelar",
+ "btn_decrypt": "Desbloquear",
+ "btn_close": "Fechar",
+ "btn_show_all": "Mostrar Todos",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-pt-br.png",
+ "f_droid_badge_text": "Obtê-lo no F-Droid",
+ "google_play_badge_url": "https://play.google.com/intl/pt_br/badges/static/images/badges/pt_badge_web_generic.png",
+ "google_play_badge_text": "Obtê-lo no Google Play"
+}
diff --git a/frontend/assets/lang/ro.json b/frontend/assets/lang/ro.json
new file mode 100644
index 0000000..035bc62
--- /dev/null
+++ b/frontend/assets/lang/ro.json
@@ -0,0 +1,36 @@
+{
+ "dialog_connection_body": "S-a pierdut conexiunea la serverul. Hauk va încerca să se reconecteze în fundal. Vă rugăm să verificați dacă aveți conectivitate la rețea.",
+ "e2e_unsupported": "Această partajare este protejată cu parolă. Aplicația dumneavoastră de navigare pe internet nu are funcționalitatea necesară pentru a deschide o asemenea partajare. Vă rugăm să reîncercați cu alta.",
+ "e2e_unavailable_secure": "Această partajare este protejată cu parolă. Nu puteți debloca această partajare pentru ca nu utilizați HTTPS. Vă rugăm să vă asigurați că folosiți HTTPS, apoi reîncercați.",
+ "e2e_incorrect": "Parola introdusă este eronată. Vă rugăm să reîncercați.",
+ "e2e_password_prompt": "Această partajare este protejată cu parolă. Vă rugăm să introduceți parola pentru a o accesa.",
+ "expired_body": "Locația partajată pe care ați încercat să o accesați nu a fost găsită pe server. Dacă această adresă a funcționat înainte, se poate să fi expirat deja.",
+ "btn_cancel": "Anulare",
+ "btn_dismiss": "Revocare",
+ "dialog_connection_head": "Eroare de conexiune",
+ "google_play_badge_url": "https://play.google.com/intl/ro_ro/badges/static/images/badges/ro_badge_web_generic.png",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-ro.png",
+ "btn_decrypt": "Deblocare",
+ "last_update_days": "Acum {{time}}z",
+ "last_update_hours": "Acum {{time}}o",
+ "last_update_minutes": "Acum {{time}}m",
+ "last_update_seconds": "Acum {{time}}s",
+ "status_offline": "Deconectat",
+ "status_expired": "Expirată",
+ "dialog_expired_body": "Această partajare de locației a expirat.",
+ "dialog_expired_head": "Partajare expirată",
+ "point_app_to": "Folosiți aplicația Hauk cu acest server pentru a vă partaja locația:",
+ "gnss_signal_body": "Expeditorul așteaptă semnalul GPS",
+ "gnss_signal_head": "Vă rugăm să așteptați",
+ "e2e_placeholder": "Introduceți parola",
+ "e2e_title": "Protejată cu parolă",
+ "expired_head": "Sesiune expirată",
+ "btn_show_all": "Arată toate",
+ "btn_close": "Închide",
+ "control_show_self": "Arată locația mea",
+ "dialog_user_navigate": "Navighează",
+ "dialog_user_follow": "Arată pe hartă",
+ "dialog_active_head": "Persoane active",
+ "google_play_badge_text": "Acum pe Google Play",
+ "f_droid_badge_text": "Acum pe F-Droid"
+}
diff --git a/frontend/assets/lang/ru.json b/frontend/assets/lang/ru.json
new file mode 100644
index 0000000..098df68
--- /dev/null
+++ b/frontend/assets/lang/ru.json
@@ -0,0 +1,32 @@
+{
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-ru.png",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/ru_badge_web_generic.png",
+ "btn_dismiss": "Отменить",
+ "status_offline": "Не подключено",
+ "status_expired": "Истекло",
+ "dialog_connection_body": "Соединение с сервером Hauk потеряно. Hauk будет пытаться переподключится в фоне. Пожалуйста проверьте соединение с сетью.",
+ "dialog_connection_head": "Ошибка подлючения",
+ "dialog_expired_body": "Эта шара устарела.",
+ "dialog_expired_head": "Шара устарела",
+ "point_app_to": "Укажите этот сервер в приложении Hauk что бы делится своим местоположением:",
+ "gnss_signal_body": "Ждем сигнала GPS",
+ "gnss_signal_head": "Пожалуйста подождите",
+ "expired_body": "Шара к которой вы пытаетесь получить доступ не найдена на сервере. Если эта ссылка работала в прошлом, возможно истекло время жизни шары.",
+ "expired_head": "Местоположение устарело",
+ "btn_decrypt": "Разблокировать",
+ "btn_cancel": "Отмена",
+ "e2e_placeholder": "Введите пароль",
+ "google_play_badge_text": "Установить из Google Play",
+ "btn_show_all": "Показать все",
+ "btn_close": "Закрыть",
+ "last_update_days": "был {{time}} дней назад",
+ "last_update_hours": "был {{time}} час(ов) назад",
+ "last_update_minutes": "был {{time}} минут назад",
+ "last_update_seconds": "был {{time}} назад",
+ "control_show_self": "Показать мое местоположение",
+ "dialog_user_follow": "Показать на карте",
+ "dialog_active_head": "Активные пользователи",
+ "e2e_incorrect": "Неверный пароль. Попробуйте еще раз.",
+ "e2e_password_prompt": "Это местоположение защищено паролем. Пожалуйста, введите пароль.",
+ "e2e_title": "Защищено паролем"
+}
diff --git a/frontend/assets/lang/tr.json b/frontend/assets/lang/tr.json
new file mode 100644
index 0000000..d6ca6ec
--- /dev/null
+++ b/frontend/assets/lang/tr.json
@@ -0,0 +1,36 @@
+{
+ "google_play_badge_text": "Google Play'den alın",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/tr_badge_web_generic.png",
+ "f_droid_badge_text": "F-Droid'den alın",
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-tr.png",
+ "btn_show_all": "Hepsini göster",
+ "btn_close": "Kapat",
+ "btn_decrypt": "Kilidi aç",
+ "btn_cancel": "Vazgeç",
+ "btn_dismiss": "Yoksay",
+ "last_update_days": "{{time}} gün önce",
+ "last_update_hours": "{{time}} saat önce",
+ "last_update_minutes": "{{time}} dakika önce",
+ "last_update_seconds": "{{time}} saniye önce",
+ "control_show_self": "Konumumu göster",
+ "status_offline": "Çevrimdışı",
+ "status_expired": "Süresi doldu",
+ "dialog_user_navigate": "Şu dizine git",
+ "dialog_user_follow": "Haritada göster",
+ "dialog_active_head": "Aktif kullanıcılar",
+ "dialog_connection_body": "Hauk sunucusuna bağlantı koptu. Hauk arkaplanda bağlanmayı tekrar deneyecek. İnternet bağlantınızın çalışır olduğundan emin olunuz.",
+ "dialog_connection_head": "Bağlantı hatası",
+ "dialog_expired_body": "Bu konumun paylaşım süresi doldu.",
+ "dialog_expired_head": "Paylaşım süresi doldu",
+ "point_app_to": "Konumunuzu paylaşmak için Hauk uygulamasını şu sunucuya yönlendirin:",
+ "gnss_signal_body": "GPS sinyali bekleniyor",
+ "gnss_signal_head": "Lütfen bekleyin",
+ "e2e_unsupported": "Bu paylaşım parola korumalı. Tarayıcınız paylaşımın açılabilmesi için gerekli özellikleri karşılamıyor. Lütfen başka bir tarayıcıyla tekrar deneyiniz.",
+ "e2e_unavailable_secure": "Bu paylaşım parola korumalı. Bu paylaşımın kilidini açamazsınız çünkü HTTPS kullanmıyorsunuz. Lütfen HTTPS kullandığınıza emin olun ve tekrar deneyiniz.",
+ "e2e_incorrect": "Girdiğiniz parola yanlış. Lütfen tekrar deneyiniz.",
+ "e2e_password_prompt": "Bu paylaşım parola korumalı. Lütfen erişebilmek için parolayı giriniz.",
+ "e2e_placeholder": "Parolayı giriniz",
+ "e2e_title": "Parola korumalı",
+ "expired_body": "Ulaşmaya çalıştığınız paylaşılmış lokasyon sunucuda bulunamadı. Eğer bu link daha önce çalıştıysa, paylaşımın süresi dolmuş olabilir.",
+ "expired_head": "Konum süresi doldu"
+}
diff --git a/frontend/assets/lang/uk.json b/frontend/assets/lang/uk.json
new file mode 100644
index 0000000..542aae4
--- /dev/null
+++ b/frontend/assets/lang/uk.json
@@ -0,0 +1,16 @@
+{
+ "f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-ua.png",
+ "google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/ua_badge_web_generic.png",
+ "btn_dismiss": "Відмінити",
+ "status_offline": "Офлайн",
+ "status_expired": "Термін дії закінчився",
+ "dialog_connection_body": "З’єднання з сервером Hauk було втрачено. Hauk спробує знову підключитися на задньому плані. Перевірте наявність у вас підключення до мережі.",
+ "dialog_connection_head": "Помилка з'єднання",
+ "dialog_expired_body": "Термін дії цієї шари закінчився.",
+ "dialog_expired_head": "Шара недійсна",
+ "point_app_to": "Налаштуйте Hauk на цей сервер щоб поділитися своїм місцеположенням:",
+ "gnss_signal_body": "Чекаємо на сигнал GPS",
+ "gnss_signal_head": "Будь ласка зачекайте",
+ "expired_body": "Розшарене місцезнаходження, до якого ви намагалися отримати доступ, не знайдено на сервері. Якщо це посилання працювало раніше, шара, можливо, померла.",
+ "expired_head": "Термін дії закінчився"
+}
diff --git a/frontend/assets/location-pending.svg b/frontend/assets/location-pending.svg
new file mode 100644
index 0000000..e4d7de9
--- /dev/null
+++ b/frontend/assets/location-pending.svg
@@ -0,0 +1,13 @@
+
+
+
diff --git a/frontend/assets/logo.svg b/frontend/assets/logo.svg
new file mode 100644
index 0000000..4c5f6ec
--- /dev/null
+++ b/frontend/assets/logo.svg
@@ -0,0 +1,30 @@
+
+
diff --git a/frontend/assets/markers/moving-dead.svg b/frontend/assets/markers/moving-dead.svg
new file mode 100644
index 0000000..b1faaa2
--- /dev/null
+++ b/frontend/assets/markers/moving-dead.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/frontend/assets/markers/moving-live.svg b/frontend/assets/markers/moving-live.svg
new file mode 100644
index 0000000..ddf8ea6
--- /dev/null
+++ b/frontend/assets/markers/moving-live.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/frontend/assets/markers/moving-rough.svg b/frontend/assets/markers/moving-rough.svg
new file mode 100644
index 0000000..d20fe5b
--- /dev/null
+++ b/frontend/assets/markers/moving-rough.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/frontend/assets/markers/still-dead.svg b/frontend/assets/markers/still-dead.svg
new file mode 100644
index 0000000..56b7f1e
--- /dev/null
+++ b/frontend/assets/markers/still-dead.svg
@@ -0,0 +1,5 @@
+
+
diff --git a/frontend/assets/markers/still-live.svg b/frontend/assets/markers/still-live.svg
new file mode 100644
index 0000000..8aebd2c
--- /dev/null
+++ b/frontend/assets/markers/still-live.svg
@@ -0,0 +1,5 @@
+
+
diff --git a/frontend/assets/markers/still-rough.svg b/frontend/assets/markers/still-rough.svg
new file mode 100644
index 0000000..7c35bee
--- /dev/null
+++ b/frontend/assets/markers/still-rough.svg
@@ -0,0 +1,5 @@
+
+
diff --git a/frontend/assets/markers/still-self.svg b/frontend/assets/markers/still-self.svg
new file mode 100644
index 0000000..819c90f
--- /dev/null
+++ b/frontend/assets/markers/still-self.svg
@@ -0,0 +1,5 @@
+
+
diff --git a/frontend/embed.go b/frontend/embed.go
new file mode 100644
index 0000000..94db92c
--- /dev/null
+++ b/frontend/embed.go
@@ -0,0 +1,6 @@
+package frontend
+
+import "embed"
+
+//go:embed index.html main.js style.css lib assets
+var Files embed.FS
diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 0000000..56fc2f7
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,135 @@
+
+
+