UKM & Komunitas

Temukan Ruang Berekspresi, Berkontribusi, dan Berkembang

Unit Kegiatan Mahasiswa (UKM) dan Komunitas adalah wadah bagi mahasiswa UT Jakarta untuk menyalurkan minat, bakat, serta aspirasi positif.

Komunitas WA Prodi

Gimana Cara Gabung?

Klik salah satu UKM/Komunitas di atas buat tahu lebih lanjut dan daftarkan dirimu langsung lewat formulir yang tersedia.

Yuk, daftarkan UKM atau Komunitasmu!

Daftar Sekarang
visible: true }, { name: 'VOICE MASTER UT JAKARTA', category: 'non-akademik', logoUrl: '/assets/ukm/voicemaster/logovm.png', description: 'Voice Master merupakan sebuah wadah pelatihan atau workshop yang berfokus pada penguasaan teknik vokal dan kemampuan berbicara di depan umum.', detailUrl: '/ukm/non-akademik/voicemaster.html', visible: true } ]; document.addEventListener('DOMContentLoaded', () => { const ukmGrid = document.getElementById('ukm-grid'); if (ukmGrid) { ukmData.forEach((ukm, index) => { if (ukm.visible) { const card = document.createElement('div'); card.className = 'ukm-card reveal-on-scroll'; card.dataset.category = ukm.category; card.style.transitionDelay = `${(index % 3) * 100}ms`; const cardContent = `
Logo ${ukm.name}

${ukm.name}

${ukm.description}

Lihat Detail →
`; card.innerHTML = cardContent; ukmGrid.appendChild(card); } }); } // Reveal Animation const observer = new IntersectionObserver((entries, obs) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('is-visible'); obs.unobserve(entry.target); } }); }, { threshold: 0.1 }); document.querySelectorAll('.reveal-on-scroll').forEach(item => observer.observe(item)); // Filter Logic const buttons = document.querySelectorAll('.filter-btn'); const cards = document.querySelectorAll('.ukm-card'); buttons.forEach(btn => { btn.addEventListener('click', () => { buttons.forEach(b => b.classList.remove('active', 'bg-[#fbc02d]', 'text-[#0d47a1]', 'font-bold')); btn.classList.add('active', 'bg-[#fbc02d]', 'text-[#0d47a1]', 'font-bold'); const filter = btn.dataset.filter; cards.forEach(card => { const show = (filter === 'all' || card.dataset.category === filter); if(show) { card.style.display = 'block'; setTimeout(() => card.classList.remove('hidden-by-filter'), 10); } else { card.classList.add('hidden-by-filter'); card.addEventListener('transitionend', () => { if(card.classList.contains('hidden-by-filter')) card.style.display = 'none'; }, {once:true}); } }); }); }); });