import { useSeoMeta } from '@unhead/react';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Alert, AlertDescription } from '@/components/ui/alert';
import { Smartphone, Shield, ExternalLink, Star, CheckCircle2, Info, Apple, Chrome } from 'lucide-react';
// Platform detection
const isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);
const isIOS = typeof navigator !== 'undefined' && /iPhone|iPad|iPod/i.test(navigator.userAgent);
const isMobile = isAndroid || isIOS;
interface SignerApp {
name: string;
description: string;
features: string[];
url: string;
recommended?: boolean;
platforms: ('android' | 'ios' | 'web' | 'desktop')[];
protocol?: string;
}
const androidSigners: SignerApp[] = [
{
name: 'Amber',
description: 'Native Android signer focused on security and ease of use. The best choice for Android users.',
features: ['Native app', 'Multiple key support', 'Event signing', 'Secure key storage'],
url: 'https://github.com/greenart7c3/Amber',
recommended: true,
platforms: ['android'],
protocol: 'NIP-55',
},
{
name: 'Nsec.app',
description: 'Cross-platform remote signer that acts as a secure vault for your keys.',
features: ['Remote signing', 'Works with any client', 'Cross-device sync'],
url: 'https://nsec.app',
platforms: ['android', 'ios', 'web'],
protocol: 'NIP-46',
},
{
name: 'Nostria Signer',
description: 'Remote signer app with keys stored in secure device storage.',
features: ['Secure storage', 'Remote signing', 'Multi-key support'],
url: 'https://nostria.app',
platforms: ['android', 'ios'],
protocol: 'NIP-46',
},
{
name: 'Nowser',
description: 'Multi-auth signer supporting both browser extension and remote signing protocols.',
features: ['NIP-07 support', 'NIP-46 support', 'Flexible signing'],
url: 'https://nowser.app',
platforms: ['android', 'ios'],
protocol: 'NIP-07 / NIP-46',
},
];
const iosSigners: SignerApp[] = [
{
name: 'Nsec.app',
description: 'The best option for iOS. Use it as a remote signer with any Nostr client.',
features: ['Remote signing', 'Works with any client', 'Cross-device sync'],
url: 'https://nsec.app',
recommended: true,
platforms: ['android', 'ios', 'web'],
protocol: 'NIP-46',
},
{
name: 'Nowser (TestFlight)',
description: 'iOS signer available via TestFlight with signing capabilities similar to Android.',
features: ['NIP-07 support', 'NIP-46 support', 'Native iOS app'],
url: 'https://testflight.apple.com/join/nowser',
platforms: ['ios'],
protocol: 'NIP-07 / NIP-46',
},
{
name: 'Nostria Signer',
description: 'Remote signer with secure key storage on your device.',
features: ['Secure storage', 'Remote signing', 'Multi-key support'],
url: 'https://nostria.app',
platforms: ['android', 'ios'],
protocol: 'NIP-46',
},
];
const browserSigners: SignerApp[] = [
{
name: 'nos2x',
description: 'Simple and reliable browser extension for signing Nostr events.',
features: ['Lightweight', 'Easy to use', 'Chrome/Brave/Edge support'],
url: 'https://chrome.google.com/webstore/detail/nos2x/kpgefcfmnafjgpblomihpgmejjdanjjp',
recommended: true,
platforms: ['web'],
protocol: 'NIP-07',
},
{
name: 'Alby',
description: 'Bitcoin Lightning wallet with built-in Nostr key management and WebLN.',
features: ['Lightning payments', 'Nostr signing', 'WebLN support', 'NWC support'],
url: 'https://getalby.com',
platforms: ['web', 'desktop'],
protocol: 'NIP-07',
},
{
name: 'Flamingo',
description: 'Nostr-focused browser extension with clean interface.',
features: ['Nostr signing', 'Clean UI', 'Privacy-focused'],
url: 'https://www.flamingowallet.com',
platforms: ['web'],
protocol: 'NIP-07',
},
{
name: 'Kiwi Browser + Extension',
description: 'On Android/GrapheneOS, use Kiwi Browser to load nos2x or Alby extensions.',
features: ['Extension support on mobile', 'Full browser experience', 'Works on GrapheneOS'],
url: 'https://kiwibrowser.com',
platforms: ['android'],
protocol: 'NIP-07',
},
];
function SignerCard({ signer }: { signer: SignerApp }) {
return (
{description}
{title}
{highlighted && (
Signer apps keep your private keys secure by signing events without exposing them. Instead of pasting your key into every app, let a signer handle it safely.