fix: fit follower stats and add grantmaker transparency

This commit is contained in:
SkateSpots 2026-10-29 21:25:08 +07:00
parent 957033e678
commit 4a4f398df0
28 changed files with 211 additions and 11 deletions

View file

@ -847,6 +847,13 @@ const batch6 = {
grantsFund: "Què vols finançar?",
grantsAck: "Confirmo que som una entitat finançadora que fa KYC/KYB als seus beneficiaris.",
grantsSend: "Obrir conversa sobre la subvenció",
grantsNoKycTitle: "Sense KYC de SkateSpots",
grantsNoKycDesc: "Mai no demanem la teva identificació ni la nostra. La via KYC/KYB és per als teus beneficiaris.",
grantsNoTrackingTitle: "Sense seguiment",
grantsNoTrackingDesc: "Sense analítica, CRM ni llistes de correu. Aquesta pàgina no desa res.",
grantsPrivateTitle: "Missatge privat",
grantsPrivateDesc: "Obre una conversa xifrada NIP-17 amb el propietari.",
grantsEthos: "Només acceptem subvencions que mantinguin SkateSpots de codi obert, autoallotjat i sense analítica. Cap condició que tanqui el projecte.",
grantsNote: "Obre un missatge privat al propietari de SkateSpots. No es desa res en aquesta pàgina.",
backAngor: "Dona'ns suport a Angor",
backers: "Suportadors",

View file

@ -821,6 +821,13 @@ export const csBatch4 = {
grantsFund: "Co bys chtěl financovat?",
grantsAck: "Potvrzuji, že jsme poskytovatel grantů, který dělá KYC/KYB svým příjemcům.",
grantsSend: "Zahájit rozhovor o grantu",
grantsNoKycTitle: "Žádné KYC SkateSpots",
grantsNoKycDesc: "Nikdy nechceme tvůj průkaz ani ten náš. Kolonka KYC/KYB je pro tvé příjemce.",
grantsNoTrackingTitle: "Žádné sledování",
grantsNoTrackingDesc: "Žádné analýzy, CRM ani e-mailové seznamy. Tato stránka nic neukládá.",
grantsPrivateTitle: "Soukromá zpráva",
grantsPrivateDesc: "Otevře šifrovanou konverzaci NIP-17 s majitelem.",
grantsEthos: "Přijímáme jen granty, které udrží SkateSpots s otevřeným zdrojovým kódem, vlastním hostováním a bez analýz. Žádné podmínky, které projekt zavřou.",
grantsNote: "Otevře soukromou zprávu majiteli SkateSpots. Na této stránce se nic neukládá.",
backAngor: "Podpoř nás na Angor",
backers: "Podporovatelé",

View file

@ -821,6 +821,13 @@ const deBatch4 = {
grantsFund: "Was möchtest du finanzieren?",
grantsAck: "Ich bestätige, dass wir eine Förderorganisation sind, die bei unseren Empfängern KYC/KYB durchführt.",
grantsSend: "Fördergespräch starten",
grantsNoKycTitle: "Kein KYC bei SkateSpots",
grantsNoKycDesc: "Wir verlangen weder deinen noch unseren Ausweis. Der KYC/KYB-Bereich ist für deine Empfänger.",
grantsNoTrackingTitle: "Kein Tracking",
grantsNoTrackingDesc: "Keine Analysen, kein CRM, keine Mailingliste. Diese Seite speichert nichts.",
grantsPrivateTitle: "Private Direktnachricht",
grantsPrivateDesc: "Öffnet eine verschlüsselte NIP-17-Konversation mit dem Betreiber.",
grantsEthos: "Wir nehmen nur Förderungen an, die SkateSpots quelloffen, selbst gehostet und frei von Analysen halten. Keine Bedingungen, die das Projekt schließen.",
grantsNote: "Öffnet eine private Direktnachricht an den Betreiber von SkateSpots. Auf dieser Seite wird nichts gespeichert.",
backAngor: "Unterstütze uns auf Angor",
backers: "Unterstützer",

View file

@ -821,6 +821,13 @@ const elBatch4 = {
grantsFund: "Τι θα ήθελες να χρηματοδοτήσεις;",
grantsAck: "Επιβεβαιώνω ότι είμαστε χρηματοδότης που κάνει KYC/KYB στους αποδέκτες του.",
grantsSend: "Άνοιγμα συζήτησης για επιχορήγηση",
grantsNoKycTitle: "Χωρίς KYC του SkateSpots",
grantsNoKycDesc: "Δεν ζητάμε ποτέ την ταυτότητά σου ούτε τη δική μας. Το κανάλι KYC/KYB είναι για τους αποδέκτες σου.",
grantsNoTrackingTitle: "Χωρίς παρακολούθηση",
grantsNoTrackingDesc: "Χωρίς αναλυτικά, CRM ή λίστες αλληλογραφίας. Αυτή η σελίδα δεν αποθηκεύει τίποτα.",
grantsPrivateTitle: "Ιδιωτικό μήνυμα",
grantsPrivateDesc: "Ανοίγει μια κρυπτογραφημένη συνομιλία NIP-17 με τον ιδιοκτήτη.",
grantsEthos: "Δεχόμαστε μόνο επιχορηγήσεις που κρατούν το SkateSpots ανοιχτού κώδικα, αυτοφιλοξενούμενο και χωρίς αναλυτικά. Καμία δέσμευση που κλείνει το έργο.",
grantsNote: "Ανοίγει ιδιωτικό μήνυμα στον ιδιοκτήτη του SkateSpots. Δεν αποθηκεύεται τίποτα σε αυτή τη σελίδα.",
backAngor: "Στήριξέ μας στο Angor",
backers: "Υποστηρικτές",

View file

@ -6633,6 +6633,13 @@ walletUi: {
grantsFund: 'What would you like to fund?',
grantsAck: 'I confirm we are a grantmaker that KYC/KYB our grantees.',
grantsSend: 'Open grant conversation',
grantsNoKycTitle: 'No KYC of SkateSpots',
grantsNoKycDesc: 'We never ask for your ID or ours. The KYC/KYB lane is for your grantees.',
grantsNoTrackingTitle: 'No tracking',
grantsNoTrackingDesc: 'No analytics, CRM or mailing list. This page stores nothing.',
grantsPrivateTitle: 'Private DM',
grantsPrivateDesc: 'Opens an encrypted NIP-17 conversation with the owner.',
grantsEthos: 'We only take grants that keep SkateSpots open source, self-hosted and free of analytics. No strings that close the project.',
grantsNote: 'Opens a private DM to the SkateSpots owner. Nothing is stored on this page.',
backAngor: 'Back us on Angor',
backers: 'Supporters',

View file

@ -6633,6 +6633,13 @@ walletUi: {
grantsFund: '¿Qué te gustaría financiar?',
grantsAck: 'Confirmo que somos un grantmaker que hace KYC/KYB a sus beneficiarios.',
grantsSend: 'Abrir conversación de ayuda',
grantsNoKycTitle: 'Sin KYC de SkateSpots',
grantsNoKycDesc: 'Nunca pedimos tu identidad ni la nuestra. El canal KYC/KYB es para tus beneficiarios.',
grantsNoTrackingTitle: 'Sin rastreo',
grantsNoTrackingDesc: 'Sin analíticas, CRM ni listas de correo. Esta página no guarda nada.',
grantsPrivateTitle: 'DM privado',
grantsPrivateDesc: 'Abre una conversación cifrada NIP-17 con el propietario.',
grantsEthos: 'Solo aceptamos ayudas que mantengan SkateSpots como código abierto, autoalojado y sin analíticas. Nada que cierre el proyecto.',
grantsNote: 'Abre un DM privado al propietario de SkateSpots. No se guarda nada en esta página.',
backAngor: 'Apóyanos en Angor',
backers: 'Patrocinadores',

View file

@ -847,6 +847,13 @@ const batch6 = {
grantsFund: "Zer finantzatu nahi duzu?",
grantsAck: "Baieztatzen dut gure onuradunei KYC/KYB egiten dien dirulaguntza emailea garela.",
grantsSend: "Hasi dirulaguntzaren elkarrizketa",
grantsNoKycTitle: "SkateSpots-en KYCrik ez",
grantsNoKycDesc: "Ez dizugu inoiz zure agiririk eskatzen, ezta gurea ere. KYC/KYB bidea zure onuradunentzat da.",
grantsNoTrackingTitle: "Jarraipenik ez",
grantsNoTrackingDesc: "Ez analitikarik, ez CRMrik, ez posta-zerrendarik. Orri honek ez du ezer gordetzen.",
grantsPrivateTitle: "Mezu pribatua",
grantsPrivateDesc: "Jabearekin NIP-17 elkarrizketa zifratua irekitzen du.",
grantsEthos: "SkateSpots kode irekian, norberak ostatatuta eta analitikarik gabe mantentzen duten dirulaguntzak soilik onartzen ditugu. Proiektua ixten duen baldintzarik ez.",
grantsNote: "SkateSpots-en jabeari mezu pribatua irekitzen dio. Orri honetan ez da ezer gordetzen.",
backAngor: "Babestu gaitzazu Angor-en",
backers: "Babesleak",

View file

@ -821,6 +821,13 @@ const frBatch4 = {
grantsFund: "Que souhaitez-vous financer ?",
grantsAck: "Je confirme que nous sommes un bailleur de fonds qui fait un KYC/KYB de ses bénéficiaires.",
grantsSend: "Ouvrir la discussion sur la subvention",
grantsNoKycTitle: "Aucun KYC de SkateSpots",
grantsNoKycDesc: "Nous ne demandons jamais votre pièce d’identité, ni la nôtre. La voie KYC/KYB est pour vos bénéficiaires.",
grantsNoTrackingTitle: "Aucun suivi",
grantsNoTrackingDesc: "Pas d’analytique, de CRM ni de liste de diffusion. Cette page ne stocke rien.",
grantsPrivateTitle: "Message privé",
grantsPrivateDesc: "Ouvre une conversation chiffrée NIP-17 avec le propriétaire.",
grantsEthos: "Nous n’acceptons que des subventions qui gardent SkateSpots libre, auto-hébergé et sans analytique. Aucune condition qui ferme le projet.",
grantsNote: "Ouvre un message privé au propriétaire de SkateSpots. Rien n'est stocké sur cette page.",
backAngor: "Soutenez-nous sur Angor",
backers: "Soutiens",

View file

@ -847,6 +847,13 @@ const batch6 = {
"grantsFund": "Que che gustaría financiar?",
"grantsAck": "Confirmo que somos unha entidade financiadora que fai KYC/KYB aos seus beneficiarios.",
"grantsSend": "Abrir conversa sobre a axuda",
"grantsNoKycTitle": "Sen KYC de SkateSpots",
"grantsNoKycDesc": "Nunca pedimos o teu documento nin o noso. A vía KYC/KYB é para os teus beneficiarios.",
"grantsNoTrackingTitle": "Sen seguimento",
"grantsNoTrackingDesc": "Sen analítica, CRM nin listas de correo. Esta páxina non garda nada.",
"grantsPrivateTitle": "Mensaxe privada",
"grantsPrivateDesc": "Abre unha conversa cifrada NIP-17 co propietario.",
"grantsEthos": "Só aceptamos axudas que manteñan SkateSpots de código aberto, autoaloxado e sen analítica. Ningunha condición que peche o proxecto.",
"grantsNote": "Abre unha mensaxe privada ao propietario de SkateSpots. Non se garda nada nesta páxina.",
"backAngor": "Apóianos en Angor",
"backers": "Apoios",

View file

@ -847,6 +847,13 @@ const batch6 = {
"grantsFund": "आप किसे वित्तपोषित करना चाहेंगे?",
"grantsAck": "मैं पुष्टि करता/करती हूँ कि हम एक अनुदानदाता हैं जो अपने अनुदान प्राप्तकर्ताओं का KYC/KYB करते हैं।",
"grantsSend": "अनुदान बातचीत शुरू करें",
"grantsNoKycTitle": "SkateSpots का KYC नहीं",
"grantsNoKycDesc": "हम कभी आपका या अपना पहचान पत्र नहीं माँगते। KYC/KYB मार्ग आपके अनुदान प्राप्तकर्ताओं के लिए है।",
"grantsNoTrackingTitle": "कोई ट्रैकिंग नहीं",
"grantsNoTrackingDesc": "कोई एनालिटिक्स, CRM या मेलिंग सूची नहीं। यह पृष्ठ कुछ भी संग्रहीत नहीं करता।",
"grantsPrivateTitle": "निजी संदेश",
"grantsPrivateDesc": "मालिक के साथ एन्क्रिप्टेड NIP-17 बातचीत खोलता है।",
"grantsEthos": "हम केवल वे अनुदान स्वीकार करते हैं जो SkateSpots को मुक्त स्रोत, स्व-होस्टेड और एनालिटिक्स-मुक्त रखते हैं। ऐसी कोई शर्त नहीं जो परियोजना को बंद कर दे।",
"grantsNote": "SkateSpots के मालिक को निजी संदेश खोलता है। इस पृष्ठ पर कुछ भी संग्रहीत नहीं होता।",
"backAngor": "Angor पर हमारा साथ दें",
"backers": "समर्थक",

View file

@ -827,6 +827,13 @@ const idBatch4 = {
grantsFund: 'Apa yang ingin kamu danai?',
grantsAck: 'Saya mengonfirmasi bahwa kami adalah pemberi hibah yang melakukan KYC/KYB kepada penerima hibah.',
grantsSend: 'Buka percakapan hibah',
grantsNoKycTitle: 'Tanpa KYC untuk SkateSpots',
grantsNoKycDesc: 'Kami tidak pernah meminta identitasmu atau identitas kami. Jalur KYC/KYB untuk penerima hibahmu.',
grantsNoTrackingTitle: 'Tanpa pelacakan',
grantsNoTrackingDesc: 'Tanpa analitik, CRM, atau milis. Halaman ini tidak menyimpan apa pun.',
grantsPrivateTitle: 'Pesan pribadi',
grantsPrivateDesc: 'Membuka percakapan NIP-17 terenkripsi dengan pemilik.',
grantsEthos: 'Kami hanya menerima hibah yang menjaga SkateSpots tetap sumber terbuka, dihosting sendiri, dan bebas analitik. Tanpa syarat yang menutup proyek.',
grantsNote: 'Membuka pesan pribadi ke pemilik SkateSpots. Tidak ada yang disimpan di halaman ini.',
backAngor: 'Dukung kami di Angor',
backers: 'Pendukung',

View file

@ -821,6 +821,13 @@ const itBatch4 = {
grantsFund: "Cosa vorresti finanziare?",
grantsAck: "Confermo che siamo un ente finanziatore che fa KYC/KYB ai propri beneficiari.",
grantsSend: "Apri la conversazione sulla sovvenzione",
grantsNoKycTitle: "Nessun KYC di SkateSpots",
grantsNoKycDesc: "Non chiediamo mai il tuo documento né il nostro. La corsia KYC/KYB è per i tuoi beneficiari.",
grantsNoTrackingTitle: "Nessun tracciamento",
grantsNoTrackingDesc: "Niente analisi, CRM o liste di distribuzione. Questa pagina non salva nulla.",
grantsPrivateTitle: "Messaggio privato",
grantsPrivateDesc: "Apre una conversazione cifrata NIP-17 con il proprietario.",
grantsEthos: "Accettiamo solo sovvenzioni che mantengono SkateSpots a codice aperto, auto-ospitato e senza analisi. Nessun vincolo che chiuda il progetto.",
grantsNote: "Apre un messaggio privato al proprietario di SkateSpots. Nulla viene salvato su questa pagina.",
backAngor: "Sostienici su Angor",
backers: "Sostenitori",

View file

@ -830,6 +830,13 @@ const jaBatch7 = {
grantsFund: '何に資金を提供したいですか?',
grantsAck: '私たちが助成先にKYC/KYBを行う助成団体であることを確認します。',
grantsSend: '助成の相談を始める',
grantsNoKycTitle: 'SkateSpots自身のKYCはありません',
grantsNoKycDesc: 'あなたの身分証も、私たちの身分証も一切求めません。KYC/KYBの窓口は助成先のためのものです。',
grantsNoTrackingTitle: '追跡なし',
grantsNoTrackingDesc: 'アナリティクス、CRM、メーリングリストはありません。このページは何も保存しません。',
grantsPrivateTitle: '非公開メッセージ',
grantsPrivateDesc: '所有者との暗号化されたNIP-17の会話を開きます。',
grantsEthos: 'SkateSpotsをオープンソース、セルフホスト、アナリティクスなしに保つ助成だけを受け入れます。プロジェクトを閉ざす条件は一切ありません。',
grantsNote: 'SkateSpotsの所有者への非公開メッセージを開きます。このページには何も保存されません。',
backAngor: 'Angorで支援する',
backers: 'サポーター',

View file

@ -829,6 +829,13 @@ const koBatch4 = {
grantsFund: '무엇에 자금을 지원하고 싶나요?',
grantsAck: '우리가 수혜자에게 KYC/KYB를 하는 지원금 단체임을 확인합니다.',
grantsSend: '지원금 대화 시작하기',
grantsNoKycTitle: 'SkateSpots에 KYC 없음',
grantsNoKycDesc: '우리는 당신의 신분증도, 우리의 신분증도 요구하지 않습니다. KYC/KYB 경로는 당신의 수혜자를 위한 것입니다.',
grantsNoTrackingTitle: '추적 없음',
grantsNoTrackingDesc: '분석, CRM, 메일링 리스트가 없습니다. 이 페이지는 아무것도 저장하지 않습니다.',
grantsPrivateTitle: '비공개 메시지',
grantsPrivateDesc: '소유자와 암호화된 NIP-17 대화를 엽니다.',
grantsEthos: 'SkateSpots를 오픈소스, 자체 호스팅, 분석 없는 상태로 유지하는 지원금만 받습니다. 프로젝트를 닫는 조건은 없습니다.',
grantsNote: 'SkateSpots 소유자에게 비공개 메시지를 엽니다. 이 페이지에는 아무것도 저장되지 않습니다.',
backAngor: 'Angor에서 후원',
backers: '후원자',

View file

@ -829,6 +829,13 @@ const nlBatch4 = {
grantsFund: 'Wat wil je financieren?',
grantsAck: 'Ik bevestig dat wij een financier zijn die onze begunstigden KYC/KYB\'t.',
grantsSend: 'Subsidiegesprek openen',
grantsNoKycTitle: 'Geen KYC van SkateSpots',
grantsNoKycDesc: 'We vragen nooit om jouw identiteit of de onze. De KYC/KYB-route is voor jouw begunstigden.',
grantsNoTrackingTitle: 'Geen tracking',
grantsNoTrackingDesc: 'Geen analytics, CRM of mailinglijst. Deze pagina slaat niets op.',
grantsPrivateTitle: 'Privébericht',
grantsPrivateDesc: 'Opent een versleuteld NIP-17-gesprek met de eigenaar.',
grantsEthos: 'We nemen alleen subsidies aan die SkateSpots open source, zelf gehost en vrij van analytics houden. Geen voorwaarden die het project sluiten.',
grantsNote: 'Opent een privébericht naar de eigenaar van SkateSpots. Er wordt niets op deze pagina opgeslagen.',
backAngor: 'Steun ons op Angor',
backers: 'Supporters',

View file

@ -821,6 +821,13 @@ const plBatch4 = {
grantsFund: "Co chciałbyś sfinansować?",
grantsAck: "Potwierdzam, że jesteśmy grantodawcą, który robi KYC/KYB swoim beneficjentom.",
grantsSend: "Rozpocznij rozmowę o grancie",
grantsNoKycTitle: "Bez KYC SkateSpots",
grantsNoKycDesc: "Nigdy nie prosimy o twój dokument ani o nasz. Ścieżka KYC/KYB jest dla twoich beneficjentów.",
grantsNoTrackingTitle: "Bez śledzenia",
grantsNoTrackingDesc: "Bez analityki, CRM i list mailingowych. Ta strona niczego nie zapisuje.",
grantsPrivateTitle: "Prywatna wiadomość",
grantsPrivateDesc: "Otwiera zaszyfrowaną rozmowę NIP-17 z właścicielem.",
grantsEthos: "Przyjmujemy tylko granty, które utrzymują SkateSpots jako projekt otwartoźródłowy, samodzielnie hostowany i bez analityki. Żadnych warunków, które zamykają projekt.",
grantsNote: "Otwiera prywatną wiadomość do właściciela SkateSpots. Na tej stronie nic nie jest zapisywane.",
backAngor: "Wesprzyj nas na Angor",
backers: "Wspierający",

View file

@ -923,6 +923,13 @@ const ptBatch4 = {
grantsFund: 'O que você gostaria de financiar?',
grantsAck: 'Confirmo que somos um financiador que faz KYC/KYB dos nossos beneficiários.',
grantsSend: 'Abrir conversa sobre subsídio',
grantsNoKycTitle: 'Sem KYC do SkateSpots',
grantsNoKycDesc: 'Nunca pedimos o seu documento nem o nosso. A via KYC/KYB é para os seus beneficiários.',
grantsNoTrackingTitle: 'Sem rastreamento',
grantsNoTrackingDesc: 'Sem análises, CRM ou lista de e-mails. Esta página não armazena nada.',
grantsPrivateTitle: 'Mensagem privada',
grantsPrivateDesc: 'Abre uma conversa criptografada NIP-17 com o dono.',
grantsEthos: 'Só aceitamos subsídios que mantenham o SkateSpots de código aberto, auto-hospedado e sem análises. Nenhuma condição que feche o projeto.',
grantsNote: 'Abre uma mensagem privada para o dono do SkateSpots. Nada é armazenado nesta página.',
backAngor: 'Apoie-nos no Angor',
backers: 'Apoiadores',

View file

@ -821,6 +821,13 @@ const roBatch4 = {
grantsFund: 'Ce ai vrea să finanțezi?',
grantsAck: 'Confirm că suntem un finanțator care face KYC/KYB beneficiarilor noștri.',
grantsSend: 'Deschide conversația despre grant',
grantsNoKycTitle: 'Fără KYC la SkateSpots',
grantsNoKycDesc: 'Nu cerem niciodată actul tău de identitate și nici pe al nostru. Ruta KYC/KYB este pentru beneficiarii tăi.',
grantsNoTrackingTitle: 'Fără urmărire',
grantsNoTrackingDesc: 'Fără analitice, CRM sau liste de e-mail. Această pagină nu stochează nimic.',
grantsPrivateTitle: 'Mesaj privat',
grantsPrivateDesc: 'Deschide o conversație criptată NIP-17 cu proprietarul.',
grantsEthos: 'Acceptăm doar granturi care mențin SkateSpots cu sursă deschisă, găzduit independent și fără analitice. Fără condiții care închid proiectul.',
grantsNote: 'Deschide un mesaj privat către proprietarul SkateSpots. Nimic nu este stocat pe această pagină.',
backAngor: 'Susține-ne pe Angor',
backers: 'Susținători',

View file

@ -821,6 +821,13 @@ const ruBatch4 = {
grantsFund: 'Что вы хотите профинансировать?',
grantsAck: 'Подтверждаю, что мы грантодатель, который проводит KYC/KYB своим получателям.',
grantsSend: 'Начать разговор о гранте',
grantsNoKycTitle: 'Без KYC для SkateSpots',
grantsNoKycDesc: 'Мы никогда не просим ни ваш документ, ни наш. Канал KYC/KYB — для ваших получателей.',
grantsNoTrackingTitle: 'Без отслеживания',
grantsNoTrackingDesc: 'Ни аналитики, ни CRM, ни рассылок. Эта страница ничего не сохраняет.',
grantsPrivateTitle: 'Личное сообщение',
grantsPrivateDesc: 'Открывает зашифрованный диалог NIP-17 с владельцем.',
grantsEthos: 'Мы принимаем только гранты, которые сохраняют SkateSpots открытым, самохостируемым и без аналитики. Никаких условий, закрывающих проект.',
grantsNote: 'Открывает личное сообщение владельцу SkateSpots. На этой странице ничего не сохраняется.',
backAngor: 'Поддержите нас на Angor',
backers: 'Сторонники',

View file

@ -821,6 +821,13 @@ const svBatch4 = {
grantsFund: "Vad vill du finansiera?",
grantsAck: "Jag bekräftar att vi är en bidragsgivare som KYC/KYB:ar våra mottagare.",
grantsSend: "Öppna bidragssamtal",
grantsNoKycTitle: "Ingen KYC av SkateSpots",
grantsNoKycDesc: "Vi ber aldrig om din legitimation, och inte heller vår. KYC/KYB-kanalen är för dina mottagare.",
grantsNoTrackingTitle: "Ingen spårning",
grantsNoTrackingDesc: "Ingen analys, inget CRM och ingen e-postlista. Den här sidan sparar inget.",
grantsPrivateTitle: "Privat meddelande",
grantsPrivateDesc: "Öppnar en krypterad NIP-17-konversation med ägaren.",
grantsEthos: "Vi tar bara emot bidrag som håller SkateSpots öppen källkod, självhostat och fritt från analys. Inga villkor som stänger projektet.",
grantsNote: "Öppnar ett privat meddelande till SkateSpots ägare. Inget sparas på den här sidan.",
backAngor: "Stötta oss på Angor",
backers: "Supportrar",

View file

@ -910,6 +910,13 @@ const thBatch9 = {
grantsFund: 'คุณอยากสนับสนุนอะไร?',
grantsAck: 'ฉันยืนยันว่าเราเป็นผู้ให้ทุนที่ทำ KYC/KYB กับผู้รับทุนของเรา',
grantsSend: 'เปิดบทสนทนาเรื่องทุน',
grantsNoKycTitle: 'ไม่มี KYC ของ SkateSpots',
grantsNoKycDesc: 'เราไม่เคยขอเอกลักษณ์ของคุณหรือของเรา ช่อง KYC/KYB มีไว้สำหรับผู้รับทุนของคุณ',
grantsNoTrackingTitle: 'ไม่มีการติดตาม',
grantsNoTrackingDesc: 'ไม่มีการวิเคราะห์, CRM หรือรายชื่ออีเมล หน้านี้ไม่เก็บข้อมูลใด ๆ',
grantsPrivateTitle: 'ข้อความส่วนตัว',
grantsPrivateDesc: 'เปิดบทสนทนา NIP-17 ที่เข้ารหัสกับเจ้าของ',
grantsEthos: 'เรารับเฉพาะทุนที่ทำให้ SkateSpots เป็นโอเพนซอร์ส โฮสต์เอง และไม่มีการวิเคราะห์ ไม่มีเงื่อนไขใดที่ปิดโปรเจกต์',
grantsNote: 'เปิดข้อความส่วนตัวถึงเจ้าของ SkateSpots ไม่มีข้อมูลใดถูกเก็บในหน้านี้',
backAngor: 'สนับสนุนเราบน Angor',
backers: 'ผู้สนับสนุน',

View file

@ -821,6 +821,13 @@ const trBatch4 = {
grantsFund: "Neyi finanse etmek istersiniz?",
grantsAck: "Hibe alanlarımıza KYC/KYB uygulayan bir hibe kuruluşu olduğumuzu onaylıyorum.",
grantsSend: "Hibe görüşmesi başlat",
grantsNoKycTitle: "SkateSpots’a KYC yok",
grantsNoKycDesc: "Ne sizin ne de bizim kimliğimizi asla istemiyoruz. KYC/KYB kanalı, hibe alanlarınız için.",
grantsNoTrackingTitle: "İzleme yok",
grantsNoTrackingDesc: "Analitik, CRM veya e-posta listesi yok. Bu sayfa hiçbir şey saklamaz.",
grantsPrivateTitle: "Özel mesaj",
grantsPrivateDesc: "Sahiple şifreli bir NIP-17 görüşmesi açar.",
grantsEthos: "Yalnızca SkateSpots’u açık kaynak, kendi sunucusunda ve analitikten uzak tutan hibeleri kabul ediyoruz. Projeyi kapatan hiçbir koşul yok.",
grantsNote: "SkateSpots sahibine özel bir mesaj açar. Bu sayfada hiçbir şey saklanmaz.",
backAngor: "Bizi Angor'da destekle",
backers: "Destekçiler",

View file

@ -821,6 +821,13 @@ const ukBatch4 = {
grantsFund: "Що ви хочете профінансувати?",
grantsAck: "Підтверджую, що ми грантодавець, який проводить KYC/KYB своїм отримувачам.",
grantsSend: "Почати розмову про грант",
grantsNoKycTitle: "Без KYC для SkateSpots",
grantsNoKycDesc: "Ми ніколи не просимо ні ваш документ, ні наш. Канал KYC/KYB — для ваших отримувачів.",
grantsNoTrackingTitle: "Без відстеження",
grantsNoTrackingDesc: "Ні аналітики, ні CRM, ні розсилок. Ця сторінка нічого не зберігає.",
grantsPrivateTitle: "Приватне повідомлення",
grantsPrivateDesc: "Відкриває зашифрований діалог NIP-17 з власником.",
grantsEthos: "Ми приймаємо лише гранти, які зберігають SkateSpots відкритим, самостійно розміщеним і без аналітики. Жодних умов, що закривають проєкт.",
grantsNote: "Відкриває приватне повідомлення власнику SkateSpots. На цій сторінці нічого не зберігається.",
backAngor: "Підтримайте нас на Angor",
backers: "Підтримувачі",

View file

@ -829,6 +829,13 @@ const viBatch4 = {
grantsFund: 'Bạn muốn tài trợ cho điều gì?',
grantsAck: 'Tôi xác nhận chúng tôi là tổ chức tài trợ thực hiện KYC/KYB với người nhận tài trợ.',
grantsSend: 'Mở cuộc trò chuyện về tài trợ',
grantsNoKycTitle: 'Không KYC SkateSpots',
grantsNoKycDesc: 'Chúng tôi không bao giờ hỏi giấy tờ của bạn hay của chúng tôi. Kênh KYC/KYB là dành cho người nhận tài trợ của bạn.',
grantsNoTrackingTitle: 'Không theo dõi',
grantsNoTrackingDesc: 'Không phân tích, CRM hay danh sách thư. Trang này không lưu gì cả.',
grantsPrivateTitle: 'Tin nhắn riêng',
grantsPrivateDesc: 'Mở cuộc trò chuyện NIP-17 được mã hóa với chủ sở hữu.',
grantsEthos: 'Chúng tôi chỉ nhận tài trợ giúp SkateSpots duy trì mã nguồn mở, tự lưu trữ và không có phân tích. Không kèm điều kiện nào đóng dự án.',
grantsNote: 'Mở tin nhắn riêng tới chủ sở hữu SkateSpots. Không có gì được lưu trên trang này.',
backAngor: 'Ủng hộ trên Angor',
backers: 'Người ủng hộ',

View file

@ -826,6 +826,13 @@ const zhCNBatch4 = {
grantsFund: "你想资助什么?",
grantsAck: "我确认我们是会对受助方进行 KYC/KYB 的资助机构。",
grantsSend: "开启资助洽谈",
grantsNoKycTitle: "不对 SkateSpots 做 KYC",
grantsNoKycDesc: "我们从不索取你的证件,也不索取我们的。KYC/KYB 通道是给你的受助方用的。",
grantsNoTrackingTitle: "不追踪",
grantsNoTrackingDesc: "没有分析、CRM 或邮件列表。此页面不存储任何内容。",
grantsPrivateTitle: "私信",
grantsPrivateDesc: "打开与所有者加密的 NIP-17 对话。",
grantsEthos: "我们只接受能让 SkateSpots 保持开源、自托管且无分析的资助。没有任何会关闭项目的附加条件。",
grantsNote: "打开与 SkateSpots 所有者的私信。此页面不会存储任何内容。",
backAngor: "在 Angor 上支持我们",
backers: "支持者",

View file

@ -826,6 +826,13 @@ const zhTWBatch4 = {
grantsFund: "你想資助什麼?",
grantsAck: "我確認我們是會對受助者進行 KYC/KYB 的資助機構。",
grantsSend: "開啟資助洽談",
grantsNoKycTitle: "不對 SkateSpots 做 KYC",
grantsNoKycDesc: "我們從不索取你的證件,也不索取我們的。KYC/KYB 通道是給你的受助者用的。",
grantsNoTrackingTitle: "不追蹤",
grantsNoTrackingDesc: "沒有分析、CRM 或郵寄清單。此頁面不儲存任何內容。",
grantsPrivateTitle: "私訊",
grantsPrivateDesc: "開啟與擁有者加密的 NIP-17 對話。",
grantsEthos: "我們只接受能讓 SkateSpots 保持開源、自架且無分析的資助。沒有任何會關閉專案的附帶條件。",
grantsNote: "開啟與 SkateSpots 擁有者的私訊。此頁面不會儲存任何內容。",
backAngor: "在 Angor 上支援我們",
backers: "支持者",

View file

@ -36,7 +36,7 @@ import { cn } from '@/lib/utils';
import { SKATER_STANCES, SKATER_STYLES, SKATER_LEVELS, NEWSLETTER_KIND } from '@/lib/types';
import { NewsletterIssueView } from '@/components/NewsletterIssueView';
import NotFound from './NotFound';
import { MapPin, Store, MessageCircle, Globe, Zap, ExternalLink, Copy, Check, ShieldCheck, ShieldAlert, Loader2, Info, Instagram, Share2, Users, Crown, Bot, Pencil, Package, Tag, ArrowRightLeft, Bitcoin, Award, MessageSquareLock, PersonStanding, Sparkles, Home, Clock, Server, Plus, UserPlus, UserCheck, Handshake } from 'lucide-react';
import { MapPin, Store, MessageCircle, Globe, Zap, ExternalLink, Copy, Check, ShieldCheck, ShieldAlert, Loader2, Instagram, Share2, Users, Crown, Bot, Pencil, Package, Tag, ArrowRightLeft, Bitcoin, Award, MessageSquareLock, PersonStanding, Sparkles, Home, Clock, Server, Plus, UserPlus, UserCheck, Handshake } from 'lucide-react';
import { useState, type ReactNode } from 'react';
import { UserStatusIndicator } from '@/components/UserStatusIndicator';
import { ShareProfileDialog } from '@/components/ShareProfileDialog';
@ -62,7 +62,6 @@ function StatPill({
loading,
icon,
onClick,
hint,
}: {
value: number;
label: string;
@ -70,7 +69,6 @@ function StatPill({
loading?: boolean;
icon?: ReactNode;
onClick?: () => void;
hint?: string;
}) {
const interactive = !!onClick && value > 0;
const empty = !loading && value === 0;
@ -96,9 +94,6 @@ function StatPill({
)}
<p className={`text-[10px] uppercase tracking-wide font-bold mt-0.5 transition-colors ${empty ? 'text-gray-600' : 'text-gray-400 group-hover:text-gray-200'}`}>
{label}
{hint && (
<Info className="ml-1 inline h-2.5 w-2.5 align-[-1px] text-gray-600" aria-label={hint} />
)}
</p>
</div>
</>
@ -111,7 +106,6 @@ function StatPill({
<button
type="button"
onClick={onClick}
title={hint}
className={`${base} border-white/10 bg-white/[0.04] hover:bg-white/10 hover:border-white/25 hover:-translate-y-0.5 cursor-pointer`}
>
{inner}
@ -119,7 +113,7 @@ function StatPill({
);
}
return <div className={`${base} border-white/5 bg-white/[0.02]`} title={hint}>{inner}</div>;
return <div className={`${base} border-white/5 bg-white/[0.02]`}>{inner}</div>;
}
function ProfilePage({ pubkey }: { pubkey: string }) {
@ -402,15 +396,19 @@ function ProfilePage({ pubkey }: { pubkey: string }) {
</div>
{/* ── At-a-glance stats strip ── */}
<div className="grid grid-cols-3 sm:grid-cols-6 gap-2 sm:gap-3 mb-3">
<div className="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-2 sm:gap-3 mb-2">
<StatPill value={spots?.length ?? 0} label={t('walletUi.stats.spots')} color="#ff0040" icon={<MapPin className="h-4 w-4" />} loading={spotsLoading} onClick={() => scrollToSection('section-spots')} />
<StatPill value={shops?.length ?? 0} label={t('walletUi.stats.shops')} color="#ccff00" icon={<Store className="h-4 w-4" />} loading={shopsLoading} onClick={() => scrollToSection('section-shops')} />
<StatPill value={crews.length} label={t('walletUi.profile.crews')} color="#2dd4bf" icon={<Users className="h-4 w-4" />} loading={crewsLoading} onClick={() => scrollToSection('section-crews')} />
<StatPill value={events.length} label={t('nav.events')} color="#ccff00" icon={<Clock className="h-4 w-4" />} loading={eventsLoading} onClick={() => scrollToSection('section-events')} />
<StatPill value={publicStash?.length ?? 0} label={t('walletUi.profile.gear')} color="#ff6600" icon={<Package className="h-4 w-4" />} loading={publicStashLoading} onClick={() => scrollToSection('section-stash')} />
<StatPill value={followers.length} label={t('walletUi.profile.followers')} color="#ec4899" icon={<Users className="h-4 w-4" />} loading={followersLoading} hint={t('walletUi.profile.followersHint')} />
<StatPill value={followers.length} label={t('walletUi.profile.followers')} color="#ec4899" icon={<Users className="h-4 w-4" />} loading={followersLoading} />
</div>
<p className="mb-5 px-1 text-[10px] leading-relaxed text-gray-600">
{t('walletUi.profile.followersHint')}
</p>
{/* Secondary meta line: zaps received + member since */}
{(memberSince || (riderStats?.zapsReceived ?? 0) > 0) && (
<div className="flex flex-wrap items-center gap-x-4 gap-y-1.5 mb-6 px-1 text-xs text-gray-500">

View file

@ -2,7 +2,7 @@ import { useMemo, useState } from 'react';
import { useSeoMeta } from '@unhead/react';
import { Link, useNavigate } from 'react-router-dom';
import { nip19 } from 'nostr-tools';
import { ExternalLink, Zap, Heart, Users, Handshake, Building2, Star, ShieldCheck, Server, Globe, Bot, Code2, Briefcase, Megaphone, TrendingUp, Info } from 'lucide-react';
import { ExternalLink, Zap, Heart, Users, Handshake, Building2, Star, ShieldCheck, Server, Globe, Bot, Code2, Briefcase, Megaphone, TrendingUp, Info, Lock, EyeOff } from 'lucide-react';
import { SupportSkateSpots } from '@/components/SupportSkateSpots';
import { SilentPaymentsCard } from '@/components/SilentPaymentsCard';
import { AngorProjectCard, ANGOR_PROJECT_URL } from '@/components/AngorProjectCard';
@ -201,6 +201,26 @@ function GrantmakerForm() {
</div>
</div>
<div className="mt-4 grid grid-cols-1 gap-2 sm:grid-cols-3">
{[
{ icon: ShieldCheck, title: t('walletUi.supporters.grantsNoKycTitle'), body: t('walletUi.supporters.grantsNoKycDesc') },
{ icon: EyeOff, title: t('walletUi.supporters.grantsNoTrackingTitle'), body: t('walletUi.supporters.grantsNoTrackingDesc') },
{ icon: Lock, title: t('walletUi.supporters.grantsPrivateTitle'), body: t('walletUi.supporters.grantsPrivateDesc') },
].map(({ icon: Icon, title, body }) => (
<div key={title} className="flex items-start gap-2 rounded-xl border border-white/10 bg-black/30 p-2.5">
<Icon className="mt-0.5 h-3.5 w-3.5 shrink-0 text-[#f7931a]" />
<div className="min-w-0">
<p className="text-[11px] font-bold text-white">{title}</p>
<p className="mt-0.5 text-[10px] leading-relaxed text-gray-500">{body}</p>
</div>
</div>
))}
</div>
<p className="mt-3 rounded-xl border border-[#f7931a]/15 bg-[#f7931a]/[0.04] px-3 py-2 text-[11px] leading-relaxed text-gray-500">
{t('walletUi.supporters.grantsEthos')}
</p>
<label className="mt-4 flex cursor-pointer items-start gap-2.5 rounded-xl border border-[#f7931a]/20 bg-black/30 p-3 text-xs text-gray-400">
<input type="checkbox" checked={ack} onChange={(e) => setAck(e.target.checked)} className="mt-0.5 h-4 w-4 accent-[#f7931a]" />
<span>{t('walletUi.supporters.grantsAck')}</span>