General
BML pages shouldn't interface with the database much. [7].
Always use the LJ:: functions that take an explicit database handle. Don't use the old main:: functions that use the global $dbh.
All files should have <LJDEP> edge dependency somewhere, usually at the bottom.
Using userids (integers) for things is better than using users (strings), except in URL arguments, where pretty is more important than speed.
In BML page, use BML blocks defined in global.look: LJUSER, P, H1, H2, STANDOUT, HR, etc...
All HTML should be XHTML compliant.:
Lower case, XML compliant tags:
<br /> instead of <BR>
Quotes around attributes <span class="test">
No bare & chars ... always escape them: & and <a href="foo.bml?a=1&b=2">...</a>
Use of multiple files to do one function is deprecated. There should no longer be "foo.bml" and "foo_do.bml" like there used to. That's ugly.
Tab is a formatting command, not a character [8]. There should be spaces in the files, not tab characters.
All subs in a package need LJFUNC documentation. All tables in the database need schema documentation. All files need LJDEP documentation.