Merge pull request #5 from evandrodevbr:develop

Develop
This commit is contained in:
Evandro Fonseca Junior authored and GitHub committed 2025-10-30 19:06:07 -03:00
commit 3fb5ce8f0f
30 files changed
+718 -68

No files matched your search

+44 -22
View File
@@ -1,36 +1,58 @@
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
# Tibia Trade - Marketplace Seguro para Itens de Tibia
## Getting Started
Marketplace multi-servidor seguro e confiável para compra, venda e negociação de itens de Tibia. Sistema de escrow protege 100% das transações.
First, run the development server:
## 🎯 Características
- **Marketplace Multi-Servidor**: Funciona com qualquer servidor de Tibia
- **Sistema Escrow Seguro**: Protege 100% das transações contra scam
- **Múltiplos Idiomas**: Português e Inglês
- **Interface Moderna**: Design responsivo e acessível
- **Core Web Vitals Otimizados**: Performance máxima para SEO
## 🚀 Como Iniciar
```bash
npm run dev
# or
yarn dev
# or
# Instalar dependências
pnpm install
# Desenvolvimento
pnpm dev
# or
bun dev
# Build para produção
pnpm build
# Iniciar servidor de produção
pnpm start
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
## 🛠️ Tecnologias
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
- **Framework**: Next.js 15 (App Router)
- **Styling**: Tailwind CSS 4
- **UI Components**: Radix UI
- **Animações**: Motion (Framer Motion)
- **Internacionalização**: next-intl
- **Validação**: Zod
- **Typescript**: TypeScript 5
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
## 📦 Palavras-chave SEO
## Learn More
- tibia marketplace
- tibia trade
- comprar itens tibia
- vender itens tibia
- tibia escrow
- tibia gold
- tibia coins
- tc tibia
- marketplace tibia seguro
To learn more about Next.js, take a look at the following resources:
## 🌐 Domínios
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
- Desenvolvimento: https://tibiatrade.evandro.dev.br
- Produção: https://tibiatrading.com (futuro)
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
## 📄 Licença
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
Privado - Uso interno
+287
View File
@@ -0,0 +1,287 @@
# Resumo da Implementação de SEO On-Page
## ✅ Implementações Concluídas
### 1. Rebranding Completo
- ✅ Removidas TODAS as referências a "Pagodera"
- ✅ Substituído por "Tibia Trade" em todos os arquivos
- ✅ package.json atualizado com nome "tibia-trade"
- ✅ README.md reescrito com palavras-chave SEO
- ✅ Traduções PT/EN atualizadas
### 2. Metadados Otimizados
- ✅ Função `generateMetadata` dinâmica implementada para i18n
- ✅ Títulos otimizados com palavras-chave (≤60 caracteres)
- ✅ Meta descriptions envolventes (≤160 caracteres)
- ✅ Keywords estratégicas adicionadas:
- tibia marketplace
- tibia trade
- comprar itens tibia
- vender itens tibia
- tibia escrow
- tibia gold
- tibia coins
- tc tibia
- marketplace tibia seguro
- tibia bid system (única)
- tibia item escrow (única)
- tibia multi-server marketplace (única)
### 3. Open Graph & Twitter Cards
- ✅ Open Graph configurado (Facebook, LinkedIn, Discord)
- ✅ Twitter Cards configurado
- ✅ Site name: "Tibia Trade"
- ✅ Canônical URLs implementadas
- ⚠️ **AÇÃO NECESSÁRIA**: Criar imagem `public/og-image.png` (1200x630px)
- Conteúdo sugerido: Logo "Tibia Trade" + tagline "Marketplace Seguro Multi-Servidor"
- Formato: PNG otimizado
- Cores: Seguir identidade visual do site
### 4. Schema Markup JSON-LD
- ✅ Organization (Organização)
- ✅ WebSite com SearchAction
- ✅ FAQPage no componente de Escrow
- ✅ Breadcrumbs com Schema
### 5. Estrutura HTML Semântica
- ✅ H1 implementado no Hero Section
- ✅ H2 para seções principais ("Como Funciona", "Negocie com Segurança")
- ✅ H3 para subcategorias e steps
- ✅ Tag `<main>` com aria-label na homepage
- ✅ Breadcrumbs component criado (disponível para uso)
### 6. Otimização de Imagens
- ✅ Propriedade `alt` adicionada a todos os itens em `mock-data.ts`
- ✅ Configuração Next.js Image para WebP/AVIF
- ✅ Lazy loading configurado
- ✅ Device sizes otimizados (640, 750, 828, 1080, 1200, 1920)
### 7. Links Internos
- ✅ Links contextuais adicionados no componente "Como Funciona"
- ✅ Estrutura de silos preparada
### 8. Sitemap & Robots
- ✅ `app/sitemap.ts` criado (dinâmico, multi-idioma)
- ✅ `public/robots.txt` criado
- ✅ Change frequency configurada (daily/weekly)
- ✅ Prioridades definidas
### 9. Performance (Core Web Vitals)
- ✅ Compressão habilitada
- ✅ `poweredByHeader` removido
- ✅ Formats modernos (WebP, AVIF)
- ✅ Lazy loading de componentes pesados
## ⚠️ Ações Pendentes pelo Usuário
### 1. Criar Imagem Open Graph
**Arquivo**: `public/og-image.png`
**Dimensões**: 1200x630px
**Conteúdo sugerido**:
- Logo "Tibia Trade" (esquerda ou centro)
- Tagline: "Marketplace Seguro Multi-Servidor"
- Background com gradiente ou textura
- Cores alinhadas com tema do site
### 2. Criar Logos e Ícones
**Arquivos necessários**:
- `/public/logo.png` (para Schema Organization)
- `/public/icon.svg` (versão vetorizada do logo)
- `/public/apple-touch-icon.png` (para iOS, 180x180px)
### 3. Validar Implementação
Após deploy, validar com:
#### Google Tools:
1. **Google Search Console**: Adicionar sitemap e verificar indexação
2. **PageSpeed Insights**: Validar Core Web Vitals (LCP < 2.5s)
3. **Rich Results Test**: Validar Schema Markup
4. **Mobile-Friendly Test**: Confirmar responsividade
5. **Schema Markup Validator**: https://validator.schema.org/
#### Lighthouse CI:
```bash
npm install -g @lhci/cli
lhci autorun
```
## 📊 Checklist de SEO On-Page
### Conteúdo ✓
- [x] Título otimizado com palavra-chave principal no início
- [x] Meta description envolvente com CTA
- [x] Headings hierárquicos (H1-H3)
- [x] Primeiro parágrafo contém palavra-chave
- [x] Densidade natural de palavras-chave
- [x] Links internos estratégicos
### Estrutura Técnica ✓
- [x] URLs limpas e curtas
- [x] Breadcrumbs implementados
- [x] Schema Markup completo
- [x] HTML semântico
- [x] Favicons configurados
### Imagens ✓
- [x] ALT text descritivo em TODOS os itens
- [x] Formatos modernos (WebP/AVIF)
- [x] Lazy loading implementado
- [x] Tamanhos responsivos
### Performance ✓
- [x] Core Web Vitals configurado
- [x] Compressão ativada
- [x] Lazy loading de componentes pesados
- [x] Meta headers otimizados
### EEAT (Expertise, Experience, Authoritativeness, Trust) ✓
- [x] Informação de autor (Tibia Trade Team)
- [x] Links para Discord
- [x] Transparência de custos
- [x] Política clara de uso
## 🎯 Palavras-Chave Implementadas
### Primárias (Alta Intenção)
- tibia marketplace
- tibia trade
- comprar itens tibia
- vender itens tibia
- tibia escrow
### Secundárias (Long-tail)
- marketplace tibia seguro
- tibia gold trade
- tibia coins marketplace
- comprar tc tibia
- tibia armadura rara
### Nicho (Baixa Concorrência)
- tibia bid system
- tibia item escrow
- tibia multi-server marketplace
### LSI (Semânticas)
- tibia items, tibia server, tibia weapons, tibia armor
- tibia secure trading, tibia safe marketplace
- gold pieces, tibia coins, tc
- knight, paladin, sorcerer, druid
## 📈 Próximos Passos Recomendados
1. **Criar conteúdo rico na página `/sobre`**
- História do projeto
- Equipe com perfis
- Certificações de segurança
2. **Implementar página de blog/notícias**
- Artigos sobre trading
- Guias de segurança
- Atualizações do marketplace
3. **Adicionar reviews/testimonials**
- Avaliações de usuários
- Casos de sucesso
4. **Configurar Google Analytics & Search Console**
- Monitorar tráfego
- Rastrear palavras-chave
- Analisar performance
5. **Implementar multi-idioma completo**
- Espanhol (opcional)
- Localização completa
## 📝 Arquivos Modificados/Criados
### Configuração (3)
- ✓ package.json
- ✓ README.md
- ✓ next.config.ts
### Tradução (2)
- ✓ messages/pt.json
- ✓ messages/en.json
### Layout (2)
- ✓ app/[locale]/layout.tsx
- ✓ app/[locale]/page.tsx
### Páginas (4)
- ✓ app/[locale]/market/page.tsx
- ✓ app/[locale]/sobre/page.tsx
- ✓ app/[locale]/precos/page.tsx
- ✓ app/[locale]/apoiar/page.tsx
### Componentes (6)
- ✓ components/Header.tsx
- ✓ components/share-button.tsx
- ✓ components/sections/hero-section.tsx
- ✓ components/sections/escrow-explanation.tsx
- ✓ app/[locale]/apoiar/obrigado/page.tsx
- ✓ components/breadcrumbs.tsx (NOVO)
### SEO (3)
- ✓ app/sitemap.ts (NOVO)
- ✓ public/robots.txt (NOVO)
- ⚠️ public/og-image.png (CRIAR)
### Otimização (2)
- ✓ lib/mock-data.ts
- ✓ types/item.ts
**Total**: 22 arquivos modificados/criados
## 🎉 Resultados Esperados
Com essas implementações, o site deve:
1. **Rankear melhor** para palavras-chave estratégicas
2. **Aparecer em rich snippets** do Google (FAQ, Organization, SearchAction)
3. **Ter melhor CTR** em SERPs (Open Graph + Twitter Cards)
4. **Performance otimizada** (Core Web Vitals < limites)
5. **Experiência de usuário superior** (Acessibilidade, SEMÂNTICA)
6. **Indexação eficiente** (Sitemap + Robots.txt)
7. **SEO visual** (Imagens com ALT descritivo)
---
**Data de Implementação**: $(date)
**Status**: ✅ Completo (exceto imagem og-image.png)
**Próxima Revisão**: Após deploy e validação com Google Search Console
+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;
}
+1 -1
View File
@@ -34,7 +34,7 @@ export default function Header() {
<div className="flex items-center gap-2">
<Link href="/">
<WordRotate
words={["Pagodera", "Tibia Trade"]}
words={["Tibia Trade"]}
className="text-lg font-semibold tracking-tight hover:text-primary transition-colors"
/>
</Link>
+43
View File
@@ -0,0 +1,43 @@
import { ChevronRight } from "lucide-react";
import Link from "next/link";
interface BreadcrumbItem {
label: string;
href: string;
}
interface BreadcrumbsProps {
items: BreadcrumbItem[];
}
export function Breadcrumbs({ items }: BreadcrumbsProps) {
return (
<nav aria-label="Breadcrumb" className="py-4">
<ol
itemScope
itemType="https://schema.org/BreadcrumbList"
className="flex items-center gap-2 text-sm text-muted-foreground"
>
{items.map((item, index) => (
<li
key={item.href}
itemProp="itemListElement"
itemScope
itemType="https://schema.org/ListItem"
className="flex items-center gap-2"
>
<Link
href={item.href}
itemProp="item"
className="hover:text-foreground transition-colors"
>
<span itemProp="name">{item.label}</span>
</Link>
<meta itemProp="position" content={String(index + 1)} />
{index < items.length - 1 && <ChevronRight className="w-4 h-4" />}
</li>
))}
</ol>
</nav>
);
}
@@ -100,6 +100,23 @@ export function EscrowExplanation() {
return (
<section className="py-20 bg-muted/30">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "FAQPage",
mainEntity: faqItems.map((item) => ({
"@type": "Question",
name: item.question,
acceptedAnswer: {
"@type": "Answer",
text: item.answer,
},
})),
}),
}}
/>
<div className="container">
{/* Título e Subtítulo */}
<BlurFade delay={0.1}>
+5 -3
View File
@@ -13,9 +13,11 @@ export function HeroSection() {
<section className="relative min-h-[600px] flex items-center justify-center overflow-hidden bg-gradient-to-br from-background to-muted/20 px-4">
<div className="w-full max-w-4xl mx-auto flex flex-col items-center justify-center text-center space-y-8">
<BlurFade delay={0.2}>
<AnimatedGradientText className="text-5xl md:text-7xl font-bold">
{t("title")}
</AnimatedGradientText>
<h1>
<AnimatedGradientText className="text-5xl md:text-7xl font-bold">
{t("title")}
</AnimatedGradientText>
</h1>
</BlurFade>
<BlurFade delay={0.4}>
+9 -1
View File
@@ -50,7 +50,15 @@ export function HowItWorks() {
<h2 className="text-4xl font-bold mb-4">{t("title")}</h2>
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
Descubra como funciona nossa plataforma de trading segura e
eficiente
eficiente.{" "}
<a href="/market" className="text-primary hover:underline">
Explore o mercado
</a>{" "}
ou conheça nosso{" "}
<a href="#escrow" className="text-primary hover:underline">
sistema de escrow
</a>
.
</p>
</div>
+2 -2
View File
@@ -7,8 +7,8 @@ export function ShareButton() {
const handleShare = () => {
if (navigator.share) {
navigator.share({
title: "Tibia Trade Pagodera",
text: "Conheça o marketplace mais seguro para negociar itens no servidor Pagodera!",
title: "Tibia Trade",
text: "Conheça o marketplace multi-servidor mais seguro para negociar itens de Tibia!",
url: window.location.origin,
});
} else {
+8
View File
@@ -5,6 +5,7 @@ export const featuredItems: TibiaItem[] = [
id: "1",
name: "Armor of Fire",
image: "/items/armor-of-fire.png",
alt: "Armor of Fire - Armadura lendária de Tibia com proteção contra fogo +10",
category: "armor",
rarity: "legendary",
stats: { armor: 16, weight: 120 },
@@ -18,6 +19,7 @@ export const featuredItems: TibiaItem[] = [
id: "2",
name: "Demon Helmet",
image: "/items/demon-helmet.png",
alt: "Demon Helmet - Capacete épico de Tibia nível 100",
category: "helmet",
rarity: "epic",
stats: { armor: 10, weight: 29 },
@@ -30,6 +32,7 @@ export const featuredItems: TibiaItem[] = [
id: "3",
name: "Vampire Shield",
image: "/items/vampire-shield.png",
alt: "Vampire Shield - Escudo épico de Tibia com defesa 38",
category: "shield",
rarity: "epic",
stats: { defense: 38, weight: 48 },
@@ -42,6 +45,7 @@ export const featuredItems: TibiaItem[] = [
id: "4",
name: "Zaoan Helmet",
image: "/items/zaoan-helmet.png",
alt: "Zaoan Helmet - Capacete raro de Tibia nível 80",
category: "helmet",
rarity: "rare",
stats: { armor: 9, weight: 43 },
@@ -54,6 +58,7 @@ export const featuredItems: TibiaItem[] = [
id: "5",
name: "Magic Sword",
image: "/items/magic-sword.png",
alt: "Magic Sword - Espada rara de Tibia nível 75",
category: "weapon",
rarity: "rare",
stats: { attack: 48, defense: 35, weight: 36 },
@@ -66,6 +71,7 @@ export const featuredItems: TibiaItem[] = [
id: "6",
name: "Demonbone Amulet",
image: "/items/demonbone-amulet.png",
alt: "Demonbone Amulet - Amuleto épico de Tibia com proteção contra fogo",
category: "amulet",
rarity: "epic",
stats: { armor: 2, weight: 8.5 },
@@ -78,6 +84,7 @@ export const featuredItems: TibiaItem[] = [
id: "7",
name: "Ornate Chestplate",
image: "/items/ornate-chestplate.png",
alt: "Ornate Chestplate - Armadura lendária de Tibia nível 300",
category: "armor",
rarity: "legendary",
stats: { armor: 18, weight: 185 },
@@ -91,6 +98,7 @@ export const featuredItems: TibiaItem[] = [
id: "8",
name: "Ultimate Health Potion",
image: "/items/uhp.png",
alt: "Ultimate Health Potion - Poção de saúde máxima de Tibia",
category: "potion",
rarity: "common",
stats: { weight: 2 },
+4 -4
View File
@@ -17,7 +17,7 @@
"home": {
"hero": {
"title": "Buy and Sell Tibia Items",
"subtitle": "Safe and fast marketplace for Pagodera server",
"subtitle": "Secure multi-server marketplace for Tibia items trading",
"cta": "View Market"
},
"howItWorks": {
@@ -182,7 +182,7 @@
},
"about": {
"title": "About Page Under Construction",
"description": "Soon you'll learn all about Tibia Trade Pagodera's story and mission. Stay tuned!"
"description": "Soon you'll learn all about Tibia Trade's story and mission. Stay tuned!"
},
"prices": {
"title": "Prices Page Under Construction",
@@ -194,7 +194,7 @@
"subtitle": "Your voluntary donation helps maintain and evolve the platform",
"story": {
"title": "Our Project, Our Community",
"text": "Tibia Trade Pagodera is developed with dedication to create the best trading experience for our community. Each voluntary donation helps us continue evolving and maintaining service quality.\n\nWe are not a company, we are developers passionate about Tibia who believe in total transparency. Every penny is invested directly in the project.\n\nYour trust and support make all the difference."
"text": "Tibia Trade is developed with dedication to create the best trading experience for our community. Each voluntary donation helps us continue evolving and maintaining service quality.\n\nWe are not a company, we are developers passionate about Tibia who believe in total transparency. Every penny is invested directly in the project.\n\nYour trust and support make all the difference."
},
"transparency": {
"title": "Total Cost Transparency",
@@ -320,7 +320,7 @@
"thankYou": {
"title": "Thank you for your support!",
"subtitle": "Your contribution makes all the difference to our community",
"message": "We received your donation and are very grateful for your support. With people like you, we can keep Tibia Trade Pagodera free and constantly improve our platform.",
"message": "We received your donation and are very grateful for your support. With people like you, we can keep Tibia Trade free and constantly improve our platform.",
"share": "Share with friends",
"back": "Back to home"
}
+4 -4
View File
@@ -17,7 +17,7 @@
"home": {
"hero": {
"title": "Compre e Venda Itens de Tibia",
"subtitle": "Marketplace seguro e rápido para o servidor Pagodera",
"subtitle": "Marketplace seguro e multi-servidor para negociação de itens de Tibia",
"cta": "Ver Mercado"
},
"howItWorks": {
@@ -182,7 +182,7 @@
},
"about": {
"title": "Página Sobre em Construção",
"description": "Em breve você conhecerá toda a história e missão do Tibia Trade Pagodera. Aguarde!"
"description": "Em breve você conhecerá toda a história e missão do Tibia Trade. Aguarde!"
},
"prices": {
"title": "Página de Preços em Construção",
@@ -194,7 +194,7 @@
"subtitle": "Sua doação voluntária ajuda a manter e evoluir a plataforma",
"story": {
"title": "Nosso Projeto, Nossa Comunidade",
"text": "O Tibia Trade Pagodera é desenvolvido com dedicação para criar a melhor experiência de trading para nossa comunidade. Cada doação voluntária nos ajuda a continuar evoluindo e mantendo a qualidade do serviço.\n\nNão somos uma empresa, somos desenvolvedores apaixonados por Tibia que acreditam em transparência total. Todo centavo é investido diretamente no projeto.\n\nSua confiança e apoio fazem toda a diferença."
"text": "O Tibia Trade é desenvolvido com dedicação para criar a melhor experiência de trading para nossa comunidade. Cada doação voluntária nos ajuda a continuar evoluindo e mantendo a qualidade do serviço.\n\nNão somos uma empresa, somos desenvolvedores apaixonados por Tibia que acreditam em transparência total. Todo centavo é investido diretamente no projeto.\n\nSua confiança e apoio fazem toda a diferença."
},
"transparency": {
"title": "Transparência Total de Custos",
@@ -320,7 +320,7 @@
"thankYou": {
"title": "Obrigado pelo seu apoio!",
"subtitle": "Sua contribuição faz toda a diferença para nossa comunidade",
"message": "Recebemos sua doação e ficamos muito gratos pelo seu apoio. Com pessoas como você, conseguimos manter o Tibia Trade Pagodera gratuito e melhorar constantemente nossa plataforma.",
"message": "Recebemos sua doação e ficamos muito gratos pelo seu apoio. Com pessoas como você, conseguimos manter o Tibia Trade gratuito e melhorar constantemente nossa plataforma.",
"share": "Compartilhe com amigos",
"back": "Voltar ao início"
}
+7
View File
@@ -4,6 +4,13 @@ import createNextIntlPlugin from "next-intl/plugin";
const withNextIntl = createNextIntlPlugin("./i18n/request.ts");
const nextConfig: NextConfig = {
images: {
formats: ["image/webp", "image/avif"],
deviceSizes: [640, 750, 828, 1080, 1200, 1920],
imageSizes: [16, 32, 48, 64, 96, 128, 256],
},
compress: true,
poweredByHeader: false,
/* config options here */
async headers() {
return [
+11
View File
@@ -0,0 +1,11 @@
[phases.setup]
nixPkgs = [
"python3",
"pkg-config",
"gnumake",
"gcc",
"nodejs_18",
"pnpm"
]
+12 -1
View File
@@ -1,5 +1,5 @@
{
"name": "pagodera",
"name": "tibia-trade",
"version": "0.1.0",
"private": true,
"scripts": {
@@ -9,6 +9,17 @@
"lint": "biome check",
"format": "biome format --write"
},
"keywords": [
"tibia marketplace",
"tibia trade",
"comprar itens tibia",
"vender itens tibia",
"tibia escrow",
"tibia gold",
"tibia coins",
"tc tibia",
"marketplace tibia seguro"
],
"dependencies": {
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-avatar": "^1.1.10",
+3
View File
@@ -1,3 +1,6 @@
packages:
- .
onlyBuiltDependencies:
- better-sqlite3
- sharp
Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

+1
View File
@@ -0,0 +1 @@
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024"><defs><image width="942" height="956" id="img1" href="data:image/png;base64,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 truncated

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

+15
View File
@@ -0,0 +1,15 @@
# Robots.txt para Tibia Trade
User-agent: *
Allow: /
Disallow: /api/
# Sitemap
Sitemap: https://tibiatrade.evandro.dev.br/sitemap.xml
# Crawl-delay para bots específicos
User-agent: Googlebot
Crawl-delay: 0
User-agent: Bingbot
Crawl-delay: 1
+1
View File
@@ -4,6 +4,7 @@ export interface TibiaItem {
id: string;
name: string;
image: string;
alt?: string;
category:
| "weapon"
| "armor"