I've received the latest batch of LNA boards, this revision has a few updates, and I've shipped out orders for 5 of them so far.
Notable new features:
- Metal EMI shield over the 1st gain stage circuit, clipped on to allow rework/modification
- Threaded BNC connectors for easy panel mounting and better shielding
- Negative input warning LED
- Protection against swapped inputs/outputs (accomplished through rework)
- Wire pads for easy gain switch installation
New board with EMI shield

EMI shield clip close-up

New Board with EMI shield removed

Bottom side rework and labelling

Fully enclosed unit. This one has a custom 0.1-100Hz bandwidth for someone interested in using it to measure small 60Hz signals.
The red LED on the left lights up if the LNA is powered on and the DC input voltage goes below -10mV.
The input protection limits the current to ±2mA, which buys me some time when I inevitably hook up my input backwards!

The new Hammond 1590Y enclosure fits everything nicely. The foam keeps the battery from rattling around, a good re-use of the packaging these PCB's came in.
The threaded BNC connectors make mounting the board much simpler.

In past revisions I definitely stressed input protection, since having such a large input capacitor paired with low input impedance is a recipie for trouble. However, I neglected to protect the signal outputs from any accidental connection to DC sources of up to +30V. With past revisions that would surely damage or completely destroy the LNA. On these boards I reworked some series resistors and TVS diodes on the bottom side of the board. These limit and clamp any injected current, and they do not significantly change any output characteristics when used with 1MΩ scope inputs.
x250 output protection: Series 4.99kΩ 1206 resistor and a TVS diode:

Main output protection: 2kΩ series resistor. The DC blocking cap also helps with protection.

Since I had a few orders for these boards, I wrote an automated test script so that every LNA would be fully and consistently tested before I shipped them out. It checks gain at input current, gain at 1Hz, shorted-input noise floor, and it does an FFT based frequency response measurement. Below is a frequency response measurement example. I know the lines are fuzzy, and that immediately makes all of us noise-freaks think that there is something fishy going on, but that's just part of this FFT method I'm using!!!

Here is how the FFT method I use works:

I use my RTB2004 to record the un-attenuated signal generator output and the LNA outputs. The signal generator output starts at 0V, then steps to +4V halfway through the capture. I take each channels time-domain data and use python to calculate the FFT of each. Then I divide the magnitude of each output by the magnitude of the input, and I get a pretty good frequency response plot! However, since the input function I'm using is just a step function, it does not have much energy in the higher frequencies, and I quickly run into the noise floor of my scope. I actually do two of these captures, one with a 180 second capture time, and one with a 6 second capture time. This covered the 0.1Hz to 10Hz range well, but you definitely can see lots of fuzz up near 500Hz.
I use this method because it is much faster than injecting one sine wave at a time and measuring the gain. That takes hours at these low frequencies, but only a few minutes with this method. For me that's well worth a little fuzz on the resulting plots. I am working on some more advanced excitation signals to try and get cleaner results. I've tried a sin(x)/x input, and that cleaned up the higher frequencies, but at the expense of the low frequencies. One promising input signal is a sum of approximately log-spaced input frequencies. If each input frequency is a multiple of some base frequency, then the pattern repeats cleanly and can be loaded as an arbitrary waveform in my signal generator. Focusing the spectral energy on a log spaced of points could result in a group of clean data points that would make a good bode plot, but it leaves a lot of points with no energy, so those would have to be removed from the plot to keep it clean. Anyways, I will share how that goes if I get around to it!