use ai::EmbedStore; use archive::WebsiteArchive; use based::get_pg; use rocket::routes; mod ai; mod archive; mod blacklist; mod favicon; mod pages; #[rocket::launch] async fn launch() -> _ { env_logger::init(); let arc = WebsiteArchive::new("./websites"); if std::env::var("DATABASE_URL").is_ok() { let pg = get_pg!(); sqlx::migrate!("./migrations").run(pg).await.unwrap(); } let archive = arc.clone(); if std::env::var("OLLAMA_URL").is_ok() { tokio::spawn(async move { EmbedStore::generate_embeddings_for(&archive).await; }); } let archive = arc.clone(); tokio::spawn(async move { favicon::download_favicons_for_sites(&archive.domains()).await; }); rocket::build() .mount( "/", routes![ based::htmx::htmx_script_route, pages::index, pages::render_website, pages::domain_info_route, pages::favicon_route, pages::vector_search, pages::render_txt_website ], ) .manage(arc) }