Skip to content

Commit 6551463

Browse files
committed
feat(settings): add About page with version, links, and sponsor button
- About tab in Settings with version info and "use at your own risk" - Links to GitHub repo and xplorer.space (via TauriAPI.openUrl) - Sponsor button linking to GitHub Sponsors - Add .github/FUNDING.yml for GitHub sponsor button - i18n keys in all 4 locales (en, zh, ja, id)
1 parent 88df2e7 commit 6551463

6 files changed

Lines changed: 113 additions & 1 deletion

File tree

.github/FUNDING.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
github: kimlimjustin

apps/client/src/locales/en.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@
236236
"auditDesc": "File operation history",
237237
"versioning": "Versioning",
238238
"versioningDesc": "File version history",
239+
"about": "About",
240+
"aboutDesc": "Version, links, and support",
239241
"fileAssociations": "File Associations",
240242
"fileAssociationsDesc": "Open-with defaults"
241243
},
@@ -620,6 +622,14 @@
620622
"noDirsTracked": "No directories tracked",
621623
"noDirsTrackedHint": "Add a directory path above to start tracking file versions",
622624
"stopTracking": "Stop tracking this directory"
625+
},
626+
"about": {
627+
"description": "A modern, AI-powered file explorer. Use at your own risk.",
628+
"links": "Links",
629+
"sponsorTitle": "Support Xplorer",
630+
"sponsorDescription": "Xplorer is free and open source. If you find it useful, please consider sponsoring the project to help keep development going. Every contribution, no matter how small, makes a difference.",
631+
"sponsorButton": "Sponsor on GitHub",
632+
"license": "Licensed under AGPL-3.0. Made with love."
623633
}
624634
},
625635
"tour": {

apps/client/src/locales/id.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@
236236
"auditDesc": "Riwayat operasi file",
237237
"versioning": "Versi",
238238
"versioningDesc": "Riwayat versi file",
239+
"about": "Tentang",
240+
"aboutDesc": "Versi, tautan, dan dukungan",
239241
"fileAssociations": "Asosiasi File",
240242
"fileAssociationsDesc": "Pengaturan buka-dengan default"
241243
},
@@ -620,6 +622,14 @@
620622
"noDirsTracked": "No directories tracked",
621623
"noDirsTrackedHint": "Add a directory path above to start tracking file versions",
622624
"stopTracking": "Stop tracking this directory"
625+
},
626+
"about": {
627+
"description": "Penjelajah file modern bertenaga AI. Gunakan dengan risiko sendiri.",
628+
"links": "Tautan",
629+
"sponsorTitle": "Dukung Xplorer",
630+
"sponsorDescription": "Xplorer gratis dan open source. Jika Anda merasa berguna, pertimbangkan untuk mensponsori proyek ini agar pengembangan tetap berjalan. Setiap kontribusi, sekecil apa pun, sangat berarti.",
631+
"sponsorButton": "Sponsor di GitHub",
632+
"license": "Berlisensi AGPL-3.0. Dibuat dengan cinta."
623633
}
624634
},
625635
"tour": {

apps/client/src/locales/ja.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@
236236
"auditDesc": "ファイル操作履歴",
237237
"versioning": "バージョニング",
238238
"versioningDesc": "ファイルバージョン履歴",
239+
"about": "バージョン情報",
240+
"aboutDesc": "バージョン、リンク、サポート",
239241
"fileAssociations": "ファイルの関連付け",
240242
"fileAssociationsDesc": "既定のプログラム設定"
241243
},
@@ -620,6 +622,14 @@
620622
"noDirsTracked": "No directories tracked",
621623
"noDirsTrackedHint": "Add a directory path above to start tracking file versions",
622624
"stopTracking": "Stop tracking this directory"
625+
},
626+
"about": {
627+
"description": "モダンなAI搭載ファイルエクスプローラー。ご利用は自己責任で。",
628+
"links": "リンク",
629+
"sponsorTitle": "Xplorer を応援する",
630+
"sponsorDescription": "Xplorer は無料のオープンソースです。便利だと感じたら、開発を継続するためにプロジェクトのスポンサーになることをご検討ください。",
631+
"sponsorButton": "GitHub でスポンサーになる",
632+
"license": "AGPL-3.0 ライセンス。愛を込めて制作。"
623633
}
624634
},
625635
"tour": {

apps/client/src/locales/zh.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@
236236
"auditDesc": "文件操作历史",
237237
"versioning": "版本管理",
238238
"versioningDesc": "文件版本历史",
239+
"about": "关于",
240+
"aboutDesc": "版本、链接和支持",
239241
"fileAssociations": "文件关联",
240242
"fileAssociationsDesc": "打开方式默认设置"
241243
},
@@ -620,6 +622,14 @@
620622
"noDirsTracked": "No directories tracked",
621623
"noDirsTrackedHint": "Add a directory path above to start tracking file versions",
622624
"stopTracking": "Stop tracking this directory"
625+
},
626+
"about": {
627+
"description": "一款现代化的 AI 驱动文件管理器。使用风险自负。",
628+
"links": "链接",
629+
"sponsorTitle": "支持 Xplorer",
630+
"sponsorDescription": "Xplorer 是免费开源的。如果您觉得有用,请考虑赞助该项目以帮助持续开发。每一份贡献,无论大小,都意义非凡。",
631+
"sponsorButton": "在 GitHub 上赞助",
632+
"license": "基于 AGPL-3.0 许可证。用心制作。"
623633
}
624634
},
625635
"tour": {

apps/client/src/pages/settings.tsx

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { useState, useEffect } from 'react';
2+
import { TauriAPI } from '@/lib/tauri-api';
23
import { STORAGE_KEYS } from '@/lib/storage-keys';
34
import { useLocation } from 'wouter';
45
import { useTranslation } from 'react-i18next';
@@ -19,6 +20,10 @@ import {
1920
ChevronRight,
2021
FileCode,
2122
RefreshCw,
23+
Heart,
24+
Github,
25+
ExternalLink,
26+
Info,
2227
} from 'lucide-react';
2328
import {
2429
AgentService,
@@ -60,7 +65,8 @@ type SettingsTab =
6065
| 'marketplace'
6166
| 'backup'
6267
| 'audit'
63-
| 'versioning';
68+
| 'versioning'
69+
| 'about';
6470

6571
type TabDef = { id: SettingsTab; label: string; icon: React.ElementType; description: string };
6672

@@ -143,6 +149,12 @@ const buildTabs = (t: (key: string) => string): TabDef[] => [
143149
icon: History,
144150
description: t('settings.tabs.versioningDesc'),
145151
},
152+
{
153+
id: 'about',
154+
label: t('settings.tabs.about'),
155+
icon: Info,
156+
description: t('settings.tabs.aboutDesc'),
157+
},
146158
];
147159

148160
const MarketplaceSettings = ({
@@ -381,6 +393,65 @@ const Settings = () => {
381393
return <AuditLogSettings />;
382394
case 'versioning':
383395
return <VersioningSettings />;
396+
case 'about':
397+
return (
398+
<div className="space-y-6 px-4 py-2">
399+
<div className="border-xp-border rounded-lg border p-6 text-center">
400+
<h2 className="text-xp-text mb-1 text-2xl font-bold">Xplorer</h2>
401+
<p className="text-xp-text-muted text-sm">v1.0.0-alpha.1</p>
402+
<p className="text-xp-text-secondary mt-3 text-sm">
403+
{t('settings.about.description')}
404+
</p>
405+
</div>
406+
407+
<div className="border-xp-border rounded-lg border p-4">
408+
<h3 className="text-xp-text mb-3 text-sm font-semibold">
409+
{t('settings.about.links')}
410+
</h3>
411+
<div className="space-y-2">
412+
<button
413+
onClick={() => TauriAPI.openUrl('https://github.com/kimlimjustin/xplorer')}
414+
className="text-xp-text hover:bg-xp-surface-light flex w-full items-center gap-3 rounded-md p-2 text-left transition-colors"
415+
>
416+
<Github size={18} className="text-xp-text-muted" />
417+
<span className="text-sm">GitHub Repository</span>
418+
<ExternalLink size={14} className="text-xp-text-muted ml-auto" />
419+
</button>
420+
<button
421+
onClick={() => TauriAPI.openUrl('https://xplorer.space')}
422+
className="text-xp-text hover:bg-xp-surface-light flex w-full items-center gap-3 rounded-md p-2 text-left transition-colors"
423+
>
424+
<ExternalLink size={18} className="text-xp-text-muted" />
425+
<span className="text-sm">xplorer.space</span>
426+
<ExternalLink size={14} className="text-xp-text-muted ml-auto" />
427+
</button>
428+
</div>
429+
</div>
430+
431+
<div className="border-xp-blue/30 bg-xp-blue/5 rounded-lg border p-5">
432+
<div className="flex items-start gap-3">
433+
<Heart size={20} className="text-xp-blue mt-0.5 flex-shrink-0" />
434+
<div>
435+
<h3 className="text-xp-text text-sm font-semibold">
436+
{t('settings.about.sponsorTitle')}
437+
</h3>
438+
<p className="text-xp-text-secondary mt-1 text-sm leading-relaxed">
439+
{t('settings.about.sponsorDescription')}
440+
</p>
441+
<button
442+
onClick={() => TauriAPI.openUrl('https://github.com/sponsors/kimlimjustin')}
443+
className="bg-xp-blue hover:bg-xp-blue/80 mt-3 inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium text-white transition-colors"
444+
>
445+
<Heart size={14} />
446+
{t('settings.about.sponsorButton')}
447+
</button>
448+
</div>
449+
</div>
450+
</div>
451+
452+
<p className="text-xp-text-muted text-center text-xs">{t('settings.about.license')}</p>
453+
</div>
454+
);
384455
}
385456
};
386457

0 commit comments

Comments
 (0)