diff --git a/app/[lang]/(hyperjump)/products/data.ts b/app/[lang]/(hyperjump)/products/data.ts index 02b7e67cd..70fe12f81 100644 --- a/app/[lang]/(hyperjump)/products/data.ts +++ b/app/[lang]/(hyperjump)/products/data.ts @@ -12,7 +12,15 @@ import { productsCommercialData4Text, productsCommercialData4Title, productsCommercialData5Text, - productsCommercialData5Title + productsCommercialData5Title, + productsCommercialData6Text, + productsCommercialData6Title, + productsCommercialData7Text, + productsCommercialData7Title, + productsCommercialData8Text, + productsCommercialData8Title, + productsCommercialData9Text, + productsCommercialData9Title } from "@/locales/.generated/strings"; import type { SupportedLanguage } from "@/locales/.generated/types"; @@ -20,13 +28,41 @@ export type CommercialProduct = { title: string; description: string; image: string; - urlLearnMore: string; + urlLearnMore?: string; }; +/** + * Returns commercial products for the products page, newest first. + * + * @param lang - Active locale for localized titles and descriptions + */ export function getCommercialProduct( lang: SupportedLanguage ): CommercialProduct[] { return [ + { + title: productsCommercialData6Title(lang), + description: productsCommercialData6Text(lang), + image: "/images/products/typetable.svg", + urlLearnMore: "https://typetable.io" + }, + { + title: productsCommercialData7Title(lang), + description: productsCommercialData7Text(lang), + image: "/images/products/hydra8.png", + urlLearnMore: "https://hydra8.hyperjump.tech" + }, + { + title: productsCommercialData8Title(lang), + description: productsCommercialData8Text(lang), + image: "/images/products/avenu.png", + urlLearnMore: "https://avenu.hyperjump.tech" + }, + { + title: productsCommercialData9Title(lang), + description: productsCommercialData9Text(lang), + image: "/images/products/frontier-news.svg" + }, { title: productsCommercialData2Title(lang), description: productsCommercialData2Text(lang), @@ -65,6 +101,11 @@ export type OpenSourceProduct = { repo: string; }; +/** + * Returns open-source products for the products page. + * + * @param lang - Active locale for localized titles and descriptions + */ export function openSourceProducts( lang: SupportedLanguage ): OpenSourceProduct[] { diff --git a/app/[lang]/(hyperjump)/products/page.tsx b/app/[lang]/(hyperjump)/products/page.tsx index 30598a89e..338ab5a91 100644 --- a/app/[lang]/(hyperjump)/products/page.tsx +++ b/app/[lang]/(hyperjump)/products/page.tsx @@ -145,17 +145,19 @@ export default async function ProductsPage({ params }: ProductsProps) { __html: featured.description }} /> - + {featured.urlLearnMore && ( + + )} @@ -222,14 +224,16 @@ function CommercialCard({ product, lang }: CommercialCardProps) { className="text-hyperjump-gray mb-6 flex-1 text-[15px] leading-relaxed" dangerouslySetInnerHTML={{ __html: product.description }} /> - - {productsLearnMore(lang)} - - + {product.urlLearnMore && ( + + {productsLearnMore(lang)} + + + )} ); @@ -249,20 +253,24 @@ function JsonLd({ lang, products }: JsonLdProps) { { name: mainProductsLabel(lang), item: `${url}/${lang}/products` } ]} /> - {products.map(({ description, image, title, ...product }) => ( - - ))} + {products.map(({ description, image, title, ...product }) => { + const productUrl = + (product as CommercialProduct)?.urlLearnMore || + (product as OpenSourceProduct)?.url || + `${url}/${lang}/products`; + + return ( + + ); + })} ); } diff --git a/locales/en/products.json b/locales/en/products.json index cff4fca49..2be23a5b7 100644 --- a/locales/en/products.json +++ b/locales/en/products.json @@ -24,6 +24,22 @@ "5": { "title": "Monitime", "text": "Monitime is a synthetic monitoring service in collaboration with Qwords. You can monitor your website regionally and globally and be notified through various notification channels including Telegram, Slack, and WhatsApp." + }, + "6": { + "title": "TypeTable", + "text": "Say what to record. Fill it in instantly. Describe what your team keeps re-typing — TypeTable proposes the table, enforces the rules, and lets everyone add records in plain language." + }, + "7": { + "title": "Hydra8", + "text": "Version, test, and monitor LLM prompts without redeploying. An open-source LLM gateway for versioned prompt templates, evaluations, and monitoring — ship prompt changes from one dashboard." + }, + "8": { + "title": "Avenu", + "text": "Enterprise-ready AI gateway. Create routing rules and budget for your team." + }, + "9": { + "title": "Frontier News", + "text": "Daily newsletter with curated summaries of YouTube videos about AI, available in multiple languages." } } }, diff --git a/locales/id/products.json b/locales/id/products.json index a5f576151..acc82cdf5 100644 --- a/locales/id/products.json +++ b/locales/id/products.json @@ -24,6 +24,22 @@ "5": { "title": "Monitime", "text": "Monitime merupakan layanan synthetic monitoring hasil kolaborasi dengan Qwords yang memungkinkan pemantauan ketersediaan dan performa website secara regional maupun global. Sistem notifikasi mendukung berbagai kanal, termasuk Telegram, Slack, dan WhatsApp." + }, + "6": { + "title": "TypeTable", + "text": "Ucapkan apa yang perlu dicatat. Isi secara instan. Jelaskan data yang biasanya diketik ulang tim Anda — TypeTable menyarankan tabel, menegakkan aturan, dan memungkinkan semua orang menambahkan catatan dengan bahasa sehari-hari." + }, + "7": { + "title": "Hydra8", + "text": "Versi, uji, dan pantau prompt LLM tanpa perlu redeploy. Gateway LLM open-source untuk template prompt berversi, evaluasi, dan monitoring — kelola perubahan prompt dari satu dashboard." + }, + "8": { + "title": "Avenu", + "text": "Gateway AI siap enterprise. Buat aturan routing dan anggaran untuk tim Anda." + }, + "9": { + "title": "Frontier News", + "text": "Newsletter harian berisi ringkasan terkurasi dari video YouTube tentang AI, tersedia dalam berbagai bahasa." } } }, diff --git a/public/images/products/avenu.png b/public/images/products/avenu.png new file mode 100644 index 000000000..c9c23559f Binary files /dev/null and b/public/images/products/avenu.png differ diff --git a/public/images/products/frontier-news.svg b/public/images/products/frontier-news.svg new file mode 100644 index 000000000..d3ec6970c --- /dev/null +++ b/public/images/products/frontier-news.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + Frontier News + \ No newline at end of file diff --git a/public/images/products/hydra8.png b/public/images/products/hydra8.png new file mode 100644 index 000000000..91ed6841a Binary files /dev/null and b/public/images/products/hydra8.png differ diff --git a/public/images/products/typetable.svg b/public/images/products/typetable.svg new file mode 100644 index 000000000..1426aa618 --- /dev/null +++ b/public/images/products/typetable.svg @@ -0,0 +1,11 @@ + + + + + + + + + TypeTable + \ No newline at end of file