feat: customize README for Tibia Trade marketplace and enhance page accessibility

- Rewrote README.md to describe the Tibia Trade project, including features, setup instructions, technologies, and SEO keywords in Portuguese
- Removed "Pagodera" from thank you page text for rebranding
- Added role and aria-label to main element in home page for better accessibility
- Added metadata generation with localized titles and descriptions to prices page for improved SEO and user experience
This commit is contained in:
Evandro Fonseca Junior committed 2025-10-27 00:35:35 -03:00
1 parent 5e7f3a1354
commit 4ba3339df7
28 files changed
+704 -68

No files matched your search

+6 -6
View File
@@ -54,8 +54,8 @@ export default function ThankYouPage() {
<div className="p-8 rounded-2xl border border-border/50 bg-card backdrop-blur-lg mb-8">
<p className="text-lg leading-relaxed text-muted-foreground">
Sua generosidade nos ajuda a continuar desenvolvendo e mantendo
o Tibia Trade Pagodera. Cada contribuição faz toda a diferença
para nossa comunidade!
o Tibia Trade. Cada contribuição faz toda a diferença para nossa
comunidade!
</p>
</div>
@@ -86,8 +86,8 @@ export default function ThankYouPage() {
onClick={() => {
if (typeof navigator !== "undefined" && navigator.share) {
navigator.share({
title: "Tibia Trade Pagodera",
text: "Acabei de fazer uma doação para o Tibia Trade Pagodera! Ajude também!",
title: "Tibia Trade",
text: "Acabei de fazer uma doação para o Tibia Trade! Ajude também!",
url: window.location.origin,
});
} else if (
@@ -108,8 +108,8 @@ export default function ThankYouPage() {
<div className="mt-12 p-6 rounded-xl bg-muted/30 border border-border/30">
<p className="text-sm text-muted-foreground">
💡 <strong>Dica:</strong> Compartilhe nossa plataforma com seus
amigos! Quanto mais pessoas usarem o Tibia Trade Pagodera, mais
forte nossa comunidade fica.
amigos! Quanto mais pessoas usarem o Tibia Trade, mais forte
nossa comunidade fica.
</p>
</div>
</div>
+21 -4
View File
@@ -14,17 +14,34 @@ import { Heart } from "lucide-react";
import { getTranslations } from "next-intl/server";
import Link from "next/link";
import { ShareButton } from "@/components/share-button";
import type { Metadata } from "next";
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}) {
}): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "donation" });
const titles = {
pt: "Apoie o Projeto - Doações Voluntárias",
en: "Support the Project - Voluntary Donations",
};
const descriptions = {
pt: "Ajude a manter o Tibia Trade funcionando com uma doação voluntária via PIX. Transparência total dos custos e investimentos no projeto.",
en: "Help keep Tibia Trade running with a voluntary donation via PIX. Total transparency of costs and project investments.",
};
return {
title: t("title"),
description: t("subtitle"),
title: titles[locale as keyof typeof titles],
description: descriptions[locale as keyof typeof descriptions],
keywords: [
"doação tibia trade",
"apoiar tibia trade",
"ajudar tibia trade",
"transparência tibia trade",
],
};
}
+129 -9
View File
@@ -16,10 +16,89 @@ const geistMono = Geist_Mono({
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Pagodera Trade",
description: "Markeplace servidor pagodera",
};
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const { locale } = await params;
const titles = {
pt: "Tibia Trade - Marketplace Seguro para Compra e Venda de Itens",
en: "Tibia Trade - Secure Marketplace for Buying and Selling Items",
};
const descriptions = {
pt: "Marketplace oficial multi-servidor para negociar itens de Tibia com segurança total. Sistema escrow protege 100% das transações. Compre e venda gold, TC, armaduras raras e equipamentos.",
en: "Official multi-server marketplace to trade Tibia items with total security. Escrow system protects 100% of transactions. Buy and sell gold, TC, rare armors and equipment.",
};
return {
title: {
default: titles[locale as keyof typeof titles],
template: `%s | Tibia Trade`,
},
description: descriptions[locale as keyof typeof descriptions],
keywords: [
"tibia marketplace",
"tibia trade",
"comprar itens tibia",
"vender itens tibia",
"tibia escrow",
"tibia gold",
"tibia coins",
"tc tibia",
"marketplace tibia seguro",
"tibia bid system",
"tibia item escrow",
"tibia multi-server marketplace",
],
authors: [{ name: "Tibia Trade Team" }],
creator: "Tibia Trade",
publisher: "Tibia Trade",
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-video-preview": -1,
"max-image-preview": "large",
"max-snippet": -1,
},
},
alternates: {
canonical: `https://tibiatrade.evandro.dev.br/${locale}`,
languages: {
"pt-BR": `https://tibiatrade.evandro.dev.br/pt`,
"en-US": `https://tibiatrade.evandro.dev.br/en`,
},
},
openGraph: {
type: "website",
locale: locale === "pt" ? "pt_BR" : "en_US",
url: `https://tibiatrade.evandro.dev.br/${locale}`,
title: titles[locale as keyof typeof titles],
description: descriptions[locale as keyof typeof descriptions],
siteName: "Tibia Trade",
images: [
{
url: "/og-image.png",
width: 1200,
height: 630,
alt: "Tibia Trade - Marketplace Seguro",
},
],
},
twitter: {
card: "summary_large_image",
title: titles[locale as keyof typeof titles],
description: descriptions[locale as keyof typeof descriptions],
images: ["/og-image.png"],
creator: "@tibiatrade",
},
};
}
export default async function LocaleLayout({
children,
@@ -31,8 +110,54 @@ export default async function LocaleLayout({
const { locale } = await params;
const messages = await getMessages();
const baseUrl = "https://tibiatrade.evandro.dev.br";
return (
<html lang={locale} suppressHydrationWarning>
<head>
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "Organization",
name: "Tibia Trade",
url: baseUrl,
logo: `${baseUrl}/logo.png`,
description:
"Marketplace multi-servidor seguro para negociação de itens de Tibia",
sameAs: ["https://discord.gg/tibiatrade"],
contactPoint: {
"@type": "ContactPoint",
contactType: "Customer Support",
availableLanguage: ["Portuguese", "English"],
},
}),
}}
/>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "WebSite",
name: "Tibia Trade",
url: baseUrl,
potentialAction: {
"@type": "SearchAction",
target: {
"@type": "EntryPoint",
urlTemplate: `${baseUrl}/market?q={search_term_string}`,
},
"query-input": "required name=search_term_string",
},
}),
}}
/>
</head>
<body
className={`${nunitoSans.variable} ${geistMono.variable} antialiased`}
>
@@ -45,8 +170,3 @@ export default async function LocaleLayout({
</html>
);
}
+23 -3
View File
@@ -1,17 +1,37 @@
import Header from "@/components/Header";
import { UnderConstruction } from "@/components/under-construction";
import { getTranslations } from "next-intl/server";
import type { Metadata } from "next";
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}) {
}): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "underConstruction" });
const titles = {
pt: "Mercado - Todos os Itens de Tibia",
en: "Market - All Tibia Items",
};
const descriptions = {
pt: "Explore todos os itens disponíveis no marketplace: armaduras, armas, escudos, poções e mais. Compre e venda com segurança usando nosso sistema de escrow.",
en: "Explore all items available in the marketplace: armors, weapons, shields, potions and more. Buy and sell safely using our escrow system.",
};
return {
title: t("market.title"),
description: t("market.description"),
title: titles[locale as keyof typeof titles],
description: descriptions[locale as keyof typeof descriptions],
keywords: [
"itens tibia",
"armaduras tibia",
"armas tibia",
"escudos tibia",
"comprar itens tibia",
"marketplace tibia",
],
};
}
+1 -1
View File
@@ -13,7 +13,7 @@ export default function Home() {
<div className="min-h-screen">
<Header />
<EscrowBanner />
<main>
<main role="main" aria-label="Página principal do Tibia Trade">
<HeroSection />
<HowItWorks />
<FeaturedItems />
+15 -3
View File
@@ -1,17 +1,29 @@
import Header from "@/components/Header";
import { UnderConstruction } from "@/components/under-construction";
import { getTranslations } from "next-intl/server";
import type { Metadata } from "next";
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}) {
}): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "underConstruction" });
const titles = {
pt: "Preços - Estrutura de Custos",
en: "Prices - Cost Structure",
};
const descriptions = {
pt: "Veja nossa estrutura de preços transparente. Taxas de transação justas para manter o marketplace funcionando.",
en: "See our transparent price structure. Fair transaction fees to keep the marketplace running.",
};
return {
title: t("prices.title"),
description: t("prices.description"),
title: titles[locale as keyof typeof titles],
description: descriptions[locale as keyof typeof descriptions],
};
}
+21 -4
View File
@@ -1,17 +1,34 @@
import Header from "@/components/Header";
import { UnderConstruction } from "@/components/under-construction";
import { getTranslations } from "next-intl/server";
import type { Metadata } from "next";
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}) {
}): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "underConstruction" });
const titles = {
pt: "Sobre - Nossa Missão e História",
en: "About - Our Mission and History",
};
const descriptions = {
pt: "Conheça o Tibia Trade, o marketplace multi-servidor mais seguro para negociação de itens. Sistema escrow, transparência total e comunidade ativa.",
en: "Learn about Tibia Trade, the most secure multi-server marketplace for item trading. Escrow system, total transparency and active community.",
};
return {
title: t("about.title"),
description: t("about.description"),
title: titles[locale as keyof typeof titles],
description: descriptions[locale as keyof typeof descriptions],
keywords: [
"sobre tibia trade",
"história tibia trade",
"missão tibia trade",
"marketplace tibia",
],
};
}
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 96 KiB

+28
View File
@@ -0,0 +1,28 @@
import { MetadataRoute } from "next";
export default function sitemap(): MetadataRoute.Sitemap {
const baseUrl = "https://tibiatrade.evandro.dev.br";
const locales = ["pt", "en"];
const pages = ["", "/market", "/sobre", "/precos", "/apoiar"];
const routes: MetadataRoute.Sitemap = [];
locales.forEach((locale) => {
pages.forEach((page) => {
routes.push({
url: `${baseUrl}/${locale}${page}`,
lastModified: new Date(),
changeFrequency: page === "" ? "daily" : "weekly",
priority: page === "" ? 1.0 : 0.8,
alternates: {
languages: {
pt: `${baseUrl}/pt${page}`,
en: `${baseUrl}/en${page}`,
},
},
});
});
});
return routes;
}