So not a weekend project but not crazy hard. Probably still rules it out for my hobby apps.
The hardest part of dealing with the Passkeys was remembering to read the whole specification before implementing it -- I spent a lot of time parsing their CBOR/COSE-based specification so that I could get the public key before "discovering" that there was a method for that defined by the specification.
[0] https://github.com/rkeene/saml-idp/blob/master/lib/saml/saml...