lighthouse
This commit is contained in:
parent
d64459b200
commit
1f067e81f3
|
|
@ -209,7 +209,7 @@ export default function CryptoGenerator() {
|
||||||
Wallet Direct
|
Wallet Direct
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-xs text-slate-500 mt-2">
|
<p className="text-xs text-slate-600 mt-2">
|
||||||
{qrMode === 'universal'
|
{qrMode === 'universal'
|
||||||
? "Works with any phone camera. Opens blockchain explorer."
|
? "Works with any phone camera. Opens blockchain explorer."
|
||||||
: "Requires scanning from a wallet app. Enables direct payment."}
|
: "Requires scanning from a wallet app. Enables direct payment."}
|
||||||
|
|
@ -319,7 +319,7 @@ export default function CryptoGenerator() {
|
||||||
<Bitcoin className="w-4 h-4 text-slate-400 shrink-0" />
|
<Bitcoin className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate capitalize">{currency}</span>
|
<span className="truncate capitalize">{currency}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1 truncate px-2">
|
<div className="text-xs text-slate-600 mt-1 truncate px-2">
|
||||||
{address || 'Wallet Address'}
|
{address || 'Wallet Address'}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -344,7 +344,7 @@ export default function CryptoGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning copies the wallet address or opens a crypto app.
|
Scanning copies the wallet address or opens a crypto app.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -272,7 +272,7 @@ export default function EmailGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
100% free. No signup required.
|
100% free. No signup required.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -277,7 +277,7 @@ export default function EventGenerator() {
|
||||||
<span className="truncate">{title || 'Event Title'}</span>
|
<span className="truncate">{title || 'Event Title'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
{(startDate) && (
|
{(startDate) && (
|
||||||
<div className="text-xs text-slate-500 mt-1 flex items-center justify-center gap-1">
|
<div className="text-xs text-slate-600 mt-1 flex items-center justify-center gap-1">
|
||||||
<Clock className="w-3 h-3" />
|
<Clock className="w-3 h-3" />
|
||||||
{new Date(startDate).toLocaleDateString()}
|
{new Date(startDate).toLocaleDateString()}
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -304,7 +304,7 @@ export default function EventGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning adds the event to the user's calendar.
|
Scanning adds the event to the user's calendar.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ export default function FacebookGenerator() {
|
||||||
onChange={(e) => setUrl(e.target.value)}
|
onChange={(e) => setUrl(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#1877F2] focus:ring-[#1877F2]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#1877F2] focus:ring-[#1877F2]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">Paste the full link to your profile, page, group, or post.</p>
|
<p className="text-xs text-slate-600 mt-2">Paste the full link to your profile, page, group, or post.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -198,7 +198,7 @@ export default function FacebookGenerator() {
|
||||||
<Facebook className="w-4 h-4 text-slate-400 shrink-0" />
|
<Facebook className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate">{url ? url.replace('https://', '') : 'facebook.com/...'}</span>
|
<span className="truncate">{url ? url.replace('https://', '') : 'facebook.com/...'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1">Opens in Facebook App</div>
|
<div className="text-xs text-slate-600 mt-1">Opens in Facebook App</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -221,7 +221,7 @@ export default function FacebookGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning redirects directly to the Facebook profile or page.
|
Scanning redirects directly to the Facebook profile or page.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ export default function GeolocationGenerator() {
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-xs text-slate-500">
|
<p className="text-xs text-slate-600">
|
||||||
Tip: You can copy-paste coordinates directly from Google Maps.
|
Tip: You can copy-paste coordinates directly from Google Maps.
|
||||||
(Right-click a location on standard Maps, then click the coordinates to copy).
|
(Right-click a location on standard Maps, then click the coordinates to copy).
|
||||||
</p>
|
</p>
|
||||||
|
|
@ -243,7 +243,7 @@ export default function GeolocationGenerator() {
|
||||||
<MapPin className="w-4 h-4 text-[#10B981] shrink-0" />
|
<MapPin className="w-4 h-4 text-[#10B981] shrink-0" />
|
||||||
<span className="truncate">{latitude || 'Lat'}, {longitude || 'Long'}</span>
|
<span className="truncate">{latitude || 'Lat'}, {longitude || 'Long'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1">Google Maps Location</div>
|
<div className="text-xs text-slate-600 mt-1">Google Maps Location</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -266,7 +266,7 @@ export default function GeolocationGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning opens the location directly in Google Maps.
|
Scanning opens the location directly in Google Maps.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -211,7 +211,7 @@ export default function GeolocationQRCodePage() {
|
||||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
|
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
|
||||||
<MapPin className="w-8 h-8 text-red-500 drop-shadow-lg animate-bounce" />
|
<MapPin className="w-8 h-8 text-red-500 drop-shadow-lg animate-bounce" />
|
||||||
</div>
|
</div>
|
||||||
<div className="absolute bottom-2 left-2 right-2 bg-white/90 p-2 rounded text-[10px] text-slate-500 font-mono text-center">
|
<div className="absolute bottom-2 left-2 right-2 bg-white/90 p-2 rounded text-[10px] text-slate-600 font-mono text-center">
|
||||||
40.7128° N, 74.0060° W
|
40.7128° N, 74.0060° W
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ export default function InstagramGenerator() {
|
||||||
onChange={(e) => setUsername(e.target.value)}
|
onChange={(e) => setUsername(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#E1306C] focus:ring-[#E1306C]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#E1306C] focus:ring-[#E1306C]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">Enter your username (without @) or paste full profile link.</p>
|
<p className="text-xs text-slate-600 mt-2">Enter your username (without @) or paste full profile link.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -203,7 +203,7 @@ export default function InstagramGenerator() {
|
||||||
<Instagram className="w-4 h-4 text-slate-400 shrink-0" />
|
<Instagram className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate">{username || '@username'}</span>
|
<span className="truncate">{username || '@username'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1">Opens in Instagram</div>
|
<div className="text-xs text-slate-600 mt-1">Opens in Instagram</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -226,7 +226,7 @@ export default function InstagramGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning redirects directly to your Instagram profile.
|
Scanning redirects directly to your Instagram profile.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -171,7 +171,7 @@ export default function PayPalGenerator() {
|
||||||
onChange={(e) => setPaypalId(e.target.value)}
|
onChange={(e) => setPaypalId(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#003087] focus:ring-[#003087]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#003087] focus:ring-[#003087]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">
|
<p className="text-xs text-slate-600 mt-2">
|
||||||
{inputType === 'username'
|
{inputType === 'username'
|
||||||
? <>Find yours at <a href="https://paypal.me" target="_blank" rel="noopener noreferrer" className="text-[#003087] underline">paypal.me</a></>
|
? <>Find yours at <a href="https://paypal.me" target="_blank" rel="noopener noreferrer" className="text-[#003087] underline">paypal.me</a></>
|
||||||
: 'The email address linked to your PayPal account'
|
: 'The email address linked to your PayPal account'
|
||||||
|
|
@ -293,7 +293,7 @@ export default function PayPalGenerator() {
|
||||||
<span className="truncate">{paypalId || 'Your PayPal'}</span>
|
<span className="truncate">{paypalId || 'Your PayPal'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
{amount && (
|
{amount && (
|
||||||
<p className="text-sm text-slate-500 mt-1">{amount} {currency}</p>
|
<p className="text-sm text-slate-600 mt-1">{amount} {currency}</p>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -317,7 +317,7 @@ export default function PayPalGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Your PayPal link is encoded directly. Static and forever free.
|
Your PayPal link is encoded directly. Static and forever free.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ export default function PhoneGenerator() {
|
||||||
onChange={(e) => setPhone(e.target.value)}
|
onChange={(e) => setPhone(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#1A1265] focus:ring-[#1A1265]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#1A1265] focus:ring-[#1A1265]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">Enter with country code for best results (e.g. +1).</p>
|
<p className="text-xs text-slate-600 mt-2">Enter with country code for best results (e.g. +1).</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -221,7 +221,7 @@ export default function PhoneGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning initiates a call on any mobile phone.
|
Scanning initiates a call on any mobile phone.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ export default function SMSGenerator() {
|
||||||
onChange={(e) => setMessage(e.target.value)}
|
onChange={(e) => setMessage(e.target.value)}
|
||||||
maxLength={160}
|
maxLength={160}
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2 text-right">{message.length}/160</p>
|
<p className="text-xs text-slate-600 mt-2 text-right">{message.length}/160</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -214,7 +214,7 @@ export default function SMSGenerator() {
|
||||||
<Phone className="w-4 h-4 text-slate-400 shrink-0" />
|
<Phone className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate">{phone || 'Number'}</span>
|
<span className="truncate">{phone || 'Number'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="flex items-center justify-center gap-2 mt-2 text-slate-500 text-xs">
|
<div className="flex items-center justify-center gap-2 mt-2 text-slate-600 text-xs">
|
||||||
<MessageSquare className="w-3 h-3" />
|
<MessageSquare className="w-3 h-3" />
|
||||||
<span className="italic truncate">{message || 'Your message...'}</span>
|
<span className="italic truncate">{message || 'Your message...'}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -240,7 +240,7 @@ export default function SMSGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Opens the messaging app with text pre-filled.
|
Opens the messaging app with text pre-filled.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ export default function TeamsGenerator() {
|
||||||
onChange={(e) => setMeetingUrl(e.target.value)}
|
onChange={(e) => setMeetingUrl(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#6264A7] focus:ring-[#6264A7]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#6264A7] focus:ring-[#6264A7]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">
|
<p className="text-xs text-slate-600 mt-2">
|
||||||
Copy the meeting link from your Teams calendar invite.
|
Copy the meeting link from your Teams calendar invite.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -166,7 +166,7 @@ export default function TeamsGenerator() {
|
||||||
onChange={(e) => setUserEmail(e.target.value)}
|
onChange={(e) => setUserEmail(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#6264A7] focus:ring-[#6264A7]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#6264A7] focus:ring-[#6264A7]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">
|
<p className="text-xs text-slate-600 mt-2">
|
||||||
The person's work email to start a Teams chat.
|
The person's work email to start a Teams chat.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -269,7 +269,7 @@ export default function TeamsGenerator() {
|
||||||
{linkType === 'meeting' ? 'Teams Meeting' : (userEmail || 'Teams Chat')}
|
{linkType === 'meeting' ? 'Teams Meeting' : (userEmail || 'Teams Chat')}
|
||||||
</span>
|
</span>
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-sm text-slate-500 mt-1">
|
<p className="text-sm text-slate-600 mt-1">
|
||||||
{linkType === 'meeting' ? 'Join Meeting' : 'Start Chat'}
|
{linkType === 'meeting' ? 'Join Meeting' : 'Start Chat'}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -294,7 +294,7 @@ export default function TeamsGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Works with Microsoft Teams desktop and mobile apps.
|
Works with Microsoft Teams desktop and mobile apps.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -200,7 +200,7 @@ export default function TeamsQRCodePage() {
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div className="font-bold text-slate-900 text-sm">Team Standup</div>
|
<div className="font-bold text-slate-900 text-sm">Team Standup</div>
|
||||||
<div className="text-xs text-slate-500">Daily at 9:00 AM</div>
|
<div className="text-xs text-slate-600">Daily at 9:00 AM</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ export default function TextGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Your text stays on your device. Nothing is sent to servers.
|
Your text stays on your device. Nothing is sent to servers.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ export default function TiktokGenerator() {
|
||||||
onChange={(e) => setUsername(e.target.value)}
|
onChange={(e) => setUsername(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-black focus:ring-black"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-black focus:ring-black"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">Enter your TikTok handle (e.g. @charlidamelio).</p>
|
<p className="text-xs text-slate-600 mt-2">Enter your TikTok handle (e.g. @charlidamelio).</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -203,7 +203,7 @@ export default function TiktokGenerator() {
|
||||||
<Music className="w-4 h-4 text-slate-400 shrink-0" />
|
<Music className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate">{username || '@username'}</span>
|
<span className="truncate">{username || '@username'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1">Opens in TikTok</div>
|
<div className="text-xs text-slate-600 mt-1">Opens in TikTok</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -226,7 +226,7 @@ export default function TiktokGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning redirects directly to your TikTok profile.
|
Scanning redirects directly to your TikTok profile.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ export default function TwitterGenerator() {
|
||||||
onChange={(e) => setUsername(e.target.value)}
|
onChange={(e) => setUsername(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-black focus:ring-black"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-black focus:ring-black"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">Enter your X (Twitter) handle to create a profile link.</p>
|
<p className="text-xs text-slate-600 mt-2">Enter your X (Twitter) handle to create a profile link.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -203,7 +203,7 @@ export default function TwitterGenerator() {
|
||||||
<Twitter className="w-4 h-4 text-slate-400 shrink-0" />
|
<Twitter className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate">{username || '@username'}</span>
|
<span className="truncate">{username || '@username'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1">Opens in X (Twitter)</div>
|
<div className="text-xs text-slate-600 mt-1">Opens in X (Twitter)</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -226,7 +226,7 @@ export default function TwitterGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning redirects directly to the X profile.
|
Scanning redirects directly to the X profile.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ export default function URLGenerator() {
|
||||||
onChange={(e) => setUrl(e.target.value)}
|
onChange={(e) => setUrl(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#4F46E5] focus:ring-[#4F46E5]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#4F46E5] focus:ring-[#4F46E5]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">Include https:// for best results.</p>
|
<p className="text-xs text-slate-600 mt-2">Include https:// for best results.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -219,7 +219,7 @@ export default function URLGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Your link is encoded directly. Static and forever free.
|
Your link is encoded directly. Static and forever free.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -299,7 +299,7 @@ export default function VCardGenerator() {
|
||||||
<Contact className="w-4 h-4 text-slate-400 shrink-0" />
|
<Contact className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate">{firstName || 'First'} {lastName || 'Last'}</span>
|
<span className="truncate">{firstName || 'First'} {lastName || 'Last'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1 truncate">{company || 'Company Name'}</div>
|
<div className="text-xs text-slate-600 mt-1 truncate">{company || 'Company Name'}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -322,7 +322,7 @@ export default function VCardGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning adds this contact to the address book instantly.
|
Scanning adds this contact to the address book instantly.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ export default function WhatsappGenerator() {
|
||||||
onChange={(e) => setPhone(e.target.value)}
|
onChange={(e) => setPhone(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#25D366] focus:ring-[#25D366]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#25D366] focus:ring-[#25D366]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">Include country code (e.g. 1 for US, 44 for UK). No '+' symbol.</p>
|
<p className="text-xs text-slate-600 mt-2">Include country code (e.g. 1 for US, 44 for UK). No '+' symbol.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|
@ -218,7 +218,7 @@ export default function WhatsappGenerator() {
|
||||||
<Phone className="w-4 h-4 text-slate-400 shrink-0" />
|
<Phone className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate">{phone ? `+${phone}` : 'Number'}</span>
|
<span className="truncate">{phone ? `+${phone}` : 'Number'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1">Starts WhatsApp Chat</div>
|
<div className="text-xs text-slate-600 mt-1">Starts WhatsApp Chat</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -241,7 +241,7 @@ export default function WhatsappGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning starts a chat with this number instantly.
|
Scanning starts a chat with this number instantly.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -210,12 +210,12 @@ export default function WhatsappQRCodePage() {
|
||||||
{/* Chat Bubble Right */}
|
{/* Chat Bubble Right */}
|
||||||
<div className="bg-[#DCF8C6] p-2 rounded-lg self-end mb-2 max-w-[80%] text-[10px] text-slate-800 shadow-sm">
|
<div className="bg-[#DCF8C6] p-2 rounded-lg self-end mb-2 max-w-[80%] text-[10px] text-slate-800 shadow-sm">
|
||||||
Hi! I'd like to book an appointment.
|
Hi! I'd like to book an appointment.
|
||||||
<div className="text-[8px] text-slate-500 text-right mt-0.5">10:42 AM <span className="text-blue-500">✓✓</span></div>
|
<div className="text-[8px] text-slate-600 text-right mt-0.5">10:42 AM <span className="text-blue-500">✓✓</span></div>
|
||||||
</div>
|
</div>
|
||||||
{/* Chat Bubble Left */}
|
{/* Chat Bubble Left */}
|
||||||
<div className="bg-white p-2 rounded-lg self-start max-w-[80%] text-[10px] text-slate-800 shadow-sm">
|
<div className="bg-white p-2 rounded-lg self-start max-w-[80%] text-[10px] text-slate-800 shadow-sm">
|
||||||
Sure! What time works for you?
|
Sure! What time works for you?
|
||||||
<div className="text-[8px] text-slate-500 text-right mt-0.5">10:43 AM</div>
|
<div className="text-[8px] text-slate-600 text-right mt-0.5">10:43 AM</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -282,7 +282,7 @@ export default function WiFiGenerator() {
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Your credentials stay on your device. Nothing is sent to servers.
|
Your credentials stay on your device. Nothing is sent to servers.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ export default function YoutubeGenerator() {
|
||||||
onChange={(e) => setUrl(e.target.value)}
|
onChange={(e) => setUrl(e.target.value)}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#FF0000] focus:ring-[#FF0000]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#FF0000] focus:ring-[#FF0000]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">Paste a link to any video, channel, or playlist.</p>
|
<p className="text-xs text-slate-600 mt-2">Paste a link to any video, channel, or playlist.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -196,7 +196,7 @@ export default function YoutubeGenerator() {
|
||||||
<Youtube className="w-4 h-4 text-slate-400 shrink-0" />
|
<Youtube className="w-4 h-4 text-slate-400 shrink-0" />
|
||||||
<span className="truncate">{url ? 'YouTube Content' : 'youtube.com'}</span>
|
<span className="truncate">{url ? 'YouTube Content' : 'youtube.com'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div className="text-xs text-slate-500 mt-1">Opens in YouTube App</div>
|
<div className="text-xs text-slate-600 mt-1">Opens in YouTube App</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -219,7 +219,7 @@ export default function YoutubeGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Scanning redirects directly to the video or channel.
|
Scanning redirects directly to the video or channel.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,7 @@ export default function ZoomGenerator() {
|
||||||
onChange={(e) => setMeetingId(e.target.value.replace(/\D/g, ''))}
|
onChange={(e) => setMeetingId(e.target.value.replace(/\D/g, ''))}
|
||||||
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#2D8CFF] focus:ring-[#2D8CFF]"
|
className="h-12 text-base rounded-xl border-slate-200 focus:border-[#2D8CFF] focus:ring-[#2D8CFF]"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-slate-500 mt-2">The 10-11 digit meeting ID from your Zoom invite.</p>
|
<p className="text-xs text-slate-600 mt-2">The 10-11 digit meeting ID from your Zoom invite.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|
@ -254,7 +254,7 @@ export default function ZoomGenerator() {
|
||||||
<span className="truncate">{formatMeetingId(meetingId) || 'Meeting ID'}</span>
|
<span className="truncate">{formatMeetingId(meetingId) || 'Meeting ID'}</span>
|
||||||
</h3>
|
</h3>
|
||||||
{passcode && (
|
{passcode && (
|
||||||
<p className="text-sm text-slate-500 mt-1">Passcode: {passcode}</p>
|
<p className="text-sm text-slate-600 mt-1">Passcode: {passcode}</p>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -278,7 +278,7 @@ export default function ZoomGenerator() {
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="text-xs text-slate-500 mt-4 text-center">
|
<p className="text-xs text-slate-600 mt-4 text-center">
|
||||||
Your meeting ID is encoded directly. Static and forever free.
|
Your meeting ID is encoded directly. Static and forever free.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -200,7 +200,7 @@ export default function ZoomQRCodePage() {
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div className="font-bold text-slate-900 text-sm">Team Standup</div>
|
<div className="font-bold text-slate-900 text-sm">Team Standup</div>
|
||||||
<div className="text-xs text-slate-500">ID: 123 456 7890</div>
|
<div className="text-xs text-slate-600">ID: 123 456 7890</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ const TOOLS = [
|
||||||
name: 'Text',
|
name: 'Text',
|
||||||
description: 'Display plain text',
|
description: 'Display plain text',
|
||||||
href: '/tools/text-qr-code',
|
href: '/tools/text-qr-code',
|
||||||
color: 'text-slate-500',
|
color: 'text-slate-600',
|
||||||
bg: 'bg-slate-50'
|
bg: 'bg-slate-50'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -240,7 +240,7 @@ export function FreeToolsGrid() {
|
||||||
<h3 className="text-base md:text-lg font-semibold text-slate-900 mb-0.5">
|
<h3 className="text-base md:text-lg font-semibold text-slate-900 mb-0.5">
|
||||||
{tool.name}
|
{tool.name}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-xs md:text-sm text-slate-500 text-center">
|
<p className="text-xs md:text-sm text-slate-600 text-center">
|
||||||
{tool.description}
|
{tool.description}
|
||||||
</p>
|
</p>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue