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.
Is a deleted_at column a good idea?
It is, provided every query filters on it, which is the part that fails. A partial index plus a view is the version that survives:
CREATE VIEW active_users AS SELECT * FROM users WHERE deleted_at IS NULL;
CREATE INDEX users_active_idx ON users (id) WHERE deleted_at IS NULL;
Then application code selects from the view and forgetting the filter becomes impossible rather than merely discouraged.