The ETL web site is pretty simple. It's split up into three subdirectories. content - This holds the raw content for each page, along with a ddl file that defines per-page variables. templates - This holds common templates and ddl files that are used by the stuff in pages and content. The pages are all generated via the wrapper.etl template, which includes everything else that is needed to generate the page. site - This holds the generated html files and any static files that are not actually generated by ETL, i.e. the stylesheet, and any images or things like that. To generate any given page, you just use the etl command line tool, passing it the ETL and DDL files for the page, adding content and templates to the include path and defining the page and tmpl variables, which hold the path to the html page that is being generated and the path to the template it's being generated from. There is a site: target in the top level makefile that will do this for you, it's probably the best place to look for the details. To upload the site to the production server you need to use sitecopy, or some other webdav client. You can get sitecopy here: http://www.lyra.org/sitecopy/ There is a .sitecopyrc file set up for the upload in the top level of the source tree. From there you can just run: $ sitecopy --rcfile .sitecopyrc --update etl Note that the first time you do this you'll have to tell sitecopy about the new site, like this: $ sitecopy --rcfile .sitecopyrc --init etl You'll also need to make sure that your copy of sitecopy is compiled with webdav support and ssl support.