Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 0 additions & 92 deletions components/seo/PasswordGeneratorSEO.tsx

This file was deleted.

94 changes: 94 additions & 0 deletions components/seo/RandomStringGeneratorSEO.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
export default function RandomStringGeneratorSEO() {
return (
<div className="content-wrapper">
<section>
<p>
Generate cryptographically secure random strings instantly with this
free online random string generator. Whether you&apos;re creating API
keys, tokens, or secure identifiers, Jam&apos;s Random String
Generator creates strong, randomized strings with password-like
structure to keep your applications secure.
</p>
</section>

<section>
<h2>How to Use Jam&apos;s Random String Generator</h2>
<p>
Quickly create a cryptographically strong random string tailored to
your needs. Follow these simple steps:
</p>
<ul>
<li>
<b>Select options:</b> <br /> Choose to include lowercase,
uppercase, numbers, and/or symbols.
</li>
<li>
<b>Set length:</b> <br /> Pick a string length (4-128 characters).
</li>
<li>
<b>Generate:</b> <br /> Click &quot;Generate Random String&quot; to
instantly get a cryptographically secure random string.
</li>
<li>
<b>Copy:</b> <br /> Copy your generated string safely with one
click.
</li>
</ul>
</section>

<section>
<h2>Why use a Random String Generator?</h2>
<p>
Manually created strings are often predictable and easy to guess. A
random string generator helps you avoid common patterns and ensures
your generated strings are cryptographically secure.
</p>
<ul>
<li>
<b>Security:</b> <br /> Random, unpredictable strings are harder to
crack or guess.
</li>
<li>
<b>Customization:</b> <br /> Adjust the length and character sets to
meet your application requirements.
</li>
<li>
<b>Convenience:</b> <br /> Generate reliable random strings
instantly, perfect for API keys, tokens, or secure identifiers.
</li>
</ul>
</section>

<section>
<h2>FAQs</h2>
<ul>
<li>
<b>Is this random string generator free?</b> <br /> Yes. It&apos;s
free, open-source, and ad-free.
</li>
<li>
<b>Are the generated strings stored?</b> <br />
No. All jam.dev/utilities are local-only browser tools that work
entirely without any backend. Your random strings are generated in
your browser and never leave your device.
</li>
<li>
<b>How long should my random string be?</b> <br /> For strong
security, use at least 12 characters. For maximum protection, 20+
characters are recommended.
</li>
<li>
<b>What can I use these strings for?</b> <br />
Perfect for API keys, tokens, session IDs, secret keys, or any
secure identifier in your applications.
</li>
<li>
<b>How secure are the generated strings?</b> <br /> They are
generated using cryptographically secure random values, making them
highly resistant to prediction and brute-force attacks.
</li>
</ul>
</section>
</div>
);
}
4 changes: 2 additions & 2 deletions components/utils/tools-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,9 @@ export const tools = [
link: "/utilities/internet-speed-test",
},
{
title: "Password Generator",
title: "Random String Generator",
description:
"Mix uppercase, lowercase, numbers, and symbols to generate bulletproof passwords that will keep your accounts safe.",
"Generate cryptographically secure random strings with configurable character sets. Perfect for API keys, tokens, passwords, and secure identifiers.",
link: "/utilities/password-generator",
},
];
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ import CallToActionGrid from "@/components/CallToActionGrid";
import Meta from "@/components/Meta";
import { Input } from "@/components/ds/InputComponent";
import { PasswordBuilder } from "@/components/utils/password-generator.utils";
import PasswordGeneratorSEO from "@/components/seo/PasswordGeneratorSEO";
import RandomStringGeneratorSEO from "@/components/seo/RandomStringGeneratorSEO";
import GitHubContribution from "@/components/GitHubContribution";
import { cn } from "@/lib/utils";

export default function PasswordGenerator() {
const [password, setPassword] = useState("");
const [generatedString, setGeneratedString] = useState("");
const [length, setLength] = useState<number>(16);
const [includeLowercase, setIncludeLowercase] = useState<boolean>(true);
const [includeUppercase, setIncludeUppercase] = useState<boolean>(true);
Expand All @@ -26,15 +26,15 @@ export default function PasswordGenerator() {
const { buttonText, handleCopy } = useCopyToClipboard();
const outputRef = useRef<HTMLTextAreaElement | null>(null);

const generatePassword = useCallback(() => {
const generateRandomString = useCallback(() => {
const builder = new PasswordBuilder(
includeLowercase,
includeUppercase,
includeNumbers,
includeSymbols,
length
);
setPassword(builder.Build());
setGeneratedString(builder.Build());
}, [
includeLowercase,
includeUppercase,
Expand Down Expand Up @@ -75,15 +75,15 @@ export default function PasswordGenerator() {
return (
<main>
<Meta
title="Password Generator | Free, Open Source & Ad-free"
description="Generate strong and secure passwords instantly with Jam's free online Password Generator. Choose your preferences or use all options by default — uppercase letters, lowercase letters, numbers, and special characters — and get a reliable password in one click. That's it."
title="Random String Generator | Free, Open Source & Ad-free"
description="Generate cryptographically strong random strings with password-like structure instantly with Jam's free online Random String Generator. Choose your preferences or use all options by default — uppercase letters, lowercase letters, numbers, and special characters — and get a reliable random string in one click. That's it."
/>
<Header />
<CMDK />

<section className="container max-w-2xl mb-12">
<PageHeader
title="Password Generator"
title="Random String Generator"
description="Fast, free, open source, ad-free tools."
/>
</section>
Expand Down Expand Up @@ -147,7 +147,7 @@ export default function PasswordGenerator() {
</div>

<div className="text-sm">
<Label className="mb-2">Password strength:</Label>
<Label className="mb-2">String complexity:</Label>

<div className="bg-muted text-foreground h-8 rounded-md items-center flex px-3 font-medium gap-1.5">
<div
Expand All @@ -164,30 +164,36 @@ export default function PasswordGenerator() {
<div className="h-[1px] bg-border"></div>

<div className="flex flex-col">
<Button onClick={generatePassword}>Generate</Button>
<Button onClick={generateRandomString}>Generate</Button>
</div>

<div className="h-[1px] bg-border"></div>

<div>
<div className="mb-2 flex justify-between items-center">
<Label className="mb-0">Password</Label>
<Label className="mb-0">Generated String</Label>
</div>

<Textarea
value={password}
value={generatedString}
readOnly
rows={2}
ref={outputRef}
className="mb-4"
placeholder="Click 'Generate' to create a secure password."
placeholder="Click 'Generate' to create a cryptographically strong random string."
/>

<div className="flex gap-2 justify-between">
<Button variant="outline" onClick={() => handleCopy(password)}>
<Button
variant="outline"
onClick={() => handleCopy(generatedString)}
>
{buttonText}
</Button>
<Button variant="outline" onClick={() => setPassword("")}>
<Button
variant="outline"
onClick={() => setGeneratedString("")}
>
Clear
</Button>
</div>
Expand All @@ -200,7 +206,7 @@ export default function PasswordGenerator() {
<CallToActionGrid />

<section className="container max-w-2xl">
<PasswordGeneratorSEO />
<RandomStringGeneratorSEO />
</section>
</main>
);
Expand Down