Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b0caa07
feat: add app site type support to database schema and API
lukyrys Feb 26, 2026
9eb5eb0
feat: add app_version and device_model tracking for SDK clients
lukyrys Feb 26, 2026
5c81b20
feat: RFC 7231 User-Agent parsing for SDK clients
lukyrys Feb 26, 2026
5b8249b
feat: platform-aware filter system (web vs app)
lukyrys Feb 26, 2026
ed6cfc3
feat: AddSite dialog with web/app platform selector
lukyrys Feb 26, 2026
07c1cf5
feat: adapt dashboard UI for app site types
lukyrys Feb 26, 2026
c774bbd
feat: expose app_version and device_model in analytics endpoints
lukyrys Feb 26, 2026
1767d6c
feat: adapt events page and event log for app sites
lukyrys Feb 26, 2026
4ac1a85
feat: adapt sessions page and session details for app sites
lukyrys Feb 26, 2026
d7c4f0e
feat: adapt users pages and user sidebar for app sites
lukyrys Feb 26, 2026
e920af7
feat: wire app-aware filters to funnels, goals, and journeys pages
lukyrys Feb 26, 2026
4cd17d9
feat: SDK integration instructions and error tracking for app sites
lukyrys Feb 26, 2026
cab37a0
fix: translations for all 11 languages
lukyrys Feb 26, 2026
94b7f0e
fix: hide block bot traffic toggle for app sites
lukyrys Feb 26, 2026
62bfbf3
feat: add app icon upload with bytea storage and canvas resize
lukyrys Feb 26, 2026
ac84e2f
fix: update SDK link to renamed rybbit-flutter-sdk repo
lukyrys Feb 26, 2026
dbbdd4a
fix: render app screen path as plain text instead of web link
lukyrys Mar 10, 2026
f607f47
fix: remove redundant v prefix from app_version display
lukyrys Mar 13, 2026
5e7fa5e
Merge upstream/master; reconcile app->mobile site type, keep extras
lukyrys Jul 1, 2026
99d6cae
refactor: extract SiteType alias for site type union
lukyrys Jul 1, 2026
a857b1b
fix: address review findings in mobile platform support
lukyrys Jul 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 69 additions & 25 deletions client/messages/cs.json

Large diffs are not rendered by default.

44 changes: 44 additions & 0 deletions client/messages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"+kHMr5": "Neues Mitglied einladen",
"+w1g/1": "Keine Seitendaten für den ausgewählten Zeitraum gefunden.",
"+x2FLn": "Wiedergabe",
"/0J7Xq": "Symbolbild konnte nicht verarbeitet werden",
"/0TOL5": "Betrag",
"/0tjRq": "Website konnte nicht verschoben werden",
"/20q2D": "Ihr Passwort wurde erfolgreich zurückgesetzt.",
Expand All @@ -42,6 +43,7 @@
"/clOBU": "Wöchentlich",
"/dxF+k": "Das Passwort muss mindestens 8 Zeichen lang sein",
"/eULaT": "Leistung nach Seite",
"/g8hj9": "ASN-Typ",
"/jyLDY": "Inline-Pill",
"/kZg9i": "Klick auf Schaltfläche",
"/liMUf": "Trichter erfolgreich gelöscht",
Expand All @@ -57,6 +59,7 @@
"0UAnct": "Seitenaufrufe",
"0VV/sK": "Ziel",
"0WpQtp": "Bindungsdaten konnten nicht geladen werden",
"0cOykX": "ASN-Organisation",
"0eYAOP": "Nicht ausgeführt",
"0eoYsu": "Absprungrate",
"0fs/5S": "Gestartet am",
Expand All @@ -81,6 +84,7 @@
"1bNJRY": "Benutzermerkmale",
"1bqKv/": "Benutzer-ID:",
"1fe3VI": "API-Schlüssel sind in den Standard- und Pro-Plänen verfügbar.",
"1fzzQF": "Crawler",
"1gYD1y": "Sitzungsinformationen",
"1hGB1j": "Fehler bei der Anmeldung",
"1iEPTM": "Allgemein",
Expand All @@ -106,6 +110,7 @@
"2YpSsF": "App-Kennung darf nicht leer sein",
"2ZpsMl": "Keine Mitglieder",
"2eRO6y": "Gerätetyp",
"2rUVsU": "App",
"2tOWr2": "Enthält",
"34eVnl": "z.B. Registrierung abgeschlossen",
"39AHJm": "Registrieren",
Expand Down Expand Up @@ -151,6 +156,7 @@
"4l6vz1": "Kopieren",
"4nfQk6": "JavaScript-Fehler und Ausnahmen von Ihrer Website erfassen",
"4v7I1t": "Pfadausschlüsse",
"4vQ9fL": "Fehlerverfolgung erfasst Fehler und Ausnahmen aus Ihrer Anwendung.",
"5/6deG": "Beim Abrufen der Trichter ist ein Problem aufgetreten. Bitte versuchen Sie es später erneut.",
"51jo4g": "Ihr API-Schlüssel",
"52UMW3": "Gesamtzeitraum",
Expand All @@ -161,11 +167,13 @@
"5QYdPU": "Startzeit",
"5U2wOH": "Variante hinzufügen",
"5WuADX": "Ziel hinzufügen",
"5Zmqv6": "Symbol hochladen",
"5dX7fM": "Erweiterte Funktionen für Unternehmensteams",
"5elgIe": "Fehler:",
"5jeq8P": "Unbekannt",
"5kfntb": "Kündigung",
"5kpx3b": "Traffic auf Schlüssel aufteilen",
"5qOEz+": "Flutter SDK Dokumentation",
"5sg7KC": "Passwort",
"5x9Sl1": "Periodenende",
"5y2qWO": "Wird verbunden...",
Expand All @@ -175,6 +183,7 @@
"62nsdy": "Erneut versuchen",
"65uDP/": "Traffic von bekannten Bots und Crawlern wird nicht erfasst",
"66kGA0": "Laufzeit",
"67Q/sm": "Ungültiges Domain-Format",
"68djwb": "Noch keine Teams",
"69jzMr": "Domain erfolgreich aktualisiert",
"6ErXbc": "ist null",
Expand All @@ -185,6 +194,7 @@
"6Q0f/H": "Mapbox-Zugriffstoken nicht gefunden",
"6RB7ZL": "API-Spielplatz",
"6S3VIt": "Trichter konnte nicht gespeichert werden: {message}",
"6TFjfy": "Unternehmenstyp",
"6V/E/f": "Website konnte nicht gelöscht werden",
"6VzeBI": "Keine Sitzungen haben dieses Ziel im ausgewählten Zeitraum erreicht.",
"6Z97iS": "Organisation kann nicht gelöscht werden",
Expand Down Expand Up @@ -226,6 +236,7 @@
"7nUCu9": "Zeitzone",
"7pXrnq": "Tag",
"7q/cDS": "Woche {index}",
"7qesNi": "Unternehmens-Domain",
"7ufubd": "Misst die Interaktivität. INP bewertet die Reaktionsfähigkeit, indem die Zeit von der Benutzerinteraktion bis zum nächsten Paint gemessen wird.",
"7x+EYZ": "{count} Events/Monat",
"81yKPX": "Basierend auf Ihrem aktuellen Nutzungsmuster",
Expand Down Expand Up @@ -321,6 +332,7 @@
"BYZnfs": "Keine Ereignisse aufgezeichnet.",
"BffFao": "Die Fehlerverfolgung erfasst JavaScript-Fehler und Ausnahmen aus Ihrer Anwendung.",
"BhlBsq": "Organisation erfolgreich gelöscht",
"BiyUAo": "Füge das Rybbit SDK zu deiner App hinzu:",
"BkOSF2": "Parameter",
"Bn1ifZ": "Organisationen gesamt",
"C2EM7h": "Inhaber-E-Mail",
Expand All @@ -332,6 +344,7 @@
"CHR+o1": "Zeige {shown} von {total} Events",
"CHTM5p": "Einladung konnte nicht gesendet werden",
"CHzo7t": "Einbettungscode",
"CLGask": "App-Symbol",
"CNXQN5": "Code kopieren",
"CRAx66": "Benutzer-IDs werden mit einem täglich rotierenden Schlüssel für verbesserten Datenschutz gesalzen",
"CRjhOx": "8x größer",
Expand Down Expand Up @@ -374,6 +387,7 @@
"E/9k/a": "Die Hypothese ist interner Kontext für Ihr Team. Sie ändert weder die Zuteilung noch das Tracking.",
"E/O9LL": "Optional — beschreiben Sie, was dieses Flag steuert",
"E/tVTI": "Formularinteraktions-Tracking deaktiviert",
"E3X5ej": "Einstiegsbildschirme",
"E3oB+t": "Browser",
"E4L2LT": "Abgebrochen ({count})",
"E9m5xj": "Identifizierter Benutzer",
Expand Down Expand Up @@ -432,6 +446,7 @@
"G0wWf0": "{bufferedCount} neue Events",
"G1YoMt": "Import konnte nicht gelöscht werden. Bitte versuchen Sie es erneut.",
"G2HskF": "Experiment gelöscht",
"G7U5Ai": "Entspricht nicht Regex",
"G7giEo": "Durchschn. 30d",
"GBIt8l": "Pfade, die auf .pdf, .doc oder .docx enden",
"GDgEmC": "Keine Events gefunden",
Expand Down Expand Up @@ -512,6 +527,7 @@
"J4r/Gi": "Ereignisse (30 Tage)",
"JCIgkj": "Benutzername",
"JD2pwH": "Organisationen",
"JEsxDw": "Wird hochgeladen...",
"JIOFW/": "5 Min",
"JKxOsh": "Monatliche Events",
"JS/195": "Privater Link widerrufen",
Expand Down Expand Up @@ -566,6 +582,7 @@
"L1FoVW": "Sie haben keine Berechtigung, die Organisationseinstellungen anzuzeigen.",
"L5X96Z": "URL-Muster, die vom Tracking ausgeschlossen werden sollen (eines pro Zeile)",
"L8DzHm": "Teamname ist erforderlich",
"L9CtJP": "Plattform-Anleitungen",
"LAwI3R": "Name darf nicht leer sein",
"LB/Amg": "Ihre kostenlose Testphase ist abgelaufen. Abonnieren Sie einen Plan, um erneut Besuche zu verfolgen.",
"LB7mg3": "s",
Expand All @@ -574,6 +591,7 @@
"LIX+6S": "URL-Parameter-Tracking deaktiviert",
"LONGFB": "Plan auswählen",
"LQ46NL": "Koordinaten",
"LUJTwh": "Symbol hochgeladen",
"LUrJwE": "Kanäle",
"LaV9M1": "Zeitzone auswählen",
"LeFOAk": "Filter für diese Seite nicht aktiv",
Expand All @@ -598,6 +616,7 @@
"MPQ0kS": "Organisation auswählen",
"MQQbnY": "Wiedergaben",
"MUaUWe": "API-Schlüssel werden geladen...",
"MVEvjb": "Symbol entfernen",
"MYsZNO": "Variante entfernen",
"MZNJkb": "Nach Name filtern...",
"MZjNWA": "Einstellung für E-Mail-Berichte konnte nicht aktualisiert werden",
Expand Down Expand Up @@ -660,6 +679,7 @@
"OtSSs+": "{count} Websites",
"Otefae": "Dimension",
"OvzONl": "Aus",
"OwQmnm": "App-Version",
"P3H0J/": "Mehr anzeigen ({count} weitere)",
"P3YB9A": "Letzte Woche",
"P6RGqE": "Hostnamen",
Expand All @@ -670,8 +690,10 @@
"PUbaA7": "Website-Domain",
"PUwgz8": "Domain-Property",
"PW+sL4": "k.A.",
"Pbtcej": "Bildschirmaufrufe",
"Pc+tM3": "Generieren",
"Pe0ogR": "Design",
"PfUTPz": "VPN",
"Pgv4+O": "Noch keine Trichter",
"PkGCG1": "Generieren Sie einen privaten Link, um die Dashboard-Einbettung auszuprobieren.",
"Po5b4M": "Ausgewählter Preisplan nicht gefunden. Bitte passen Sie den Schieberegler an.",
Expand All @@ -698,6 +720,7 @@
"QgMK2h": "UTM-Quelle",
"QiKKFz": "Passwort ändern",
"QirE3M": "Startdatum",
"QitbBm": "Bildschirmaufruf",
"QkTyho": "Rybbit-Seitenleiste",
"Qp1beM": "Pfad",
"Quiu+4": "Wenn der Snippet nicht funktioniert, versuche JavaScript-Injektion",
Expand Down Expand Up @@ -728,12 +751,14 @@
"Rqzsq/": "Filter hinzufügen",
"RsY5rI": "Konvertierte Sitzungen",
"RumeRz": "Regionen",
"RvxWt3": "Einstiegsbildschirm:",
"RwzAp9": "Event-Typen",
"S1utKH": "Längengrad",
"S4u7Gc": "Holen Sie sich Ihren API-Schlüssel",
"S4zxrU": "Sitzungen zählen, bei denen Ihre App ein benanntes Event auslöst.",
"S5IFjk": "Erstellen Sie ein Team, um Websites zu gruppieren und den Mitgliederzugriff zu verwalten.",
"S7U3Nx": "Sie nähern sich Ihrem monatlichen Event-Limit. Erwägen Sie ein Upgrade auf einen kostenpflichtigen Plan für höhere Limits.",
"S9jCu8": "Symbol entfernt",
"SB3+JE": "Keine Trichterdaten verfügbar",
"SBUMrd": "Feature-Flags filtern",
"SDTG4X": "Das primäre Ziel ist das Konversionsevent oder der Seitenaufruf, der zum Variantenvergleich verwendet wird.",
Expand All @@ -743,6 +768,7 @@
"SWvHLr": "Diese Woche",
"SX126d": "Daten exportieren",
"Sb7oIl": "Leistung nach Betriebssystem",
"ShHw0c": "App-Version:",
"Sjo1P4": "Individuell",
"SoySgJ": "Referrer:",
"StUScz": "{count} Mitglieder",
Expand Down Expand Up @@ -830,6 +856,7 @@
"Vn7Wtu": "Was möchten Sie abfragen?",
"VqI0Nz": "Standort & Gerät",
"Vwukkb": "JSON-Payload hinzufügen",
"VxUjLr": "App hinzufügen",
"VyvTDF": "Bildschirm:",
"VzzYJk": "Erstellen",
"W/V6+Y": "Einklappen",
Expand All @@ -848,6 +875,7 @@
"WnQ/AZ": "Kontaktieren Sie uns",
"WuGkfJ": "Gibt zurück",
"WuHoZ9": "Konversionen",
"X0cqyR": "Betriebssystemversion",
"X0ha1a": "Änderungen speichern",
"X0ppsC": "Websites",
"X2PZ7D": "Ziel erstellen",
Expand Down Expand Up @@ -973,6 +1001,7 @@
"cfiGPy": "Neuer Parameter",
"ciDaNU": "Automatisch den ersten Seitenaufruf beim Laden des Skripts erfassen",
"cj34Wi": "Keine Organisations-ID zurückgegeben",
"ckAea8": "ASN-Domain",
"ckBJVF": "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird die Website \"{siteName}\" und alle zugehörigen Analysedaten dauerhaft gelöscht.",
"cmDzrA": "Beim Abrufen der Events ist ein Problem aufgetreten. Bitte versuchen Sie es später erneut.",
"cmGAVy": "Seitengröße:",
Expand All @@ -998,6 +1027,7 @@
"dv+Q6J": "Verwenden Sie den generierten Flag-Schlüssel in Ihrer App und verzweigen Sie Ihre UI oder Ihr Verhalten je nach Variante.",
"dv4SpB": "Noch keine Importe",
"e/U0Xt": "Konversionsrate",
"e/WYt2": "Gerätemodell",
"eA5EH7": "Organisationen suchen...",
"eDqstJ": "24h-Events",
"eGIKNJ": "Top-Seiten",
Expand All @@ -1006,6 +1036,7 @@
"eKzHLW": "Aktive Organisationen",
"eOj4Bs": "Event-Name",
"eQnbde": "Google Search Console trennen?",
"eXWZOl": "App-Versionen",
"eYX7hS": "Aktualisieren Sie Ihre E-Mail-Adresse für Kontobenachrichtigungen",
"ebEqgQ": "Sie haben ein aktives Abonnement. Bitte kündigen Sie Ihr Abonnement, bevor Sie die Organisation löschen.",
"ekXood": "Unbegrenzt",
Expand All @@ -1018,6 +1049,7 @@
"f5efCD": "Das Ergebnis wählen",
"f7uwif": "Organisieren Sie Websites in Teams, um zu steuern, welche Mitglieder darauf zugreifen können.",
"fB09El": "Pfade, die mit /blog/ beginnen",
"fCvg+B": "Entspricht Regex",
"fDjNLX": "Sie sind dabei, eine große Datei ({size}) zu importieren. Die Verarbeitung kann einige Minuten dauern. Möchten Sie fortfahren?",
"fGblXC": "Oder folge einer Einrichtungsanleitung für deine Plattform",
"fItAD9": "Kohorte",
Expand All @@ -1037,6 +1069,7 @@
"fobMp1": "Gute TTFB-Werte liegen bei 800 ms oder schneller.",
"fr4eNi": "1 $ Test-Abonnement für Entwicklung",
"frN4vy": "Zuletzt gesehen",
"fsUN9Y": "Min. Bildschirmaufrufe",
"fx99AL": "Schwach",
"fz0z4c": "Plan",
"g1MtWv": "Sie sollten den Organisationsinhaber benachrichtigen.",
Expand Down Expand Up @@ -1116,6 +1149,7 @@
"isUnnK": "Web Vitals-Erfassung aktiviert",
"itC9lG": "Grundlagen",
"iv7EVe": "Alle Websites",
"iwp2S0": "Bildschirme",
"j3ehbn": "Bitte verwenden Sie ein stärkeres Passwort",
"j5kA5A": "Beim Abrufen der Fehler ist ein Problem aufgetreten. Bitte versuchen Sie es später erneut.",
"j7BiRg": "Kein Event ausgewählt.",
Expand Down Expand Up @@ -1150,6 +1184,7 @@
"jsy7pk": "Erneut versuchen",
"jt9BUv": "Noch keine Konversionen",
"jvo0vs": "Speichern",
"jxsBGE": "Wird als Favicon in der Seitenleiste, der Website-Auswahl und den Website-Karten angezeigt. Akzeptiert jedes Bildformat — wird automatisch auf 128×128 PNG skaliert. Max. 50 KB.",
"k+kHlN": "Teamname",
"k/CG+N": "Varianten-Schlüssel sind erforderlich",
"k1sXXZ": "Abfrage konnte nicht generiert werden",
Expand Down Expand Up @@ -1189,6 +1224,7 @@
"lILp7K": "Bot-Blockierung deaktiviert",
"lKv8ex": "Standard",
"lRnHfd": "Events haben die Validierung nicht bestanden",
"lTavFx": "Ausstiegsbildschirme",
"lVP3yI": "Kein Wert erforderlich",
"lXZjmr": "Laden Sie ein neues Mitglied zu dieser Organisation ein.",
"lYB8jy": "{count} Benutzer",
Expand Down Expand Up @@ -1233,6 +1269,7 @@
"nFouWN": "Product Hunt",
"nGQuNF": "Seiten pro Sitzung",
"nIe+Wv": "Neuen Benutzer erstellen",
"nJNzqM": "Symbol konnte nicht hochgeladen werden",
"nJuUfX": "Nach Name, Slug, Domain oder Mitglieds-E-Mail suchen...",
"nL6Jl0": "Bindung",
"nVYMBG": "Benutzer erstellen",
Expand All @@ -1253,6 +1290,7 @@
"o0jcye": "BS",
"o5Jj28": "Konto kann nicht gelöscht werden",
"o7g8s9": "z.B. ^/blog/.*",
"o9wmBB": "Optional. Wird auf 128x128 PNG skaliert.",
"oA0ogD": "Beides",
"oAFgOq": "Domain",
"oCBPQ4": "Filter entfernen",
Expand Down Expand Up @@ -1306,6 +1344,7 @@
"q0NdNV": "Top-Länder anzeigen",
"q2ZLFN": "Feature-Flag gelöscht",
"q4S4cE": "Konsolenprotokoll",
"qAktpY": "Bildschirme pro Sitzung",
"qB5AJG": "Laden Sie eine CSV-Datei hoch, um zu beginnen",
"qDwvZ4": "Unbekannter Fehler",
"qFQkeR": "Richten Sie eine neue Organisation ein, um Websites und Benutzer hinzuzufügen",
Expand Down Expand Up @@ -1370,6 +1409,7 @@
"scPXsn": "Regex",
"sd2ieZ": "Woche",
"siqsij": "Nur der Inhaber der Organisation kann das Abonnement verwalten.",
"smsDJm": "Symbol konnte nicht entfernt werden",
"snh6R6": "Bezeichnung (optional)",
"soeWeh": "Organisationseinstellungen",
"sy+pv5": "E-Mail",
Expand All @@ -1383,6 +1423,7 @@
"tGAYL2": "Option auswählen",
"tGWccD": "Fügen Sie Groß-/Kleinbuchstaben, Zahlen oder Symbole hinzu für ein stärkeres Passwort",
"tGuKrF": "Neues Experiment",
"tH05Pi": "Gerätemodell:",
"tH8S0d": "IP hinzufügen",
"tHKpoN": "Keine Sitzungen wurden vor Erreichen dieses Schritts im ausgewählten Zeitraum abgebrochen.",
"tHSb8p": "Desktop",
Expand Down Expand Up @@ -1529,6 +1570,7 @@
"yi/uLq": "Events",
"yl0JSO": "Das Ändern dieser Notizen ändert weder die Zuteilung noch das Tracking.",
"ym0FiC": "Upgraden Sie Ihren Plan, um weiterhin Analysedaten zu sammeln.",
"ynio5d": "Ungültiges Paketnamenformat",
"ytceSa": "Kein Ziel verknüpft",
"yunf47": "Sitzungsdauer",
"z/pIGS": "Schlüsselwörter",
Expand All @@ -1544,10 +1586,12 @@
"zQvVDJ": "Alle",
"zSOvI0": "Filter",
"zUJjPA": "Kein Team",
"zUxWZC": "Rechenzentrum",
"zWgbGg": "Heute",
"zWkvNO": "Zeitachse",
"zY8xSk": "Geben Sie die Domain der Website ein, die Sie verfolgen möchten",
"zZE+e+": "Experimente verwenden multivariate Feature-Flags, um jeden Besucher einer stabilen Variante zuzuweisen.",
"zff4lu": "",
"znwd1N": "Trichter löschen",
"zoRFJV": "Die Bundle- oder Paketkennung für das Tracking",
"zuA3Bg": "YouTube",
Expand Down
Loading
Loading