Available for bookings

scottyd

San Francisco DJ crafting unforgettable sonic experiences

Pop Rap Afrohouse Electronic
Scroll
scottyd performing

Unleashing Rhythms

As a versatile DJ with a passion for blending diverse musical styles, I specialize in Pop, Rap, and Afrohouse, creating unforgettable experiences on the dance floor.

With a foundation in Afrohouse, I weave traditional African rhythms with modern electronic elements, infusing every event with energy and cultural richness. My background in songwriting and music production in Logic Pro enables me to craft unique remixes and transitions.

For me, DJing is more than playing tracks—it's about creating a connection with the audience. I approach every set as a dynamic conversation, responding to the crowd's energy and ensuring every beat resonates.

5 Instruments
Logic Pro
8+ Years
500+ Events

Past Venues

From rooftop lounges to intimate clubs, bringing the energy everywhere

Charmaine's rooftop

Charmaine's

Resident DJ • Sundays 11am-3pm

Club venue

Audio SF

Guest appearances • Afrohouse nights

Corporate event

Corporate Events

Tech companies • Product launches

Latest Mixes

Curated sets blending genres and vibes

scottyd

2:28 • Pop

Sunday Rooftop Vibes

1:24:15 • December 2025

Late Night Pop & Rap

1:02:48 • November 2025

Listen on SoundCloud →

Book scottyd

Check availability and lock in your date

February 2026

Sun
Mon
Tue
Wed
Thu
Fri
Sat

Your selected date

Available
Booked
Selected

Let's Make Some Noise

Ready to make your event amazingly memorable? Whether it's a private party, corporate event, or festival, I'm here to deliver an exceptional musical journey.

Select a mix to play
scottyd
0:00 / 0:00
eventType: form.querySelector('select')?.value || '', date: form.querySelector('input[type="date"]')?.value || '', message: form.querySelector('textarea')?.value.trim() || '', selectedCalendarDate: typeof selectedDate !== 'undefined' ? (selectedDate || '') : '', userAgent: navigator.userAgent, pageUrl: window.location.href, submittedAt: new Date().toISOString() }; const errors = validateBookingForm(formData); if (errors.length > 0) { if (statusEl) { statusEl.textContent = errors.join(' '); statusEl.classList.add('error'); } return; } if (!GOOGLE_SHEETS_WEB_APP_URL || GOOGLE_SHEETS_WEB_APP_URL.includes('YOUR_DEPLOYMENT_ID')) { if (statusEl) { statusEl.textContent = 'Booking form is not fully configured yet. Please email me directly.'; statusEl.classList.add('error'); } return; } try { const response = await fetch(GOOGLE_SHEETS_WEB_APP_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); if (!response.ok) { throw new Error('Network response was not ok'); } const result = await response.json().catch(() => ({})); if (statusEl) { statusEl.textContent = result.message || 'Inquiry sent – I’ll get back to you within 24 hours.'; statusEl.classList.add('success'); } form.reset(); } catch (err) { console.error('Booking form submission failed', err); if (statusEl) { statusEl.textContent = 'Something went wrong sending your inquiry. Please try again in a minute or email me directly.'; statusEl.classList.add('error'); } } }); // ============================================ // SMOOTH SCROLL // ============================================ document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth' }); } }); }); // ============================================ // INTERSECTION OBSERVER FOR ANIMATIONS // ============================================ const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.style.opacity = '1'; entry.target.style.transform = 'translateY(0)'; } }); }, observerOptions); document.querySelectorAll('.venue-card, .mix-player, .tilt-card, .contact-link').forEach(el => { el.style.opacity = '0'; el.style.transform = 'translateY(30px)'; el.style.transition = 'all 0.6s ease'; observer.observe(el); });