`;
// Adiciona evento de clique para rolar até a data correspondente na timeline
dayDiv.addEventListener("click", function () {
let targetDate = document.getElementById(`event-date-${formattedDateId}`);
if (targetDate) {
targetDate.scrollIntoView({ behavior: "smooth", block: "start" });
}
});
} else {
dayDiv.innerText = day;
}
calendarDays.appendChild(dayDiv);
}
}
prevMonthBtn.addEventListener("click", function() {
currentMonth--;
if (currentMonth < 0) {
currentMonth = 11;
currentYear--;
}
updateCalendar(currentYear, currentMonth);
});
nextMonthBtn.addEventListener("click", function() {
currentMonth++;
if (currentMonth > 11) {
currentMonth = 0;
currentYear++;
}
updateCalendar(currentYear, currentMonth);
});
updateCalendar(currentYear, currentMonth);
});
';
return;
}
// Agrupando eventos pela data
filteredEvents.forEach(event => {
if (!groupedEvents[event.date]) {
groupedEvents[event.date] = [];
}
groupedEvents[event.date].push(event);
});
// Para cada data, criamos a seção no DOM
for (let date in groupedEvents) {
let eventDateParts = date.split('-');
let eventDate = new Date(eventDateParts[0], eventDateParts[1] - 1, eventDateParts[2]);
eventDate.setHours(12, 0, 0, 0);
let formattedDate = new Intl.DateTimeFormat('pt-BR', {
weekday: 'long', day: '2-digit', month: 'long'
}).format(eventDate);
let formattedDateId = `${eventDate.getDate().toString().padStart(2, '0')}-${eventDate.toLocaleString('pt-BR', { month: 'long' }).toLowerCase()}`;
let dateSection = document.createElement("div");
dateSection.classList.add("event-date-section");
dateSection.innerHTML = `
${formattedDate}
`;
// Ordenando eventos pelo horário
groupedEvents[date].sort((a, b) => a.time.localeCompare(b.time));
// Montando cada evento
groupedEvents[date].forEach(event => {
let tagsHtml = event.tags && event.tags.length
? `
${event.tags.map(tag => `${tag}`).join(' ')}
`
: '';
// Adiciona uma flag "Esgotado" ou "Estoque baixo" sobre a imagem
let soldOutBadge = event.sold_out
? `
`
: '';
// Badge de tipo de evento
let typeBadgeClass = '';
let typeBadgeText = '';
switch(event.type_slug) {
case 'presencial':
typeBadgeClass = 'type-badge-presencial';
typeBadgeText = 'Presencial';
break;
case 'online':
typeBadgeClass = 'type-badge-online';
typeBadgeText = 'Online';
break;
case 'hibrido':
typeBadgeClass = 'type-badge-hibrido';
typeBadgeText = 'Híbrido';
break;
}
let typeBadge = `${typeBadgeText}`;
// Inserção do bloco de participantes — NOVO
let participantsHtml = event.participants_html || '';
// Se preferir, unificar soldOutBadge + lowStockBadge em um só container
dateSection.innerHTML += `
Tudo isso sem anúncios pagos — apenas com a força da comunidade.
Para quem é o Tech Floripa
Uma plataforma feita pela comunidade, para a comunidade
Para participantes
Descubra eventos relevantes
Encontre eventos de tecnologia perto de você, filtrados por tema, data e formato.
Inscreva-se em poucos cliques
Processo simples e rápido, sem formulários intermináveis.
Receba lembretes e certificados
Nunca perca um evento e comprove sua participação facilmente.
Para organizadores
Divulgue para o público certo
Alcance desenvolvedores, designers e profissionais de tech da região.
Gerencie inscrições e check-in
Controle total sobre participantes com self check-in pelo celular.
Emita certificados automaticamente
Certificados personalizados gerados e enviados automaticamente.
Podcast
Toda semana, conversas fluídas e sem roteiros com os protagonistas da cena tech: de figuras locais a nomes internacionais, passando por líderes de comunidades e recrutadores.
Histórias reais, insights valiosos e muita inspiração.