Skip to content

Commit 5c0fc68

Browse files
authored
Feat: Create RAG Chatbot landing page (#21)
* Feat: Create RAG Chatbot landing page * Change icons * fix select * fix structure folder * fix logo url * fix logo url in footer
1 parent f47bfd9 commit 5c0fc68

File tree

15 files changed

+654
-70
lines changed

15 files changed

+654
-70
lines changed

app/(inferenceai)/inferenceai/[lang]/data.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import {
4343
inferenceaiFaq4Answer
4444
} from "@/locales/.generated/server";
4545

46-
export const nav = (lang: SupportedLanguage) => {
46+
export const navInferenceai = (lang: SupportedLanguage) => {
4747
const data = [
4848
{ label: inferenceaiNavItems0Label(lang), href: "#how-it-works" },
4949
{ label: inferenceaiNavItems1Label(lang), href: "#what-you-get" },

app/(inferenceai)/inferenceai/[lang]/language-picker.tsx

Lines changed: 0 additions & 43 deletions
This file was deleted.

app/(inferenceai)/inferenceai/components/footer.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,28 @@ import data from "@/data.json";
33
import { Separator } from "@/components/ui/separator";
44
import { SupportedLanguage } from "@/locales/.generated/types";
55
import { inferenceaiFooter } from "@/locales/.generated/server";
6+
import LanguagePicker from "./language-picker";
7+
import Link from "next/link";
68

7-
export default function Footer({ lang }: { lang: SupportedLanguage }) {
9+
export default function Footer({
10+
lang,
11+
type = "inferenceai"
12+
}: {
13+
lang: SupportedLanguage;
14+
type?: "inferenceai" | "rag-chatbot";
15+
}) {
816
const { aiSocials, copyright } = data;
917

1018
return (
1119
<footer className="relative overflow-hidden border border-[#29223E] px-4 py-10 text-[#AFB0C3] md:px-20 md:py-14">
1220
<div className="flex flex-col space-y-6 md:items-center">
1321
<div className="flex items-center">
14-
<a href="/inferenceai">
22+
<Link
23+
href={
24+
type === "inferenceai"
25+
? "/inferenceai"
26+
: "/inferenceai/rag-chatbot"
27+
}>
1528
<Image
1629
src="/images/inferenceai/inference-ai-white.svg"
1730
alt="Inference AI Logo"
@@ -20,7 +33,7 @@ export default function Footer({ lang }: { lang: SupportedLanguage }) {
2033
className="h-8 w-auto"
2134
priority
2235
/>
23-
</a>
36+
</Link>
2437
</div>
2538

2639
<p className="text-sm md:max-w-60 md:text-center">
@@ -47,6 +60,8 @@ export default function Footer({ lang }: { lang: SupportedLanguage }) {
4760
))}
4861
</div>
4962

63+
<LanguagePicker lang={lang} type={type} />
64+
5065
<Separator className="w-full bg-[#29223E]" />
5166

5267
<p className="text-center text-sm">{copyright}</p>

app/(inferenceai)/inferenceai/components/hero.tsx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,26 @@
22

33
import { motion } from "framer-motion";
44
import Image from "next/image";
5-
import { HeroCTAButton } from "./hero-cta-button";
65
import { SupportedLanguage } from "@/locales/.generated/types";
76
import {
7+
ragChatbotHeroHeading,
8+
ragChatbotHeroDesc,
89
inferenceaiHeroHeading,
910
inferenceaiHeroDesc
1011
} from "@/locales/.generated/server";
12+
import { HeroCTAButton } from "./hero-cta-button";
1113

12-
export default function Hero({ lang }: { lang: SupportedLanguage }) {
14+
export default function Hero({
15+
lang,
16+
type = "inferenceai"
17+
}: {
18+
lang: SupportedLanguage;
19+
type?: "inferenceai" | "rag-chatbot";
20+
}) {
1321
return (
14-
<section className="relative overflow-hidden bg-[#04040B] text-white">
15-
{/* Background Image with Zoom-in Effect */}
22+
<section
23+
id="hero"
24+
className="relative overflow-hidden bg-[#04040B] text-white">
1625
<motion.div
1726
initial={{ scale: 1.1 }}
1827
animate={{ scale: 1 }}
@@ -35,15 +44,19 @@ export default function Hero({ lang }: { lang: SupportedLanguage }) {
3544
transition={{ duration: 1, ease: "easeOut" }}
3645
className="flex w-full flex-col items-center justify-center">
3746
<h1 className="mb-4 mt-28 text-center text-5xl font-semibold md:mb-6 md:max-w-4xl md:text-6xl">
38-
{inferenceaiHeroHeading(lang)}
47+
{type === "inferenceai"
48+
? inferenceaiHeroHeading(lang)
49+
: ragChatbotHeroHeading(lang)}
3950
</h1>
4051

4152
<motion.p
4253
initial={{ opacity: 0, y: 20 }}
4354
animate={{ opacity: 1, y: 0 }}
4455
transition={{ delay: 0.3, duration: 1, ease: "easeOut" }}
4556
className="my-6 text-center text-base font-medium text-[#AFB0C3] md:my-10 md:max-w-3xl md:text-[22px]">
46-
{inferenceaiHeroDesc(lang)}
57+
{type === "inferenceai"
58+
? inferenceaiHeroDesc(lang)
59+
: ragChatbotHeroDesc(lang)}
4760
</motion.p>
4861

4962
<motion.div
@@ -55,7 +68,6 @@ export default function Hero({ lang }: { lang: SupportedLanguage }) {
5568
</motion.div>
5669
</article>
5770

58-
{/* Bottom Banner with Fade-in */}
5971
<motion.div
6072
initial={{ opacity: 0, y: 30 }}
6173
animate={{ opacity: 0.6, y: 0 }}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"use client";
2+
3+
import {
4+
SupportedLanguage,
5+
supportedLanguages
6+
} from "@/locales/.generated/types";
7+
8+
const labelByLang: Record<SupportedLanguage, string> = {
9+
en: "🇬🇧 English",
10+
id: "🇮🇩 Indonesia"
11+
};
12+
13+
export default function LanguagePicker({
14+
lang,
15+
type = "inferenceai"
16+
}: {
17+
lang: SupportedLanguage;
18+
type: "inferenceai" | "rag-chatbot";
19+
}) {
20+
const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
21+
const newLang = e.target.value as SupportedLanguage;
22+
window.location.href =
23+
type === "inferenceai"
24+
? `/inferenceai/${newLang}#hero`
25+
: `/inferenceai/rag-chatbot/${newLang}#hero`;
26+
};
27+
28+
return (
29+
<select
30+
value={lang}
31+
onChange={handleChange}
32+
className="max-w-32 rounded-full border bg-transparent px-3 py-2 text-sm font-medium text-white">
33+
{supportedLanguages.map((l) => (
34+
<option key={l} value={l}>
35+
{labelByLang[l]}
36+
</option>
37+
))}
38+
</select>
39+
);
40+
}

app/(inferenceai)/inferenceai/components/nav.tsx

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,40 @@ import {
1212
import StickyNavigationMain from "@/app/components/sticky-nav-main";
1313
import { HeroCTAButton } from "./hero-cta-button";
1414
import { SupportedLanguage } from "@/locales/.generated/types";
15-
import LanguagePicker from "../[lang]/language-picker";
16-
import { nav } from "../[lang]/data";
15+
import { navInferenceai } from "../[lang]/data";
16+
import { navRagChatbot } from "../rag-chatbot/[lang]/data";
1717

18-
export default function Nav({ lang }: { lang: SupportedLanguage }) {
18+
export default function Nav({
19+
lang,
20+
type = "inferenceai"
21+
}: {
22+
lang: SupportedLanguage;
23+
type?: "inferenceai" | "rag-chatbot";
24+
}) {
1925
const [isOpen, setIsOpen] = useState(false);
2026

2127
return (
2228
<StickyNavigationMain isMenuOpen={isOpen}>
2329
{({ shouldBeWhite }) => (
2430
<>
2531
<NavContainer>
26-
<Link href="/inferenceai" className="flex items-center">
32+
<Link
33+
href={
34+
type === "inferenceai"
35+
? "/inferenceai"
36+
: "/inferenceai/rag-chatbot"
37+
}
38+
className="flex items-center">
2739
<InferenceAI isOpen={isOpen} />
2840
</Link>
2941

3042
<CenterNavItems>
3143
<NavigationMenu className="mx-8 xl:mx-0">
3244
<NavigationMenuList className="flex gap-5">
33-
{nav(lang).map((item, idx) => (
45+
{(type === "inferenceai"
46+
? navInferenceai(lang)
47+
: navRagChatbot(lang)
48+
).map((item, idx) => (
3449
<NavigationMenuItem key={idx} className="text-center">
3550
<Link
3651
href={item.href}
@@ -49,13 +64,11 @@ export default function Nav({ lang }: { lang: SupportedLanguage }) {
4964
</CenterNavItems>
5065

5166
<RightNavItems>
52-
<LanguagePicker lang={lang} />
5367
<HeroCTAButton lang={lang} />
5468
</RightNavItems>
5569

5670
{/* Mobile Toggle */}
5771
<div className="flex items-center xl:hidden">
58-
<LanguagePicker isOpen={isOpen} lang={lang} />
5972
<button
6073
onClick={() => setIsOpen(!isOpen)}
6174
className="ml-3 p-2"
@@ -90,7 +103,10 @@ export default function Nav({ lang }: { lang: SupportedLanguage }) {
90103
{isOpen && (
91104
<div className="bg-white shadow-md xl:hidden">
92105
<div className="mx-auto flex w-full flex-col space-y-4 px-4 py-5 md:px-8">
93-
{nav(lang).map((item, idx) => (
106+
{(type === "inferenceai"
107+
? navInferenceai(lang)
108+
: navRagChatbot(lang)
109+
).map((item, idx) => (
94110
<Link
95111
key={idx}
96112
href={item.href}

0 commit comments

Comments
 (0)