configuration for a security architecture I call "CRE8.pw" and which I already have numerous working prototypes built for, but now I want to create something from the ground up that is first centered on getting an architecture structured to support a functional mvp that provides a dual-surface ownership/authorship architcture. it works like this at its base level: an Owner can purchase an account, which allows them to sign up with a username, email address, and a password. they are strongly instructed to then use a minimum of three different devices on three separated different trusted networks to initialize their account in the most secure way, to avoid problems that could come from any one of those networks or devices being compromised. it is strongly instructed to use five different devices to receive their keys (one device for each of the private keys, and one device to have all their public keys sent to) so that they can overcome the obstacle which could happen when their personal devices get hacked or get a keylogger installed on them. it's a one-time instantiation, unless a public or private key becomes compromised, then the user may rotate/refresh their keypair and instantiate it again with separate devices. the point of using separate devices is not to store the key on each separate device, but to have different places to send it to from the Owner dashboard during account instantiation, and then from those devices the user reads their keys and enters them into whichever device they want to authorize to use their account. later on, a hardware key similar to how cryptocurrency hardware keys work will be implemented and available for people who don't want to use 5 different devices, but for now this is the most secure way to keep our separation of concerns and blast radius minimal. it is possible for a person to choose to just generate and send all their keys to the same email address on the same phone on the same network. the risk is the user's to assume at that point. CRE8 handles all the security up to the client, and this is our approach for the best total security is to strongly instruct to use 5 seaparate devices, but we understand it is not required for every user in every use case, so it is not a forced part of the architecture. our CRE8 system is designed with numerous separated areas of concern, and we handle this by the use of a 4-Keypair "credential payload" plus a "credential id Key" to complete the payload, for a total of nine API Keys which are generated for each standard system "Key." each private/public keypair is designated for specific tasks, and the idea is that if one gets compromised in any way, the bad actor would not gain total account takeover access, and there would be natural, automatic, and manual clamps that would be applied, before detection and upon detection of a breach. your job is to describe the smallest footprint possible with the smallest tech stack possible to bring this idea to work as a smallest possible minimum viable product which actually allows for the system to work as described: an Owner account creates Primary Author Keys. an Owner account has System Administrator (or) Tenancy Admin access to view provenance, history, activity, details, alerts, and all available data about all the Keys they create and which are created by the Keys which they created. the Owner account is the only non-API user. the first Owner account is the System Admin Owner, and can create new "paid" Owner accounts without them actually needing to pay, and these are called "gift" Owner accounts. the "paid" and "gift" designations are totally internal and never used in any user-facing text or structure or benefit. most of the first set of Owner accounts will be Gift accounts, while I get the system going. a minted Primary Author Key is given a set of system permissions almost on the same level as tenancy permissions. these permissions form the base of an entire system of authentication, authorization, credentials, sharing, and communications. we are not going to use a KMS. we want to keep everything as simple as possible, though argon2id and other dependencies are good as needed. the permissions which an Owner gives to a Primary Author Key cascade into the hierarchy of Keys which can be minted by each Primary Author Key afterwards, including: additional Primary Author Keys, Secondary Author Keys, Use Keys, and Keyring Keys. the frontend will be simple, using alpine.js and htmx for the ui and frontend/backend interactions. we need to first figure out everything up to this point, before moving forward. give me 5 suggestions and a "most best" one that you like, for how to structure and arrange and approach and solve all this. also produce a long exhaustive tiered list of suggested permissions which should be set by the Owner when minting a new Primary Author Key, including all the individual levels of permissions for each of the successive Keys that the Primary Author Key mints, which they may then go on to mint. these are indeed all concerns, but not all of our concerns are technical, so be sure to think outside the box and within established norms as you are determining what is important to report: schema and migration; Owner/parent-authorized enrollment; client Ed25519 key generation; non-exportable private-key persistence; public JWK registration; single-use challenges; server signature verification; proof-bound sessions and requests; replay protection; rotation and overlap; extension UI; tests and documentation. these are indeed considerations, but not all of our considerations are definite, so feel free to add, remove, and modify what is here as you consider what is important to study and remember: PHP monolith postgresql Server-rendered HTML htmx Alpine.js Argon2id Ed25519 HTTP Message Signatures One tiny local key-ceremony application Caddy or another minimal TLS reverse proxy SMTP for verification, recovery, and alerts possible dependencies: "php": "^8.5", "slim/slim": "^4.14", "slim/psr7": "^1.7", "php-di/php-di": "^7.0", "firebase/php-jwt": "^6.11", "ext-pdo": "*", "ext-sodium": "*", "respect/validation": "^2.4", "vlucas/phpdotenv": "^5.6", "guzzlehttp/guzzle": "^7.10", "neomerx/cors-psr7": "^3.0", "monolog/monolog": "^3.9", "symfony/rate-limiter": "^7.3", "symfony/cache": "^7.3" these are indeed immutables: The server should store: Owner authentication records. Credential IDs. Public keys. Parent/child relationships. Signed grants. Effective permissions. Revocation and rotation status. Audit history. Replay-prevention records. Alerts. The server should never persist CRE8 private keys.