<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jeremiah Say</title>
    <description>The latest articles on Forem by Jeremiah Say (@jeremiah_say).</description>
    <link>https://forem.com/jeremiah_say</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3923050%2F61710260-8b83-4c0e-8efc-5ae13f4ee31d.png</url>
      <title>Forem: Jeremiah Say</title>
      <link>https://forem.com/jeremiah_say</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jeremiah_say"/>
    <language>en</language>
    <item>
      <title>Building a zero-dependency carbon calculator platform — architecture decisions and why I rejected every framework</title>
      <dc:creator>Jeremiah Say</dc:creator>
      <pubDate>Sun, 10 May 2026 09:02:30 +0000</pubDate>
      <link>https://forem.com/jeremiah_say/building-a-zero-dependency-carbon-calculator-platform-architecture-decisions-and-why-i-rejected-2dpf</link>
      <guid>https://forem.com/jeremiah_say/building-a-zero-dependency-carbon-calculator-platform-architecture-decisions-and-why-i-rejected-2dpf</guid>
      <description>&lt;p&gt;When I started building GreenCalculus — a carbon calculator platform &lt;br&gt;
for sustainability officers and CSRD compliance teams — the first &lt;br&gt;
decision wasn't which framework to use. It was whether to use one at all.&lt;/p&gt;

&lt;p&gt;I chose not to. Here's why, and what I built instead.&lt;/p&gt;
&lt;h2&gt;
  
  
  The problem with frameworks for calculation tools
&lt;/h2&gt;

&lt;p&gt;Carbon calculators have a specific job: take a number in, multiply it &lt;br&gt;
by an emission factor, output a result in tCO₂e. That's it.&lt;/p&gt;

&lt;p&gt;The interaction model is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User selects fuel type&lt;/li&gt;
&lt;li&gt;User enters quantity&lt;/li&gt;
&lt;li&gt;User clicks Calculate&lt;/li&gt;
&lt;li&gt;Result appears instantly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is no routing. There is no global state. There is no component &lt;br&gt;
tree. There is no reason to ship 40kb of runtime to do three &lt;br&gt;
multiplications.&lt;/p&gt;

&lt;p&gt;React, Vue, and Svelte are excellent tools. They're the wrong tool &lt;br&gt;
for this job.&lt;/p&gt;
&lt;h2&gt;
  
  
  What "zero dependencies" actually means
&lt;/h2&gt;

&lt;p&gt;No npm. No bundler. No node_modules. No build step.&lt;/p&gt;

&lt;p&gt;The entire calculator is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One HTML file&lt;/li&gt;
&lt;li&gt;CSS in a &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; block&lt;/li&gt;
&lt;li&gt;JavaScript in a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; block&lt;/li&gt;
&lt;li&gt;Served directly from GitHub Pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A user on a slow 3G connection in a developing market — where carbon &lt;br&gt;
accounting is growing fastest — loads the calculator in under a second. &lt;br&gt;
There is nothing to parse except the page itself.&lt;/p&gt;

&lt;p&gt;This also means zero supply chain risk. No dependency vulnerabilities. &lt;br&gt;
No breaking changes from upstream packages. No &lt;code&gt;npm audit&lt;/code&gt; with 47 &lt;br&gt;
moderate severity warnings.&lt;/p&gt;
&lt;h2&gt;
  
  
  CSS @layer architecture
&lt;/h2&gt;

&lt;p&gt;The stylesheet uses the CSS &lt;code&gt;@layer&lt;/code&gt; cascade system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@layer&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives explicit control over specificity without fighting the &lt;br&gt;
cascade. &lt;code&gt;@layer base&lt;/code&gt; sets design tokens and resets. &lt;code&gt;@layer layout&lt;/code&gt; &lt;br&gt;
handles the 2-column dashboard grid. &lt;code&gt;@layer components&lt;/code&gt; styles &lt;br&gt;
individual UI elements. &lt;code&gt;@layer interactive&lt;/code&gt; handles state changes.&lt;/p&gt;

&lt;p&gt;The result: zero &lt;code&gt;!important&lt;/code&gt; declarations in the entire codebase.&lt;/p&gt;
&lt;h2&gt;
  
  
  Fluid typography with clamp()
&lt;/h2&gt;

&lt;p&gt;Every font size is fluid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;clamp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="err"&gt;25&lt;/span&gt;&lt;span class="nt"&gt;rem&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;3&lt;/span&gt;&lt;span class="nt"&gt;vw&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="err"&gt;75&lt;/span&gt;&lt;span class="nt"&gt;rem&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No breakpoint-based font size overrides. No separate mobile stylesheet. &lt;br&gt;
The layout responds smoothly across every viewport without a single &lt;br&gt;
media query for typography.&lt;/p&gt;

&lt;p&gt;The design brief calls for GreenCalculus to feel like a "premium &lt;br&gt;
scientific instrument." Fluid type that never jumps or breaks is part &lt;br&gt;
of that feel.&lt;/p&gt;
&lt;h2&gt;
  
  
  JetBrains Mono + tabular-nums for number stability
&lt;/h2&gt;

&lt;p&gt;This one is underrated. Carbon calculator outputs update in real time &lt;br&gt;
as users type. Without &lt;code&gt;tabular-nums&lt;/code&gt;, the result value shifts &lt;br&gt;
horizontally as digits change width — it looks broken even when the &lt;br&gt;
math is correct.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.result-value&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'JetBrains Mono'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;monospace&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-variant-numeric&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tabular-nums&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every digit is now the same width. The number is rock-steady during &lt;br&gt;
updates. On a platform where numerical precision is the entire value &lt;br&gt;
proposition, this matters.&lt;/p&gt;
&lt;h2&gt;
  
  
  2-column dashboard layout — inputs left, results right
&lt;/h2&gt;

&lt;p&gt;B2B sustainability tools are used by people who live in dashboards. &lt;br&gt;
The layout mirrors that mental model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.gc-calc&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Left panel: inputs (fuel type, quantity, reporting period).&lt;br&gt;&lt;br&gt;
Right panel: results (tCO₂e output, calculation breakdown, source).&lt;/p&gt;

&lt;p&gt;The user never loses sight of their inputs while reading the result. &lt;br&gt;
No scrolling required. No modal. No separate results page.&lt;/p&gt;

&lt;p&gt;On mobile it collapses to single column via one media query.&lt;/p&gt;
&lt;h2&gt;
  
  
  Logical properties for internationalisation
&lt;/h2&gt;

&lt;p&gt;All spacing uses CSS Logical Properties:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;margin-block-end&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="err"&gt;25&lt;/span&gt;&lt;span class="nt"&gt;rem&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;padding-inline&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="err"&gt;5&lt;/span&gt;&lt;span class="nt"&gt;rem&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of &lt;code&gt;margin-bottom&lt;/code&gt; and &lt;code&gt;padding-left/right&lt;/code&gt;. This is future-proofing &lt;br&gt;
for RTL language support (Arabic, Hebrew) without a single line of &lt;br&gt;
additional CSS. GreenCalculus will eventually serve markets where RTL &lt;br&gt;
is the default — the architecture supports it from day one.&lt;/p&gt;
&lt;h2&gt;
  
  
  The calculation engine
&lt;/h2&gt;

&lt;p&gt;The core formula for every GHG Protocol Scope 1 calculator:&lt;br&gt;
Emissions (tCO₂e) = Activity Data × Emission Factor × GWP&lt;/p&gt;

&lt;p&gt;In JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;FACTORS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fuelKey&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;factor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;annualKg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;kg&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;reportingPeriodFraction&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;annualTonnes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;annualKg&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire calculation. Three lines. No library needed.&lt;/p&gt;

&lt;p&gt;Emission factors come from UK DESNZ 2024. GWP values are IPCC AR6 &lt;br&gt;
GWP-100 — not AR5. The difference matters: fossil methane GWP is 29.8 &lt;br&gt;
under AR6, versus 25 under AR5. A 19% understatement if you're using &lt;br&gt;
old values.&lt;/p&gt;

&lt;p&gt;The full open dataset is published separately:&lt;br&gt;&lt;br&gt;
→ &lt;a href="https://github.com/greencalculus/greencalculus-methodology" rel="noopener noreferrer"&gt;greencalculus/greencalculus-methodology&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Precision and rounding rules
&lt;/h2&gt;

&lt;p&gt;Raw outputs are computed to full floating-point precision. Rounding &lt;br&gt;
is applied only at the display step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;annualTonnes&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;annualTonnes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;// results &amp;gt;= 1t: 2 decimal places&lt;/span&gt;
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;annualTonnes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// results &amp;lt; 1t: 4 decimal places&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never round intermediate values. Always round display values. This &lt;br&gt;
is the GHG Protocol precision standard applied in code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would use a framework for
&lt;/h2&gt;

&lt;p&gt;To be clear: this isn't a framework vs no-framework manifesto. &lt;/p&gt;

&lt;p&gt;I would use React or Vue for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A multi-step emissions inventory wizard with complex state&lt;/li&gt;
&lt;li&gt;A comparison tool pulling live data from multiple APIs&lt;/li&gt;
&lt;li&gt;A reporting dashboard with filterable tables across 15 Scope 3 categories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a single-purpose calculation tool with one input → one output, &lt;br&gt;
Vanilla JS is the correct choice. Match the tool to the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Live demo
&lt;/h2&gt;

&lt;p&gt;The Scope 1 stationary combustion calculator is live on GitHub Pages:&lt;br&gt;&lt;br&gt;
→ &lt;a href="https://greencalculus.github.io/greencalculus-calculator-demo/" rel="noopener noreferrer"&gt;greencalculus.github.io/greencalculus-calculator-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source is open — MIT licensed:&lt;br&gt;&lt;br&gt;
→ &lt;a href="https://github.com/greencalculus/greencalculus-calculator-demo" rel="noopener noreferrer"&gt;greencalculus/greencalculus-calculator-demo&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;The platform is still being built. This is the first calculator of &lt;br&gt;
many. If you're working in sustainability tech or have questions on &lt;br&gt;
the GHG Protocol methodology, I'm happy to discuss in the comments.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>sustainability</category>
      <category>css</category>
    </item>
    <item>
      <title>Why most carbon calculators are using the wrong methane GWP value (and how to fix it)</title>
      <dc:creator>Jeremiah Say</dc:creator>
      <pubDate>Sun, 10 May 2026 08:58:19 +0000</pubDate>
      <link>https://forem.com/jeremiah_say/why-most-carbon-calculators-are-using-the-wrong-methane-gwp-value-and-how-to-fix-it-910</link>
      <guid>https://forem.com/jeremiah_say/why-most-carbon-calculators-are-using-the-wrong-methane-gwp-value-and-how-to-fix-it-910</guid>
      <description>&lt;p&gt;If your carbon calculator uses a GWP-100 value of 25 for methane, it's out of date by one full IPCC assessment cycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;The IPCC Sixth Assessment Report (AR6), published 2021, updated GWP-100 values significantly:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gas&lt;/th&gt;
&lt;th&gt;AR5&lt;/th&gt;
&lt;th&gt;AR6&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CH4 (fossil)&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;29.8&lt;/td&gt;
&lt;td&gt;+19.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CH4 (biogenic)&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;27.9&lt;/td&gt;
&lt;td&gt;+11.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;N2O&lt;/td&gt;
&lt;td&gt;265&lt;/td&gt;
&lt;td&gt;273&lt;/td&gt;
&lt;td&gt;+3.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SF6&lt;/td&gt;
&lt;td&gt;23,500&lt;/td&gt;
&lt;td&gt;25,200&lt;/td&gt;
&lt;td&gt;+7.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a company with significant natural gas combustion, refrigerant leaks, or agricultural emissions, the difference between AR5 and AR6 is not cosmetic. It's a ~19% understatement of methane-related emissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it hasn't been fixed widely
&lt;/h2&gt;

&lt;p&gt;The GHG Protocol Corporate Standard permits either AR5 or AR6. Most tools defaulted to AR5 when they launched and haven't updated. Many sustainability teams don't know which GWP basis their tools use — it's rarely displayed prominently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fossil vs biogenic methane means
&lt;/h2&gt;

&lt;p&gt;AR6 distinguishes two GWP values for CH4:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fossil CH4 (29.8)&lt;/strong&gt; — use for natural gas combustion, coal mining fugitives, oil &amp;amp; gas fugitive emissions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Biogenic CH4 (27.9)&lt;/strong&gt; — use for landfill gas, agricultural emissions, managed biological processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most tools use a single CH4 value and don't distinguish. This is technically incorrect under AR6.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check your tools
&lt;/h2&gt;

&lt;p&gt;Look for a "methodology" or "about" page on any carbon calculator you use. It should state:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which IPCC assessment report the GWP values come from&lt;/li&gt;
&lt;li&gt;Whether fossil and biogenic CH4 are treated separately&lt;/li&gt;
&lt;li&gt;The source for emission factors (DESNZ, EPA, IPCC 2006, etc.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If it doesn't disclose this, treat the output with caution.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;I'm building &lt;a href="https://greencalculus.com" rel="noopener noreferrer"&gt;GreenCalculus&lt;/a&gt; — a platform for carbon accounting calculators — and published the full AR6 GWP dataset openly on GitHub:&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://github.com/greencalculus/greencalculus-methodology" rel="noopener noreferrer"&gt;greencalculus/greencalculus-methodology&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;data/gwp-values.json&lt;/code&gt; file has all 16 gases with AR5 and AR6 values side by side so you can audit your own tools. The &lt;code&gt;METHODOLOGY.md&lt;/code&gt; explains exactly how we apply the GHG Protocol hierarchy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Live demo
&lt;/h2&gt;

&lt;p&gt;Scope 1 stationary combustion calculator using correct AR6 values, zero dependencies:&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://greencalculus.github.io/greencalculus-calculator-demo/" rel="noopener noreferrer"&gt;greencalculus.github.io/greencalculus-calculator-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built in Vanilla JS — no frameworks, no bundler, ~300 lines. The calculation is:&lt;br&gt;
Emissions (tCO₂e) = Activity Data × Emission Factor × GWP&lt;/p&gt;

&lt;p&gt;Where GWP = 1 for factors already expressed in CO₂e (most fuel factors are pre-multiplied), and the AR6 value for raw gas quantities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Check your GWP basis. If it says 25 for CH4, update it to 29.8 (fossil) or 27.9 (biogenic). Your Scope 1 inventory depends on it — and so does your CSRD disclosure.&lt;/p&gt;

&lt;p&gt;The full open dataset is free to use and cite:&lt;br&gt;
→ &lt;a href="https://github.com/greencalculus/greencalculus-methodology" rel="noopener noreferrer"&gt;github.com/greencalculus/greencalculus-methodology&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sustainability</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>carbon</category>
    </item>
  </channel>
</rss>
