1. How can I make a new record request demand a choosing of project type?
One thing: script the creation of a new record; another: validate the type field on not IsEmpty (and possibly member of a value list, if you'd encode your allowed types in a value list), and disallow user override.
This means that even if someone creates a record via menu or shortcut, that record will be deleted again (reverted) if no allowed type is provided (validation fails).
Of course, even better would be to not create an invalid record in the first place, so if you have FM Advanced consider creating a custom menu where the New Record functionality is tied to a script (this impacts toolbar button, shortcut, menu command … ) that prompts for a type before creating that new record.
2. How can I make the project always open with the right layout?
Possibly by not creating different layouts at all. You can use the Hide if feature to good effect to hide entire groups of fields and objects if, say, Project::type ≠ theCorrectType.
Another would be to use the Project table merely as a “front-end” that has only the attributes (fields) common to all projects, and implement the different attributes in another table. This way you would only see the correct attributes (related records) because you created them, provided you have a way to constrain the attribute selection to the correct types.
That may be a bit advanced, though, so if you do create one layout per type, the simplest way is to use a consistent naming scheme. If your layouts are named, say, Layout_Visa, Layout_Property etc., all you need is a script with the step
Go to Layout [ by calculation: Layout_" & Project::type ]
and attach that to an OnRecordLoad script trigger.
3. I also want an easy way on each project of 'attaching' it to a client.
This simply means: in the Project table, create a foreign key field for the client and write their ID into it. You could also create the client and script the creation of a new project of type <prompt for type> for client <id of current client> – another way to assure that every project has the basic ingredients of client and type.