Portfolio
Featured photo collection
Clear Filters
Nhật ký ảnh
Photos taken on a phone.
No algorithms, no social media.
Just photos—ordinary, everyday moments.
.vd-preview {
background: #111111;
padding: 80px 0 100px;
font-family: 'Be Vietnam Pro', system-ui, sans-serif;
font-weight: 300;
}
.vd-preview * { box-sizing: border-box; margin: 0; padding: 0; }/* ── Grid ─────────────────────────────────────────────── */
.vd-preview__grid {
columns: 4;
column-gap: 5px;
padding: 0 48px;
min-height: 200px;
}.vd-preview__item {
break-inside: avoid;
margin-bottom: 5px;
position: relative;
overflow: hidden;
background: #222222;
cursor: crosshair;
display: block;
}
.vd-preview__item:hover .vd-preview__overlay { opacity: 1; }
.vd-preview__item:hover .vd-preview__photo { transform: scale(1.025); }.vd-preview__frame {
position: relative;
width: 100%;
overflow: hidden;
}.vd-preview__photo {
position: absolute;
inset: 0;
width: 100%; height: 100%;
object-fit: cover;
transition: transform 0.55s cubic-bezier(0.25, 0.1, 0.25, 1);
display: block;
}.vd-preview__ph {
position: absolute;
inset: 0;
background: linear-gradient(145deg, #1a1a1a, #2a2a2a);
animation: vd-pulse 1.8s ease-in-out infinite;
}
@keyframes vd-pulse {
0%, 100% { opacity: 0.4; }
50% { opacity: 0.7; }
}.vd-preview__overlay {
position: absolute;
inset: 0;
background: linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, transparent 50%);
opacity: 0;
transition: opacity 0.3s;
display: flex;
align-items: flex-end;
padding: 12px 14px;
}
.vd-preview__date {
font-family: 'Space Mono', monospace;
font-size: 9px;
letter-spacing: 0.2em;
color: rgba(232, 232, 232, 0.6);
}.vd-preview__error {
color: rgba(232,232,232,0.4);
font-family: 'Space Mono', monospace;
font-size: 11px;
text-align: center;
padding: 40px 0;
}/* ── Lightbox ─────────────────────────────────────────── */
.vdlb {
position: fixed;
inset: 0;
z-index: 99999;
background: rgba(0, 0, 0, 0);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
transition: opacity 0.3s ease, background 0.3s ease;
}
.vdlb.open {
opacity: 1;
pointer-events: all;
background: rgba(0, 0, 0, 0.97);
}.vdlb__stage {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 100%; height: 100%;
padding: 64px 100px 80px;
}.vdlb__img-wrap {
position: relative;
max-width: 100%;
max-height: 100%;
display: flex;
align-items: center;
justify-content: center;
}.vdlb__img {
max-width: 100%;
max-height: calc(100vh - 144px);
object-fit: contain;
opacity: 0;
transition: opacity 0.25s ease;
display: block;
}
.vdlb__img.loaded { opacity: 1; }.vdlb__ph {
width: min(80vw, 900px);
min-height: 400px;
opacity: 0;
transition: opacity 0.25s ease;
background: linear-gradient(145deg, #1a1a1a, #2a2a2a);
}
.vdlb__ph.loaded { opacity: 1; }.vdlb__prev, .vdlb__next {
position: absolute;
top: 50%; transform: translateY(-50%);
width: 56px; height: 56px;
display: flex; align-items: center; justify-content: center;
border: 1px solid rgba(232, 232, 232, 0.12);
color: rgba(232, 232, 232, 0.4);
background: rgba(0, 0, 0, 0.3);
transition: all 0.2s;
cursor: crosshair;
z-index: 10;
}
.vdlb__prev { left: 24px; }
.vdlb__next { right: 24px; }
.vdlb__prev:hover, .vdlb__next:hover {
border-color: rgba(232, 232, 232, 0.5);
color: #e8e8e8;
background: rgba(0, 0, 0, 0.6);
}
.vdlb__prev svg, .vdlb__next svg { width: 20px; height: 20px; }.vdlb__close {
position: absolute;
top: 20px; right: 24px;
width: 44px; height: 44px;
display: flex; align-items: center; justify-content: center;
border: 1px solid rgba(232, 232, 232, 0.12);
color: rgba(232, 232, 232, 0.4);
background: transparent;
transition: all 0.2s;
cursor: crosshair;
z-index: 10;
}
.vdlb__close:hover { border-color: rgba(232, 232, 232, 0.5); color: #e8e8e8; }.vdlb__bar {
position: absolute;
bottom: 0; left: 0; right: 0;
padding: 20px 32px;
background: linear-gradient(to top, rgba(0, 0, 0, 0.7), transparent);
display: flex;
flex-direction: column;
gap: 4px;
pointer-events: none;
}
.vdlb__date {
font-family: 'Space Mono', monospace;
font-size: 10px;
letter-spacing: 0.2em;
color: rgba(232, 232, 232, 0.45);
}
.vdlb__caption {
font-family: 'Be Vietnam Pro', sans-serif;
font-style: italic;
font-size: 14px;
line-height: 1.7;
color: rgba(232, 232, 232, 0.6);
max-width: 600px;
}
.vdlb__counter {
font-family: 'Space Mono', monospace;
font-size: 10px;
letter-spacing: 0.15em;
color: rgba(232, 232, 232, 0.25);
}.vdlb__thumbs {
position: absolute;
bottom: 0; left: 0; right: 0;
height: 68px;
display: flex;
align-items: center;
justify-content: center;
gap: 4px;
padding: 0 100px;
overflow: hidden;
pointer-events: none;
}
.vdlb__thumb {
width: 48px; height: 48px;
flex-shrink: 0; overflow: hidden;
opacity: 0.3;
transition: opacity 0.2s, transform 0.2s;
cursor: crosshair;
pointer-events: auto;
}
.vdlb__thumb.active { opacity: 1; transform: scale(1.08); }
.vdlb__thumb img { width: 100%; height: 100%; object-fit: cover; }/* Responsive */
@media (max-width: 1024px) { .vd-preview__grid { columns: 3; } }
@media (max-width: 680px) {
.vd-preview__grid { columns: 2; padding: 0 20px; }
.vdlb__stage { padding: 56px 56px 80px; }
.vdlb__prev { left: 8px; width: 44px; height: 44px; }
.vdlb__next { right: 8px; width: 44px; height: 44px; }
.vdlb__thumbs { display: none; }
}
(function() {
'use strict';var API = '/wp-json/wp/v2/visual-diary';
var COUNT = 12;
var THUMBS = 7;
var RATIOS = [125, 100, 140, 75, 120, 100, 75, 140, 100, 125, 80, 110];var POSTS = [];
var LB_IDX = 0;
var LB_OPEN = false;function fmtDate(d) {
if (!d) return '';
var parts = d.split('-');
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
return parts[2] + ' ' + (months[parseInt(parts[1], 10) - 1] || '') + ' ' + parts[0];
}function renderSkeletons() {
var grid = document.getElementById('vdGrid');
if (!grid) return;
grid.innerHTML = '';
for (var s = 0; s < COUNT; s++) {
var sk = document.createElement('div');
sk.className = 'vd-preview__item';
sk.innerHTML = '
' +
'' +
'
';
grid.appendChild(sk);
}
}function loadPosts() {
renderSkeletons();
var grid = document.getElementById('vdGrid');fetch(API + '?per_page=' + COUNT + '&orderby=date&order=desc')
.then(function(res) {
if (!res.ok) throw new Error('HTTP Error ' + res.status);
return res.json();
})
.then(function(data) {
if (!Array.isArray(data) || data.length === 0) {
if (grid) grid.innerHTML = 'No posts found in Visual Diary.
';
return;
}POSTS = data.map(function(p) {
var media = p._embedded && p._embedded['wp:featuredmedia'] ? p._embedded['wp:featuredmedia'][0] : null;
return {
id: p.id,
date: p.date ? p.date.slice(0, 10) : '',
src: p.featured_media_url || (media ? media.source_url : null),
thumb: p.featured_media_thumb || (media && media.media_details && media.media_details.sizes && media.media_details.sizes.medium ? media.media_details.sizes.medium.source_url : null),
w: p.width || 0,
h: p.height || 0,
caption: p.content && p.content.rendered ? p.content.rendered.replace(/]+>/g, '').trim() : ''
};
});if (!grid) return;
grid.innerHTML = '';POSTS.forEach(function(post, idx) {
var ratio = (post.w && post.h)
? ((post.h / post.w) * 100).toFixed(1)
: RATIOS[idx % RATIOS.length];var imgSrc = post.thumb || post.src;
var item = document.createElement('div');
item.className = 'vd-preview__item';
var innerHTML = '';
if (imgSrc) {
innerHTML += '
';
} else {
innerHTML += '';
}
innerHTML += '
';
item.innerHTML = innerHTML;item.addEventListener('click', function() { openLb(idx); });
grid.appendChild(item);
});
})
.catch(function(err) {
console.error('Visual Diary Error:', err);
if (grid) grid.innerHTML = '' + fmtDate(post.date) + '
Unable to load photo diary. (' + err.message + ')
';
});
}function openLb(idx) {
LB_IDX = idx;
LB_OPEN = true;
var lb = document.getElementById('vdlb');
if (lb) lb.classList.add('open');
document.body.style.overflow = 'hidden';
renderLbImg();
renderLbThumbs();
}function closeLb() {
LB_OPEN = false;
var lb = document.getElementById('vdlb');
if (lb) lb.classList.remove('open');
document.body.style.overflow = '';
}function navigate(dir) {
LB_IDX = (LB_IDX + dir + POSTS.length) % POSTS.length;
renderLbImg();
renderLbThumbs();
}function renderLbImg() {
var post = POSTS[LB_IDX];
if (!post) return;var wrap = document.getElementById('vdlbImgWrap');
if (!wrap) return;
wrap.innerHTML = '';var imageSrc = post.src || post.thumb;
if (imageSrc) {
var img = document.createElement('img');
img.className = 'vdlb__img';
img.alt = fmtDate(post.date);
img.onload = function() { img.classList.add('loaded'); };
img.src = imageSrc;
wrap.appendChild(img);
}document.getElementById('vdlbDate').textContent = fmtDate(post.date);
document.getElementById('vdlbCaption').textContent = post.caption || '';
document.getElementById('vdlbCounter').textContent = (LB_IDX + 1) + ' / ' + POSTS.length;
}function renderLbThumbs() {
var strip = document.getElementById('vdlbThumbs');
if (!strip) return;
strip.innerHTML = '';var half = Math.floor(THUMBS / 2);
var start = Math.max(0, LB_IDX - half);
var end = Math.min(POSTS.length, start + THUMBS);for (var i = start; i < end; i++) {
(function(index) {
var post = POSTS[index];
var th = document.createElement('div');
th.className = 'vdlb__thumb' + (index === LB_IDX ? ' active' : '');
var thumbSrc = post.thumb || post.src;
if (thumbSrc) {
var tImg = document.createElement('img');
tImg.src = thumbSrc;
th.appendChild(tImg);
}th.addEventListener('click', function(e) {
e.stopPropagation();
LB_IDX = index;
renderLbImg();
renderLbThumbs();
});strip.appendChild(th);
})(i);
}
}function setupControls() {
var closeBtn = document.getElementById('vdlbClose');
var prevBtn = document.getElementById('vdlbPrev');
var nextBtn = document.getElementById('vdlbNext');
var lb = document.getElementById('vdlb');if (closeBtn) closeBtn.addEventListener('click', function(e) { e.stopPropagation(); closeLb(); });
if (prevBtn) prevBtn.addEventListener( 'click', function(e) { e.stopPropagation(); navigate(-1); });
if (nextBtn) nextBtn.addEventListener( 'click', function(e) { e.stopPropagation(); navigate(1); });if (lb) {
lb.addEventListener('click', function(e) {
if (!e.target.closest('#vdlbImgWrap')) closeLb();
});
}document.addEventListener('keydown', function(e) {
if (!LB_OPEN) return;
if (e.key === 'Escape') closeLb();
if (e.key === 'ArrowLeft') navigate(-1);
if (e.key === 'ArrowRight') navigate(1);
});
}function init() {
setupControls();
loadPosts();
}if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
About me
Danny Bach
In terms of expertise, I am a photographer, a digital printing specialist, and a content writer.
As a photographer, I specialize in portrait photography and documentary both commissions and artistic, the final results often prints and photo books.
In the field of printing, I am the founder of VG-Lab printing studio (since 2017), and a co-founder of the East Asia Art Painting brand (since 2017)
Additionally, I am also the owner of Hoa Ta Gallery (since 2022), specializing in the trade of Asian art pieces ranging from photography to calligraphy and a few things in between.
In terms of personal interests, I have a passion for photography and the Red River Civilization study, with the Three Teachings (Confucianism, Taoism, and Buddhism) as my guiding principles.
- I study Confucianism to learn how to interact with others in society
- I study Taoism to understand how to deal with myself
- I study Buddhism to seek harmony with all things
Besides, I also like meme.
Professional experience
2009 | Began self-taught photography. | |
| Founded the wArta Photography, specializing in Wedding Photography in Melbourne, Australia | .||
12/2012 | Graduated Associate Degree in Business, RMIT University, Melbourne, Australia. | |
2013 | Bronze Award, Wedding Category – Loupe Awards International 2013. | |
12/2013 | Graduated Certificate IV in Photo Imaging, RMIT University, Melbourne, Australia. | |
09/2014 | Began working as a stringer editorial photographer for Forbes Vietnam (til now). | |
2016 | Top 20 Images – Australian Photographer of the Year 2016.Best Documentary Photo Book (S.H.A.M.E: Dealer or Healer) – RMIT University, Melbourne. | |
| “Student Using Skills to Make a Difference” Award – Heartfelt Australia and Borge’s Imaging, Melbourne. | 02/2017Graduated Diploma of Photo Imaging, RMIT University, Melbourne, Australia. | |
07/2017 | Founded the Vietnam Giclee Lab, Ho Chi Minh city, Vietnam. | |
12/2017 | Launched the Dong A Danh Hoa Brand, specializing in reproduction of ancient East Asian art, Ho Chi Minh City, Vietnam. | |
09/2019 | Founded Hoa Ta Co., Ho Chi Minh city, Vietnam. | |
12/2022 | Launched the Hoa Ta Gallery Brand, specializing in Fine Art Prints and Photography, Ho Chi Minh City, Vietnam. | |
04/2025 | Solo exhibition “Mountains of Change” at Vin Gallery, HCMC, Vietnam |
Blog & Thoughts
BLOG
Clear Filters
Prints
Photobook & Fine prints
Order publications from Danny Bach.
Clear Filters
Contact


















