diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..e69de29
diff --git a/themes/openalt b/themes/openalt
deleted file mode 160000
index aa354ad..0000000
--- a/themes/openalt
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit aa354ad7324fdd2861a94cbc9febfa3136b3d69c
diff --git a/themes/openalt/.gitignore b/themes/openalt/.gitignore
new file mode 100644
index 0000000..5b823bf
--- /dev/null
+++ b/themes/openalt/.gitignore
@@ -0,0 +1,2 @@
+_config.yml
+
diff --git a/themes/openalt/LICENSE b/themes/openalt/LICENSE
new file mode 100644
index 0000000..b3ff301
--- /dev/null
+++ b/themes/openalt/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 The Hackman Club
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/themes/openalt/README.md b/themes/openalt/README.md
new file mode 100644
index 0000000..94c4f08
--- /dev/null
+++ b/themes/openalt/README.md
@@ -0,0 +1,135 @@
+# Tapestry Theme
+
+Tapestry is a Hexo theme designed for tumblr style gallery blog feed.
+
+I am using this theme for a [personal blog](https://blog.bashynx.com/), or you can check the [official theme preview](https://tapestry.demo.bashynx.dev/).
+
+---
+
+## 1. Installation
+
+1. Clone the theme into your Hexo project:
+
+```bash
+cd your-hexo-project
+git clone https://github.com/HackmanClub/tapestry.git themes/tapestry
+```
+
+1. Set the theme in Hexo’s main `_config.yml`:
+
+```yaml
+theme: tapestry
+```
+
+1. Install dependencies:
+
+```bash
+npm install sharp
+```
+
+---
+
+## 2. Configuration
+
+The theme uses its own `_config.yml` inside `themes/tapestry/`. You will need to copy / rename `_EXAMPLE_config.yml` as a starting point:
+
+```bash
+cp themes/tapestry/_EXAMPLE_config.yml themes/tapestry/_config.yml
+```
+
+### Important Sections
+
+#### Site Settings
+
+- `avatar`, `banner`, `favicon`: paths to your images.
+- `primary_color`: main color for your theme.
+- `tag_border`: add borders around tags.
+- `sidebar`: show or hide the sidebar.
+- `scarves`: enable or disable scarves links.
+
+#### Scarves
+
+Scarf links appear at the top right. You can use an image or FontAwesome icon:
+
+```yaml
+scarf:
+ - url: tags/baking
+ image: images/assets/scarves/scarf.png
+ icon: false
+ enable: true
+ alt: Example
+ - url: tags/photo
+ image: false
+ icon: fa-solid fa-heart
+ enable: true
+ alt: Example
+```
+
+- `url` – link target
+- `image` – path to scarf image
+- `icon` – FontAwesome icon class
+- `enable` – show/hide scarf
+- `alt` – accessibility text
+
+#### Social Links
+
+Add or remove social links easily:
+
+```yaml
+social:
+ - url: https://www.instagram.com/
+ icon: fab fa-instagram
+ enable: true
+```
+
+---
+
+### Sidebar Menu
+
+Configure links in the sidebar:
+
+```yaml
+sidebar_menu:
+ - enable: true
+ name: Home
+ url: /
+ - enable: true
+ name: Get Hexo
+ url: https://hexo.io/docs/setup
+```
+
+- `enable` – show/hide
+- `name` – link text
+- `url` – destination
+
+---
+
+## 3. Using Thumbnails
+
+- Put post images in `source/images/`
+- The theme generates thumbnails automatically in `source/thumbnails/`
+- Use `small-` or `large-` in templates depending on your layout.
+
+Example in a template:
+
+```ejs
+<% if (post.photos && post.photos.length) { %>
+
+<% } %>
+```
+
+> ⚠️ Only shows image if `post.photos` exists.
+
+---
+
+## 4. Running Locally
+
+Start a local Hexo server to preview:
+
+```bash
+hexo clean
+hexo s
+```
+
+- Visit `http://localhost:4000`
+- Changes in templates or CSS are reflected immediately.
diff --git a/themes/openalt/layout/_partial/article.ejs b/themes/openalt/layout/_partial/article.ejs
new file mode 100644
index 0000000..be5f99c
--- /dev/null
+++ b/themes/openalt/layout/_partial/article.ejs
@@ -0,0 +1,26 @@
+
\ No newline at end of file
diff --git a/themes/openalt/layout/_partial/date.ejs b/themes/openalt/layout/_partial/date.ejs
new file mode 100644
index 0000000..e40c646
--- /dev/null
+++ b/themes/openalt/layout/_partial/date.ejs
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/themes/openalt/layout/_partial/feed.ejs b/themes/openalt/layout/_partial/feed.ejs
new file mode 100644
index 0000000..cafd56d
--- /dev/null
+++ b/themes/openalt/layout/_partial/feed.ejs
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/themes/openalt/layout/_partial/index/feed_preview.ejs b/themes/openalt/layout/_partial/index/feed_preview.ejs
new file mode 100644
index 0000000..8d3aca9
--- /dev/null
+++ b/themes/openalt/layout/_partial/index/feed_preview.ejs
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git a/themes/openalt/layout/_partial/post_event.ejs b/themes/openalt/layout/_partial/post_event.ejs
new file mode 100644
index 0000000..1315314
--- /dev/null
+++ b/themes/openalt/layout/_partial/post_event.ejs
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/themes/openalt/layout/archive.ejs b/themes/openalt/layout/archive.ejs
new file mode 100644
index 0000000..aa17ac4
--- /dev/null
+++ b/themes/openalt/layout/archive.ejs
@@ -0,0 +1,11 @@
+