A living almanac of seasons, soil, and the quiet knowledge that used to be common. Rust axum with minijinja and Vite.
agriculturealmanacaxumfolk-knowledgegardeningminijinjarustseasonalvite
1mod almanac;
2mod app;
3mod astro;
4mod content;
5mod error;
6mod markdown;
7mod middleware;
8mod rng;
9mod routes;
10mod templates;
11
12use std::net::SocketAddr;
13
14#[tokio::main]
15async fn main() -> anyhow::Result<()> {
16 dotenvy::dotenv().ok();
17 tracing_subscriber::fmt()
18 .with_env_filter(
19 tracing_subscriber::EnvFilter::try_from_default_env()
20 .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
21 )
22 .init();
23
24 let port: u16 = std::env::var("PORT")
25 .ok()
26 .and_then(|v| v.parse().ok())
27 .unwrap_or(8000);
28
29 let app = app::router(app::AppState::from_env());
30 let addr = SocketAddr::from(([0, 0, 0, 0], port));
31 let listener = tokio::net::TcpListener::bind(addr).await?;
32 tracing::info!("darkfurrow listening on http://{addr}");
33 axum::serve(listener, app).await?;
34 Ok(())
35}