Hand-crafted beverages made from the finest beans, freshly roasted daily.
Classic Espresso
$3.50
Rich and bold, extracted to double-shot perfection with a thick golden crema.
★★★★★ 4.8 (342 reviews)
Caffeine:
🥐 Best Paired With: Butter Croissant
Caramel Latte
$5.25
Smooth espresso with velvety steamed whole milk and buttery artisanal caramel sauce.
★★★★★ 4.9 (518 reviews)
Caffeine:
🥖 Best Paired With: Cinnamon Roll
Cold Brew
$4.75
Slow-steeped for 24 hours in cold filtered water, naturally sweet and ultra-low acid.
★★★★★ 4.7 (289 reviews)
Caffeine:
🫐 Best Paired With: Blueberry Muffin
Cappuccino
$4.50
Equal thirds espresso, steamed milk, and dense airy foam dusted with cocoa powder.
★★★★★ 4.6 (401 reviews)
Caffeine:
🍪 Best Paired With: Almond Biscotti
Mocha Delight
$5.50
Single-origin dark chocolate blended with robust espresso and whipped cream.
★★★★★ 4.9 (623 reviews)
Caffeine:
🍫 Best Paired With: Chocolate Croissant
Vanilla Latte
$5.00
Classic creamy latte infused with pure Madagascar Bourbon vanilla extract.
★★★★★ 4.5 (356 reviews)
Caffeine:
🧁 Best Paired With: Vanilla Bean Scone
Crafted with Passion
Since 2010, CoffeeHouse has stood at the crossroads of artisan roasting and community hospitality. Every bean is shade-grown, hand-harvested, and roasted in small batches to preserve its natural floral notes.
🌱
100% Sustainable
Direct-trade partner farms
⭐
Master Baristas
SCA Certified roasters
Cold Brew Mastery
Voted #1 in NYC (2025–2026)
Join Our Coffee Community
Get early access to seasonal micro-lots, exclusive discounts, and secret tasting events.
Exclusive Coffee Perks
Weekly specials and secret roasts delivered straight to your inbox.
See Your Savings
Join our digital membership card and save on every cup you enjoy.
$325.00
Annual Member Savings (25% Loyalty Cash)
Includes free pastry every 10th visit + double stamp Tuesdays!
Visit Our Roasteries
Drop by any of our neighborhood tasting rooms for freshly pulled shots and pour-overs.
SoHo Flagship
482 Broome St, New York, NY Open 6:30 AM – 8:00 PM
West Village Studio
112 Perry St, New York, NY Open 7:00 AM – 7:00 PM
Williamsburg Roastery
204 Bedford Ave, Brooklyn, NY Open 7:00 AM – 9:00 PM
📐 The 3 Lifecycle Phases of position: sticky
W3C SPEC
Unlike position: fixed which removes an element completely from the document flow,
position: sticky acts as a hybrid of relative and fixed positioning bounded strictly by its parent container:
Phase 1: Relative Flow (Y < Threshold)
The element occupies natural layout space and scrolls normally with the page.
Phase 2: Viewport Pinned (Threshold ≤ Y ≤ Parent Bottom)
The element pins itself at the defined top: 88px threshold, floating smoothly with GPU-composited efficiency.
Phase 3: Parent Boundary Stop (Y > Parent Bottom)
The element reaches the bottom of its parent container and stops following the viewport, naturally sliding out of view without overlapping footers!
Why does our scrollspy feel crisp and immediate? Because we calibrate the rootMargin to focus on the human optical reading line (upper 20% to 40% of the screen) instead of naive 0px margins that trigger too early.
// Optical Reading Zone Configurationconst observerOptions = {
root: null, // browser viewportrootMargin: '-20% 0px -60% 0px', // 20% from top, 60% from bottomthreshold: [0, 0.25, 0.5, 0.75, 1.0]
};
Dynamic Offset Compensator (scroll-margin-top)
When clicking <a href="#menu">, the browser jumps to top offset 0. Without compensation, the sticky header obscures section titles!
[SYSTEM] IntersectionObserver initialized on 6 sections.
[SCROLLSPY] Active section set to #home.
⚠️ The 5 Deadliest Sticky Sidebar Traps & How to Prevent Them
DEFENSIVE CSS
Every seasoned front-end engineer has encountered a situation where position: sticky mysteriously refuses to work.
Here are the five primary architectural pitfalls and their proven solutions:
🚫 Trap #1: The Ancestor overflow: hidden / auto Killer
MOST COMMON BUG
If any ancestor element in the DOM tree has overflow: hidden, overflow: auto, or overflow: scroll, the sticky element binds its threshold to that ancestor rather than the viewport window. Since the ancestor doesn't scroll, the sticky element remains static.
The Solution: Use modern CSS overflow-x: clip; instead of overflow-x: hidden; on containers. Unlike hidden, clip does not establish a new BFC scroll container and preserves sticky viewport tracking!
Declaring position: sticky alone without specifying top, bottom, left, or right causes the browser to default to top: auto, rendering the element identical to position: static.
The Solution: Always specify an explicit threshold: position: sticky; top: 88px;.
🚫 Trap #3: Flexbox Column Stretch Collapse
FLEXBOX GEOMETRY
By default, Flexbox items have align-items: stretch. If the sidebar element is inside a wrapper that only extends as tall as the sidebar itself, the sidebar has 0px of travel distance and cannot move.
The Solution: Ensure the parent track spans the full height of the content row, and apply align-self: flex-start; directly to the sticky sidebar element so it doesn't stretch to fill the column.
🚫 Trap #4: Anchor Jump Header Occlusion
UX COLLISION
Clicking an anchor jump link causes the browser to align the target element to the very top of the viewport (Y = 0), hiding section titles underneath fixed or sticky headers.
The Solution: Set scroll-margin-top: 96px; on all target section containers. The browser will automatically offset scroll jumps to leave breathing room below the header.
🚫 Trap #5: Mobile Viewport Horizontal Clipping
RESPONSIVE DESIGN
A vertical sticky sidebar on mobile viewports under 768px severely cramps main content or overflows horizontally off-screen.
The Solution: Use media queries to transform the vertical sidebar into a sticky horizontal scrubber rail or compact docked bottom capsule on mobile viewports.
🧪 Automated 8-Point In-Browser Diagnostic Suite
This suite autonomously audits the CoffeeHouse sticky sidebar DOM, computed CSS properties, IntersectionObserver bindings, and accessibility semantics.
Test 1: Sticky Positioning CSS Assertion
Verifies position: sticky or -webkit-sticky is computed on #stickySidebarNav.
PASSED
Test 2: Sticky Top Threshold Definition
Ensures top: 88px is explicitly defined and not auto.
PASSED
Test 3: 1-to-1 Section ID Anchor Parity
Validates all 6 navigation targets (#home, #menu, #about, #join, #savings, #locations) exist in DOM.