Skip to content

feat: add social meta tags, expand FAQ, and polish for launch #139

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 8, 2025
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
15 changes: 13 additions & 2 deletions app/about/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,18 @@ import { GhostLogo } from "@/components/ghost-logo";
export const metadata: Metadata = {
title: "About - GhostPaste",
description:
"Learn about GhostPaste's zero-knowledge encrypted code sharing and our unique human-AI collaboration.",
"Learn about GhostPaste's zero-knowledge encrypted code sharing and our unique human-AI collaboration.",
openGraph: {
title: "About GhostPaste - The Story Behind Secure Code Sharing",
description:
"Built with love, powered by privacy. Learn how GhostPaste combines human creativity and AI assistance to create the most secure code sharing platform.",
url: "https://ghostpaste.dev/about",
},
twitter: {
title: "About GhostPaste - The Story Behind Secure Code Sharing",
description:
"Human creativity meets AI assistance. Discover how we built the most private code sharing platform.",
},
};

export default function AboutPage() {
Expand Down Expand Up @@ -152,7 +163,7 @@ export default function AboutPage() {
<div>
<h3 className="mb-1 font-semibold">Password Protection</h3>
<p className="text-muted-foreground text-sm">
Optional PIN for edit/delete access control
Optional password for edit/delete access control
</p>
</div>
</div>
Expand Down
26 changes: 26 additions & 0 deletions app/create/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Metadata } from "next";

export const metadata: Metadata = {
title: "Create Gist - GhostPaste",
description:
"Create a new encrypted code gist. Your code is encrypted client-side before upload. Set expiration, add passwords, and share securely.",
openGraph: {
title: "Create Encrypted Gist - GhostPaste",
description:
"Create and share encrypted code snippets. Client-side encryption, custom expiration, password protection. Your code never leaves your browser unencrypted.",
url: "https://ghostpaste.dev/create",
},
twitter: {
title: "Create Encrypted Gist - GhostPaste",
description:
"Create and share encrypted code snippets. Client-side encryption ensures your code stays private.",
},
};

export default function CreateLayout({
children,
}: {
children: React.ReactNode;
}) {
return <>{children}</>;
}
16 changes: 15 additions & 1 deletion app/examples/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,17 @@ export const metadata: Metadata = {
title: "Examples - GhostPaste",
description:
"Discover how developers use GhostPaste for secure code sharing in different scenarios.",
openGraph: {
title: "Use Cases & Examples - GhostPaste",
description:
"See how developers use GhostPaste for code reviews, bug reports, interviews, and more. Secure code sharing for every scenario.",
url: "https://ghostpaste.dev/examples",
},
twitter: {
title: "Use Cases & Examples - GhostPaste",
description:
"Code reviews, bug reports, interviews, and more. See how GhostPaste enables secure code sharing.",
},
};

interface ExampleProps {
Expand Down Expand Up @@ -64,7 +75,10 @@ function ExampleCard({
</h3>
</div>
{security === "high" && (
<Badge variant="destructive" className="w-fit flex-shrink-0 text-xs">
<Badge
variant="destructive"
className="w-fit flex-shrink-0 bg-red-600 text-xs text-white dark:bg-red-700 dark:text-white"
>
<Shield className="mr-1 h-3 w-3" />
High Security
</Badge>
Expand Down
40 changes: 40 additions & 0 deletions app/g/[id]/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { Metadata } from "next";

export async function generateMetadata({
params,
}: {
params: Promise<{ id: string }>;
}): Promise<Metadata> {
const { id } = await params;

return {
title: `Gist ${id} - GhostPaste`,
description:
"View encrypted code gist. This content is encrypted and can only be decrypted with the proper key.",
openGraph: {
title: `Encrypted Gist - GhostPaste`,
description:
"This gist contains encrypted code. Visit the link with the decryption key to view the content.",
url: `https://ghostpaste.dev/g/${id}`,
type: "article",
},
twitter: {
card: "summary_large_image",
title: `Encrypted Gist - GhostPaste`,
description:
"This gist contains encrypted code. The decryption key is required to view.",
},
robots: {
index: false, // Don't index individual gists for privacy
follow: true,
},
};
}

export default function GistLayout({
children,
}: {
children: React.ReactNode;
}) {
return <>{children}</>;
}
Loading