It is generally recommended to use a directory for a package in the project workspace. So you are right that your project will have a folder structure as you have mentioned.
You do not need to use force-app, feel free to use the folder name that is more meaningful.
Example project workspace directory names as below
recruiting-module-baseobjects/main/default
recruiting-module-basecode/main/default
It is also recommended you enable source tracking on your sandboxes or use scratch orgs. That way it is easier to use commands like force:source:pull
that automatically pulls into respective folders as long as you have a project directory path defined in sfdx-project.json
Take a peek into one of the sample apps Easy-Spaces repo and see how we compose the app into modules or packages and map to the directory in the sfdx-project.json
and also configure dependencies.
Also, one thing to note is not every metadata is supported for unlocked packaging so it is better to not put them in the package but still have a folder (unpackaged
name fits well) where you can group them and deploy them using force:source:deploy
or force:mdapi:deploy
after/before you install the packages.
When you finally are done with the development you create package and package versions using the Salesforce command-line tool (CLI) by providing the package directory and package name.