atualizacao imagens e descricoes
This commit is contained in:
parent
baf4f68ed0
commit
ff23cb4eb4
10 changed files with 128 additions and 69 deletions
BIN
frontend/public/Blog.jpg
Normal file
BIN
frontend/public/Blog.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
BIN
frontend/public/Vagas.jpg
Normal file
BIN
frontend/public/Vagas.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 MiB |
BIN
frontend/public/empresas.jpg
Normal file
BIN
frontend/public/empresas.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 MiB |
BIN
frontend/public/home-mobile.jpg
Normal file
BIN
frontend/public/home-mobile.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.7 MiB |
|
|
@ -188,30 +188,42 @@ export default function BlogPage() {
|
||||||
|
|
||||||
<main className="flex-1">
|
<main className="flex-1">
|
||||||
{/* Hero Section */}
|
{/* Hero Section */}
|
||||||
<section className="relative bg-[#F0932B] py-16 md:py-24 overflow-hidden">
|
<section className="relative py-24 md:py-36 overflow-hidden">
|
||||||
<div className="absolute inset-0 opacity-10">
|
{/* Imagem de fundo Blog.jpg */}
|
||||||
|
<div className="absolute inset-0 z-0">
|
||||||
|
<img
|
||||||
|
src="/Blog.jpg"
|
||||||
|
alt="Blog"
|
||||||
|
className="object-cover w-full h-full"
|
||||||
|
style={{ position: 'absolute', inset: 0, width: '100%', height: '100%' }}
|
||||||
|
draggable={false}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{/* Overlay preto com opacidade 20% */}
|
||||||
|
<div className="absolute inset-0 z-10 bg-black opacity-20"></div>
|
||||||
|
<div className="absolute inset-0 opacity-10 z-20">
|
||||||
<div className="absolute top-0 left-0 w-full h-full bg-[radial-gradient(circle_at_30%_50%,rgba(255,255,255,0.2)_0%,transparent_50%)]"></div>
|
<div className="absolute top-0 left-0 w-full h-full bg-[radial-gradient(circle_at_30%_50%,rgba(255,255,255,0.2)_0%,transparent_50%)]"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
|
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-30">
|
||||||
<div className="max-w-4xl mx-auto text-center text-white">
|
<div className="max-w-4xl mx-auto text-center text-white">
|
||||||
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold mb-6">
|
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold mb-6 drop-shadow-[0_2px_8px_rgba(0,0,0,0.9)]">
|
||||||
{t('blog.title')}
|
{t('blog.title')}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-xl md:text-2xl mb-8 opacity-95">
|
<p className="text-xl md:text-2xl mb-8 opacity-95 drop-shadow-[0_2px_8px_rgba(0,0,0,0.9)]">
|
||||||
{t('blog.subtitle')}
|
{t('blog.subtitle')}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{/* Search Bar */}
|
{/* Search Bar */}
|
||||||
<div className="max-w-2xl mx-auto bg-white rounded-full p-2 shadow-lg">
|
<div className="max-w-2xl mx-auto bg-white/80 rounded-full p-2 shadow-lg">
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<Search className="absolute left-6 top-1/2 transform -translate-y-1/2 text-gray-400 w-5 h-5" />
|
<Search className="absolute left-6 top-1/2 transform -translate-y-1/2 text-gray-700 w-5 h-5" />
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
placeholder={t('blog.searchPlaceholder')}
|
placeholder={t('blog.searchPlaceholder')}
|
||||||
value={searchTerm}
|
value={searchTerm}
|
||||||
onChange={(e) => setSearchTerm(e.target.value)}
|
onChange={(e) => setSearchTerm(e.target.value)}
|
||||||
className="w-full pl-14 pr-4 py-3 rounded-full text-gray-900 focus:outline-none focus:ring-2 focus:ring-[#F0932B] text-lg bg-white"
|
className="w-full pl-14 pr-4 py-3 rounded-full text-gray-900 focus:outline-none focus:ring-2 focus:ring-[#F0932B] text-lg bg-white/0"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -170,17 +170,30 @@ export default function CompaniesPage() {
|
||||||
|
|
||||||
<main className="flex-1">
|
<main className="flex-1">
|
||||||
{/* Hero Section */}
|
{/* Hero Section */}
|
||||||
<section className="relative bg-[#F0932B] py-20 md:py-28 overflow-hidden">
|
<section className="relative py-20 md:py-28 overflow-hidden">
|
||||||
<div className="absolute inset-0 opacity-10">
|
{/* Imagem de fundo empresas.jpg sem overlay laranja */}
|
||||||
|
<div className="absolute inset-0 z-0">
|
||||||
|
<Image
|
||||||
|
src="/empresas.jpg"
|
||||||
|
alt="Empresas"
|
||||||
|
fill
|
||||||
|
className="object-cover object-center"
|
||||||
|
quality={100}
|
||||||
|
priority
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{/* Overlay preto com opacidade 20% */}
|
||||||
|
<div className="absolute inset-0 z-10 bg-black opacity-20"></div>
|
||||||
|
<div className="absolute inset-0 opacity-10 z-20">
|
||||||
<div className="absolute top-0 left-0 w-full h-full bg-[radial-gradient(circle_at_30%_50%,rgba(255,255,255,0.2)_0%,transparent_50%)]"></div>
|
<div className="absolute top-0 left-0 w-full h-full bg-[radial-gradient(circle_at_30%_50%,rgba(255,255,255,0.2)_0%,transparent_50%)]"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
|
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
|
||||||
<div className="max-w-4xl mx-auto text-center text-white">
|
<div className="max-w-4xl mx-auto text-center text-white">
|
||||||
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold mb-6">
|
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold mb-6 drop-shadow-[0_2px_8px_rgba(0,0,0,0.9)]">
|
||||||
Descubra as Melhores Empresas
|
Descubra as Melhores Empresas
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-xl md:text-2xl mb-8 opacity-95">
|
<p className="text-xl md:text-2xl mb-8 opacity-95 drop-shadow-[0_2px_8px_rgba(0,0,0,0.9)]">
|
||||||
Conheça empresas incríveis que estão contratando agora
|
Conheça empresas incríveis que estão contratando agora
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -151,17 +151,29 @@ function JobsContent() {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* Hero Section */}
|
{/* Hero Section */}
|
||||||
<section className="relative bg-[#F0932B] py-12 md:py-16 overflow-hidden">
|
<section className="relative bg-[#F0932B] py-28 md:py-40 overflow-hidden">
|
||||||
<div className="absolute inset-0 opacity-10">
|
{/* Imagem de fundo Vagas.jpg sem opacidade */}
|
||||||
|
<div className="absolute inset-0 z-0">
|
||||||
|
<img
|
||||||
|
src="/Vagas.jpg"
|
||||||
|
alt="Vagas"
|
||||||
|
className="object-cover w-full h-full"
|
||||||
|
style={{ position: 'absolute', inset: 0, width: '100%', height: '100%', objectPosition: 'center 10%' }}
|
||||||
|
draggable={false}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{/* Overlay preto com opacidade 20% */}
|
||||||
|
<div className="absolute inset-0 z-10 bg-black opacity-20"></div>
|
||||||
|
<div className="absolute inset-0 opacity-10 z-20">
|
||||||
<div className="absolute top-0 left-0 w-full h-full bg-[radial-gradient(circle_at_30%_50%,rgba(255,255,255,0.2)_0%,transparent_50%)]"></div>
|
<div className="absolute top-0 left-0 w-full h-full bg-[radial-gradient(circle_at_30%_50%,rgba(255,255,255,0.2)_0%,transparent_50%)]"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
|
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-20">
|
||||||
<div className="max-w-3xl mx-auto text-center text-white">
|
<div className="max-w-3xl mx-auto text-center text-white">
|
||||||
<motion.h1
|
<motion.h1
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
className="text-4xl md:text-5xl font-bold mb-4 text-balance"
|
className="text-4xl md:text-5xl font-bold mb-4 text-balance drop-shadow-[0_2px_8px_rgba(0,0,0,0.9)]"
|
||||||
>
|
>
|
||||||
{t('jobs.title')}
|
{t('jobs.title')}
|
||||||
</motion.h1>
|
</motion.h1>
|
||||||
|
|
@ -169,7 +181,7 @@ function JobsContent() {
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
transition={{ delay: 0.1 }}
|
transition={{ delay: 0.1 }}
|
||||||
className="text-lg opacity-95 text-pretty"
|
className="text-lg opacity-95 text-pretty drop-shadow-[0_2px_8px_rgba(0,0,0,0.9)]"
|
||||||
>
|
>
|
||||||
{loading ? t('jobs.loading') : t('jobs.subtitle', { count: totalJobs })}
|
{loading ? t('jobs.loading') : t('jobs.subtitle', { count: totalJobs })}
|
||||||
</motion.p>
|
</motion.p>
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,22 @@ export default function HomePage() {
|
||||||
<main className="flex-1">
|
<main className="flex-1">
|
||||||
{/* Hero Section */}
|
{/* Hero Section */}
|
||||||
<section className="bg-primary text-white relative overflow-hidden flex items-center min-h-[500px]">
|
<section className="bg-primary text-white relative overflow-hidden flex items-center min-h-[500px]">
|
||||||
<div className="absolute inset-0 z-0">
|
{/* Mobile Background */}
|
||||||
|
<div className="absolute inset-0 z-0 md:hidden">
|
||||||
|
<Image
|
||||||
|
src="/home-mobile.jpg"
|
||||||
|
alt="Background"
|
||||||
|
fill
|
||||||
|
className="object-cover object-center"
|
||||||
|
quality={100}
|
||||||
|
priority
|
||||||
|
sizes="100vw"
|
||||||
|
/>
|
||||||
|
{/* Black overlay with 20% opacity */}
|
||||||
|
<div className="absolute inset-0 bg-black/20"></div>
|
||||||
|
</div>
|
||||||
|
{/* Desktop Background */}
|
||||||
|
<div className="absolute inset-0 z-0 hidden md:block">
|
||||||
<Image
|
<Image
|
||||||
src="/10.png"
|
src="/10.png"
|
||||||
alt="Background"
|
alt="Background"
|
||||||
|
|
@ -130,7 +145,7 @@ export default function HomePage() {
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.5 }}
|
transition={{ duration: 0.5 }}
|
||||||
className="text-5xl sm:text-6xl lg:text-6xl font-bold mb-6 text-white leading-tight"
|
className="text-5xl sm:text-6xl lg:text-6xl font-bold mb-6 text-white leading-tight [text-shadow:2px_2px_8px_rgba(0,0,0,0.8),0px_0px_12px_rgba(0,0,0,0.6)] md:[text-shadow:none]"
|
||||||
>
|
>
|
||||||
{t('home.hero.title')}<br />{t('home.hero.titleLine2')}
|
{t('home.hero.title')}<br />{t('home.hero.titleLine2')}
|
||||||
</motion.h1>
|
</motion.h1>
|
||||||
|
|
@ -138,7 +153,7 @@ export default function HomePage() {
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.5, delay: 0.1 }}
|
transition={{ duration: 0.5, delay: 0.1 }}
|
||||||
className="text-2xl mb-10 leading-relaxed text-white"
|
className="text-2xl mb-10 leading-relaxed text-white [text-shadow:2px_2px_6px_rgba(0,0,0,0.8),0px_0px_10px_rgba(0,0,0,0.5)] md:[text-shadow:none]"
|
||||||
>
|
>
|
||||||
{t('home.hero.subtitle')}
|
{t('home.hero.subtitle')}
|
||||||
</motion.p>
|
</motion.p>
|
||||||
|
|
@ -149,7 +164,7 @@ export default function HomePage() {
|
||||||
className="flex gap-4"
|
className="flex gap-4"
|
||||||
>
|
>
|
||||||
<Link href="/jobs">
|
<Link href="/jobs">
|
||||||
<Button size="lg" className="bg-primary hover:bg-primary/90 text-white hover:shadow-lg font-bold px-10 py-6 text-lg rounded-lg transition-all duration-200 border-0">
|
<Button size="lg" className="bg-primary hover:bg-primary/90 text-white shadow-2xl hover:shadow-2xl font-bold px-10 py-6 text-lg rounded-lg transition-all duration-200 border-0">
|
||||||
{t('home.hero.cta')}
|
{t('home.hero.cta')}
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -246,11 +261,11 @@ export default function HomePage() {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Filter Button - Unified */}
|
{/* Filter Button - Unified */}
|
||||||
<Button className="bg-primary hover:bg-primary/90 text-white h-full min-h-[200px] lg:min-h-0 rounded-xl font-bold text-3xl shadow-md hover:shadow-lg transition-all flex flex-col gap-3 items-center justify-center">
|
<Button className="bg-primary hover:bg-primary/90 text-white min-h-[96px] w-full lg:w-[260px] rounded-lg font-bold text-2xl shadow-2xl hover:shadow-2xl transition-all flex flex-col gap-1 items-center justify-center px-2 py-6 lg:self-center">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" strokeWidth={3} stroke="currentColor" className="size-12">
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" strokeWidth={2} stroke="currentColor" className="w-5 h-5">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" d="M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" />
|
<path strokeLinecap="round" strokeLinejoin="round" d="M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" />
|
||||||
</svg>
|
</svg>
|
||||||
{t('home.search.filter')}
|
<span className="text-2xl font-bold">{t('home.search.filter')}</span>
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -258,7 +273,7 @@ export default function HomePage() {
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Featured Jobs */}
|
{/* Featured Jobs */}
|
||||||
<section className="py-12">
|
<section className="py-0 mb-0">
|
||||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-8xl">
|
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-8xl">
|
||||||
<div className="flex justify-between items-center mb-8">
|
<div className="flex justify-between items-center mb-8">
|
||||||
<h2 className="text-3xl font-bold text-gray-900">{t('home.featuredJobs.title')}</h2>
|
<h2 className="text-3xl font-bold text-gray-900">{t('home.featuredJobs.title')}</h2>
|
||||||
|
|
@ -343,12 +358,12 @@ export default function HomePage() {
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* More Jobs Section */}
|
{/* More Jobs Section */}
|
||||||
<section className="py-12">
|
<section className="py-0 mt-0 pt-16">
|
||||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-8xl">
|
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-8xl">
|
||||||
<div className="flex justify-between items-center mb-8">
|
<div className="flex justify-between items-center mb-8">
|
||||||
<h2 className="text-3xl font-bold text-gray-900">{t('home.moreJobs.title')}</h2>
|
<h2 className="text-3xl font-bold text-gray-900">{t('home.moreJobs.title')}</h2>
|
||||||
<Link href="/jobs">
|
<Link href="/jobs">
|
||||||
<Button className="bg-primary hover:bg-primary/90 text-white rounded-lg px-10 py-4 font-bold text-lg min-w-[220px]">
|
<Button className="bg-primary hover:bg-primary/90 text-white rounded-lg px-10 py-4 font-bold text-lg min-w-[220px] shadow-2xl hover:shadow-2xl">
|
||||||
{t('home.moreJobs.viewAll')}
|
{t('home.moreJobs.viewAll')}
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -365,6 +380,18 @@ export default function HomePage() {
|
||||||
const icons = ['💻', '🎨', '📊', '🚀', '⚙️', '🔧', '📱', '🎯'];
|
const icons = ['💻', '🎨', '📊', '🚀', '⚙️', '🔧', '📱', '🎯'];
|
||||||
const icon = icons[index % icons.length];
|
const icon = icons[index % icons.length];
|
||||||
|
|
||||||
|
const descriptions = [
|
||||||
|
'Buscamos um Senior Full Stack para liderar soluções robustas e escaláveis de ponta a ponta.',
|
||||||
|
'O UX/UI Designer ideal para transformar ideias em experiências visuais incríveis.',
|
||||||
|
'Faça parte do time como Data Engineer e construa pipelines de dados inteligentes e eficientes.',
|
||||||
|
'Procuramos um Product Manager para liderar produtos inovadores do conceito ao lançamento.',
|
||||||
|
'Oportunidade para Mobile Developer criar aplicativos modernos e de alto desempenho.',
|
||||||
|
'Junte-se a nós como DevOps Engineer e automatize infraestruturas em ambientes de nuvem.',
|
||||||
|
'Vaga para Backend Developer focado em performance, segurança e APIs escaláveis.',
|
||||||
|
'Buscamos um QA Analyst atento aos detalhes para garantir a máxima qualidade dos produtos.'
|
||||||
|
];
|
||||||
|
const description = descriptions[index % descriptions.length];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<motion.div
|
<motion.div
|
||||||
key={job.id}
|
key={job.id}
|
||||||
|
|
@ -382,7 +409,8 @@ export default function HomePage() {
|
||||||
</div>
|
</div>
|
||||||
<div className="flex-1 min-w-0">
|
<div className="flex-1 min-w-0">
|
||||||
<h3 className="font-bold text-base text-gray-900 line-clamp-1 mb-1">{job.title}</h3>
|
<h3 className="font-bold text-base text-gray-900 line-clamp-1 mb-1">{job.title}</h3>
|
||||||
<p className="text-sm text-gray-600 line-clamp-1">{job.company}</p>
|
<p className="text-sm text-gray-600 line-clamp-1 mb-2">{job.company}</p>
|
||||||
|
<p className="text-xs text-gray-500 leading-relaxed">{description}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ChevronRight className="w-5 h-5 text-gray-400 group-hover:text-gray-600 transition-colors flex-shrink-0 ml-2" />
|
<ChevronRight className="w-5 h-5 text-gray-400 group-hover:text-gray-600 transition-colors flex-shrink-0 ml-2" />
|
||||||
|
|
|
||||||
|
|
@ -89,12 +89,6 @@ export function Navbar() {
|
||||||
<span>Cadastrar Empresa</span>
|
<span>Cadastrar Empresa</span>
|
||||||
</Link>
|
</Link>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuItem asChild>
|
|
||||||
<Link href="/auth/login" className="flex items-center gap-2 cursor-pointer">
|
|
||||||
<LogIn className="w-4 h-4" />
|
|
||||||
<span>Login</span>
|
|
||||||
</Link>
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -288,7 +288,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jobs": {
|
"jobs": {
|
||||||
"title": "Encontre sua próxima oportunidade",
|
"title": "Encontre sua Próxima oportunidade",
|
||||||
"subtitle": "{count} vagas disponíveis nas melhores empresas",
|
"subtitle": "{count} vagas disponíveis nas melhores empresas",
|
||||||
"search": "Buscar vagas por título, empresa...",
|
"search": "Buscar vagas por título, empresa...",
|
||||||
"filters": {
|
"filters": {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue