This was helpful and validated the direction I was headed with it! I am working from a fork of bluesky-social/pds at https://github.com/sfeldkamp/cloudron-bluesky-pds.
Current status is that it's running! I can add invite codes through the app's web terminal with goat CLI. I can register a user account on the PDS and post, reply, like, and follow from it. These all are pushed to the Bluesky firehose and can be seen in the Bluesky App by other accounts.
Still to be debugged / tested:
Newly created account on the PDS shows "Invalid Handle" warning in Bluesky App.
Account migration with goat CLI to the PDS from a bsky.social PDS.
Account migration with goat CLI from the PDS back to bsky.social PDS.
General soak test to feel comfortable that all parts of the PDS are working correctly.
I have some time off later this week, so I think I can make progress with these things.