diff --git a/Cargo.lock b/Cargo.lock
index 9f44832..0603176 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -8,7 +8,7 @@ version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a"
 dependencies = [
- "bitflags",
+ "bitflags 2.6.0",
  "bytes",
  "futures-core",
  "futures-sink",
@@ -29,7 +29,7 @@ dependencies = [
  "actix-service",
  "actix-utils",
  "actix-web",
- "bitflags",
+ "bitflags 2.6.0",
  "bytes",
  "derive_more",
  "futures-core",
@@ -52,9 +52,9 @@ dependencies = [
  "actix-rt",
  "actix-service",
  "actix-utils",
- "ahash",
+ "ahash 0.8.11",
  "base64",
- "bitflags",
+ "bitflags 2.6.0",
  "brotli",
  "bytes",
  "bytestring",
@@ -169,7 +169,7 @@ dependencies = [
  "actix-service",
  "actix-utils",
  "actix-web-codegen",
- "ahash",
+ "ahash 0.8.11",
  "bytes",
  "bytestring",
  "cfg-if",
@@ -233,6 +233,17 @@ dependencies = [
  "generic-array",
 ]
 
+[[package]]
+name = "ahash"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
 [[package]]
 name = "ahash"
 version = "0.8.11"
@@ -510,6 +521,12 @@ dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
 [[package]]
 name = "bitflags"
 version = "2.6.0"
@@ -730,6 +747,7 @@ dependencies = [
  "leptos_meta",
  "leptos_router",
  "nostr-sdk",
+ "rusqlite",
  "secp256k1 0.30.0",
  "serde",
  "serde_json",
@@ -982,6 +1000,18 @@ version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
 
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
 [[package]]
 name = "flate2"
 version = "1.0.35"
@@ -1227,6 +1257,15 @@ dependencies = [
  "crunchy",
 ]
 
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash 0.7.8",
+]
+
 [[package]]
 name = "hashbrown"
 version = "0.13.2"
@@ -1239,7 +1278,7 @@ version = "0.14.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
 dependencies = [
- "ahash",
+ "ahash 0.8.11",
  "allocator-api2",
 ]
 
@@ -1254,6 +1293,15 @@ dependencies = [
  "foldhash",
 ]
 
+[[package]]
+name = "hashlink"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf"
+dependencies = [
+ "hashbrown 0.11.2",
+]
+
 [[package]]
 name = "hex-conservative"
 version = "0.1.2"
@@ -1810,6 +1858,16 @@ version = "0.2.168"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d"
 
+[[package]]
+name = "libsqlite3-sys"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14"
+dependencies = [
+ "pkg-config",
+ "vcpkg",
+]
+
 [[package]]
 name = "linear-map"
 version = "1.2.0"
@@ -2380,7 +2438,7 @@ version = "0.5.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
 dependencies = [
- "bitflags",
+ "bitflags 2.6.0",
 ]
 
 [[package]]
@@ -2447,6 +2505,21 @@ dependencies = [
  "thiserror 1.0.69",
 ]
 
+[[package]]
+name = "rusqlite"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85127183a999f7db96d1a976a309eebbfb6ea3b0b400ddd8340190129de6eb7a"
+dependencies = [
+ "bitflags 1.3.2",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "memchr",
+ "smallvec",
+]
+
 [[package]]
 name = "rustc-demangle"
 version = "0.1.24"
@@ -3284,6 +3357,12 @@ version = "0.15.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c"
 
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
 [[package]]
 name = "version_check"
 version = "0.9.5"
diff --git a/Cargo.toml b/Cargo.toml
index d5a1264..1da56b0 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,6 +16,7 @@ leptos_meta = { version = "0.6" }
 leptos_actix = { version = "0.6", optional = true }
 leptos_router = { version = "0.6" }
 wasm-bindgen = "=0.2.99"
+rusqlite = "0.27.0"
 serde = { version = "1.0", features = ["derive"] }
 uuid = { version = "1.0", features = ["v4"] }
 web-sys = { version = "0.3", features = ["Event"] }
diff --git a/src/db.rs b/src/db.rs
new file mode 100644
index 0000000..6e72ec3
--- /dev/null
+++ b/src/db.rs
@@ -0,0 +1,69 @@
+use rusqlite::{Connection, Error};
+use serde::{Deserialize, Serialize};
+
+// Define a struct to represent a database connection
+#[derive(Debug)]
+pub struct Database {
+    conn: Connection,
+}
+
+impl Database {
+    // Create a new database connection
+    pub fn new(db_path: &str) -> Result<Self, Error> {
+        let conn = Connection::open(db_path)?;
+        Ok(Database { conn })
+    }
+
+    // Create the database schema
+    pub fn create_schema(&self) -> Result<(), Error> {
+        self.conn.execute_batch("
+            CREATE TABLE IF NOT EXISTS items (
+                id TEXT PRIMARY KEY,
+                name TEXT NOT NULL,
+                description TEXT,
+                wikidata_id TEXT,
+                custom_properties TEXT
+            );
+        ")?;
+        Ok(())
+    }
+
+    // Insert a new item into the database
+    pub fn insert_item(&self, item: &DbItem) -> Result<(), Error> {
+        let wikidata_id = item.wikidata_id.as_ref().map(|s| s.as_str()).unwrap_or("");
+        self.conn.execute(
+            "INSERT INTO items (id, name, description, wikidata_id, custom_properties) VALUES (?, ?, ?, ?, ?);",
+            &[&item.id, &item.name, &item.description, &wikidata_id.to_string(), &item.custom_properties],
+        )?;
+        Ok(())
+    }
+
+    // Retrieve all items from the database
+    pub fn get_items(&self) -> Result<Vec<DbItem>, Error> {
+        let mut stmt = self.conn.prepare("SELECT * FROM items;")?;
+        let items = stmt.query_map([], |row| {
+            Ok(DbItem {
+                id: row.get(0)?,
+                name: row.get(1)?,
+                description: row.get(2)?,
+                wikidata_id: row.get(3)?,
+                custom_properties: row.get(4)?,
+            })
+        })?;
+        let mut result = Vec::new();
+        for item in items {
+            result.push(item?);
+        }
+        Ok(result)
+    }
+}
+
+// Define a struct to represent an item in the database
+#[derive(Debug, Deserialize, Serialize)]
+pub struct DbItem {
+    pub id: String,
+    pub name: String,
+    pub description: String,
+    pub wikidata_id: Option<String>,
+    pub custom_properties: String,
+}
\ No newline at end of file
diff --git a/src/lib.rs b/src/lib.rs
index 10f7ef7..9f00436 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -2,6 +2,7 @@ pub mod app;
 pub mod components;
 pub mod models;
 pub mod nostr;
+pub mod db;
 
 
 #[cfg(feature = "hydrate")]
diff --git a/src/models/item.rs b/src/models/item.rs
index 9af23ad..11c796b 100644
--- a/src/models/item.rs
+++ b/src/models/item.rs
@@ -7,7 +7,7 @@ pub struct Item {
     pub id: String,
     pub name: String,
     pub description: String,
-    pub reviews: Vec<ReviewWithRating>,
+    // pub reviews: Vec<ReviewWithRating>,
     pub wikidata_id: Option<String>,
     pub custom_properties: HashMap<String, String>,
 }