Skip to content

Commit d9f2de6

Browse files
Changes
Co-authored-by: ghostcodedynamics <295822717+ghostcodedynamics@users.noreply.github.com>
1 parent 1ebd34f commit d9f2de6

1 file changed

Lines changed: 150 additions & 13 deletions

File tree

‎src/routes/courses.tsx‎

Lines changed: 150 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,158 @@
1-
import { ComingSoon } from "@/components/coming-soon";
1+
import { Layers, ShieldCheck, Server, Gauge, RefreshCw, MessagesSquare } from "lucide-react";
2+
import { PageHero, Reveal, SectionHeader } from "@/components/section";
23
import { Seo } from "@/components/seo";
4+
import { Faq, FeatureGrid, ProgramCta, StatusNote } from "@/components/program-page";
5+
import { breadcrumbSchema, webPageSchema } from "@/lib/seo";
6+
7+
const title = "Courses - GhostCode Dynamics";
8+
const description =
9+
"Short, practical courses on MERN, backend fundamentals and web security — written by someone who ships client work, not just teaches.";
10+
const path = "/courses";
11+
12+
const PLANNED = [
13+
{
14+
title: "MERN, Properly",
15+
level: "Intermediate",
16+
desc: "Build and deploy a full-stack product with real auth, validation, error handling and a database you'd trust.",
17+
outcomes: ["REST API design", "JWT auth done safely", "MongoDB data modelling", "Deployment & env config"],
18+
},
19+
{
20+
title: "Web Security Fundamentals",
21+
level: "Beginner → Intermediate",
22+
desc: "The OWASP Top 10 explained through vulnerable code you fix yourself, line by line.",
23+
outcomes: ["XSS, CSRF, injection", "Auth & session pitfalls", "Secure headers & CORS", "Dependency hygiene"],
24+
},
25+
{
26+
title: "Frontend That Feels Fast",
27+
level: "Intermediate",
28+
desc: "React performance, bundle discipline, accessibility and motion that doesn't fight the user.",
29+
outcomes: ["Rendering & memoisation", "Core Web Vitals", "A11y in practice", "Tasteful animation"],
30+
},
31+
];
32+
33+
const PRINCIPLES = [
34+
{
35+
icon: <Layers className="h-5 w-5" />,
36+
title: "Project-first",
37+
desc: "Every module moves one real project forward. No isolated toy exercises you throw away.",
38+
},
39+
{
40+
icon: <ShieldCheck className="h-5 w-5" />,
41+
title: "Security baked in",
42+
desc: "Secure patterns taught alongside the feature, not as an optional final chapter.",
43+
},
44+
{
45+
icon: <Server className="h-5 w-5" />,
46+
title: "Ship it",
47+
desc: "Deployment, environment variables and logs are part of the course, not left as an exercise.",
48+
},
49+
{
50+
icon: <Gauge className="h-5 w-5" />,
51+
title: "No fluff",
52+
desc: "Short lessons, dense notes, and a written reference you can search later.",
53+
},
54+
{
55+
icon: <RefreshCw className="h-5 w-5" />,
56+
title: "Lifetime updates",
57+
desc: "Stacks move. Buy once and get revisions as the ecosystem changes.",
58+
},
59+
{
60+
icon: <MessagesSquare className="h-5 w-5" />,
61+
title: "Q&A that answers",
62+
desc: "Questions go to a real channel with a real person reading them.",
63+
},
64+
];
65+
66+
const FAQS = [
67+
{
68+
q: "Can I buy a course today?",
69+
a: "No — nothing is on sale yet. The first course is being written and recorded. Join the list to get launch pricing.",
70+
},
71+
{
72+
q: "Video or written?",
73+
a: "Both. Short screencasts for the build, plus a written reference for every lesson so you can skim instead of scrub.",
74+
},
75+
{
76+
q: "What do I need to know first?",
77+
a: "Comfort with JavaScript basics and the command line. Each course lists explicit prerequisites before you pay.",
78+
},
79+
{
80+
q: "Refunds?",
81+
a: "Straightforward: if a course isn't what was described, ask and you get your money back.",
82+
},
83+
];
384

485
export default function Page() {
586
return (
687
<>
7-
<Seo title={"Courses - GhostCode Dynamics"} description={"Future practical courses on MERN} path={security fundamentals and modern web development."} robots="noindex, follow" />
8-
<ComingSoon
9-
module="Courses"
10-
title="Practical courses, built by builders."
11-
description="Short, focused courses on MERN, security fundamentals and modern web — written by someone who ships, not just teaches."
12-
bullets={[
13-
"Hands-on projects",
14-
"Lifetime updates",
15-
"Honest, no-fluff content",
16-
"Community Q&A",
17-
]}
18-
/>
88+
<Seo
89+
title={title}
90+
description={description}
91+
path={path}
92+
schemas={[
93+
webPageSchema(title, description, path),
94+
breadcrumbSchema([
95+
{ name: "Home", path: "/" },
96+
{ name: "Courses", path },
97+
]),
98+
]}
99+
/>
100+
<PageHero
101+
eyebrow="Courses · In production"
102+
title="Practical courses, built by builders."
103+
description="Short, focused courses on MERN, security fundamentals and modern web development — written from client work, not from other people's tutorials."
104+
>
105+
<StatusNote>First course in production · Launch list open</StatusNote>
106+
</PageHero>
107+
108+
<section className="relative py-16 md:py-24">
109+
<div className="container-prose">
110+
<SectionHeader
111+
eyebrow="Catalogue"
112+
title="Planned courses"
113+
description="Outlines are locked; recording is underway. Order may shift based on what the list asks for."
114+
/>
115+
<div className="mt-12 grid gap-5 lg:grid-cols-3">
116+
{PLANNED.map((c) => (
117+
<Reveal key={c.title}>
118+
<article className="flex h-full flex-col rounded-2xl border border-border bg-card/60 p-6 backdrop-blur transition hover:border-primary/40">
119+
<span className="font-mono text-[10px] uppercase tracking-[0.25em] text-primary">
120+
{c.level}
121+
</span>
122+
<h3 className="mt-3 font-display text-xl font-semibold tracking-tight text-foreground">
123+
{c.title}
124+
</h3>
125+
<p className="mt-2 text-sm leading-relaxed text-muted-foreground">{c.desc}</p>
126+
<ul className="mt-5 space-y-2 border-t border-border/60 pt-5 text-sm text-muted-foreground">
127+
{c.outcomes.map((o) => (
128+
<li key={o} className="flex items-start gap-2.5">
129+
<span className="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary" />
130+
{o}
131+
</li>
132+
))}
133+
</ul>
134+
</article>
135+
</Reveal>
136+
))}
137+
</div>
138+
</div>
139+
</section>
140+
141+
<FeatureGrid
142+
eyebrow="Approach"
143+
title="How these are taught"
144+
items={PRINCIPLES}
145+
/>
146+
147+
<Faq items={FAQS} />
148+
149+
<ProgramCta
150+
title="Get launch pricing"
151+
description="Join the list and you'll get the first course early, at the lowest price it will ever be."
152+
primaryLabel="Join the course list"
153+
secondaryLabel="See the Academy"
154+
secondaryTo="/academy"
155+
/>
19156
</>
20157
);
21158
}

0 commit comments

Comments
 (0)