Hello, I'm

CHRISTOPHER
MALDONADO ACEVEDO

Filmmaker & Photographer

ABOUT ME

Photography and filmmaking have become my way of exploring people, places, and stories.I’m a photographer and filmmaker from Aguada, Puerto Rico, inspired by cinema and drawn to creating images that feel personal and cinematic.I offer photography and videography services while working toward creating my own short films, documentaries, and other visual projects.

OUR SERVICES

FOOD PHOTOGRAPHY

Portfolio

CALAFF

document.querySelectorAll('.photo-carousel').forEach(carousel => { const viewport = carousel.querySelector('.photo-viewport'); const track = carousel.querySelector('.photo-track'); const photos = [...track.querySelectorAll('img')]; let current = 0; let startX = 0; let startY = 0; /* ========================= AJUSTAR ALTURA ========================= */ function adjustHeight() { const photo = photos[current]; if (!photo) return; const width = viewport.clientWidth; const ratio = photo.naturalHeight / photo.naturalWidth; const height = width * ratio; viewport.style.height = height + 'px'; } /* ========================= MOSTRAR FOTO ========================= */ function showPhoto(index) { current = (index + photos.length) % photos.length; track.style.transform = 'translateX(-' + (current * 100) + '%)'; adjustHeight(); } /* ========================= ESPERAR A QUE CARGUEN ========================= */ photos.forEach(photo => { if (photo.complete) { adjustHeight(); } else { photo.addEventListener( 'load', adjustHeight ); } }); /* ========================= BOTÓN ANTERIOR ========================= */ carousel .querySelector('.photo-prev') .addEventListener('click', () => { showPhoto(current - 1); }); /* ========================= BOTÓN SIGUIENTE ========================= */ carousel .querySelector('.photo-next') .addEventListener('click', () => { showPhoto(current + 1); }); /* ========================= SWIPE ========================= */ track.addEventListener( 'touchstart', e => { startX = e.touches[0].clientX; startY = e.touches[0].clientY; }, { passive: true } ); track.addEventListener( 'touchend', e => { const endX = e.changedTouches[0].clientX; const endY = e.changedTouches[0].clientY; const deltaX = endX - startX; const deltaY = endY - startY; /* Solo hacemos swipe si el movimiento es principalmente horizontal */ if ( Math.abs(deltaX) > 40 && Math.abs(deltaX) > Math.abs(deltaY) ) { if (deltaX < 0) { showPhoto(current + 1); } else { showPhoto(current - 1); } } }, { passive: true } ); /* ========================= CAMBIO DE TAMAÑO ========================= */ window.addEventListener( 'resize', adjustHeight ); /* ========================= INICIAR ========================= */ if (photos.length) { showPhoto(0); } });

BUNDY'S

document.querySelectorAll('.photo-carousel').forEach(carousel => { const viewport = carousel.querySelector('.photo-viewport'); const track = carousel.querySelector('.photo-track'); const photos = [...track.querySelectorAll('img')]; let current = 0; let startX = 0; let startY = 0; /* ========================= AJUSTAR ALTURA ========================= */ function adjustHeight() { const photo = photos[current]; if (!photo) return; const width = viewport.clientWidth; const ratio = photo.naturalHeight / photo.naturalWidth; const height = width * ratio; viewport.style.height = height + 'px'; } /* ========================= MOSTRAR FOTO ========================= */ function showPhoto(index) { current = (index + photos.length) % photos.length; track.style.transform = 'translateX(-' + (current * 100) + '%)'; adjustHeight(); } /* ========================= ESPERAR A QUE CARGUEN ========================= */ photos.forEach(photo => { if (photo.complete) { adjustHeight(); } else { photo.addEventListener( 'load', adjustHeight ); } }); /* ========================= BOTÓN ANTERIOR ========================= */ carousel .querySelector('.photo-prev') .addEventListener('click', () => { showPhoto(current - 1); }); /* ========================= BOTÓN SIGUIENTE ========================= */ carousel .querySelector('.photo-next') .addEventListener('click', () => { showPhoto(current + 1); }); /* ========================= SWIPE ========================= */ track.addEventListener( 'touchstart', e => { startX = e.touches[0].clientX; startY = e.touches[0].clientY; }, { passive: true } ); track.addEventListener( 'touchend', e => { const endX = e.changedTouches[0].clientX; const endY = e.changedTouches[0].clientY; const deltaX = endX - startX; const deltaY = endY - startY; /* Solo hacemos swipe si el movimiento es principalmente horizontal */ if ( Math.abs(deltaX) > 40 && Math.abs(deltaX) > Math.abs(deltaY) ) { if (deltaX < 0) { showPhoto(current + 1); } else { showPhoto(current - 1); } } }, { passive: true } ); /* ========================= CAMBIO DE TAMAÑO ========================= */ window.addEventListener( 'resize', adjustHeight ); /* ========================= INICIAR ========================= */ if (photos.length) { showPhoto(0); } });

FŌKU ASIAN STREET FOOD

document.querySelectorAll('.photo-carousel').forEach(carousel => { const viewport = carousel.querySelector('.photo-viewport'); const track = carousel.querySelector('.photo-track'); const photos = [...track.querySelectorAll('img')]; let current = 0; let startX = 0; let startY = 0; /* ========================= AJUSTAR ALTURA ========================= */ function adjustHeight() { const photo = photos[current]; if (!photo) return; const width = viewport.clientWidth; const ratio = photo.naturalHeight / photo.naturalWidth; const height = width * ratio; viewport.style.height = height + 'px'; } /* ========================= MOSTRAR FOTO ========================= */ function showPhoto(index) { current = (index + photos.length) % photos.length; track.style.transform = 'translateX(-' + (current * 100) + '%)'; adjustHeight(); } /* ========================= ESPERAR A QUE CARGUEN ========================= */ photos.forEach(photo => { if (photo.complete) { adjustHeight(); } else { photo.addEventListener( 'load', adjustHeight ); } }); /* ========================= BOTÓN ANTERIOR ========================= */ carousel .querySelector('.photo-prev') .addEventListener('click', () => { showPhoto(current - 1); }); /* ========================= BOTÓN SIGUIENTE ========================= */ carousel .querySelector('.photo-next') .addEventListener('click', () => { showPhoto(current + 1); }); /* ========================= SWIPE ========================= */ track.addEventListener( 'touchstart', e => { startX = e.touches[0].clientX; startY = e.touches[0].clientY; }, { passive: true } ); track.addEventListener( 'touchend', e => { const endX = e.changedTouches[0].clientX; const endY = e.changedTouches[0].clientY; const deltaX = endX - startX; const deltaY = endY - startY; /* Solo hacemos swipe si el movimiento es principalmente horizontal */ if ( Math.abs(deltaX) > 40 && Math.abs(deltaX) > Math.abs(deltaY) ) { if (deltaX < 0) { showPhoto(current + 1); } else { showPhoto(current - 1); } } }, { passive: true } ); /* ========================= CAMBIO DE TAMAÑO ========================= */ window.addEventListener( 'resize', adjustHeight ); /* ========================= INICIAR ========================= */ if (photos.length) { showPhoto(0); } });

PORTRAIT PHOTOGRAPHY

Coming Soon