Another Round with the Bryans

Bourbon Reviews Worth Pouring Twice

Honest tasting notes, bar picks, bourbon news, and the gear that makes a better pour.

Featured Reviews

The Bryans Make Pour Choices

Signature pours, bottle breakdowns, and the reviews that set the tone.

Latest Reviews

Fresh Cracks

New pours and recent notes, updated as the bottles open.

Loading latest reviews…

Barrel Forward

Fresh bourbon headlines, distilled daily.

Loading the latest bourbon news…

Where to Drink

Public Intox

Places worth pouring a glass, plus the details that matter.

See All Venues →

Drink Adjacent Products

Shelf Help

Mixers, molds, glassware, and the tools behind a better bar cart.

Mixer / Syrup

Rye-forward mixer for better Old Fashioneds.

$24 • 4.8★

Read Review

Ice Sphere Mold

Large sphere mold for slower melt and spirit-forward pours.

$32 • 4.9★

Read Review

Rocks Glass

Double Old Fashioned glass with a heavy base.

$38 • 4.7★

Read Review
Best for Old Fashioneds Best for home bar setup Bryans' pick

Rankings

Line 'Em Up

Top bottles, best value pours, and beginner-friendly picks.

About

Bry-ographies

The story behind the site and the people behind the pours.

Meet the Bryans
async function loadLineEmUp() { try { const manifest = await getManifest(); const now = new Date(); const thisYear = now.getFullYear(); const thisMonth = now.getMonth(); // 0-indexed // Helpers const rated = manifest.filter(r => r.label !== "Rating Pending" && r.pipsOn > 0); function renderRankItem(r) { const pips = Array.from({ length: 5 }, (_, i) => `` ).join(""); return `
  • ${escapeHtml(r.title)}
    ${escapeHtml(r.type)} ${pips}
  • `; } function renderEmpty(msg) { return `
  • ${msg}
  • `; } // ── Top Bottles This Month ────────────────────────────────────────── // Reviews with a reviewDate in the current calendar month, sorted by rating desc. // Falls back to the 5 most recently dated reviews if none this month. let topThisMonth = rated .filter(r => { if (!r.reviewDate) return false; const d = new Date(r.reviewDate); return d.getFullYear() === thisYear && d.getMonth() === thisMonth; }) .sort((a, b) => b.pipsOn - a.pipsOn) .slice(0, 5); if (!topThisMonth.length) { // Fallback: most recently dated reviews overall topThisMonth = rated .filter(r => r.reviewDate) .sort((a, b) => new Date(b.reviewDate) - new Date(a.reviewDate)) .slice(0, 5); } // Second fallback: top-rated regardless of date if (!topThisMonth.length) { topThisMonth = [...rated].sort((a, b) => b.pipsOn - a.pipsOn).slice(0, 5); } const topList = document.getElementById("rank-top-bottles-list"); topList.innerHTML = topThisMonth.length ? topThisMonth.map(renderRankItem).join("") : renderEmpty("No reviews this month yet."); // ── Value Pours (under $60 MSRP) ──────────────────────────────────── const valuePours = rated .filter(r => typeof r.price === "number" && r.price < 60) .sort((a, b) => b.pipsOn - a.pipsOn || a.price - b.price) .slice(0, 5); const valueList = document.getElementById("rank-value-pours-list"); valueList.innerHTML = valuePours.length ? valuePours.map(r => renderRankItem(r)).join("") : renderEmpty("No value pours reviewed yet."); // ── Best for Beginners ─────────────────────────────────────────────── const beginners = rated .filter(r => r.beginner === true) .sort((a, b) => b.pipsOn - a.pipsOn) .slice(0, 5); const beginnerList = document.getElementById("rank-beginners-list"); beginnerList.innerHTML = beginners.length ? beginners.map(renderRankItem).join("") : renderEmpty("No beginner picks tagged yet."); } catch (err) { console.error("Line Em Up load failed:", err); } } async function loadPublicIntox() { const container = document.getElementById("public-intox-cards"); try { const venues = await fetch("venues-manifest.json").then(r => r.json()); if (!venues.length) { container.innerHTML = ""; return; } // Shuffle and pick up to 2 const shuffled = [...venues].sort(() => Math.random() - 0.5).slice(0, 2); container.innerHTML = shuffled.map(v => ` ${escapeHtml(v.type)}

    ${escapeHtml(v.name)}

    ${escapeHtml(v.location)}

    ${escapeHtml(v.blurb)}

    ${(v.tags||[]).map(t => `${escapeHtml(t)}`).join("")}
    `).join(""); } catch (err) { console.error("Public Intox load failed:", err); container.innerHTML = ""; } }