Skip to content
Open
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
137 changes: 62 additions & 75 deletions app/(footer)/about/page.tsx

Large diffs are not rendered by default.

51 changes: 22 additions & 29 deletions app/(footer)/contact/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,35 @@ import {
Send,
Home
} from "lucide-react";
import { siteConfig } from "@/lib/seo";

export const metadata: Metadata = {
title: "Contact Us - FlagForge CTF Platform",
title: "Contact FlagForge | CTF Support and Cybersecurity Collaboration",
description:
"Contact FlagForge for CTF support and cybersecurity inquiries via email, phone, or our Lalitpur office.",
"Contact FlagForge for platform support, partnerships, CTF collaboration, or general cybersecurity learning inquiries.",
keywords: [
"contact FlagForge",
"CTF support",
"cybersecurity help",
"FlagForge team",
"Nepal cybersecurity support",
"Nepal CTF community",
"FlagForge support",
"CTF platform contact",
"cybersecurity collaboration",
"Nepal cybersecurity community",
],
authors: [{ name: "FlagForge Team" }],
openGraph: {
title: "Contact FlagForge - Get in Touch",
title: "Contact FlagForge | CTF Support and Cybersecurity Collaboration",
description:
"Contact the FlagForge team for inquiries, support, or collaboration opportunities.",
url: "https://flagforgectf.com/contact",
"Contact the FlagForge team for platform support, partnerships, or cybersecurity collaboration.",
url: `${siteConfig.url}/contact`,
type: "website",
siteName: "FlagForge",
siteName: siteConfig.name,
locale: "en_US",
images: [{ url: siteConfig.ogImage, alt: "Contact FlagForge" }],
},
twitter: {
card: "summary",
title: "Contact FlagForge - Get in Touch",
card: "summary_large_image",
title: "Contact FlagForge | CTF Support and Cybersecurity Collaboration",
description: "Reach out to the FlagForge team for support, inquiries, or collaboration.",
images: [siteConfig.ogImage],
},
alternates: {
canonical: "/contact",
Expand All @@ -47,39 +49,32 @@ export const metadata: Metadata = {
export default function Contact() {
return (
<div className="min-h-screen bg-white dark:bg-[#050505] text-gray-950 dark:text-white pb-16 relative overflow-hidden flex items-center justify-center p-4 lg:p-8">

{/* Background Effects */}
<div className="absolute inset-0 pointer-events-none z-0">
<div className="absolute top-[-10%] left-[-5%] w-[40%] h-[40%] bg-red-600/5 dark:bg-red-600/[0.03] rounded-full blur-[120px] animate-pulse" />
<div className="absolute bottom-[-5%] right-[-2%] w-[30%] h-[30%] bg-red-600/5 dark:bg-red-600/[0.03] rounded-full blur-[100px]" /> <div className="absolute inset-0 bg-[url('https://www.transparenttextures.com/patterns/carbon-fibre.png')] opacity-[0.02] dark:opacity-[0.04]" />
<div className="absolute bottom-[-5%] right-[-2%] w-[30%] h-[30%] bg-red-600/5 dark:bg-red-600/[0.03] rounded-full blur-[100px]" />
<div className="absolute inset-0 bg-[url('https://www.transparenttextures.com/patterns/carbon-fibre.png')] opacity-[0.02] dark:opacity-[0.04]" />
</div>

<div className="relative z-10 w-[80%] animate-in fade-in zoom-in-95 duration-700">

{/* Compact Glass Dashboard */}
<div className="relative bg-white/70 dark:bg-white/[0.02] backdrop-blur-3xl border border-white dark:border-white/10 rounded-[2.5rem] lg:rounded-[3.5rem] shadow-2xl shadow-black/5 overflow-hidden">

<div className="grid lg:grid-cols-[0.9fr_1.1fr]">

{/* Left Column: Header & Info */}
<div className="p-8 lg:p-16 bg-gray-50/50 dark:bg-white/[0.01] border-b lg:border-b-0 lg:border-r border-gray-100 dark:border-white/5 space-y-12">

<div className="space-y-6">
<h1 className="text-5xl lg:text-7xl font-black tracking-tighter leading-none text-gray-900 dark:text-white">
Contact <span className="text-red-500">Us</span>
Contact <span className="text-red-500">FlagForge</span>
</h1>
<p className="text-base font-medium text-gray-500 dark:text-gray-400 max-w-sm">
Get in touch with us. We'd love to hear from you!
Reach the team for platform support, partnership conversations, and CTF or cybersecurity learning inquiries.
</p>
<h3 className="sr-only">FlagForge Contact Details</h3>
<h3 className="sr-only">FlagForge contact details</h3>
<h4 className="sr-only">Email, phone, and office location</h4>
</div>

<div className="space-y-8">
<h2 className="text-xs font-black uppercase tracking-[0.3em] text-red-500/80">Get in Touch</h2>
<div className="grid gap-8">
{[
{ icon: Mail, label: "Email", value: "info@flagforgectf.com", href: "mailto:info@flagforgectf.com" },
{ icon: Mail, label: "Email", value: "info@flagforge.xyz", href: "mailto:info@flagforge.xyz" },
{ icon: Phone, label: "Phone", value: "+977 9828137085", href: "tel:+9779828137085" },
{ icon: MapPin, label: "Address", value: "Lalitpur, 44600" }
].map((item, idx) => (
Expand Down Expand Up @@ -108,10 +103,9 @@ export default function Contact() {
</div>
</div>

{/* Right Column: Contact Form */}
<div className="p-8 lg:p-16 space-y-10">
<h2 className="text-3xl font-black tracking-tighter text-gray-900 dark:text-white uppercase">
Send us a Message
Send Us a Message
</h2>

<form className="space-y-8">
Expand Down Expand Up @@ -155,7 +149,6 @@ export default function Contact() {
</button>
</form>
</div>

</div>
</div>
</div>
Expand Down
20 changes: 10 additions & 10 deletions app/(main)/blogs/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type {
PartialBlockObjectResponse,
} from "@notionhq/client/build/src/api-endpoints";
import JsonLd from "@/components/JsonLd";
import { siteConfig } from "@/lib/seo";
import BlogPostClient from "./BlogPostClient";

export const revalidate = 300;
Expand Down Expand Up @@ -228,13 +229,13 @@ export async function generateMetadata({
description,
keywords,
alternates: {
canonical: `/blogs/${canonicalSlug}`,
canonical: `${siteConfig.blogUrl}/${canonicalSlug}`,
},
openGraph: {
title: post.title,
description,
type: "article",
url: `/blogs/${canonicalSlug}`,
url: `${siteConfig.blogUrl}/${canonicalSlug}`,
images: imageUrl ? [{ url: imageUrl, alt: post.title }] : [],
},
twitter: {
Expand All @@ -254,8 +255,7 @@ export default async function BlogPostPage({
const { id } = await params;
const post = await fetchBlogPost(id);
const postSlug = post?.slug || id;
const seoImage =
post?.cover || post?.thumbnail || post?.image || "https://flagforgectf.com/flagforge-logo.png";
const seoImage = post?.cover || post?.thumbnail || post?.image || siteConfig.ogImage;
const wordCount = post?.content
? post.content.split(/\s+/).filter(Boolean).length
: undefined;
Expand Down Expand Up @@ -286,18 +286,18 @@ export default async function BlogPostPage({
name: "FlagForge",
logo: {
"@type": "ImageObject",
url: "https://flagforgectf.com/flagforge-logo.png",
url: siteConfig.ogImage,
},
},
mainEntityOfPage: {
"@type": "WebPage",
"@id": `https://flagforgectf.com/blogs/${postSlug}`,
"@id": `${siteConfig.blogUrl}/${postSlug}`,
},
keywords: post.tags?.join(", ") || "",
isPartOf: {
"@type": "Blog",
name: "FlagForge Blog",
url: "https://flagforgectf.com/blogs",
url: siteConfig.blogUrl,
},
}}
/>
Expand All @@ -310,19 +310,19 @@ export default async function BlogPostPage({
"@type": "ListItem",
position: 1,
name: "Home",
item: "https://flagforgectf.com/",
item: `${siteConfig.url}/`,
},
{
"@type": "ListItem",
position: 2,
name: "Blogs",
item: "https://flagforgectf.com/blogs",
item: siteConfig.blogUrl,
},
{
"@type": "ListItem",
position: 3,
name: post.title,
item: `https://flagforgectf.com/blogs/${postSlug}`,
item: `${siteConfig.blogUrl}/${postSlug}`,
},
],
}}
Expand Down
21 changes: 12 additions & 9 deletions app/(main)/blogs/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
import type { Metadata } from "next";
import type { ReactNode } from "react";
import { siteConfig } from "@/lib/seo";

export const metadata: Metadata = {
title: "FlagForge Blog",
title: "FlagForge Blog | CTF Guides and Cybersecurity Tutorials",
description:
"Read FlagForge blog posts on CTF challenges, cybersecurity tutorials, and competition guides.",
"Read FlagForge blog posts covering capture the flag walkthroughs, cybersecurity tutorials, learning paths, and community updates.",
alternates: {
canonical: "/blogs",
canonical: siteConfig.blogUrl,
},
openGraph: {
title: "FlagForge Blog",
title: "FlagForge Blog | CTF Guides and Cybersecurity Tutorials",
description:
"Read FlagForge blog posts on CTF challenges, cybersecurity tutorials, and competition guides.",
url: "https://flagforgectf.com/blogs",
"Read FlagForge blog posts covering capture the flag walkthroughs, cybersecurity tutorials, learning paths, and community updates.",
url: siteConfig.blogUrl,
type: "website",
siteName: "FlagForge",
siteName: siteConfig.name,
images: [{ url: siteConfig.ogImage, alt: "FlagForge Blog" }],
},
twitter: {
card: "summary_large_image",
title: "FlagForge Blog",
title: "FlagForge Blog | CTF Guides and Cybersecurity Tutorials",
description:
"Read FlagForge blog posts on CTF challenges, cybersecurity tutorials, and competition guides.",
"Read FlagForge blog posts covering capture the flag walkthroughs, cybersecurity tutorials, learning paths, and community updates.",
images: [siteConfig.ogImage],
},
};

Expand Down
6 changes: 3 additions & 3 deletions app/(main)/blogs/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export default function BlogsPage() {
"@type": "ListItem",
"position": 2,
"name": "Blogs",
"item": "https://flagforgectf.com/blogs"
"item": "https://blogs.flagforgectf.com"
}
]
};
Expand Down Expand Up @@ -135,11 +135,11 @@ export default function BlogsPage() {
"@type": "Blog",
name: "FlagForge Blog",
description: "Discover insights, tutorials, and stories from our team at FlagForge.",
url: "https://flagforgectf.com/blogs",
url: "https://blogs.flagforgectf.com",
blogPost: posts.map((post) => ({
"@type": "BlogPosting",
headline: post.title,
url: `https://flagforgectf.com/blogs/${post.slug || post.id}`,
url: `https://blogs.flagforgectf.com/${post.slug || post.id}`,
datePublished: post.created,
description: post.excerpt,
})),
Expand Down
19 changes: 11 additions & 8 deletions app/(main)/resources/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
import type { Metadata } from "next";
import type { ReactNode } from "react";
import { siteConfig } from "@/lib/seo";

export const metadata: Metadata = {
title: "Learning Resources",
title: "FlagForge Resources | CTF Learning Materials and Security Study Guides",
description:
"Explore FlagForge learning resources and CTF training materials organized by category to build cybersecurity skills.",
"Explore FlagForge resources for capture the flag preparation, cybersecurity study paths, curated tools, and practical learning materials.",
alternates: {
canonical: "/resources",
},
openGraph: {
title: "Learning Resources - FlagForge",
title: "FlagForge Resources | CTF Learning Materials and Security Study Guides",
description:
"Explore FlagForge learning resources and CTF training materials organized by category to build cybersecurity skills.",
url: "https://flagforgectf.com/resources",
"Explore FlagForge resources for capture the flag preparation, cybersecurity study paths, curated tools, and practical learning materials.",
url: `${siteConfig.url}/resources`,
type: "website",
siteName: "FlagForge",
siteName: siteConfig.name,
images: [{ url: siteConfig.ogImage, alt: "FlagForge Resources" }],
},
twitter: {
card: "summary_large_image",
title: "Learning Resources - FlagForge",
title: "FlagForge Resources | CTF Learning Materials and Security Study Guides",
description:
"Explore FlagForge learning resources and CTF training materials organized by category to build cybersecurity skills.",
"Explore FlagForge resources for capture the flag preparation, cybersecurity study paths, curated tools, and practical learning materials.",
images: [siteConfig.ogImage],
},
};

Expand Down
1 change: 1 addition & 0 deletions app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@

body {
@apply bg-background text-foreground;
font-family: "Segoe UI", "Aptos", "Helvetica Neue", Arial, sans-serif;
}

/* Custom dark mode styles */
Expand Down
Loading
Loading