{"product_id":"burundi-hafi","title":"Burundi · Hafi","description":"\u003c!-- ================================================================\n     BURUNDI · HAFI — PDP BODY\n     Paste into Shopify product description (Code view: \u003c \u003e icon)\n     Replace No.__ with the edition number before publishing.\n     ================================================================ --\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; color: #44535b; max-width: 760px;\"\u003e\n\u003c!-- ── 1 · ABOUT THIS COFFEE ────────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 14px;\"\u003eAbout this coffee\u003c\/div\u003e\n\u003cp style=\"font-size: 15px; line-height: 1.75; color: #44535b; margin: 0;\"\u003eUp in the hills of Muyinga Province, the roads turn to mist and, after heavy rain, to mud. Hafi sits a long day from Bujumbura, about six hours by car, far from the nearest wet mill. For years that distance left the farmers one option, so they got very good at the natural process — drying whole cherry on raised beds and dialing in 24- and 48-hour anaerobic ferments that give the cup its layered, jammy depth. JNP Coffee works with the smallholders around the station, which is named for what they spent years hoping for. Hafi means “near” in Kirundi, for the washing station they wanted close at hand.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- ── 2 · SPEC TABLE ───────────────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 14px;\"\u003eSpecifications\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 150px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eOrigin\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003eBurundi\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 150px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eRegion\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003eMuyinga Province\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 150px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eLot\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003eHafi Washing Station\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 150px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eProducer\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003eLocal smallholder farmers\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 150px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eVarietal\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003eBourbon\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 150px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eProcess\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003eNatural — whole cherry dried on raised beds, 24- and 48-hour anaerobic ferments\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 150px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eAltitude\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003e1,715 m ASL\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 150px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eTraceability\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003eWashing station lot\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ── 3 · PROFILE ──────────────────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 10px;\"\u003eProfile\u003c\/div\u003e\n\u003cdiv style=\"font-size: 15px; color: #172b36;\"\u003eFull \u0026amp; syrupy  ·  Jammy sweetness  ·  Soft round finish\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ── 4 · FLAVOR RADAR ─────────────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 16px;\"\u003eFlavor\u003c\/div\u003e\n\u003csvg aria-label=\"Flavor radar: acidity 3.5, body 4.5, sweetness 4.5, fruit 4.5, finish 3.5 out of 5\" role=\"img\" style=\"max-width: 100%; display: block;\" width=\"280\" viewbox=\"-30 -12 280 232\"\u003e\n\n    \n    \u003cpolygon stroke-width=\"1\" stroke=\"#E7EAEC\" fill=\"none\" points=\"110,30 186.1,85.3 157,174.7 63,174.7 33.9,85.3\"\u003e\u003c\/polygon\u003e\n    \u003cpolygon stroke-width=\"1\" stroke=\"#E7EAEC\" fill=\"none\" points=\"110,46 170.9,90.2 147.6,161.8 72.4,161.8 49.1,90.2\"\u003e\u003c\/polygon\u003e\n    \u003cpolygon stroke-width=\"1\" stroke=\"#E7EAEC\" fill=\"none\" points=\"110,62 155.6,95.2 138.2,148.8 81.8,148.8 64.4,95.2\"\u003e\u003c\/polygon\u003e\n    \u003cpolygon stroke-width=\"1\" stroke=\"#E7EAEC\" fill=\"none\" points=\"110,78 140.4,100.1 128.8,135.9 91.2,135.9 79.6,100.1\"\u003e\u003c\/polygon\u003e\n    \u003cpolygon stroke-width=\"1\" stroke=\"#E7EAEC\" fill=\"none\" points=\"110,94 125.2,105.1 119.4,122.9 100.6,122.9 94.8,105.1\"\u003e\u003c\/polygon\u003e\n\n    \n    \u003cline stroke-width=\"1\" stroke=\"#E7EAEC\" y2=\"30\" x2=\"110\" y1=\"110\" x1=\"110\"\u003e\u003c\/line\u003e\n    \u003cline stroke-width=\"1\" stroke=\"#E7EAEC\" y2=\"85.3\" x2=\"186.1\" y1=\"110\" x1=\"110\"\u003e\u003c\/line\u003e\n    \u003cline stroke-width=\"1\" stroke=\"#E7EAEC\" y2=\"174.7\" x2=\"157\" y1=\"110\" x1=\"110\"\u003e\u003c\/line\u003e\n    \u003cline stroke-width=\"1\" stroke=\"#E7EAEC\" y2=\"174.7\" x2=\"63\" y1=\"110\" x1=\"110\"\u003e\u003c\/line\u003e\n    \u003cline stroke-width=\"1\" stroke=\"#E7EAEC\" y2=\"85.3\" x2=\"33.9\" y1=\"110\" x1=\"110\"\u003e\u003c\/line\u003e\n\n    \n    \u003cpolygon stroke-linejoin=\"round\" stroke-width=\"1.5\" stroke=\"#172B36\" fill-opacity=\"0.10\" fill=\"#172B36\" points=\"110,54 178.5,87.8 152.3,168.2 67.7,168.2 56.7,92.7\"\u003e\u003c\/polygon\u003e\n\n    \u003ccircle fill=\"#172B36\" r=\"2.6\" cy=\"54\" cx=\"110\"\u003e\u003c\/circle\u003e\n    \u003ccircle fill=\"#172B36\" r=\"2.6\" cy=\"87.8\" cx=\"178.5\"\u003e\u003c\/circle\u003e\n    \u003ccircle fill=\"#172B36\" r=\"2.6\" cy=\"168.2\" cx=\"152.3\"\u003e\u003c\/circle\u003e\n    \u003ccircle fill=\"#172B36\" r=\"2.6\" cy=\"168.2\" cx=\"67.7\"\u003e\u003c\/circle\u003e\n    \u003ccircle fill=\"#172B36\" r=\"2.6\" cy=\"92.7\" cx=\"56.7\"\u003e\u003c\/circle\u003e\n\n    \n    \u003cg fill=\"#8A969D\" letter-spacing=\"1\" font-size=\"10\" font-family=\"Inter,sans-serif\"\u003e\n      \u003ctext text-anchor=\"middle\" y=\"14\" x=\"110\"\u003eACIDITY\u003c\/text\u003e\n      \u003ctext text-anchor=\"start\" y=\"80\" x=\"204\"\u003eBODY\u003c\/text\u003e\n      \u003ctext text-anchor=\"middle\" y=\"196\" x=\"167\"\u003eSWEETNESS\u003c\/text\u003e\n      \u003ctext text-anchor=\"middle\" y=\"196\" x=\"53\"\u003eFRUIT\u003c\/text\u003e\n      \u003ctext text-anchor=\"end\" y=\"80\" x=\"16\"\u003eFINISH\u003c\/text\u003e\n    \u003c\/g\u003e\n  \u003c\/svg\u003e\n\u003c\/div\u003e\n\u003c!-- ── 5 · ROAST ────────────────────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 14px;\"\u003eRoast\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; max-width: 520px;\"\u003e\n\u003cdiv style=\"flex: 1; text-align: center;\"\u003e\n\u003cdiv style=\"height: 5px; background: #172B36 !important;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv style=\"font-size: 11px; letter-spacing: .06em; color: #172b36; margin-top: 9px; font-weight: 500;\"\u003eLight\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; text-align: center;\"\u003e\n\u003cdiv style=\"height: 5px; background: #E7EAEC !important; margin-left: 2px;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv style=\"font-size: 11px; letter-spacing: .06em; color: #8a969d; margin-top: 9px;\"\u003eMed-Light\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; text-align: center;\"\u003e\n\u003cdiv style=\"height: 5px; background: #E7EAEC !important; margin-left: 2px;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv style=\"font-size: 11px; letter-spacing: .06em; color: #8a969d; margin-top: 9px;\"\u003eMedium\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; text-align: center;\"\u003e\n\u003cdiv style=\"height: 5px; background: #E7EAEC !important; margin-left: 2px;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv style=\"font-size: 11px; letter-spacing: .06em; color: #8a969d; margin-top: 9px;\"\u003eMed-Dark\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; text-align: center;\"\u003e\n\u003cdiv style=\"height: 5px; background: #E7EAEC !important; margin-left: 2px;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv style=\"font-size: 11px; letter-spacing: .06em; color: #8a969d; margin-top: 9px;\"\u003eDark\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ── 6 · THE DESIGN ───────────────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 14px;\"\u003eThe design\u003c\/div\u003e\n\u003cp style=\"font-size: 15px; line-height: 1.75; color: #44535b; margin: 0 0 14px;\"\u003eEvery Rotation coffee is a numbered edition. Hafi is No.__.\u003c\/p\u003e\n\u003cp style=\"font-size: 15px; line-height: 1.75; color: #44535b; margin: 0 0 14px;\"\u003eThe colour isn’t a description of the coffee. It belongs to the slot, not the bean — when Hafi retires, the rose goes back in the pool and the next coffee takes it.\u003c\/p\u003e\n\u003cp style=\"font-size: 15px; line-height: 1.75; color: #44535b; margin: 0;\"\u003eThe centre of the card is deliberately empty. It’s a canvas, and it’s waiting for an artist.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- ── 7 · WHY THIS COFFEE WORKS ────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 14px;\"\u003eWhy this coffee works\u003c\/div\u003e\n\u003cp style=\"font-size: 15px; line-height: 1.75; color: #44535b; margin: 0;\"\u003eA lot of this is elevation. At 1,715 metres the cherries ripen slowly, and that slow ripening is where the brightness and clarity come from. The anaerobic natural process adds the rest — the jammy sweetness and the syrupy depth. Bourbon keeps it balanced underneath. A light roast lets all of it reach the cup.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- ── 8 · BEST FOR ─────────────────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 14px;\"\u003eBest for\u003c\/div\u003e\n\u003cul style=\"list-style: none; padding: 0; margin: 0;\"\u003e\n\u003cli style=\"font-size: 15px; line-height: 1.75; color: #44535b; padding-left: 18px; position: relative; margin-bottom: 6px;\"\u003e\n\u003cspan style=\"position: absolute; left: 0; color: #8a969d;\"\u003e·\u003c\/span\u003ePour over and drip\u003c\/li\u003e\n\u003cli style=\"font-size: 15px; line-height: 1.75; color: #44535b; padding-left: 18px; position: relative; margin-bottom: 6px;\"\u003e\n\u003cspan style=\"position: absolute; left: 0; color: #8a969d;\"\u003e·\u003c\/span\u003eAnyone who takes their coffee black\u003c\/li\u003e\n\u003cli style=\"font-size: 15px; line-height: 1.75; color: #44535b; padding-left: 18px; position: relative;\"\u003e\n\u003cspan style=\"position: absolute; left: 0; color: #8a969d;\"\u003e·\u003c\/span\u003eDrinkers who lean toward bright, fruit-forward cups\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c!-- ── 9 · BREW METHOD CALLOUT ──────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 22px; padding: 18px 22px; background: #F7F7F5 !important; border-left: 2px solid #172B36 !important;\"\u003e\n\u003cdiv style=\"font-family: 'Cormorant Garamond',serif; font-size: 19px; font-weight: 600; color: #172b36;\"\u003eWe drink this one as pour over.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ── 10 · BREW INSTRUCTIONS ───────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin: 22px 0 14px;\"\u003eBrew\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 110px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eWater\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003e195–200 °F  (90–93 °C)\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 110px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eGrind\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003eMedium for drip, slightly coarser for pour over\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 110px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eRatio\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003e1:15 — 1 g coffee to 15 g water\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex !important; padding: 11px 0 !important; border-bottom: 1px solid #E7EAEC !important;\"\u003e\n\u003cdiv style=\"flex: 0 0 110px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: #8a969d; padding-top: 2px;\"\u003eTime\u003c\/div\u003e\n\u003cdiv style=\"flex: 1; font-size: 14px; color: #172b36;\"\u003e2:30 – 3:00\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cul style=\"list-style: none; padding: 0; margin: 18px 0 0;\"\u003e\n\u003cli style=\"font-size: 15px; line-height: 1.75; color: #44535b; padding-left: 18px; position: relative; margin-bottom: 6px;\"\u003e\n\u003cspan style=\"position: absolute; left: 0; color: #8a969d;\"\u003e·\u003c\/span\u003ePour slowly to keep the cup clean\u003c\/li\u003e\n\u003cli style=\"font-size: 15px; line-height: 1.75; color: #44535b; padding-left: 18px; position: relative;\"\u003e\n\u003cspan style=\"position: absolute; left: 0; color: #8a969d;\"\u003e·\u003c\/span\u003eDrink it fresh\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c!-- ── 11 · BREW TIPS ───────────────────────────────────────── --\u003e\n\u003cdiv style=\"margin-bottom: 44px;\"\u003e\n\u003cdiv style=\"font-family: Inter,sans-serif; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: #8a969d; margin-bottom: 14px;\"\u003eTips\u003c\/div\u003e\n\u003cul style=\"list-style: none; padding: 0; margin: 0;\"\u003e\n\u003cli style=\"font-size: 15px; line-height: 1.75; color: #44535b; padding-left: 18px; position: relative; margin-bottom: 6px;\"\u003e\n\u003cspan style=\"position: absolute; left: 0; color: #8a969d;\"\u003e·\u003c\/span\u003eWant more acidity? Drop the water temperature slightly.\u003c\/li\u003e\n\u003cli style=\"font-size: 15px; line-height: 1.75; color: #44535b; padding-left: 18px; position: relative; margin-bottom: 6px;\"\u003e\n\u003cspan style=\"position: absolute; left: 0; color: #8a969d;\"\u003e·\u003c\/span\u003eAfter more sweetness? Let it brew a touch longer.\u003c\/li\u003e\n\u003cli style=\"font-size: 15px; line-height: 1.75; color: #44535b; padding-left: 18px; position: relative;\"\u003e\n\u003cspan style=\"position: absolute; left: 0; color: #8a969d;\"\u003e·\u003c\/span\u003eDrink it black to get the full range.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c!-- ── 12 · ARTIST SLOT — reserved, Phase 2 ─────────────────── --\u003e \u003c!-- ARTIST SLOT — Rotation No.__ — reserved --\u003e\n\u003c\/div\u003e","brand":"Kanvas Coffee Roasters","offers":[{"title":"12 oz \\ 340 g","offer_id":64126247174513,"sku":null,"price":22.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0940\/2433\/5729\/files\/1_d30cc80e-9eea-484f-951b-d060cec30794.png?v=1783871206","url":"https:\/\/kanvascoffee.com\/products\/burundi-hafi","provider":"Kanvas Coffee Roasters","version":"1.0","type":"link"}