Jump into a development shell: nix-shell Then run `help` to see the dev commands. The source tree maps to the module namespace, and roughly follows the Haskell namespace hierarchy (although nothing is enforced). The main 'common' space is `Biz`, other namespaces should be related to their application. Development aspects should be localized to their sub-namespaces as much as possible. Only after sufficient iteration such that interfaces are solidified and functionality is well-established should some code be promoted up the namespace hierarchy. The one special namespace/directory is `nix` which has all of our build rules. Boundaries and interfaces between namespaces should be small and well-defined. Likewise, the functionality and purpose of a particular namespace should be small and well-defined. Following the unix principle of "do one thing and do it well" is advised. For building the code, we use `nix` and basically copy the namespace hierarchy into the main build file `./default.nix`. Namespaces are always capitalized. I would prefer always lowercase, but `ghc` _really_ wants capitalized files, so we appeas `ghc`. In Scheme this actually translates quite well and helps distinguish between types and values. File extensions denote _type_ and indicate to the build system how to handle the file. So for example: - `.hs` is Haskell source code, the build system compiles it - `.scm` is Scheme source code, ditto - `.org` is an organizational text document, the build system ignores this, but we use them to make plans and such - `.jnl` is a journal for accounting, the build system will check our balances, make sure we're profitable