Should the primary key be the email or a generated id?
A surrogate id, with a unique constraint on the email. Natural keys change: people change emails, countries change codes, ISBNs get reissued. Every one of those becomes a cascading update across every table that referenced it.
Float or integer for prices?
Integer minor units, or a decimal type where the database has one. Floats cannot represent 0.10 exactly, so sums drift by cents and the drift shows up in reconciliation months later. Store 1099, format as 10.99 at the edge.
Database enum, lookup table or plain text?
A lookup table with a foreign key, unless the set is genuinely fixed forever. Database enums require a migration to add a value and cannot carry attributes; plain text accepts typos silently and then you have three spellings of the same status in production.
Any downside worth knowing before I commit?
It commits you to a format that is tedious to migrate away from later. The first weeks also look worse than doing nothing, which is when most people abandon it.