feat: opensats
This commit is contained in:
@@ -42,7 +42,9 @@ npm install
|
||||
# Run the app
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## Run Docker
|
||||
|
||||
```bash
|
||||
# Clone this repository
|
||||
git clone https://github.com/CodyTseng/jumble.git
|
||||
@@ -53,8 +55,15 @@ cd jumble
|
||||
# Run the docker compose
|
||||
docker compose up --build -d
|
||||
```
|
||||
|
||||
After finishing, access: http://localhost:8089
|
||||
|
||||
## Sponsors
|
||||
|
||||
<a target="_blank" href="https://opensats.org/">
|
||||
<img alt="open-sats-logo" src="./resources/open-sats-logo.svg" height="44">
|
||||
</a>
|
||||
|
||||
## Donate
|
||||
|
||||
If you like this project, you can buy me a coffee :)
|
||||
|
||||
16
resources/open-sats-logo.svg
Normal file
16
resources/open-sats-logo.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 10 KiB |
27
src/components/Donation/PlatinumSponsors.tsx
Normal file
27
src/components/Donation/PlatinumSponsors.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import Image from '../Image'
|
||||
import OpenSatsLogo from './open-sats-logo.svg'
|
||||
|
||||
export default function PlatinumSponsors() {
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
<div className="space-y-2">
|
||||
<div className="font-semibold text-center">{t('Platinum Sponsors')}</div>
|
||||
<div className="flex flex-col gap-2 items-center">
|
||||
<div
|
||||
className="flex items-center gap-4 cursor-pointer"
|
||||
onClick={() => window.open('https://opensats.org/', '_blank')}
|
||||
>
|
||||
<Image
|
||||
image={{
|
||||
url: OpenSatsLogo
|
||||
}}
|
||||
className="h-11"
|
||||
/>
|
||||
<div className="text-2xl font-semibold">OpenSats</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
import { formatAmount } from '@/lib/lightning'
|
||||
import lightning, { TRecentSupporter } from '@/services/lightning.service'
|
||||
import { useEffect, useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import UserAvatar from '../UserAvatar'
|
||||
import Username from '../Username'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
export default function RecentSupporters() {
|
||||
const { t } = useTranslation()
|
||||
@@ -32,7 +32,9 @@ export default function RecentSupporters() {
|
||||
<UserAvatar userId={item.pubkey} />
|
||||
<div className="flex-1 w-0">
|
||||
<Username className="font-semibold w-fit" userId={item.pubkey} />
|
||||
<div className="text-xs text-muted-foreground line-clamp-3">{item.comment}</div>
|
||||
<div className="text-xs text-muted-foreground line-clamp-3 select-text">
|
||||
{item.comment}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="font-semibold text-yellow-400 shrink-0">
|
||||
|
||||
@@ -5,6 +5,7 @@ import { useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import ZapDialog from '../ZapDialog'
|
||||
import RecentSupporters from './RecentSupporters'
|
||||
import PlatinumSponsors from './PlatinumSponsors'
|
||||
|
||||
export default function Donation({ className }: { className?: string }) {
|
||||
const { t } = useTranslation()
|
||||
@@ -39,6 +40,7 @@ export default function Donation({ className }: { className?: string }) {
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
<PlatinumSponsors />
|
||||
<RecentSupporters />
|
||||
<ZapDialog
|
||||
open={open}
|
||||
|
||||
1
src/components/Donation/open-sats-logo.svg
Normal file
1
src/components/Donation/open-sats-logo.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="344.564 330.278 111.737 91.218" width="53.87" height="43.61" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><radialGradient xlink:href="#logo_svg__a" id="logo_svg__b" cx="31.833" cy="29.662" fx="31.833" fy="29.662" r="42.553" gradientTransform="matrix(2 0 0 1.99696 -74.45 12.982)" gradientUnits="userSpaceOnUse"></radialGradient><radialGradient xlink:href="#logo_svg__a" id="logo_svg__c" cx="31.833" cy="29.662" fx="31.833" fy="29.662" r="42.553" gradientTransform="matrix(2 0 0 1.99696 -74.45 12.982)" gradientUnits="userSpaceOnUse"></radialGradient><linearGradient id="logo_svg__a"><stop style="stop-color:#ffb200;stop-opacity:1" offset="0"></stop><stop style="stop-color:#ff6b01;stop-opacity:1" offset="0.493"></stop></linearGradient></defs><path style="font-variation-settings:'wght' 700;opacity:1;fill:url(#logo_svg__b);fill-opacity:1;stroke-width:10.5833;stroke-linecap:round;stroke-linejoin:round" d="M32.574 39.319v3.81h16.11v-3.81z" transform="translate(324.22 304.883) scale(2.39915)"></path><path style="font-variation-settings:'wght' 700;fill:url(#logo_svg__c);fill-opacity:1;stroke-width:10.5833;stroke-linecap:round;stroke-linejoin:round" d="M14.85 16.062v4.551l8.944 5.681v.137l-8.945 5.68v4.551l13.029-8.555v-3.49Z" transform="translate(324.22 304.883) scale(2.39915)"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -229,6 +229,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'الصق أو اسحب ملفات الوسائط لتحميلها',
|
||||
Preview: 'معاينة',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'أنت على وشك نشر حدث موقع من قبل [{{eventAuthorName}}]. أنت حالياً مسجل الدخول كـ [{{currentUsername}}]. هل أنت متأكد؟'
|
||||
'أنت على وشك نشر حدث موقع من قبل [{{eventAuthorName}}]. أنت حالياً مسجل الدخول كـ [{{currentUsername}}]. هل أنت متأكد؟',
|
||||
'Platinum Sponsors': 'الرعاة البلاتينيون'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,6 +235,7 @@ export default {
|
||||
'Füge Medien-Dateien ein oder ziehe sie hierher, um sie hochzuladen',
|
||||
Preview: 'Vorschau',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'Du bist dabei, ein Ereignis zu veröffentlichen, das von [{{eventAuthorName}}] signiert wurde. Du bist derzeit als [{{currentUsername}}] angemeldet. Bist du sicher?'
|
||||
'Du bist dabei, ein Ereignis zu veröffentlichen, das von [{{eventAuthorName}}] signiert wurde. Du bist derzeit als [{{currentUsername}}] angemeldet. Bist du sicher?',
|
||||
'Platinum Sponsors': 'Platin-Sponsoren'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,6 +229,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'Paste or drop media files to upload',
|
||||
Preview: 'Preview',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?'
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?',
|
||||
'Platinum Sponsors': 'Platinum Sponsors'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,6 +234,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'Pegar o soltar archivos multimedia para cargar',
|
||||
Preview: 'Vista previa',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'Estás a punto de publicar un evento firmado por [{{eventAuthorName}}]. Actualmente has iniciado sesión como [{{currentUsername}}]. ¿Estás seguro?'
|
||||
'Estás a punto de publicar un evento firmado por [{{eventAuthorName}}]. Actualmente has iniciado sesión como [{{currentUsername}}]. ¿Estás seguro?',
|
||||
'Platinum Sponsors': 'Patrocinadores Platino'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,6 +234,7 @@ export default {
|
||||
'Coller ou déposer des fichiers multimédias à télécharger',
|
||||
Preview: 'Aperçu',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'Vous êtes sur le point de publier un événement signé par [{{eventAuthorName}}]. Vous êtes actuellement connecté en tant que [{{currentUsername}}]. Êtes-vous sûr ?'
|
||||
'Vous êtes sur le point de publier un événement signé par [{{eventAuthorName}}]. Vous êtes actuellement connecté en tant que [{{currentUsername}}]. Êtes-vous sûr ?',
|
||||
'Platinum Sponsors': 'Sponsors Platine'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,6 +233,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'Incolla o trascina i file multimediali per caricarli',
|
||||
Preview: 'Anteprima',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'Stai per pubblicare un evento firmato da [{{eventAuthorName}}]. Attualmente sei connesso come [{{currentUsername}}]. Sei sicuro?'
|
||||
'Stai per pubblicare un evento firmato da [{{eventAuthorName}}]. Attualmente sei connesso come [{{currentUsername}}]. Sei sicuro?',
|
||||
'Platinum Sponsors': 'Sponsor Platino'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -230,6 +230,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'メディアファイルを貼り付けるかドロップしてアップロード',
|
||||
Preview: 'プレビュー',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'あなたは[{{eventAuthorName}}]によって署名されたイベントを公開しようとしています。現在[{{currentUsername}}]としてログインしています。よろしいですか?'
|
||||
'あなたは[{{eventAuthorName}}]によって署名されたイベントを公開しようとしています。現在[{{currentUsername}}]としてログインしています。よろしいですか?',
|
||||
'Platinum Sponsors': 'プラチナスポンサー'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,6 +232,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'Wklej lub upuść pliki multimedialne, aby przesłać',
|
||||
Preview: 'Podgląd',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'Zaraz opublikujesz zdarzenie podpisane przez [{{eventAuthorName}}]. Obecnie jesteś zalogowany jako [{{currentUsername}}]. Czy jesteś pewien?'
|
||||
'Zaraz opublikujesz zdarzenie podpisane przez [{{eventAuthorName}}]. Obecnie jesteś zalogowany jako [{{currentUsername}}]. Czy jesteś pewien?',
|
||||
'Platinum Sponsors': 'Sponsorzy Platynowi'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,6 +232,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'Cole ou arraste arquivos de mídia para fazer upload',
|
||||
Preview: 'Pré-visualização',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'Você está prestes a publicar um evento assinado por [{{eventAuthorName}}]. Você está atualmente logado como [{{currentUsername}}]. Tem certeza?'
|
||||
'Você está prestes a publicar um evento assinado por [{{eventAuthorName}}]. Você está atualmente logado como [{{currentUsername}}]. Tem certeza?',
|
||||
'Platinum Sponsors': 'Patrocinadores Platinum'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,6 +233,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'Cole ou solte arquivos de mídia para fazer upload',
|
||||
Preview: 'Pré-visualização',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'Você está prestes a publicar um evento assinado por [{{eventAuthorName}}]. Você está atualmente logado como [{{currentUsername}}]. Tem certeza?'
|
||||
'Você está prestes a publicar um evento assinado por [{{eventAuthorName}}]. Você está atualmente logado como [{{currentUsername}}]. Tem certeza?',
|
||||
'Platinum Sponsors': 'Patrocinadores Platinum'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,6 +233,7 @@ export default {
|
||||
'Paste or drop media files to upload': 'Вставьте или перетащите медиафайлы для загрузки',
|
||||
Preview: 'Предварительный просмотр',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'Вы собираетесь опубликовать событие, подписанное [{{eventAuthorName}}]. Вы в данный момент вошли как [{{currentUsername}}]. Вы уверены?'
|
||||
'Вы собираетесь опубликовать событие, подписанное [{{eventAuthorName}}]. Вы в данный момент вошли как [{{currentUsername}}]. Вы уверены?',
|
||||
'Platinum Sponsors': 'Платиновые спонсоры'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -230,6 +230,7 @@ export default {
|
||||
'Paste or drop media files to upload': '支持粘贴或拖放媒体文件进行上传',
|
||||
Preview: '预览',
|
||||
'You are about to publish an event signed by [{{eventAuthorName}}]. You are currently logged in as [{{currentUsername}}]. Are you sure?':
|
||||
'您即将发布一条由 [{{eventAuthorName}}] 签名的事件。您当前以 [{{currentUsername}}] 登录。确定吗?'
|
||||
'您即将发布一条由 [{{eventAuthorName}}] 签名的事件。您当前以 [{{currentUsername}}] 登录。确定吗?',
|
||||
'Platinum Sponsors': '白金赞助商'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,9 @@ class LightningService {
|
||||
if (!item.comment && comment) item.comment = comment
|
||||
}
|
||||
})
|
||||
this.recentSupportersCache = Array.from(map.values()).sort((a, b) => b.amount - a.amount)
|
||||
this.recentSupportersCache = Array.from(map.values())
|
||||
.filter((item) => item.amount >= 1000)
|
||||
.sort((a, b) => b.amount - a.amount)
|
||||
return this.recentSupportersCache
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user