diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index bc561bf9..00000000
--- a/.gitmodules
+++ /dev/null
@@ -1,6 +0,0 @@
-[submodule "theme/assets/brand"]
- path = theme/assets/brand
- url = https://github.com/privacyguides/brand.git
-[submodule "modules/mkdocs-material"]
- path = modules/mkdocs-material
- url = https://github.com/privacyguides/mkdocs-material-insiders.git
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index ce086535..00000000
--- a/Dockerfile
+++ /dev/null
@@ -1,84 +0,0 @@
-FROM python:3.12-slim-bookworm AS base
-
-LABEL org.opencontainers.image.source="https://github.com/privacyguides/privacyguides.org"
-
-# Setup environment
-ENV LANG=C.UTF-8
-ENV LC_ALL=C.UTF-8
-ENV PYTHONDONTWRITEBYTECODE=1
-ENV PYTHONFAULTHANDLER=1
-
-####################################################
-# Stage: python-deps
-# Install pipenv and compilation dependencies
-####################################################
-FROM base AS python-deps
-
-# Install pipenv
-RUN pip install --no-cache-dir pipenv
-
-# Install build tools and libraries needed to compile any Python packages
-RUN apt-get update && \
- apt-get install -y --no-install-recommends \
- gcc \
- libffi-dev \
- build-essential \
- && rm -rf /var/lib/apt/lists/*
-
-# Copy Pipfile, Pipfile.lock, and any local modules needed for dependency resolution
-COPY modules/mkdocs-material ./modules/mkdocs-material
-COPY Pipfile .
-COPY Pipfile.lock .
-
-# Install all Python dependencies into a project‐local virtual environment at /.venv
-RUN PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy
-
-####################################################
-# Stage: nodejs-deps
-# Install nodejs/npm and compilation dependencies
-####################################################
-FROM node:24-bookworm-slim AS nodejs-deps
-
-RUN npm i -g all-contributors-cli
-RUN npm install -g pkg
-
-RUN cd /usr/local/lib/node_modules/all-contributors-cli && \
- pkg dist/cli.js -t node18-linux -o /usr/local/bin/all-contributors-cli
-
-####################################################
-# Stage: runtime
-# Install runtime dependencies and copy runtime artifacts
-####################################################
-FROM base AS runtime
-
-# Install runtime packages (GTK/Cairo, image processing libraries, Git, etc.)
-RUN apt-get update && \
- apt-get install -y --no-install-recommends \
- libcairo2-dev \
- libfreetype6-dev \
- git \
- libjpeg-dev \
- libpng-dev \
- openssh-client \
- pngquant \
- tini \
- zlib1g-dev \
- libffi-dev \
- bash \
- caddy \
- && rm -rf /var/lib/apt/lists/*
-
-# Copy virtual environment and local mkdocs-material module from python-deps stage
-COPY --from=python-deps /.venv /.venv
-COPY --from=python-deps /modules/mkdocs-material /modules/mkdocs-material
-
-# Copy all-contributors-cli from nodejs-deps stage
-COPY --from=nodejs-deps /usr/local/bin/all-contributors-cli /usr/local/bin/all-contributors-cli
-
-# Ensure the virtual environment’s bin directory is first in PATH
-ENV PATH="/.venv/bin:$PATH"
-
-HEALTHCHECK NONE
-
-# Entry point script and default cmd for running mkdocs
-ENTRYPOINT ["/bin/bash"]
diff --git a/theme/assets/files/meta/browserconfig.xml b/assets/files/meta/browserconfig.xml
similarity index 100%
rename from theme/assets/files/meta/browserconfig.xml
rename to assets/files/meta/browserconfig.xml
diff --git a/theme/assets/files/meta/site.webmanifest b/assets/files/meta/site.webmanifest
similarity index 100%
rename from theme/assets/files/meta/site.webmanifest
rename to assets/files/meta/site.webmanifest
diff --git a/theme/icons/custom/green-flag.svg b/assets/green-flag.svg
similarity index 100%
rename from theme/icons/custom/green-flag.svg
rename to assets/green-flag.svg
diff --git a/theme/assets/javascripts/feedback.js b/assets/javascripts/feedback.js
similarity index 100%
rename from theme/assets/javascripts/feedback.js
rename to assets/javascripts/feedback.js
diff --git a/theme/assets/javascripts/randomize-element.js b/assets/javascripts/randomize-element.js
similarity index 100%
rename from theme/assets/javascripts/randomize-element.js
rename to assets/javascripts/randomize-element.js
diff --git a/theme/assets/stylesheets/extra.css b/assets/stylesheets/extra.css
similarity index 100%
rename from theme/assets/stylesheets/extra.css
rename to assets/stylesheets/extra.css
diff --git a/theme/assets/stylesheets/home.css b/assets/stylesheets/home.css
similarity index 100%
rename from theme/assets/stylesheets/home.css
rename to assets/stylesheets/home.css
diff --git a/theme/assets/stylesheets/lang-he.css b/assets/stylesheets/lang-he.css
similarity index 100%
rename from theme/assets/stylesheets/lang-he.css
rename to assets/stylesheets/lang-he.css
diff --git a/theme/assets/stylesheets/lang-ru.css b/assets/stylesheets/lang-ru.css
similarity index 100%
rename from theme/assets/stylesheets/lang-ru.css
rename to assets/stylesheets/lang-ru.css
diff --git a/theme/assets/stylesheets/lang-zh-Hant.css b/assets/stylesheets/lang-zh-Hant.css
similarity index 100%
rename from theme/assets/stylesheets/lang-zh-Hant.css
rename to assets/stylesheets/lang-zh-Hant.css
diff --git a/theme/assets/stylesheets/lang-zh-TW.css b/assets/stylesheets/lang-zh-TW.css
similarity index 100%
rename from theme/assets/stylesheets/lang-zh-TW.css
rename to assets/stylesheets/lang-zh-TW.css
diff --git a/.well-known/funding-manifest-urls b/static/.well-known/funding-manifest-urls
similarity index 100%
rename from .well-known/funding-manifest-urls
rename to static/.well-known/funding-manifest-urls
diff --git a/theme/assets/brand b/theme/assets/brand
deleted file mode 160000
index e567eb3f..00000000
--- a/theme/assets/brand
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit e567eb3f0e6cb54242a809661d78d884caa05b72
diff --git a/theme/blog-post.html b/theme/blog-post.html
deleted file mode 100644
index 71dfde67..00000000
--- a/theme/blog-post.html
+++ /dev/null
@@ -1,284 +0,0 @@
-
-
-{% extends "main.html" %}
-
-{% import "partials/nav-item.html" as item with context %}
-
-
-{% block container %}
-
-
-
-
- {% if config.theme.language == "en" %}
-
- {% endif %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {% set postyear = page.config.date.created.strftime('%s') | int %}
- {% set currentyear = build_date_utc.strftime('%s') | int %}
- {% set difference = (currentyear / 2628000) - (postyear / 2628000) %}
- {% if difference > 18 %}
- {% set yearsdifference = ((difference - 1) / 12) | int %}
-
-
-
- This article is more than {{ yearsdifference }}
- {% if yearsdifference == 1 %}
- year
- {% else %}
- years
- {% endif %}
- old
-
-
-
- {% endif %}
-
- {% block content %}
- {% include "partials/content.html" %}
- {% endblock %}
-
-
-
-
-
- Join our forum
-
- to comment on this article.
-
Thank you for reading, and please consider sharing this post with your friends.
- Privacy Guides is an independent, nonprofit media outlet. We don't have ads or sponsors, so if you liked this work your donation would be greatly appreciated.
- Have a question, comment, or tip for us? You can securely contact us at @privacyguides.01 on Signal.
-
-
-
-{% endblock %}
diff --git a/theme/home.html b/theme/home.html
deleted file mode 100644
index b42e782a..00000000
--- a/theme/home.html
+++ /dev/null
@@ -1,120 +0,0 @@
-
-{% extends "main.html" %}
-{% set homepage = config.extra.privacy_guides.homepage %}
-{% block extrahead %}
-
- {% for feed in homepage.rss %}
-
- {% endfor %}
- {{ super() }}
-{% endblock %}
-{% block tabs %}
- {{ super() }}
-
-
-
-
-
-
{{ homepage.hero.header }}
-
{{ homepage.hero.subheader }}
- {% for button in homepage.hero.buttons %}
-
- {{ button.name }}
-
- {% endfor %}
-
-
-
-
-{% endblock %}
-{% block content %}
- {% if config.theme.language == "en" %}
- Top discussions this week
-
-
- You have Javascript disabled, so we can't load the latest discussions. Visit one of our top forum categories directly at the links below:
-
-
-
- Privacy Discussions
-
- Find the latest news and discuss privacy, security, and data protection.
-
-
- Tool Suggestions
-
- Suggest a tool for us to review and provide feedback on other suggestions.
-
-
- Questions
-
- Ask questions and get advice from our community of privacy advocates.
-
-
-
-
- Join the forum
-
-
- {% endif %}
- {{ page.content }}
-
- {% if config.theme.language == "en" %}
-
- {% endif %}
-{% endblock %}
diff --git a/theme/layouts/blog.yml b/theme/layouts/blog.yml
deleted file mode 100644
index ec7c5982..00000000
--- a/theme/layouts/blog.yml
+++ /dev/null
@@ -1,182 +0,0 @@
-definitions:
- - &site_name >-
- {{ config.site_name }}
-
- - &page_title >-
- {{ page.meta.get("title", page.title) }}
-
- - &page_description >-
- {{ page.meta.get("description", config.site_description) or "" }}
-
- - &page_logo >-
- {% if page.meta.preview and page.meta.preview.logo %}
- {{- page.meta.preview.logo -}}
- {% endif %}
-
- - &page_icon >-
- {%- if page.meta.preview and page.meta.preview.icon -%}
- {{- page.meta.preview.icon -}}
- {%- elif page.meta.preview and page.meta.preview.logo -%}
- {%- else -%}
- material/book-open-page-variant
- {%- endif -%}
-
- - &page_color >-
- {%- if page.meta.preview and page.meta.preview.color -%}
- {{- page.meta.preview.color -}}
- {%- else -%}
- #FFD06F
- {%- endif -%}
-
- - &text_color >-
- {%- if page.meta.preview and page.meta.preview.text_color -%}
- {{- page.meta.preview.text_color -}}
- {%- else -%}
- #2d2d2d
- {%- endif -%}
-
- - &background_transparency >-
- {%- if page.meta.preview and page.meta.preview.color -%}
- {{- page.meta.preview.color -}}99
- {%- else -%}
- #FFD06F99
- {%- endif -%}
-
- - &icon_transparency >-
- {%- if page.meta.preview and page.meta.preview.text_color -%}
- {{- page.meta.preview.text_color -}}33
- {%- else -%}
- #00000033
- {%- endif -%}
-
- - &logo >-
- {%- if page.meta.preview and page.meta.preview.site_logo -%}
- theme/assets/brand/logos/svg/logo/{{- page.meta.preview.site_logo -}}
- {%- else -%}
- theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg
- {%- endif -%}
-
- - &updated_time >-
- {% if page.config.date.updated %}
- {{- page.config.date.updated.strftime('%Y-%m-%dT%H:%M:%S+00:00') -}}
- {% else %}
- {{- page.config.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') -}}
- {% endif %}
-
- - &author_mastodon >-
- {%- if page.authors[0].mastodon -%}
- @{{- page.authors[0].mastodon.username -}}@{{- page.authors[0].mastodon.instance -}}
- {%- else -%}
- {{- "@privacyguides@neat.computer" -}}
- {%- endif -%}
-
- - &author_twitter >-
- {%- if page.authors[0].twitter -%}
- @{{- page.authors[0].twitter -}}
- {%- else -%}
- {{- "@privacy_guides" -}}
- {%- endif -%}
-
- - &replacement_image >-
- {%- if page.meta.preview and page.meta.preview.cover -%}
- {{- page.meta.preview.cover -}}
- {%- endif -%}
-
-# Meta tags
-tags:
- # Open Graph
- og:site_name: *site_name
- og:locale: "en_US"
- og:type: article
- og:title: *page_title
- og:description: *page_description
- og:image: "{{ image.url }}"
- og:image:type: "{{ image.type }}"
- og:image:width: "{{ image.width }}"
- og:image:height: "{{ image.height }}"
- og:url: "{{ page.canonical_url }}"
-
- # Blog
- article:published_time: "{{ page.config.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}"
- article:modified_time: *updated_time
- article:section: "{{ page.categories[0].title }}"
- article:author: "https://www.privacyguides.org/articles/{{ page.authors[0].url }}"
-
- # Facebook
- article:publisher: "https://www.facebook.com/PrivacyGuides.org"
- article:tag: "Technology"
-
- # Mastodon
- fediverse:creator: *author_mastodon
-
- # Twitter
- twitter:site: "@privacy_guides"
- twitter:creator: *author_twitter
- twitter:card: summary_large_image
- twitter:title: *page_title
- twitter:description: *page_description
- twitter:image: "{{ image.url }}"
- twitter:image:width: "{{ image.width }}"
- twitter:image:height: "{{ image.height }}"
- twitter:image:alt: "Privacy Guides: Trusted, non-profit privacy and cybersecurity resources."
- twitter:label1: "Written by"
- twitter:data1: "{{ page.authors[0].name }}"
-
-# -----------------------------------------------------------------------------
-# Specification
-# -----------------------------------------------------------------------------
-
-# Card size and layers
-size: { width: 1200, height: 630 }
-layers:
- # Background
- - background:
- color: *page_color
-
- - size: { width: 512, height: 512 }
- offset: { x: 600, y: 59 }
- background:
- image: *page_logo
-
- - background:
- color: *background_transparency
-
- # Page icon
- - size: { width: 630, height: 630 }
- offset: { x: 570, y: 0 }
- icon:
- value: *page_icon
- color: *icon_transparency
-
- # Logo
- - size: { width: 64, height: 64 }
- offset: { x: 64, y: 64 }
- background:
- image: *logo
-
- # Site name
- - size: { width: 768, height: 42 }
- offset: { x: 160, y: 78 }
- typography:
- content: *site_name
- color: *text_color
- font:
- family: Bagnard
- style: Bold
-
- # Page title
- - size: { width: 864, height: 360 }
- offset: { x: 62, y: 192 }
- typography:
- content: *page_title
- align: start
- color: *text_color
- line:
- amount: 4
- height: 1.5
- font:
- family: Bagnard
- style: Bold
-
- - background:
- image: *replacement_image
diff --git a/theme/layouts/home.yml b/theme/layouts/home.yml
deleted file mode 100644
index 0f2f7cf3..00000000
--- a/theme/layouts/home.yml
+++ /dev/null
@@ -1,103 +0,0 @@
-definitions:
- - &background_color >-
- #FFD06F
-
- - &color >-
- #2d2d2d
-
- - &title_font_family >-
- Bagnard
-
- - &font_family >-
- {%- if config.theme.language == "he" -%}
- Suez One
- {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%}
- Noto Sans TC
- {%- else -%}
- Public Sans
- {%- endif -%}
-
- - &page_title >-
- {{ config.site_name }}
-
- - &page_title_with_site_name >-
- {{ page.meta.get("title", page.title) }}
-
- - &page_description >-
- {{ config.extra.privacy_guides.homepage.description }}
-
- - &og_description >-
- {{ page.meta.get("description", config.site_description) or "" }}
-
- - &logo >-
- theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg
-
-# Meta tags
-tags:
- # Open Graph
- og:type: website
- og:title: *page_title_with_site_name
- og:description: *og_description
- og:image: "{{ image.url }}"
- og:image:type: "{{ image.type }}"
- og:image:width: "{{ image.width }}"
- og:image:height: "{{ image.height }}"
- og:url: "{{ page.canonical_url }}"
-
- # Facebook
- article:publisher: "https://www.facebook.com/PrivacyGuides.org"
-
- # Mastodon
- fediverse:creator: "@privacyguides@neat.computer"
-
- # Twitter
- twitter:card: summary_large_image
- twitter:title: *page_title_with_site_name
- twitter:description: *page_description
- twitter:image: "{{ image.url }}"
-
-# -----------------------------------------------------------------------------
-# Specification
-# -----------------------------------------------------------------------------
-
-# Card size and layers
-size: { width: 1200, height: 630 }
-layers:
- # Background
- - background:
- color: *background_color
-
- # Logo
- - size: { width: 64, height: 64 }
- offset: { x: 64, y: 64 }
- background:
- image: *logo
-
- # Page title
- - size: { width: 864, height: 256 }
- offset: { x: 62, y: 192 }
- typography:
- content: *page_title
- align: start
- color: *color
- line:
- amount: 3
- height: 1.5
- font:
- family: *title_font_family
- style: Bold
-
- # Page description
- - size: { width: 864, height: 192 }
- offset: { x: 64, y: 320 }
- typography:
- content: *page_description
- overflow: shrink
- align: start
- color: *color
- line:
- amount: 3
- height: 1.5
- font:
- family: *font_family
- style: Regular
diff --git a/theme/layouts/page.yml b/theme/layouts/page.yml
deleted file mode 100644
index f49b1f03..00000000
--- a/theme/layouts/page.yml
+++ /dev/null
@@ -1,159 +0,0 @@
-definitions:
- - &background_image >-
- {%- if page.meta.cover -%}
- theme/assets/img/cover/{{ page.meta.cover }}
- {%- else -%}
- {{ layout.background_image or "" }}
- {%- endif -%}
-
- - &background_color >-
- {%- if page.meta.cover -%}
- #f7f7fcaa
- {%- else -%}
- #FFD06F
- {%- endif -%}
-
- - &color >-
- {{ layout.color or "#2d2d2d" }}
-
- - &title_font_family >-
- {%- if config.theme.language == "he" -%}
- Suez One
- {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%}
- Noto Serif TC
- {%- else -%}
- Bagnard
- {%- endif -%}
-
- - &title_font_style >-
- {%- if config.theme.language == "he" -%}
- Regular
- {%- else -%}
- Bold
- {%- endif -%}
-
- - &font_family >-
- {%- if config.theme.language == "he" -%}
- Suez One
- {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%}
- Noto Sans TC
- {%- else -%}
- Public Sans
- {%- endif -%}
-
- - &site_name >-
- {{ config.site_name }}
-
- - &page_title >-
- {{ page.meta.get("title", page.title) }}
-
- - &page_title_with_site_name >-
- {%- if page.meta.meta_title -%}
- {{ page.meta.meta_title }}
- {%- else -%}
- {{ page.meta.get("title", page.title) }} - {{ config.site_name }}
- {%- endif -%}
-
- - &page_description >-
- {{ page.meta.get("description", config.site_description) or "" }}
-
- - &page_icon >-
- {{ page.meta.icon or "" }}
-
- - &logo >-
- {%- if page.meta.cover -%}
- theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext.svg
- {%- else -%}
- theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg
- {%- endif -%}
-
-# Meta tags
-tags:
- # Open Graph
- og:site_name: *site_name
- og:type: website
- og:title: *page_title_with_site_name
- og:description: *page_description
- og:image: "{{ image.url }}"
- og:image:type: "{{ image.type }}"
- og:image:width: "{{ image.width }}"
- og:image:height: "{{ image.height }}"
- og:url: "{{ page.canonical_url }}"
-
- # Facebook
- article:publisher: "https://www.facebook.com/PrivacyGuides.org"
-
- # Mastodon
- fediverse:creator: "@privacyguides@neat.computer"
-
- # Twitter
- twitter:site: "@privacy_guides"
- twitter:card: summary_large_image
- twitter:title: *page_title_with_site_name
- twitter:description: *page_description
- twitter:image: "{{ image.url }}"
- twitter:image:width: "{{ image.width }}"
- twitter:image:height: "{{ image.height }}"
-
-# -----------------------------------------------------------------------------
-# Specification
-# -----------------------------------------------------------------------------
-
-# Card size and layers
-size: { width: 1200, height: 630 }
-layers:
- # Background
- - background:
- image: *background_image
- color: *background_color
-
- # Page icon
- - size: { width: 630, height: 630 }
- offset: { x: 570, y: 0 }
- icon:
- value: *page_icon
- color: "#00000033"
-
- # Logo
- - size: { width: 64, height: 64 }
- offset: { x: 64, y: 64 }
- background:
- image: *logo
-
- # Site name
- - size: { width: 768, height: 42 }
- offset: { x: 160, y: 78 }
- typography:
- content: *site_name
- color: *color
- font:
- family: Bagnard
- style: Bold
-
- # Page title
- - size: { width: 864, height: 256 }
- offset: { x: 62, y: 192 }
- typography:
- content: *page_title
- align: start
- color: *color
- line:
- amount: 3
- height: 1.5
- font:
- family: *title_font_family
- style: *title_font_style
-
- # Page description
- - size: { width: 864, height: 96 }
- offset: { x: 64, y: 480 }
- typography:
- content: *page_description
- align: start
- color: *color
- line:
- amount: 3
- height: 1.5
- font:
- family: *font_family
- style: Regular
diff --git a/theme/layouts/pride.yml b/theme/layouts/pride.yml
deleted file mode 100644
index 1f6be9f9..00000000
--- a/theme/layouts/pride.yml
+++ /dev/null
@@ -1,137 +0,0 @@
-definitions:
- - &background_image >-
- {%- if page.meta.cover -%}
- theme/assets/img/cover/{{ page.meta.cover }}
- {%- else -%}
- {{ layout.background_image or "theme/assets/brand/images/png/cover-progress-notext-blur.png" }}
- {%- endif -%}
-
- - &background_color >-
- #f7f7fcaa
-
- - &color >-
- {{ layout.color or "#2d2d2d" }}
-
- - &title_font_family >-
- {%- if config.theme.language == "he" -%}
- Suez One
- {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%}
- Noto Serif TC
- {%- else -%}
- Bagnard
- {%- endif -%}
-
- - &font_family >-
- {%- if config.theme.language == "he" -%}
- Suez One
- {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%}
- Noto Sans TC
- {%- else -%}
- Public Sans
- {%- endif -%}
-
- - &site_name >-
- {{ config.site_name }}
-
- - &page_title >-
- {{ page.meta.get("title", page.title) }}
-
- - &page_title_with_site_name >-
- {%- if page.meta.meta_title -%}
- {{ page.meta.meta_title }}
- {%- else -%}
- {{ page.meta.get("title", page.title) }}
- {%- endif -%}
-
- - &page_description >-
- {{ page.meta.get("description", config.site_description) or "" }}
-
- - &page_icon >-
- {{ page.meta.icon or "" }}
-
- - &logo >-
- theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext.svg
-
-# Meta tags
-tags:
- # Open Graph
- og:type: website
- og:title: *page_title_with_site_name
- og:description: *page_description
- og:image: "{{ image.url }}"
- og:image:type: "{{ image.type }}"
- og:image:width: "{{ image.width }}"
- og:image:height: "{{ image.height }}"
- og:url: "{{ page.canonical_url }}"
-
- # Facebook
- article:publisher: "https://www.facebook.com/PrivacyGuides.org"
-
- # Twitter
- twitter:card: summary_large_image
- twitter:title: *page_title_with_site_name
- twitter:description: *page_description
- twitter:image: "{{ image.url }}"
-
-# -----------------------------------------------------------------------------
-# Specification
-# -----------------------------------------------------------------------------
-
-# Card size and layers
-size: { width: 1200, height: 630 }
-layers:
- # Background
- - background:
- image: *background_image
- color: *background_color
-
- # Page icon
- - size: { width: 630, height: 630 }
- offset: { x: 570, y: 0 }
- icon:
- value: *page_icon
- color: "#00000033"
-
- # Logo
- - size: { width: 64, height: 64 }
- offset: { x: 64, y: 64 }
- background:
- image: *logo
-
- # Site name
- - size: { width: 768, height: 42 }
- offset: { x: 160, y: 78 }
- typography:
- content: *site_name
- color: *color
- font:
- family: Bagnard
- style: Bold
-
- # Page title
- - size: { width: 864, height: 256 }
- offset: { x: 62, y: 192 }
- typography:
- content: *page_title
- align: start
- color: *color
- line:
- amount: 3
- height: 1.5
- font:
- family: *title_font_family
- style: Bold
-
- # Page description
- - size: { width: 864, height: 96 }
- offset: { x: 64, y: 480 }
- typography:
- content: *page_description
- align: start
- color: *color
- line:
- amount: 3
- height: 1.5
- font:
- family: *font_family
- style: Regular
diff --git a/theme/layouts/toolbox.yml b/theme/layouts/toolbox.yml
deleted file mode 100644
index 66374d21..00000000
--- a/theme/layouts/toolbox.yml
+++ /dev/null
@@ -1,155 +0,0 @@
-definitions:
- - &background_image >-
- {%- if page.meta.cover -%}
- theme/assets/img/cover/{{ page.meta.cover }}
- {%- else -%}
- {{ layout.background_image or "" }}
- {%- endif -%}
-
- - &background_color >-
- {%- if page.meta.cover -%}
- #f7f7fcaa
- {%- else -%}
- #FFD06F
- {%- endif -%}
-
- - &color >-
- {{ layout.color or "#2d2d2d" }}
-
- - &title_font_family >-
- {%- if config.theme.language == "he" -%}
- Suez One
- {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%}
- Noto Serif TC
- {%- else -%}
- Bagnard
- {%- endif -%}
-
- - &title_font_style >-
- {%- if config.theme.language == "he" -%}
- Regular
- {%- else -%}
- Bold
- {%- endif -%}
-
- - &font_family >-
- {%- if config.theme.language == "he" -%}
- Suez One
- {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%}
- Noto Sans TC
- {%- else -%}
- Public Sans
- {%- endif -%}
-
- - &site_name >-
- {{ config.site_name }}
-
- - &page_title >-
- {{ page.meta.get("title", page.title) }}
-
- - &page_title_with_site_name >-
- {%- if page.meta.meta_title -%}
- {{ page.meta.meta_title }}
- {%- else -%}
- {{ page.meta.get("title", page.title) }} - {{ config.site_name }}
- {%- endif -%}
-
- - &page_description >-
- {{ page.meta.get("description", config.site_description) or "" }}
-
- - &page_icon >-
- {{ page.meta.icon or "" }}
-
- - &logo >-
- theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg
-
-# Meta tags
-tags:
- # Open Graph
- og:site_name: *site_name
- og:type: website
- og:title: *page_title_with_site_name
- og:description: *page_description
- og:image: "{{ image.url }}"
- og:image:type: "{{ image.type }}"
- og:image:width: "{{ image.width }}"
- og:image:height: "{{ image.height }}"
- og:url: "{{ page.canonical_url }}"
-
- # Facebook
- article:publisher: "https://www.facebook.com/PrivacyGuides.org"
-
- # Mastodon
- fediverse:creator: "@privacyguides@neat.computer"
-
- # Twitter
- twitter:site: "@privacy_guides"
- twitter:card: summary_large_image
- twitter:title: *page_title_with_site_name
- twitter:description: *page_description
- twitter:image: "{{ image.url }}"
- twitter:image:width: "{{ image.width }}"
- twitter:image:height: "{{ image.height }}"
-
-# -----------------------------------------------------------------------------
-# Specification
-# -----------------------------------------------------------------------------
-
-# Card size and layers
-size: { width: 1200, height: 630 }
-layers:
- # Background
- - background:
- image: *background_image
- color: *background_color
-
- # # Page icon
- # - size: { width: 630, height: 630 }
- # offset: { x: 570, y: 0 }
- # icon:
- # value: *page_icon
- # color: "#00000033"
-
- # Logo
- - size: { width: 64, height: 64 }
- offset: { x: 64, y: 64 }
- background:
- image: *logo
-
- # Site name
- - size: { width: 768, height: 42 }
- offset: { x: 160, y: 78 }
- typography:
- content: Activism Toolbox
- color: *color
- font:
- family: Bagnard
- style: Bold
-
- # Page title
- - size: { width: 864, height: 256 }
- offset: { x: 160, y: 256 }
- typography:
- content: *page_title
- align: start
- color: *color
- line:
- amount: 3
- height: 1.5
- font:
- family: *title_font_family
- style: *title_font_style
-
- # # Page description
- # - size: { width: 864, height: 96 }
- # offset: { x: 64, y: 480 }
- # typography:
- # content: *page_description
- # align: start
- # color: *color
- # line:
- # amount: 3
- # height: 1.5
- # font:
- # family: *font_family
- # style: Regular
diff --git a/theme/layouts/video.yml b/theme/layouts/video.yml
deleted file mode 100644
index 90ef6cab..00000000
--- a/theme/layouts/video.yml
+++ /dev/null
@@ -1,114 +0,0 @@
-definitions:
- - &site_name >-
- {{ config.site_name }}
-
- - &page_title >-
- {{ page.meta.get("title", page.title) }}
-
- - &page_description >-
- {{ page.meta.get("description", config.site_description) or "" }}
-
- - &page_logo >-
- {% if page.meta.preview and page.meta.preview.logo %}
- {{- page.meta.preview.logo -}}
- {% endif %}
-
- - &page_icon >-
- {%- if not page.meta.preview or not page.meta.preview.logo -%}
- material/video-box
- {%- endif -%}
-
- - &logo >-
- theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg
-
- - &thumbnail >-
- {%- if page.meta.get("thumbnail") -%}
- {{ config.site_url }}{{ page.meta.get("thumbnail") | replace("https://", "assets/external/") }}
- {%- else -%}
- {{ image.url }}
- {%- endif -%}
-
-# Meta tags
-tags:
- # Open Graph
- og:type: video.other
- og:title: *page_title
- og:description: *page_description
- og:image: *thumbnail
- og:url: "{{ page.canonical_url }}"
-
- # Video
- og:video: "{{ page.meta.embed }}"
- og:video:url: "{{ page.meta.embed }}"
- og:video:secure_url: "{{ page.meta.embed }}"
- og:video:type: "text/html"
- og:video:width: "560"
- og:video:height: "315"
- video:release_date: "{{ page.config.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}"
-
- # Mastodon
- fediverse:creator: "@privacyguides@neat.computer"
-
- # Twitter
- twitter:site: "@privacy_guides"
- twitter:creator: "@privacy_guides"
- twitter:card: summary_large_image
- twitter:title: *page_title
- twitter:description: *page_description
- twitter:image: *thumbnail
-
-# -----------------------------------------------------------------------------
-# Specification
-# -----------------------------------------------------------------------------
-
-# Card size and layers
-size: { width: 1200, height: 630 }
-layers:
- # Background
- - background:
- color: "#FFD06F"
-
- - size: { width: 512, height: 512 }
- offset: { x: 600, y: 59 }
- background:
- image: *page_logo
-
- - background:
- color: "#FFD06F99"
-
- # Page icon
- - size: { width: 630, height: 630 }
- offset: { x: 570, y: 0 }
- icon:
- value: *page_icon
- color: "#00000033"
-
- # Logo
- - size: { width: 64, height: 64 }
- offset: { x: 64, y: 64 }
- background:
- image: *logo
-
- # Site name
- - size: { width: 768, height: 42 }
- offset: { x: 160, y: 78 }
- typography:
- content: *site_name
- color: "#2d2d2d"
- font:
- family: Bagnard
- style: Bold
-
- # Page title
- - size: { width: 864, height: 256 }
- offset: { x: 62, y: 192 }
- typography:
- content: *page_title
- align: start
- color: "#2d2d2d"
- line:
- amount: 3
- height: 1.5
- font:
- family: Bagnard
- style: Bold
diff --git a/theme/main.html b/theme/main.html
deleted file mode 100644
index 785fb529..00000000
--- a/theme/main.html
+++ /dev/null
@@ -1,135 +0,0 @@
-
-{% extends "base.html" %}
-{% block site_meta %}
-
-
- {% if page.meta and page.meta.description %}
-
- {% endif %}
- {% if page.meta and page.meta.author %}
-
- {% elif page.authors %}
-
- {% elif config.site_author %}
-
- {% endif %}
- {% if page.meta and page.meta.canonical_url %}
-
- {% elif page.canonical_url %}
-
- {% endif %}
- {% if page.previous_page %}
-
- {% endif %}
- {% if page.next_page %}
-
- {% endif %}
- {% if config.extra.alternate is iterable %}
- {% if page.is_homepage %}
-
- {% else %}
-
- {% endif %}
- {% for alt in config.extra.alternate %}
-
- {% endfor %}
- {% endif %}
- {% if "rss" in config.plugins %}
-
-
- {% endif %}
-
-
- {% if page %}
-
- {% endif %}
-{% endblock %}
-{% block htmltitle %}
- {% if page.meta and page.meta.meta_title and config.theme.language == "en" %}
- {{ page.meta.meta_title }}
- {% elif page.meta and page.meta.title %}
- {{ page.meta.title }} - {{ config.site_name }}
- {% elif page.title and not page.is_homepage %}
- {{ page.title | striptags }} - {{ config.site_name }}
- {% else %}
- {{ config.site_name }}
- {% endif %}
-{% endblock %}
-
-{% block extrahead %}
-
- {% if config.extra.privacy_guides.translation_stylesheet %}
-
- {% endif %}
-
- {% if page and page.meta and page.meta.robots %}
-
- {% else %}
-
- {% endif %}
-
- {% if not config.extra.offline %}
-
-
- {% endif %}
-
- {% if config.extra.context == "production" %}
-
-
-
-
- {% if config.theme.language == "en" %}
-
- {% endif %}
-
- {% endif %}
-
- {% if page and page.meta and page.meta.schema %}
-
- {% endif %}
-{% endblock %}
diff --git a/theme/partials/alternate.html b/theme/partials/alternate.html
deleted file mode 100644
index 91b2afea..00000000
--- a/theme/partials/alternate.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
diff --git a/theme/partials/content.html b/theme/partials/content.html
deleted file mode 100644
index 6dc85d93..00000000
--- a/theme/partials/content.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-{% if page and page.meta and page.meta.cover %}
-
-
-
- {{ page.title | d(config.site_name, true)}}
-{% endif %}
-
-
-{% include "partials/tags.html" %}
-
-
-{% include "partials/actions.html" %}
-
-{% if "\x3ch1" not in page.content and not page.meta.cover %}
- {{ page.title | d(config.site_name, true)}}
-{% endif %}
-
-
-
-{{ page.content }}
-
-
-
-{% include "partials/source-file.html" %}
-
-
-{% include "partials/feedback.html" %}
-
-{% set translation_notice = config.extra.privacy_guides.translation_notice %}
-{% if config.theme.language == "en" %}
-{% elif translation_notice %}
-
-
{{ translation_notice.notice }} {{ translation_notice.cta }}
-
You're viewing the {{ translation_notice.language }} copy of Privacy Guides, translated by our fantastic language team on Crowdin . If you notice an error, or see any untranslated sections on this page, please consider helping out!
-
-{% endif %}
-
-
-{% include "partials/comments.html" %}
diff --git a/theme/partials/copyright.html b/theme/partials/copyright.html
deleted file mode 100644
index 99858263..00000000
--- a/theme/partials/copyright.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-{% set copyright = config.extra.privacy_guides.footer %}
-
-
-
- {% if copyright %}
-
- {% endif %}
-
diff --git a/theme/partials/donate.html b/theme/partials/donate.html
deleted file mode 100644
index dac9fa7c..00000000
--- a/theme/partials/donate.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/theme/partials/header.html b/theme/partials/header.html
deleted file mode 100644
index 639eb857..00000000
--- a/theme/partials/header.html
+++ /dev/null
@@ -1,149 +0,0 @@
-
-
-{% macro notice() %}{% if config.extra.offline %}
- You're viewing an offline copy of Privacy Guides built on {{ build_date_utc.strftime('%B %d, %Y at %I:%M%p') }}.
-
- Visit privacyguides.org for the latest version.
-
-{% elif config.extra.context == "deploy-preview" %}
- You're viewing an unreviewed preview of Privacy Guides built on {{ build_date_utc.strftime('%B %d, %Y at %I:%M%p') }}.
- These previews are user-submitted and may not necessarily reflect the opinion of the site.
-
- Visit privacyguides.org for current advice.
-
-{% elif config.extra.context == "branch-deploy" %}
- You're viewing a staging branch of Privacy Guides built on {{ build_date_utc.strftime('%B %d, %Y at %I:%M%p') }}.
- The information on this page may be incomplete or otherwise not yet meet our editorial release standards.
-
- Visit privacyguides.org for current advice.
-
-{% else %}{% endif %}{% endmacro %}
-
-{% if notice() %}
-
-{% endif %}
-
-
-{% set class = "md-header" %}
-{% if "navigation.tabs.sticky" in features %}
- {% set class = class ~ " md-header--shadow md-header--lifted" %}
-{% elif "navigation.tabs" not in features %}
- {% set class = class ~ " md-header--shadow" %}
-{% endif %}
-
-
-
-
-
-
- {% if "navigation.tabs.sticky" in features %}
- {% if "navigation.tabs" in features %}
- {% include "partials/tabs.html" %}
- {% endif %}
- {% endif %}
-
diff --git a/theme/partials/logo.html b/theme/partials/logo.html
deleted file mode 100644
index 760fa4a3..00000000
--- a/theme/partials/logo.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
diff --git a/theme/partials/path-item.html b/theme/partials/path-item.html
deleted file mode 100644
index 134be484..00000000
--- a/theme/partials/path-item.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-{% macro render(nav_item, ref = nav_item) %}
-
-
- {% if nav_item.children %}
- {% set first = nav_item.children | first %}
-
-
- {% if first.children %}
- {{ render(first, ref) }}
-
-
- {% else %}
-
-
- {{ ref.title }}
-
-
- {% endif %}
-
-
- {% else %}
-
-
- {{ ref.title }}
-
-
- {% endif %}
-{% endmacro %}
diff --git a/theme/partials/path.html b/theme/partials/path.html
deleted file mode 100644
index c8ac1b5b..00000000
--- a/theme/partials/path.html
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-{% import "partials/path-item.html" as item with context %}
-
-
-{% if page.meta and page.meta.hide %}
- {% set hidden = "hidden" if "path" in page.meta.hide %}
-{% endif %}
-
-
-{% set depth = page.ancestors | length %}
-{% if nav.homepage %}
- {% set depth = depth + 1 %}
-{% endif %}
-
-
-{% if depth > 1 %}
- {% set count = namespace(value=1) %}
-
-
- {% if nav.homepage %}
-
- {{ item.render(nav.homepage) }}
-
- {% set count.value = count.value + 1 %}
-
- {% endif %}
- {% for nav_item in page.ancestors | reverse %}
-
- {{ item.render(nav_item) }}
-
- {% set count.value = count.value + 1 %}
-
- {% endfor %}
-
-
-
-
-
-
-{% endif %}
diff --git a/theme/partials/source-file.html b/theme/partials/source-file.html
deleted file mode 100644
index ff9cd460..00000000
--- a/theme/partials/source-file.html
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
-
-{% macro render_updated(date) %}
-
-
- {% include ".icons/material/clock-edit-outline.svg" %}
-
- {{ date }}
-
-{% endmacro %}
-
-
-{% macro render_created(date) %}
-
-
- {% include ".icons/material/clock-plus-outline.svg" %}
-
- {{ date }}
-
-{% endmacro %}
-
-
-
-
-{% macro render_authors(authors) %}
- {% set git_authors = config.plugins.get("git-authors") %}
-
-
- {% if authors | length == 1 %}
- {% include ".icons/material/account.svg" %}
- {% else %}
- {% include ".icons/material/account-group.svg" %}
- {% endif %}
-
-
- {% for author in authors %}
- {%- if loop.index0 < 2 %}{{- author.name ~ ' (' ~ author.contribution ~ ')' -}}
- {%- else -%}{{- author.name -}} {%- endif -%}
- {%- if loop.revindex > 1 %}, {% endif -%}
- {% endfor %}
-
-
-{% endmacro %}
-
-
-
-
-
-{% if page.meta %}
- {% if page.meta.git_revision_date_localized %}
- {% set updated = page.meta.git_revision_date_localized %}
- {% elif page.meta.revision_date %}
- {% set updated = page.meta.revision_date %}
- {% endif %}
-
-
- {% if page.meta.git_creation_date_localized %}
- {% set created = page.meta.git_creation_date_localized %}
- {% endif %}
-{% endif %}
-
-
-{% if updated or created or git_info %}
-
-
-
- {% if updated %}
- {{ render_updated(updated) }}
- {% endif %}
-
-
- {% if created %}
- {{ render_created(created) }}
- {% endif %}
-
-
- {% if git_info %}
- {{ render_authors(git_info.get("page_authors")) }}
- {% endif %}
-
-{% endif %}
diff --git a/theme/partials/video.html b/theme/partials/video.html
deleted file mode 100644
index c24880ee..00000000
--- a/theme/partials/video.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
diff --git a/theme/review-article.html b/theme/review-article.html
deleted file mode 100644
index 3d33e2f2..00000000
--- a/theme/review-article.html
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-{% extends "blog-post.html" %}
-
-{% import "partials/nav-item.html" as item with context %}
-
-{% block extra_sidebar %}
-
- {% if page.meta.review %}
-
-
-
-
- Our rating
-
-
-
-
-
-
-
-
-
- {% for i in range(1, 6) %}
- {% if i <= page.meta.review.rating %}
- {% include ".icons/material/star.svg" %}
- {% else %}
- {% if i - 0.5 == page.meta.review.rating %}
- {% include ".icons/material/star-half-full.svg" %}
- {% else %}
- {% include ".icons/material/star-outline.svg" %}
- {% endif %}
- {% endif %}
- {% endfor %}
-
-
-
-
-
-
- Pros:
-
-
- {% for pro in page.meta.review.pros %}
- {{ pro }}
- {% endfor %}
-
-
-
-
-
-
-
-
- Cons:
-
-
- {% for con in page.meta.review.cons %}
- {{ con }}
- {% endfor %}
-
-
-
-
-
-
-
-
-
-
- {% endif %}
-
-{% endblock %}
diff --git a/theme/video-post.html b/theme/video-post.html
deleted file mode 100644
index 50e6e332..00000000
--- a/theme/video-post.html
+++ /dev/null
@@ -1,259 +0,0 @@
-
-
-{% extends "main.html" %}
-
-{% import "partials/nav-item.html" as item with context %}
-
-{% block htmltitle %}
- [Video] {{ page.title | striptags }} - {{ config.site_name }}
-{% endblock %}
-
-{% block extrahead %}
-
-
-{% endblock %}
-
-
-{% block container %}
-
-
-
-
-
-
-
- {% block content %}
-
- {% include "partials/tags.html" %}
-
-
- {% include "partials/actions.html" %}
-
- {% if "\x3ch1" not in page.content and not page.meta.cover %}
- {{ page.title | d(config.site_name, true)}}
- {% endif %}
-
-
-
-
-
-
-
-
- Watch on YouTube
-
-
-
-
- Watch on PeerTube
-
-
-
-
- {{ page.content }}
-
-
-
- {% include "partials/source-file.html" %}
-
-
- {% include "partials/feedback.html" %}
- {% endblock %}
-
-
-{% endblock %}
diff --git a/theme/video.html b/theme/video.html
deleted file mode 100644
index 12003212..00000000
--- a/theme/video.html
+++ /dev/null
@@ -1,26 +0,0 @@
-{% extends "main.html" %}
-
-
-{% block container %}
-
-
-
-
-
-
-
- {% for post in posts %}
- {% include "partials/video.html" %}
- {% endfor %}
-
-
- {% if pagination %}
- {% block pagination %}
- {% include "partials/pagination.html" %}
- {% endblock %}
- {% endif %}
-
-
-{% endblock %}
diff --git a/tools/archive-releases.sh b/tools/archive-releases.sh
deleted file mode 100755
index 3a239e14..00000000
--- a/tools/archive-releases.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-REPO="privacyguides/privacyguides.org"
-BASE_DIR="releases"
-
-mkdir -p "$BASE_DIR"
-
-# Get all release tags using gh CLI
-release_tags=$(gh release list -R "$REPO" --limit 1000 | awk '{print $1}')
-
-for tag in $release_tags; do
- target_dir="$BASE_DIR/$tag"
- mkdir -p "$target_dir"
- echo "Downloading assets for release: $tag"
- gh release download "$tag" -R "$REPO" --dir "$target_dir"
-done
-
-echo "All releases downloaded."
diff --git a/tools/delete-unreferenced.sh b/tools/delete-unreferenced.sh
deleted file mode 100644
index 9466b42b..00000000
--- a/tools/delete-unreferenced.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/bash
-
-# Script to find and delete unreferenced asset files
-# This script searches through all HTML, CSS, and JavaScript files to see if asset files are referenced
-
-set -e # Exit on any error
-
-echo -e "Starting unreferenced asset cleanup..."
-echo "Assets directory: $ASSETS_DIR"
-echo "Search directory: $SEARCH_DIR"
-echo ""
-
-# Check if assets directory exists
-if [ ! -d "$ASSETS_DIR" ]; then
- echo -e "Error: Assets directory '$ASSETS_DIR' not found!"
- exit 1
-fi
-
-# Find all asset files recursively
-echo "Finding all asset files..."
-ASSET_FILES=$(find "$ASSETS_DIR" -type f)
-ASSET_COUNT=$(echo "$ASSET_FILES" | wc -l)
-echo "Found $ASSET_COUNT asset files"
-echo ""
-
-# Find all HTML, CSS, and JavaScript files
-echo "Finding all HTML, CSS, and JavaScript files..."
-SEARCH_FILES=$(find "$SEARCH_DIR" \( -name "*.html" -o -name "*.css" -o -name "*.js" \) -type f)
-SEARCH_COUNT=$(echo "$SEARCH_FILES" | wc -l)
-echo "Found $SEARCH_COUNT HTML, CSS, and JavaScript files"
-echo ""
-
-# Process each asset file
-echo "Checking each asset file for references..."
-echo ""
-
-while IFS= read -r asset_file; do
- if [ -z "$asset_file" ]; then
- continue
- fi
-
- # Get just the filename (without path)
- asset_filename=$(basename "$asset_file")
-
- # Search for this filename in all HTML, CSS, and JavaScript files
- found_reference=false
-
- while IFS= read -r search_file; do
- if [ -z "$search_file" ]; then
- continue
- fi
-
- # Simple string search for the filename in the file
- if grep -q "$asset_filename" "$search_file" 2>/dev/null; then
- found_reference=true
- break
- fi
- done <<< "$SEARCH_FILES"
-
- if [ "$found_reference" = false ]; then
- echo -e "Unreferenced: $asset_file"
- rm "$asset_file"
- fi
-done <<< "$ASSET_FILES"
diff --git a/tools/generate-members.py b/tools/generate-members.py
deleted file mode 100644
index c8ba19fc..00000000
--- a/tools/generate-members.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import requests
-import os
-
-# Fetch members from the API
-members_api_url = os.getenv('MEMBERS_API_URL', 'https://ghost.privacyguides.org/cache/members.json')
-members_response = requests.get(members_api_url)
-members_data = members_response.json()[0]
-
-members = members_data['members']
-
-html_output = ""
-for member in members:
- username = member['username']
- html_output += f' '
-
-# Append the count of private members
-if members_data['unaccounted'] > 0:
- html_output += f'+{members_data["unaccounted"]} '
-
-print(html_output)
diff --git a/tools/generate-topics.sh b/tools/generate-topics.sh
deleted file mode 100755
index 85d73f0b..00000000
--- a/tools/generate-topics.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/bash
-
-DATE_CMD="date"
-
-# Check if the script is running on macOS
-if [[ "$OSTYPE" == "darwin"* ]]; then
- DATE_CMD="gdate"
-fi
-
-# Defaults
-source="https://discuss.privacyguides.net/top.json?period=weekly"
-tag="top posts"
-destination="./site/en/index.html"
-count=3
-
-for arg in "$@"
-do
- case $arg in
- --source=*)
- source="${arg#*=}"
- shift
- ;;
- --tag=*)
- tag="${arg#*=}"
- shift
- ;;
- --destination=*)
- destination="${arg#*=}"
- shift
- ;;
- --count=*)
- count="${arg#*=}"
- shift
- ;;
- esac
-done
-
-# URL of the Discourse top.json
-DISCOURSE_URL="$source"
-
-# Fetch the JSON data
-json_data="$(curl -s "$DISCOURSE_URL")"
-
-# Extract the first 3 topics
-topics=$(echo "$json_data" | jq -r ".topic_list.topics[:$count]")
-
-users=$(echo "$json_data" | jq -r ".users")
-# Generate HTML for the first 3 posts
-html_output=""
-for row in $(echo "${topics}" | jq -r '.[] | @base64'); do
- _jq() {
- echo "${row}" | base64 --decode | jq -r "${1}"
- }
-
- title="$(_jq '.title')"
- id=$(_jq '.id')
- like_count=$(_jq '.like_count')
- reply_count=$(_jq '.posts_count')
- views=$(_jq '.views')
-
- author_id=$(_jq '.posters[0].user_id')
- author_info=$(echo "${users}" | jq -r ".[] | select(.id==$author_id)")
- author_username=$(echo "${author_info}" | jq -r ".username")
-
- html_output+=""
- html_output+="${title}
"
- html_output+=" "
- html_output+=""
- html_output+=""
- if [[ -z "$BUILD_OFFLINE" ]]; then
- html_output+=" "
- fi
- html_output+=" Posted by $author_username "
- html_output+=" "
- html_output+="
"
- html_output+=""
- html_output+="eye "
- html_output+=" ${views} "
- html_output+="heart "
- html_output+=" ${like_count} "
- html_output+="reply "
- html_output+=" ${reply_count} "
- html_output+="
"
- html_output+=" "
-done
-
-tempfile=$(mktemp)
-echo "$html_output" > "$tempfile"
-
-# Insert the HTML output between the comments in index.html
-sed -i'.bak' "//,//{//!d;}; //r $tempfile" "$destination"
diff --git a/tools/symlink-duplicates.sh b/tools/symlink-duplicates.sh
deleted file mode 100644
index da3daf66..00000000
--- a/tools/symlink-duplicates.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-declare -A file_hashes
-
-find . -type f | while read -r file; do
- hash=$(sha256sum "$file" | awk '{print $1}')
- if [[ -n "${file_hashes[$hash]+_}" ]]; then
- # Duplicate found, replace with symlink to first copy
- first="${file_hashes[$hash]}"
- # Remove the duplicate file
- rm "$file"
- # Create symlink (relative path)
- ln -s "$(realpath --relative-to="$(dirname "$file")" "$first")" "$file"
- echo "Replaced duplicate: $file -> $first"
- else
- # First time seeing this hash
- file_hashes[$hash]="$file"
- fi
-done