Notes on data, nonprofits & the tools we build to make sense of them.
Field reports from the intersection of public-interest data, automation, and the command line — science and nonprofit work alike, written up with the math, the code, and the diagrams left in.
Stop renting what you can own: a nonprofit back office on free tools
Small nonprofits quietly bleed donor and grant money on SaaS subscriptions they don't need, while free tiers from Vercel, Supabase, Firebase, and Google Apps Script would do the same job and leave them owning the infrastructure. A field guide to building your own digital footprint for near zero.
Latest
How to actually vet a charity before you donate
A donor's guide to the four numbers on a Form 990 that actually tell you whether a charity is run well — where to find each one, what a healthy range looks like, and the trap hiding in every one of them.
501(c)(3) vs (c)(4) vs (c)(6): what the letter after the number means
A plain-language guide to the three tax-exempt types you actually run into — the charity, the advocacy group, and the trade association — and what each one can and can't do with your money, your donation deduction, and an election.
The colors on the palette are energy-level gaps: engineering pigments for permanence
A tube of paint is an electronic-structure problem plus a scattering problem, perceived by an eye. This post builds the mechanism-first taxonomy of color — conjugated π-systems, ligand-field d–d transitions, charge transfer, and semiconductor band gaps — leading with the modern synthetic pigments engineered to fix the lightfastness failures of their historic ancestors, then puts absorption and scattering back together with Kubelka–Munk.
How much does correlation really cost? The correlation gap in water, measured
The Hartree–Fock post drew its correlation-gap figure schematically. This post runs the actual calculations — RHF marched up a basis-set ladder to its limit, MP2 and CCSD(T) below it — and reports what electron correlation costs, in hartrees, for one bent molecule of water.
One matrix element, two experiments: molar absorptivity and the Pockels effect
A companion to the molar-absorptivity post. The absolute height of an absorption band, the refractive index, and the electro-optic coefficient of a poled material are three readouts of one quantity — the transition dipole. Normalizing every spectrum to 1 throws that quantity away. This traces the same matrix element from Beer's law through the two-level model to the Pockels effect, with worked numbers.
Molar absorptivity is a rate constant in disguise
The molar absorptivity in Beer's law looks like a static property of a molecule — a number you read off a table, like a melting point. It is not. The integrated absorption band is proportional to the same transition dipole that fixes the spontaneous-emission rate, so an absorption measurement quietly measures a lifetime. This post follows the chain from Beer's law to the Einstein coefficients and shows why weak absorbers are always slow emitters.
Hartree–Fock and the correlation gap: where the orbital energies come from
A water molecular-orbital diagram quotes orbital energies as if they were just there to be read off. This post derives the ground-state machinery — the Hartree–Fock equations, their self-consistent solution, Koopmans' theorem, and the correlation energy that the mean field leaves behind — that actually computes them.
Reading water off the page: geometry, orbitals, acidity, and spectra
Water is the most familiar molecule and one of the strangest. This post builds it up from the bottom — where the atoms sit, what the electrons do, why it is both an acid and a base, and how it talks to light.
How grants.noprofits.org works: tracing federal money through a live graph
A walk through the live tool at grants.noprofits.org — pulling a federal grant-flow graph straight from USAspending.gov, enriching it with ProPublica 990 data, and the decisions (sub-agency grouping, name normalization, proximity-first trimming, a fuzzy-match gate, fiscal-year-normalized taxpayer ratios) that keep it honest.
Astro, Apps Script, and Firebase: how site.noprofits.org is built
A factual tour of the noprofits-web-engineering stack — a static Astro site on Firebase Hosting, a Google Apps Script standing in for a backend, and a keyless GitHub Actions deploy. Architecture, configuration, and data flow, with diagrams.
The anatomy of a Hakyll site, line by line
A complete reference for the Haskell that builds this blog — the package layout, the Hakyll rule set, contexts, feeds, the Pandoc compiler with citations and math, the build-time TikZ filter, and the templates — presented as numbered code blocks with a detailed explanation of each.
What are cloud functions? A practical tour with real code
A from-scratch explanation of what cloud functions actually are, the problem they solve, and three real-world examples — an image-resize trigger, a scheduled report, and a webhook handler — written in JavaScript, Python, and Go with line-by-line explanations of what each function does.
gcloud, Firebase, and why I keep paying for a Workspace account
A working tour of Google Cloud and Firebase — what each one actually is, where the line between them sits, how they integrate through a shared project and IAM, and why a paid Google Workspace account ends up being the quiet keystone that ties it all together.
The Met API has no random button
A year ago I shipped a one-button "random artwork" toy on top of the Met Museum API. It has since grown into a four-screen app — and the interesting part is what you do when the API you're randomizing over has no way to hand you something random. Manufacture it. And once you can manufacture randomness, a deterministic "artwork of the day" falls out for free.
A citation, a slot, and the line nobody plots
What a food bank's tax return actually says
Running my day job on Claude Code — an agent architecture for non-software work
My day job isn't writing software — it's coordinating insurance-restoration jobs, which is document-heavy and relentlessly repetitive. Over a few months I built a system of Claude Code agents around that workflow. This is the architecture, the decisions that made it hold together, and what I'd change.
Reading the source — the circuitikz behind four schematics
A follow-up that opens up the four circuits from the previous post and shows the circuitikz source for each — the RC low-pass filter, the series RLC, the inverting op-amp, and the full-wave bridge rectifier — line by line.
Hardening the open CORS proxy — allowlists, SSRF guards, and the bypass I almost left behind
A year after building an open serverless CORS proxy, I closed the open-relay hole it had become — target and origin allowlists, SSRF guards, a resilience layer — and learned a sharp lesson about a forgotten debug endpoint that Vercel was still routing.
A light wave from Maxwell's equations, rendered in pure TikZ
Deriving the electromagnetic plane wave from Maxwell's equations, then drawing it with build-time TikZ — and the Haskell pipeline rebuild (lualatex + dvisvgm) that finally renders its transparency.
Schematics that compile — circuit diagrams in pure TikZ
Teaching the build-time TikZ pipeline to draw electrical schematics with circuitikz, demonstrated with four classic circuits — an RC filter, a series RLC, an inverting op-amp, and a full-wave bridge rectifier.
Quantum Tunneling Workflow for Hydrogen Peroxide - PES Scans, kappa Corrections, and Instanton Integration
An ACS-style, AI-authored workflow note that couples a relaxed PES scan with semiclassical tunneling corrections and an i-PI ring-polymer instanton sketch, including charts, tables, and runnable code.
Two barriers, one tunnel: the hydrogen peroxide torsion, recomputed
The original version of this post validated its H2O2 torsional barrier against the wrong experimental number and reported tunneling corrections from code that assumed its own conclusions. Recomputed from scratch — a fresh MP2/cc-pVTZ relaxed scan, the periodic torsional Schrödinger equation solved on the resulting potential, and transmission through the barrier that actually matters — with the tunneling splitting checked against sixty years of far-infrared spectroscopy.
Visual Process Documentation - Measuring Efficiency Through Domain Crossing Analysis
A simple methodology for documenting and measuring process efficiency by visualizing the movement between digital and physical work, with practical applications for office workflow optimization.
Building a Random Art Generator with the Met Museum API and a Serverless CORS Proxy
Taking a break from science to explore art and technology with a web application that makes the Metropolitan Museum's collection accessible through a custom-built CORS proxy solution.
Building a Serverless CORS Proxy with Vercel - Simplifying Cross-Origin Requests
A practical exploration of building a serverless CORS proxy using Vercel's serverless functions, offering an elegant solution to the common cross-origin resource sharing challenges faced by frontend developers.
Building a Spreadsheet-Based API Tool with Google Sheets
How to leverage Google Sheets and Google Apps Script to create a powerful data retrieval system that connects to external APIs, demonstrating capabilities beyond what free Excel Online can offer.
Three exact solutions and one inequality: quantum chemistry's ground floor, computed
The particle in a box, the harmonic oscillator, and the hydrogen atom are the only systems in quantum chemistry you can solve with pen and paper — which makes them the only place you can hold your numerics fully accountable. Every figure here is computed, every number is checked against its closed form, and a psi4 basis ladder shows the one atom where Hartree–Fock is the whole answer.
Understanding the Virial Equation - A Systematic Taylor Expansion of the Ideal Gas Law
An exploration of how the virial equation emerges as a Taylor expansion of the ideal gas law, providing a systematic way to account for molecular interactions in real gases.
Visualization of Compression Factor Behavior in Real Gases - A Virial Equation Approach
A computational exploration of how compression factors vary with temperature and pressure for common gases, demonstrating the transition between attractive and repulsive molecular interaction regimes.
Determination of SI Units for Magnetic Interactions in Quantum Mechanical Calculations
A systematic derivation of the SI units involved in magnetic interactions at the quantum level, focusing on the correct dimensional analysis of magnetic moments, fields, and coupling constants.
Automating IRS Form 990 Data Extraction - A Computational Approach to Nonprofit Financial Metrics
A programmatic approach to extracting and analyzing financial metrics from IRS Form 990 filings, enabling the calculation of program efficiency and fundraising efficiency for United Way Worldwide across multiple years.
Programmatic Retrieval of IRS Form 990 Data - A Browser Automation Approach
A practical methodology for programmatically retrieving nonprofit financial data from Form 990 XML filings using browser automation techniques.
Setting Up a Comprehensive Quantum Chemistry Environment on Linux
A detailed guide for establishing a versatile computational chemistry environment on Linux systems with instructions for package installation, environment configuration, and remote access setup.
Mapping the IRS Form 990 Data Repository - A Computational Approach to Nonprofit Data Discovery
A computational approach to mapping the structure of the IRS Form 990 data repository, identifying indices and file relationships to enable targeted retrieval of nonprofit financial data.
Computational Extraction of Financial Metrics from IRS Form 990 Data Using ProPublica's Nonprofit Explorer API
A computational approach to extract financial metrics from IRS Form 990 filings using ProPublica's Nonprofit Explorer API, addressing challenges in data format variability and availability, with application to nonprofit evaluation.
AI Assisted Computational Tools for TDDFT Analysis of Chromophores Supplemental Information
A suite of Python-based computational tools for efficient geometry optimization, TD-DFT calculations, and spectral visualization of chromophores, providing a systematic approach to predicting electronic transitions and optical properties.
AI Assisted Computational Tools for Time-Dependent Density Functional Theory Analysis of Chromophores
A suite of Python-based computational tools for efficient geometry optimization, TD-DFT calculations, and spectral visualization of chromophores, providing a systematic approach to predicting electronic transitions and optical properties.
Mathematical Frameworks and Basis Sets in Excited State Calculations
A comprehensive explanation of the mathematical principles underlying excited state calculations, including TD-DFT, EOM-CCSD, ADC, and CASSCF methodologies, as well as detailed discussions on basis set selection, computational considerations, and practical applications.
Comparative Analysis of TD-DFT Functionals for Formaldehyde Excited States
A systematic comparison of different DFT functionals for predicting formaldehyde excited states, revealing significant variations in excitation energies and oscillator strengths across methods.
Modern DNS Analysis on macOS - Beyond nslookup
A comparative analysis of traditional and modern DNS query tools on macOS, with practical examples and insights for network administrators and security professionals.
AI-Powered Non-Profit Transparency - Comparing Modern Tools for Financial Analysis
A comparative analysis of AI search tools in extracting and analyzing non-profit financial data, with practical applications for donors and stakeholders seeking transparency.
PowerShell Command Line Fundamentals - A Structured Learning Approach
A methodical introduction to PowerShell fundamentals with structured experimental procedures and evaluation of command functionality.
Polarizability Trends in Carbon-Chalcogen Diatomic Molecules - A Computational Study
A systematic computational investigation of polarizability in diatomic molecules formed between carbon and Group 16 (O, S, Se, Te) elements, with analysis of geometry-optimized structures and higher-order electronic properties.
Polarizability Trends in Group 14-16 Heteronuclear Molecules - A Computational Study
A systematic computational investigation of polarizability trends in diatomic molecules formed between Group 14 (C, Si, Ge, Sn, Pb) and Group 16 (O, S, Se, Te) elements, showcasing the power of automation and open-source computational chemistry tools.
Mathematical Framework for Hyperpolarizability Calculations
A detailed explanation of the mathematical principles underlying hyperpolarizability calculations
Quantum Chemical Calculations of Hyperpolarizability - Setup and Initial Results
A detailed walkthrough of setting up computational environment for calculating hyperpolarizabilities of Group 4A elements
Calculating Atomic Polarizabilities of Group 14 Elements Using Psi4 - A Finite Field Approach
An experimental study calculating polarizabilities of Group 14 elements using Psi4's finite field method, with results for C, Si, and Ge, and insights into limitations for heavier elements.
Network Path Analysis - Evolving Network Diagnostics for the Modern Security Landscape
Network Path Analysis - Evaluating Diagnostic Tools in Security-Hardened Modern Networks
A modern networking laboratory exercise for Mac users exploring ICMP protocols and network diagnostics
Unraveling Radioactive Decay - A Journey Through Half-Lives
Big-O Analysis of an Algorithm Segment
Deriving the Inverse of a 2x2 Matrix
No Integer Solutions for 2x² + 5y² = 14
Proving the Irrationality of ∛2
Tiling a 10x10 Checkerboard with Straight Tetrominoes - An Impossibility Proof
No Small Perfect Cubes as Sums of Two Cubes
Proving the Inequality n² + 1 ≥ 2ⁿ for n = 1, 2, 3, and 4
Chemical Kinetics of H₂O₂
No posts under this topic yet.