This project actually isn't as bad as the board I had shown on that page, but still - proper tools are absolutely required for such a build. Like a stereo microscope.
Paste applied manually:
I spared the GNSS and the little BGA. The BGA doesn't need paste and I wanted to do the GNSS with low temp paste after testing everything else.
After soldering everything on my stove top:
Now the BGA. Added some tacky flux to the PCB with a brush, placed BGA and added a small inductor on top for extra weight:
After that was done I could test the BGA / magnetometer. I could measure the clamping diodes on SCL and SDA, and proceeded to run a little arduino test to see if it was working. Fortunately, there's a library with an example sketch for the MMC34160PJ so that was easy.
Next: ZOE-M8Q. I placed some paste on the PCB frame and picked it up with my soldering iron with a fine tip to pre-tin all pads. Then clean, add flux and level with hot air plus a few touch ups here and there for this result:
Clean again, add tacky flux, place GNSS and reflow at 220° C:
I have made two layouts, one for 2 layer PCBs and one with 4 layers. There's not a huge difference, but power supply is a bit better with 4 layers.
Here's a 3D view:
The schematic is pretty simple since the design is pretty much just a breakout board for the two chips (power supply, magnetometer with I2C and pull-ups, GNSS with UART), so I'll leave that out for now. It will be included in a repo later on.
The I2C pull-ups are in the top left corner and can be disabled with a sharp knife, between the two dashed lines.
The chips operate at 3.3V nominal and the NCP160 regulator can provide these from a 5V rail. However, since the NCP160's dropout voltage is extremely low, the supply can even come from a 3V3 rail and nobody would notice. There was even enough space for a reverse polarity protection diode.
An LED was added to indicate that a fix was found (ZOE-M8Q's timepulse output).