Hero Landing Page


Disponível para novos projetos

Transformamos
Ideias em
Resultados Reais

Estratégia, design e tecnologia unidos para levar seu negócio
ao próximo nível com soluções que realmente funcionam.

0+
Projetos entregues
0%
Clientes satisfeitos
0+
Anos de experiência

performance.js

const result = await launch()
return {
growth: “🚀 +340%”,
leads: “💡 +180”,
revenue: “✅ R$2M”
}

Otimizando resultados…

+340%
em conversões

🎯
Projeto aprovado
há 2 minutos

Role para explorar

Empresas que confiam no nosso trabalho

Google
Microsoft
Nubank
iFood
Shopify
Stripe
Figma
Notion

Google
Microsoft
Nubank
iFood
Shopify
Stripe
Figma
Notion

Soluções completas para
seu crescimento

🎨

Design & UX

Interfaces que encantam e convertem. Design centrado no usuário com foco em resultados mensuráveis.

Performance Web

Sites ultra-rápidos com Core Web Vitals perfeitos. Velocidade que impacta diretamente seu SEO e conversão.

📈

Growth & Marketing

Estratégias orientadas por dados para aumentar tráfego orgânico, leads qualificados e receita.

🤖

Automação & IA

Integração de inteligência artificial e automações que economizam tempo e escalam seu negócio.

Vamos criar algo
extraordinário juntos

Agende uma conversa gratuita de 30 minutos e descubra como podemos transformar seu negócio.


Agendar conversa gratuita

/* ═══════════════════════════════════
CANVAS PARTICLES
═══════════════════════════════════ */
(function(){
const canvas = document.getElementById(‘hero-canvas’);
const ctx = canvas.getContext(‘2d’);
let particles = [], W, H, mouse = {x: -999, y: -999};

function resize(){ W = canvas.width = window.innerWidth; H = canvas.height = window.innerHeight; }
resize();
window.addEventListener(‘resize’, resize);
window.addEventListener(‘mousemove’, e => { mouse.x = e.clientX; mouse.y = e.clientY; });

class Particle {
constructor(){
this.x = Math.random() * W;
this.y = Math.random() * H;
this.size = Math.random() * 2 + 0.5;
this.speedX = (Math.random() – 0.5) * 0.4;
this.speedY = (Math.random() – 0.5) * 0.4;
this.opacity = Math.random() * 0.5 + 0.1;
}
update(){
this.x += this.speedX; this.y += this.speedY;
if(this.x W) this.speedX *= -1;
if(this.y H) this.speedY *= -1;
}
draw(){
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fillStyle = `rgba(139,92,246,${this.opacity})`;
ctx.fill();
}
}

for(let i=0; i<80; i++) particles.push(new Particle());

function connectParticles(){
for(let a=0; a<particles.length; a++){
for(let b=a+1; b<particles.length; b++){
const dx = particles[a].x – particles[b].x;
const dy = particles[a].y – particles[b].y;
const dist = Math.sqrt(dx*dx + dy*dy);
if(dist { p.update(); p.draw(); });
connectParticles();
requestAnimationFrame(animate);
}
animate();
})();

/* ═══════════════════════════════════
COUNTER ANIMATION
═══════════════════════════════════ */
function animateCounter(el){
const target = parseInt(el.dataset.target);
const duration = 2000;
const start = performance.now();
function update(now){
const progress = Math.min((now – start) / duration, 1);
const eased = 1 – Math.pow(1 – progress, 3);
el.textContent = Math.round(eased * target);
if(progress {
entries.forEach(entry => {
if(entry.isIntersecting){
entry.target.classList.add(‘visible’);
}
});
}, { threshold: 0.15 });

document.querySelectorAll(‘.reveal’).forEach(el => observer.observe(el));

const counterObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if(entry.isIntersecting){
entry.target.querySelectorAll(‘.stat-number’).forEach(animateCounter);
counterObserver.unobserve(entry.target);
}
});
}, { threshold: 0.5 });

const statsSection = document.querySelector(‘.hero-stats’);
if(statsSection) counterObserver.observe(statsSection);