public function generate($options = array()) {
		
		// double-checks options was properly set
		if (empty($options)) {
			Console::writeError("need to pass options to generate...");
		}
		
		// set the default vars
		$moveStatic    = (isset($options["moveStatic"]))    ? $options["moveStatic"] : true;
		$noCacheBuster = (isset($options["noCacheBuster"])) ? $options["noCacheBuster"] : false;
		$exportFiles   = (isset($options["exportFiles"]))   ? $options["exportFiles"] : false;
		$exportClean   = (isset($options["exportClean"]))   ? $options["exportClean"] : false;
		$watchMessage  = (isset($options["watchMessage"]))  ? $options["watchMessage"] : false;
		$watchVerbose  = (isset($options["watchVerbose"]))  ? $options["watchVerbose"] : false;
		
		if ($noCacheBuster) {
			Config::setOption("cacheBuster",0);
		}
		
		// gather up all of the data to be used in patterns
		Data::gather();
		
		// gather all of the various pattern info
		$options = array();
		$options["exportClean"] = $exportClean;
		$options["exportFiles"] = $exportFiles;
		PatternData::gather($options);
		
		// gather the annotations
		Annotations::gather();
		
		// clean the public directory to remove old files
		if ((Config::getOption("cleanPublic") == "true") && $moveStatic) {
			FileUtil::cleanPublic();
		}
		
		// render out the index and style guide
		$this->generateIndex();
		$this->generateStyleguide();
		$this->generateViewAllPages();
		
		// render out the patterns and move them to public/patterns
		$options = array();
		$options["exportFiles"] = $exportFiles;
		$this->generatePatterns($options);
		
		// render the annotations as a js file
		$this->generateAnnotations();
		
		// move all of the files unless pattern only is set
		if ($moveStatic) {
			$this->moveStatic();
		}
		
		// update the change time so the auto-reload will fire (doesn't work for the index and style guide)
		Util::updateChangeTime();
		
		if ($watchVerbose && $watchMessage) {
			Console::writeLine($watchMessage);
		} else {
			Console::writeLine("your site has been generated...");
			Timer::stop();
		}
		
	}