Why does the TOTP key use Base32 instead of Base64?
Because Base32 is case-insensitive and uses only 32 symbols with no ambiguous pairs like 0/O and 1/I/L, which matters when the key has to be typed by hand into an app, not just scanned from a QR code. Base64 is case-sensitive and includes + and /, symbols that make typing and reading aloud harder.
Is the example key JBSWY3DPEHPK3PXP safe to actually use?
No. It decodes to only 10 bytes, 80 bits, below the 128 bits RFC 4226 requires as the minimum for the shared secret. It is the RFC's own teaching example, built to illustrate the structure, not a key any real service should generate; serious services generate at least 160 bits (20 bytes).
Why does the TOTP code change every 30 seconds and not on every use?
Because RFC 6238 defines the counter as the current Unix time divided by 30 and floored, not an incrementing counter like plain HOTP (RFC 4226). That means the server and the app arrive at the same code independently, with no need to sync calls between them, as long as both clocks stay aligned.