as I understand it, it is possible but onerous to run 100% of the federation stuff yourself. The relays are expensive to operate, but definitely within reach for an enthusiast. I think that's a pretty acceptable approach to federation.
Right now I'm just running a PDS and I'm running the web app locally rather than using bsky.app.