Here’s an example of Discourse being used this way: Job Postings - Open Source Design / Jobs - Jobs
You can enforce adding a category to the topic by disabling the allow uncategorized topics
setting.
Like the above example, you could give topics in a category a more defined structure by using templates. See Topic templates for categories and other alternatives for more info.