diff --git a/.gitignore b/.gitignore
index 57f99f2e8..6fba628b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -399,3 +399,8 @@ certificates/**/*.key
certificates/**/*.pfx
certificates/**/*.pem
certificates/letsencrypt/**
+
+# Docs
+docs/_site
+docs/vendor
+docs/.bundle
diff --git a/README.md b/README.md
index 5140a2eab..b0e67d959 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ AliasVault is an open-source password and alias manager built with C# ASP.NET te
## Live demo
A live demo of the app is available at the official website at [app.aliasvault.net](https://app.aliasvault.net) (up-to-date with `main` branch). You can create a free account to try it out yourself.
-
+
## Installation
diff --git a/SECURITY.md b/SECURITY.md
index a7f7a5b94..3cf28ccbd 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -19,7 +19,7 @@ The following encryption algorithms are used by AliasVault:
Below is a detailed explanation of each encryption algorithm.
-For more information about how these algorithms are specifically used in AliasVault, see the [Security Architecture](docs/security-architecture.md) document.
+For more information about how these algorithms are specifically used in AliasVault, see the [Architecture Documentation](https://docs.aliasvault.net/architecture) section on the documentation site.
### Argon2id
To derive a key from the master password, AliasVault uses the Argon2id key derivation function. Argon2id is a memory-hard
diff --git a/docs/Dockerfile b/docs/Dockerfile
new file mode 100644
index 000000000..f87685610
--- /dev/null
+++ b/docs/Dockerfile
@@ -0,0 +1,8 @@
+FROM jekyll/jekyll:4.2.2
+
+WORKDIR /srv/jekyll
+COPY . .
+RUN chown -R jekyll:jekyll /srv/jekyll
+
+# Install the theme and dependencies
+RUN bundle install
diff --git a/docs/Gemfile b/docs/Gemfile
new file mode 100644
index 000000000..50943fbdc
--- /dev/null
+++ b/docs/Gemfile
@@ -0,0 +1,8 @@
+source 'https://rubygems.org'
+
+# gem "jekyll", "~> 4.3.2"
+gem "just-the-docs"
+
+# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
+# uncomment the line below. To upgrade, run `bundle update github-pages`.
+gem "github-pages", group: :jekyll_plugins
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
new file mode 100644
index 000000000..d6df8d87a
--- /dev/null
+++ b/docs/Gemfile.lock
@@ -0,0 +1,286 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ activesupport (7.2.2)
+ base64
+ benchmark (>= 0.3)
+ bigdecimal
+ concurrent-ruby (~> 1.0, >= 1.3.1)
+ connection_pool (>= 2.2.5)
+ drb
+ i18n (>= 1.6, < 2)
+ logger (>= 1.4.2)
+ minitest (>= 5.1)
+ securerandom (>= 0.3)
+ tzinfo (~> 2.0, >= 2.0.5)
+ addressable (2.8.7)
+ public_suffix (>= 2.0.2, < 7.0)
+ base64 (0.2.0)
+ benchmark (0.4.0)
+ bigdecimal (3.1.8)
+ coffee-script (2.4.1)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.12.2)
+ colorator (1.1.0)
+ commonmarker (0.23.11)
+ concurrent-ruby (1.3.4)
+ connection_pool (2.4.1)
+ csv (3.3.0)
+ dnsruby (1.72.3)
+ base64 (~> 0.2.0)
+ simpleidn (~> 0.2.1)
+ drb (2.2.1)
+ em-websocket (0.5.3)
+ eventmachine (>= 0.12.9)
+ http_parser.rb (~> 0)
+ ethon (0.16.0)
+ ffi (>= 1.15.0)
+ eventmachine (1.2.7)
+ execjs (2.10.0)
+ faraday (2.12.1)
+ faraday-net_http (>= 2.0, < 3.5)
+ json
+ logger
+ faraday-net_http (3.4.0)
+ net-http (>= 0.5.0)
+ ffi (1.17.0-x86_64-linux-musl)
+ forwardable-extended (2.6.0)
+ gemoji (4.1.0)
+ github-pages (232)
+ github-pages-health-check (= 1.18.2)
+ jekyll (= 3.10.0)
+ jekyll-avatar (= 0.8.0)
+ jekyll-coffeescript (= 1.2.2)
+ jekyll-commonmark-ghpages (= 0.5.1)
+ jekyll-default-layout (= 0.1.5)
+ jekyll-feed (= 0.17.0)
+ jekyll-gist (= 1.5.0)
+ jekyll-github-metadata (= 2.16.1)
+ jekyll-include-cache (= 0.2.1)
+ jekyll-mentions (= 1.6.0)
+ jekyll-optional-front-matter (= 0.3.2)
+ jekyll-paginate (= 1.1.0)
+ jekyll-readme-index (= 0.3.0)
+ jekyll-redirect-from (= 0.16.0)
+ jekyll-relative-links (= 0.6.1)
+ jekyll-remote-theme (= 0.4.3)
+ jekyll-sass-converter (= 1.5.2)
+ jekyll-seo-tag (= 2.8.0)
+ jekyll-sitemap (= 1.4.0)
+ jekyll-swiss (= 1.0.0)
+ jekyll-theme-architect (= 0.2.0)
+ jekyll-theme-cayman (= 0.2.0)
+ jekyll-theme-dinky (= 0.2.0)
+ jekyll-theme-hacker (= 0.2.0)
+ jekyll-theme-leap-day (= 0.2.0)
+ jekyll-theme-merlot (= 0.2.0)
+ jekyll-theme-midnight (= 0.2.0)
+ jekyll-theme-minimal (= 0.2.0)
+ jekyll-theme-modernist (= 0.2.0)
+ jekyll-theme-primer (= 0.6.0)
+ jekyll-theme-slate (= 0.2.0)
+ jekyll-theme-tactile (= 0.2.0)
+ jekyll-theme-time-machine (= 0.2.0)
+ jekyll-titles-from-headings (= 0.5.3)
+ jemoji (= 0.13.0)
+ kramdown (= 2.4.0)
+ kramdown-parser-gfm (= 1.1.0)
+ liquid (= 4.0.4)
+ mercenary (~> 0.3)
+ minima (= 2.5.1)
+ nokogiri (>= 1.16.2, < 2.0)
+ rouge (= 3.30.0)
+ terminal-table (~> 1.4)
+ webrick (~> 1.8)
+ github-pages-health-check (1.18.2)
+ addressable (~> 2.3)
+ dnsruby (~> 1.60)
+ octokit (>= 4, < 8)
+ public_suffix (>= 3.0, < 6.0)
+ typhoeus (~> 1.3)
+ html-pipeline (2.14.3)
+ activesupport (>= 2)
+ nokogiri (>= 1.4)
+ http_parser.rb (0.8.0)
+ i18n (1.14.6)
+ concurrent-ruby (~> 1.0)
+ jekyll (3.10.0)
+ addressable (~> 2.4)
+ colorator (~> 1.0)
+ csv (~> 3.0)
+ em-websocket (~> 0.5)
+ i18n (>= 0.7, < 2)
+ jekyll-sass-converter (~> 1.0)
+ jekyll-watch (~> 2.0)
+ kramdown (>= 1.17, < 3)
+ liquid (~> 4.0)
+ mercenary (~> 0.3.3)
+ pathutil (~> 0.9)
+ rouge (>= 1.7, < 4)
+ safe_yaml (~> 1.0)
+ webrick (>= 1.0)
+ jekyll-avatar (0.8.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-coffeescript (1.2.2)
+ coffee-script (~> 2.2)
+ coffee-script-source (~> 1.12)
+ jekyll-commonmark (1.4.0)
+ commonmarker (~> 0.22)
+ jekyll-commonmark-ghpages (0.5.1)
+ commonmarker (>= 0.23.7, < 1.1.0)
+ jekyll (>= 3.9, < 4.0)
+ jekyll-commonmark (~> 1.4.0)
+ rouge (>= 2.0, < 5.0)
+ jekyll-default-layout (0.1.5)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-feed (0.17.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-gist (1.5.0)
+ octokit (~> 4.2)
+ jekyll-github-metadata (2.16.1)
+ jekyll (>= 3.4, < 5.0)
+ octokit (>= 4, < 7, != 4.4.0)
+ jekyll-include-cache (0.2.1)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-mentions (1.6.0)
+ html-pipeline (~> 2.3)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-optional-front-matter (0.3.2)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-paginate (1.1.0)
+ jekyll-readme-index (0.3.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-redirect-from (0.16.0)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-relative-links (0.6.1)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-remote-theme (0.4.3)
+ addressable (~> 2.0)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
+ rubyzip (>= 1.3.0, < 3.0)
+ jekyll-sass-converter (1.5.2)
+ sass (~> 3.4)
+ jekyll-seo-tag (2.8.0)
+ jekyll (>= 3.8, < 5.0)
+ jekyll-sitemap (1.4.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-swiss (1.0.0)
+ jekyll-theme-architect (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-cayman (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-dinky (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-hacker (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-leap-day (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-merlot (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-midnight (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-minimal (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-modernist (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-primer (0.6.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-github-metadata (~> 2.9)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-slate (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-tactile (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-time-machine (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-titles-from-headings (0.5.3)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-watch (2.2.1)
+ listen (~> 3.0)
+ jemoji (0.13.0)
+ gemoji (>= 3, < 5)
+ html-pipeline (~> 2.2)
+ jekyll (>= 3.0, < 5.0)
+ json (2.8.2)
+ just-the-docs (0.10.0)
+ jekyll (>= 3.8.5)
+ jekyll-include-cache
+ jekyll-seo-tag (>= 2.0)
+ rake (>= 12.3.1)
+ kramdown (2.4.0)
+ rexml
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
+ liquid (4.0.4)
+ listen (3.9.0)
+ rb-fsevent (~> 0.10, >= 0.10.3)
+ rb-inotify (~> 0.9, >= 0.9.10)
+ logger (1.6.1)
+ mercenary (0.3.6)
+ minima (2.5.1)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-feed (~> 0.9)
+ jekyll-seo-tag (~> 2.1)
+ minitest (5.25.1)
+ net-http (0.5.0)
+ uri
+ nokogiri (1.16.7-x86_64-linux)
+ racc (~> 1.4)
+ octokit (4.25.1)
+ faraday (>= 1, < 3)
+ sawyer (~> 0.9)
+ pathutil (0.16.2)
+ forwardable-extended (~> 2.6)
+ public_suffix (5.1.1)
+ racc (1.8.1)
+ rake (13.2.1)
+ rb-fsevent (0.11.2)
+ rb-inotify (0.11.1)
+ ffi (~> 1.0)
+ rexml (3.3.9)
+ rouge (3.30.0)
+ rubyzip (2.3.2)
+ safe_yaml (1.0.5)
+ sass (3.7.4)
+ sass-listen (~> 4.0.0)
+ sass-listen (4.0.0)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ sawyer (0.9.2)
+ addressable (>= 2.3.5)
+ faraday (>= 0.17.3, < 3)
+ securerandom (0.3.2)
+ simpleidn (0.2.3)
+ terminal-table (1.8.0)
+ unicode-display_width (~> 1.1, >= 1.1.1)
+ typhoeus (1.4.1)
+ ethon (>= 0.9.0)
+ tzinfo (2.0.6)
+ concurrent-ruby (~> 1.0)
+ unicode-display_width (1.8.0)
+ uri (1.0.2)
+ webrick (1.9.0)
+
+PLATFORMS
+ x86_64-linux-musl
+
+DEPENDENCIES
+ github-pages
+ just-the-docs
+
+BUNDLED WITH
+ 2.3.25
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index a7dd1c905..000000000
--- a/docs/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Documentation
-This is the documentation for the AliasVault project.
-
-## Description
-TODO: Work in progress.
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 000000000..ed0052bc9
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,32 @@
+remote_theme: just-the-docs/just-the-docs
+title: AliasVault
+description: Documentation for the AliasVault password manager
+
+logo: "/assets/img/logo.svg"
+favicon_ico: "/assets/img/favicon.png"
+
+# Navigation settings
+aux_links:
+ "AliasVault on GitHub":
+ - "https://github.com/lanedirt/AliasVault"
+ "AliasVault Website":
+ - "https://aliasvault.net"
+aux_links_new_tab: true
+
+# Search settings
+search_enabled: true
+heading_anchors: true
+
+# Theme settings
+color_scheme: aliasvault
+
+# Enable copy code button
+enable_copy_code_button: true
+
+# Footer "Edit this page on GitHub" link text
+gh_edit_link: true # show or hide edit this page link
+gh_edit_link_text: "Edit this page on GitHub."
+gh_edit_repository: "https://github.com/lanedirt/AliasVault" # the github URL for your repo
+gh_edit_branch: "main" # the branch that your docs is served from
+gh_edit_source: docs # the source that your files originate from
+gh_edit_view_mode: "tree" # "tree" or "edit" if you want the user to jump into the editor immediately
\ No newline at end of file
diff --git a/docs/_includes/footer_custom.html b/docs/_includes/footer_custom.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/docs/_includes/nav_footer_custom.html b/docs/_includes/nav_footer_custom.html
new file mode 100644
index 000000000..8083c7838
--- /dev/null
+++ b/docs/_includes/nav_footer_custom.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/_sass/color_schemes/aliasvault.scss b/docs/_sass/color_schemes/aliasvault.scss
new file mode 100644
index 000000000..2f8d0783f
--- /dev/null
+++ b/docs/_sass/color_schemes/aliasvault.scss
@@ -0,0 +1,42 @@
+@import "./color_schemes/dark";
+
+// Base theme colors
+$link-color: #f49541;
+$btn-primary-color: #d68338;
+
+// Main colors
+$body-background-color: #1f2937;
+$sidebar-color: #111827;
+$border-color: #374151;
+$body-text-color: #f8f9fa;
+
+// Navigation
+$nav-child-link-color: #fdde85;
+$search-result-preview-color: #e9ecef;
+
+// Content elements
+$feedback-color: #2d3748;
+$table-background-color: #374151;
+$search-background-color: #374151;
+
+// Code blocks
+$code-background-color: #2d3748;
+$code-linenumber-color: #9ca3af;
+
+// Tables
+$table-border-color: #4b5563;
+
+// Search
+$search-result-preview-color: #d1d5db;
+
+// Buttons
+$btn-primary-color-dark: #d68338;
+
+// Base Colors (kept for compatibility)
+$purple-000: #f8b963;
+$purple-100: #ffd5a8;
+$purple-200: #f49541;
+$purple-300: #d68338;
+
+// Navigation additional
+$nav-button-color: #f49541;
diff --git a/docs/security-architecture.md b/docs/architecture/index.md
similarity index 84%
rename from docs/security-architecture.md
rename to docs/architecture/index.md
index 05240cdb4..d5682915d 100644
--- a/docs/security-architecture.md
+++ b/docs/architecture/index.md
@@ -1,4 +1,11 @@
-# Security Architecture
+---
+layout: default
+title: Architecture
+has_children: true
+nav_order: 3
+---
+
+# Architecture
AliasVault implements a zero-knowledge architecture where sensitive user data and passwords never leave the client device in unencrypted form. Below is a detailed explanation of how the system secures user data and communications.
@@ -6,12 +13,12 @@ AliasVault implements a zero-knowledge architecture where sensitive user data an
The security architecture diagram below illustrates all encryption and authentication processes used in AliasVault to secure user data and communications.
-
-
-
+
+
+
-You can also view the diagram in a browser-friendly HTML format: [AliasVault Security Architecture](diagrams/security-architecture/aliasvault-security-architecture.html)
+You can also view the diagram in a browser-friendly HTML format: [AliasVault Security Architecture](https://lanedirt.github.io/AliasVault/assets/diagrams/security-architecture/aliasvault-security-architecture.html)
## Key Components and Process Flow
diff --git a/docs/diagrams/README.md b/docs/assets/diagrams/_README.md
similarity index 99%
rename from docs/diagrams/README.md
rename to docs/assets/diagrams/_README.md
index c805ffba4..74dbd3f05 100644
--- a/docs/diagrams/README.md
+++ b/docs/assets/diagrams/_README.md
@@ -1,3 +1,5 @@
+
+
# Diagrams
This folder contains architecture and flow diagrams for AliasVault in various formats.
diff --git a/docs/diagrams/security-architecture/aliasvault-security-architecture-dark.svg b/docs/assets/diagrams/security-architecture/aliasvault-security-architecture-dark.svg
similarity index 100%
rename from docs/diagrams/security-architecture/aliasvault-security-architecture-dark.svg
rename to docs/assets/diagrams/security-architecture/aliasvault-security-architecture-dark.svg
diff --git a/docs/diagrams/security-architecture/aliasvault-security-architecture-light.svg b/docs/assets/diagrams/security-architecture/aliasvault-security-architecture-light.svg
similarity index 100%
rename from docs/diagrams/security-architecture/aliasvault-security-architecture-light.svg
rename to docs/assets/diagrams/security-architecture/aliasvault-security-architecture-light.svg
diff --git a/docs/diagrams/security-architecture/aliasvault-security-architecture.drawio b/docs/assets/diagrams/security-architecture/aliasvault-security-architecture.drawio
similarity index 100%
rename from docs/diagrams/security-architecture/aliasvault-security-architecture.drawio
rename to docs/assets/diagrams/security-architecture/aliasvault-security-architecture.drawio
diff --git a/docs/diagrams/security-architecture/aliasvault-security-architecture.html b/docs/assets/diagrams/security-architecture/aliasvault-security-architecture.html
similarity index 100%
rename from docs/diagrams/security-architecture/aliasvault-security-architecture.html
rename to docs/assets/diagrams/security-architecture/aliasvault-security-architecture.html
diff --git a/docs/diagrams/security-architecture/security-architecture.mmd b/docs/assets/diagrams/security-architecture/security-architecture.mmd
similarity index 100%
rename from docs/diagrams/security-architecture/security-architecture.mmd
rename to docs/assets/diagrams/security-architecture/security-architecture.mmd
diff --git a/docs/assets/img/favicon.png b/docs/assets/img/favicon.png
new file mode 100644
index 000000000..c8aff58e8
Binary files /dev/null and b/docs/assets/img/favicon.png differ
diff --git a/docs/assets/img/logo.svg b/docs/assets/img/logo.svg
new file mode 100644
index 000000000..600446a2b
--- /dev/null
+++ b/docs/assets/img/logo.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/docs/img/screenshot.png b/docs/assets/img/screenshot.png
similarity index 100%
rename from docs/img/screenshot.png
rename to docs/assets/img/screenshot.png
diff --git a/docs/contact/index.md b/docs/contact/index.md
new file mode 100644
index 000000000..7ea80b6cf
--- /dev/null
+++ b/docs/contact/index.md
@@ -0,0 +1,14 @@
+---
+layout: default
+title: Help and Support
+has_children: true
+nav_order: 100
+---
+
+# Help and Support
+
+If you need help or have any questions about installing or using AliasVault, you can reach us on [AliasVault Discord](https://discord.gg/DsaXMTEtpF).
+
+If you have found a bug or have a feature request, please open an issue on [AliasVault GitHub](https://github.com/lanedirt/AliasVault/issues).
+
+If you have any other questions or feedback, please use the contact form on the [AliasVault website](https://aliasvault.net/contact).
diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml
new file mode 100644
index 000000000..cac34e88f
--- /dev/null
+++ b/docs/docker-compose.yml
@@ -0,0 +1,12 @@
+services:
+ jekyll:
+ build: .
+ volumes:
+ - .:/srv/jekyll
+ ports:
+ - "4000:4000"
+ command: bundle exec jekyll serve --host 0.0.0.0 --watch --force_polling --livereload
+ environment:
+ - JEKYLL_ENV=development
+ - JEKYLL_NO_CACHE=true
+ - DISABLE_DISK_CACHE=true
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 000000000..85eea72df
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,45 @@
+---
+layout: home
+title: Home
+nav_order: 1
+description: "AliasVault Documentation - Open-source password and identity manager"
+permalink: /
+---
+
+# AliasVault Documentation
+{: .fs-9 }
+
+Open-source password and identity manager with email alias generation and zero-knowledge architecture.
+{: .fs-6 .fw-300 }
+
+[Installation](./installation){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }
+[View on GitHub](https://github.com/lanedirt/AliasVault){: .btn .fs-5 .mb-4 .mb-md-0 }
+
+---
+
+## What is AliasVault?
+
+AliasVault is a self-hosted password and identity manager that helps you:
+
+- 🔐 **Secure Passwords** - Store and manage passwords with zero-knowledge encryption
+- 📧 **Email Aliases** - Generate unique email addresses for each service
+- 🎭 **Identity Management** - Create and manage separate online identities
+- 🏠 **Self-Hosted** - Run on your own infrastructure using Docker
+- 🔓 **Open Source** - Transparent, auditable, and free to use
+
+## Key Features
+
+### Zero-Knowledge Architecture
+All data is end-to-end encrypted on the client. Your master password never leaves your device, and the server never has access to your data.
+
+### Built-in Email Server
+Generate virtual email addresses for each identity. Emails sent to these addresses are instantly visible in the AliasVault app.
+
+### Virtual Identities
+Create separate identities for different purposes, each with its own email aliases and credentials.
+
+---
+
+## Getting Started
+
+Ready to get started with AliasVault? Check out the [installation guide](./installation).
diff --git a/docs/installation/build-from-source.md b/docs/installation/build-from-source.md
new file mode 100644
index 000000000..ac25ea288
--- /dev/null
+++ b/docs/installation/build-from-source.md
@@ -0,0 +1,33 @@
+---
+layout: default
+title: Build from Source
+parent: Installation Guide
+nav_order: 1
+---
+
+# Build from Source
+Instead of using the pre-built Docker images, you can also build the images from source yourself. This allows you to build a specific version of AliasVault and/or to make changes to the source code.
+
+Building from source requires more resources:
+- Minimum 2GB RAM (more RAM will speed up build time)
+- At least 1 vCPU
+- 40GB+ disk space (for dependencies and build artifacts)
+- Docker installed
+- Git installed
+
+## Steps
+1. Clone the repository
+```bash
+git clone https://github.com/lanedirt/AliasVault.git
+cd AliasVault
+```
+2. Make the build script executable and run it. This will create the .env file, build the Docker images locally from source, and start the AliasVault containers. Follow the on-screen prompts to configure AliasVault.
+```bash
+chmod +x install.sh
+./install.sh build
+```
+> **Note:** The build process can take a while depending on your hardware (5-15 minutes).
+
+3. After the script completes, you can access AliasVault at:
+ - Client: `https://localhost`
+ - Admin: `https://localhost/admin`
diff --git a/docs/installation/index.md b/docs/installation/index.md
new file mode 100644
index 000000000..e50ad3ea8
--- /dev/null
+++ b/docs/installation/index.md
@@ -0,0 +1,72 @@
+---
+layout: default
+title: Installation Guide
+nav_order: 2
+---
+
+# Installation
+Follow the steps below to install AliasVault on your own server. Minimum experience with Docker and Linux is required.
+
+{: .toc }
+* TOC
+{:toc}
+
+---
+
+## Basic Installation
+To get AliasVault up and running quickly, run the install script to pull pre-built Docker images. The install script will also configure the .env file and start the AliasVault containers. You can get up and running in less than 5 minutes.
+
+### Hardware requirements
+- Linux VM with root access (Ubuntu or RHEL based distros recommended)
+- 1 vCPU
+- 512MB RAM
+- 16GB disk space
+- Docker installed
+
+### Installation steps
+1. Download the install script
+```bash
+curl -o install.sh https://raw.githubusercontent.com/lanedirt/AliasVault/main/install.sh
+```
+2. Make the install script executable and run it. This will create the .env file, pull the Docker images, and start the AliasVault containers. Follow the on-screen prompts to configure AliasVault.
+```bash
+chmod +x install.sh
+./install.sh install
+```
+3. After the script completes, you can access AliasVault at:
+ - Client: `https://localhost`
+ - Admin: `https://localhost/admin`
+
+---
+
+## SSL configuration
+The default installation will create a self-signed SSL certificate and configure Nginx to use it.
+
+You can however also use Let's Encrypt to generate valid SSL certificates and configure Nginx to use it. In order to make this work you will need the following:
+
+- A public IPv4 address assigned to your server
+- Port 80 and 443 on your server must be open and accessible from the internet
+- A registered domain name with an A record pointing to your server's public IP address (e.g. mydomain.com)
+
+
+### Steps
+
+1. Run the install script with the `configure-ssl` option
+```bash
+./install.sh configure-ssl
+```
+2. Follow the prompts to configure Let's Encrypt.
+
+### Reverting to self-signed SSL
+If at any point you would like to revert to the self-signed SSL certificate, run the install script again with the `configure-ssl` option
+and then in the prompt choose option 2.
+
+---
+
+## Miscellaneous
+
+### Resetting the admin password
+If you have lost your admin password, you can reset it by running the install script with the `reset-password` option. This will generate a new random password and update the .env file with it. After that it will restart the AliasVault containers to apply the changes.
+```bash
+./install.sh reset-password
+```
\ No newline at end of file
diff --git a/docs/install/1-manually-setup-docker.md b/docs/installation/manually-setup-docker.md
similarity index 92%
rename from docs/install/1-manually-setup-docker.md
rename to docs/installation/manually-setup-docker.md
index 769977588..854806ba7 100644
--- a/docs/install/1-manually-setup-docker.md
+++ b/docs/installation/manually-setup-docker.md
@@ -1,6 +1,13 @@
+---
+layout: default
+title: Manual Setup
+parent: Installation Guide
+nav_order: 2
+---
+
# Manual Setup Instructions for AliasVault
-This README provides step-by-step instructions for manually setting up AliasVault without using the `install.sh` script. Follow these steps if you prefer to execute all statements yourself.
+If you prefer to manually set up AliasVault, this README provides step-by-step instructions. Follow these steps if you prefer to execute all statements yourself.
## Prerequisites
diff --git a/docs/dev/configure-sqlite-wasm.md b/docs/misc/dev/configure-sqlite-wasm.md
similarity index 70%
rename from docs/dev/configure-sqlite-wasm.md
rename to docs/misc/dev/configure-sqlite-wasm.md
index 64e34f827..9084dd5ed 100644
--- a/docs/dev/configure-sqlite-wasm.md
+++ b/docs/misc/dev/configure-sqlite-wasm.md
@@ -1,3 +1,12 @@
+---
+layout: default
+title: Configure SQLite for use with WebAssembly
+parent: Development
+grand_parent: Miscellaneous
+nav_order: 2
+---
+
+# Configure SQLite for use with WebAssembly
To configure SQLite for use with WebAssembly follow these steps:
1. Add NuGet package
diff --git a/docs/client/enable-webauthn-pfr-chrome.md b/docs/misc/dev/enable-webauthn-pfr-chrome.md
similarity index 85%
rename from docs/client/enable-webauthn-pfr-chrome.md
rename to docs/misc/dev/enable-webauthn-pfr-chrome.md
index 3b8e83e28..0be778f84 100644
--- a/docs/client/enable-webauthn-pfr-chrome.md
+++ b/docs/misc/dev/enable-webauthn-pfr-chrome.md
@@ -1,3 +1,12 @@
+---
+layout: default
+title: Enable WebAuthn
+parent: Development
+grand_parent: Miscellaneous
+nav_order: 1
+---
+
+# WebAuthn
The webauthn implementation in order to quick unlock the vault requires the use of a FIDO2 authenticator.
This can be either the built-in browser authenticator or an external authenticator like a Yubikey.
diff --git a/docs/misc/dev/index.md b/docs/misc/dev/index.md
new file mode 100644
index 000000000..d19ae7e58
--- /dev/null
+++ b/docs/misc/dev/index.md
@@ -0,0 +1,6 @@
+---
+layout: default
+title: Development
+parent: Miscellaneous
+nav_order: 1
+---
diff --git a/docs/dev/run-github-actions-locally.md b/docs/misc/dev/run-github-actions-locally.md
similarity index 96%
rename from docs/dev/run-github-actions-locally.md
rename to docs/misc/dev/run-github-actions-locally.md
index d123c12f6..3994192a5 100644
--- a/docs/dev/run-github-actions-locally.md
+++ b/docs/misc/dev/run-github-actions-locally.md
@@ -1,3 +1,11 @@
+---
+layout: default
+title: 1. Run GitHub Actions Locally
+parent: Development
+grand_parent: Miscellaneous
+nav_order: 1
+---
+
# Run GitHub Actions Locally
This guide will help you set up and run GitHub Actions locally on Linux, which can be useful for debugging and testing your workflows without pushing changes to the repository.
diff --git a/docs/dev/upgrade-ef-client-model.md b/docs/misc/dev/upgrade-ef-client-model.md
similarity index 79%
rename from docs/dev/upgrade-ef-client-model.md
rename to docs/misc/dev/upgrade-ef-client-model.md
index b9bacac9e..521ee103e 100644
--- a/docs/dev/upgrade-ef-client-model.md
+++ b/docs/misc/dev/upgrade-ef-client-model.md
@@ -1,3 +1,13 @@
+---
+layout: default
+title: Upgrade the AliasClientDb EF model
+parent: Development
+grand_parent: Miscellaneous
+nav_order: 3
+---
+
+# Upgrade the AliasClientDb EF model
+
To upgrade the AliasClientDb EF model, follow these steps:
1. Make changes to the AliasClientDb EF model in the `AliasClientDb` project.
diff --git a/docs/misc/index.md b/docs/misc/index.md
new file mode 100644
index 000000000..355c6b536
--- /dev/null
+++ b/docs/misc/index.md
@@ -0,0 +1,10 @@
+---
+layout: default
+title: Miscellaneous
+has_children: true
+nav_order: 99
+---
+
+# Miscellaneous
+
+Miscellaneous guides and documentation.