I don't understand how something can be a frontent for Mastodon.
Mastodon is an ActivityPub client.
If you write a new application from scratch that also uses the ActivityPub protocol, like Pinafore, it is not a frontend for Mastodon. It is another ActivityPub client, right?
I think this is where the confusion stems from, the way I understand it:
Mastodon is a server that implements the federation part of the ActivityPub protocol to exchange objects with compatible server software.
It has functionality which exceeds the ActivityPub client-to-server protocol,
which it doesn't implement, and opts to instead have its own client API. [1]
So if you were to write an application using the ActivityPub C2S protocol,
you could not directly communicate with a Mastodon server,
but could interact with objects created by a Mastodon server through
another server software implementing both the federation and C2S protocol.
So in that sense they are Mastodon frontends because they probably use the Mastodon specific API instead of the ActivityPub C2S protocol.
Here is for example a list of implementations which includes whether the client-to-server protocol is supported [2].
So as I understand it, Mastodon is a Ruby on Rails web server that speaks to other instances using the ActivityPub protocol in a technical sense.
You register with a given Mastodon instance which speaks ActivityPub to other servers which may or may not be Mastodon instances as well.
Now your home Mastodon instance also serves a React frontend which is technically acting as an OAuth2 client that speaks to the backend via REST APIs, compared to say: Server-side rendered HTML
Similarly, mobile apps connecting to your preferred instance are also OAuth2 clients.
In that sense, you can use a different frontend to speak directly to the REST APIs offered by your Mastodon instance of choice.
This all being one level above ActivityPub itself of course.
If I register with a Mastdodon instance, then why do I need a "home Mastodon instance"? Wouldn't I just use the web frontend the instance I registered with provides?
Your content is federated but your account is not so in order to actually perform actions, you need to make calls back to your home instance.
In a literal sense, your username and password / authentication tokens live on that server and is unknowable to other servers.
You might imagine that if there was federation of accounts than any random user could simply eat up passwords/password hashes.
That said, you can presumably use any client as long as it uses the APIs of the home instance.
You can browse other instances and do a remote follow however where that instance calls back to your home instance to initiate the follow action but it requires you telling the remote server what your full ID is (@Timja@home.instance) so it knows where to call back to
No, it's incredibly difficult to style Mastodon beyond minor CSS additions via the admin panel. If you really want to change anything substantial you need to fork the entire project.