diff --git a/.gitignore b/.gitignore
index 3ca43ae..193d30e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,8 @@ Cargo.lock
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
+
+
+# Added by cargo
+
+/target
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..2d81573
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "url_shortener"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+axum = { version = "0.6.20", features = ["http2"] }
+ini = "1.3.0"
+redis = { version = "0.23.3", features = ["r2d2", "ahash", "connection-manager"] }
+tokio = { version = "1.34.0", features = ["full"] }
diff --git a/config.ini b/config.ini
new file mode 100644
index 0000000..bb5aee6
--- /dev/null
+++ b/config.ini
@@ -0,0 +1,6 @@
+[database]
+type = redis
+server = 127.0.0.1:6379
+
+[web_server]
+bind_address = 127.0.0.1:12432
\ No newline at end of file
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..5961ad7
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,54 @@
+mod url_shortener;
+mod database_adapter;
+mod redis_adapter;
+
+use std::net::SocketAddr;
+
+use ini::ini;
+use axum::{routing::get, Router, response::Html};
+
+#[tokio::main]
+async fn main() {
+ let config = ini!("config.ini");
+ let server_address = match &config["database"]["server"] {
+ Some(adr) => adr,
+ None => panic!("Could not find [database]/server in config")
+ };
+ let web_bind_address = match &config["web_server"]["bind_address"] {
+ Some(adr) => adr,
+ None => panic!("Could not find [web_server]/bind_address in config")
+ };
+
+ let app = Router::new()
+ .route("/", get(root))
+ .route("/test", get(get_test).post(post_test));
+
+ let addr: SocketAddr = web_bind_address.parse().expect("Unable to parse [web_server]/bind_address in config");
+
+ dbg!(addr);
+
+ axum::Server::bind(&addr)
+ .serve(app.into_make_service())
+ .await
+ .unwrap();
+
+}
+
+async fn root() -> Html<&'static str> {
+ Html("root
+ test
+
+