diff --git a/.sqlx/query-19a91b6faba900c4da16992c888b0c96403cb15b4a66bad50375ed6395b6ec7d.json b/.sqlx/query-19a91b6faba900c4da16992c888b0c96403cb15b4a66bad50375ed6395b6ec7d.json
new file mode 100644
index 0000000..336ed2e
--- /dev/null
+++ b/.sqlx/query-19a91b6faba900c4da16992c888b0c96403cb15b4a66bad50375ed6395b6ec7d.json
@@ -0,0 +1,88 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "\n SELECT\n id,\n slug,\n name,\n short_description,\n description,\n status as \"status: ProjectStatus\",\n github_repo,\n demo_url,\n last_github_activity,\n created_at\n FROM projects\n WHERE slug = $1\n ",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Uuid"
+ },
+ {
+ "ordinal": 1,
+ "name": "slug",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "name",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 3,
+ "name": "short_description",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 4,
+ "name": "description",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 5,
+ "name": "status: ProjectStatus",
+ "type_info": {
+ "Custom": {
+ "name": "project_status",
+ "kind": {
+ "Enum": [
+ "active",
+ "maintained",
+ "archived",
+ "hidden"
+ ]
+ }
+ }
+ }
+ },
+ {
+ "ordinal": 6,
+ "name": "github_repo",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 7,
+ "name": "demo_url",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 8,
+ "name": "last_github_activity",
+ "type_info": "Timestamptz"
+ },
+ {
+ "ordinal": 9,
+ "name": "created_at",
+ "type_info": "Timestamptz"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Text"
+ ]
+ },
+ "nullable": [
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ true,
+ true,
+ true,
+ false
+ ]
+ },
+ "hash": "19a91b6faba900c4da16992c888b0c96403cb15b4a66bad50375ed6395b6ec7d"
+}
diff --git a/.sqlx/query-d9432498283c5b2788d741af04495b34101c2d5d270f6f153b2acf6ad1c30438.json b/.sqlx/query-d9432498283c5b2788d741af04495b34101c2d5d270f6f153b2acf6ad1c30438.json
new file mode 100644
index 0000000..f67637d
--- /dev/null
+++ b/.sqlx/query-d9432498283c5b2788d741af04495b34101c2d5d270f6f153b2acf6ad1c30438.json
@@ -0,0 +1,46 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "\n SELECT id, slug, name, icon, color\n FROM tags\n WHERE id = $1\n ",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Uuid"
+ },
+ {
+ "ordinal": 1,
+ "name": "slug",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "name",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 3,
+ "name": "icon",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 4,
+ "name": "color",
+ "type_info": "Varchar"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Uuid"
+ ]
+ },
+ "nullable": [
+ false,
+ false,
+ false,
+ true,
+ true
+ ]
+ },
+ "hash": "d9432498283c5b2788d741af04495b34101c2d5d270f6f153b2acf6ad1c30438"
+}
diff --git a/src/db/projects.rs b/src/db/projects.rs
index ca746f3..f393f99 100644
--- a/src/db/projects.rs
+++ b/src/db/projects.rs
@@ -274,6 +274,63 @@ pub async fn get_project_by_id_with_tags(
}
}
+/// Get single project by slug
+pub async fn get_project_by_slug(
+ pool: &PgPool,
+ slug: &str,
+) -> Result