feat: Enhance 404 page and templates with dynamic terminal identity and configurable options

This commit is contained in:
2026-03-19 00:14:06 +03:00
parent 0173f0c1e1
commit eccf9d6355
8 changed files with 55 additions and 27 deletions
+1
View File
@@ -4,6 +4,7 @@
--text-color: #1a1a1a;
--text-muted: #6b7280;
--accent-color: #10b981; // Emerald
--accent-hover: #059669; // Emerald darker
--surface-color: #ffffff;
--border-color: rgba(0, 0, 0, 0.05);
--shadow-color: rgba(0, 0, 0, 0.05);
+6 -3
View File
@@ -4,7 +4,10 @@
var body = document.getElementById('term-body');
if (!body) return;
var path = window.location.pathname;
var path = window.location.pathname;
var promptUser = body.dataset.prompt || 'user@pwnbox';
var hostname = body.dataset.hostname || 'pwnbox';
var whoami = body.dataset.whoami || 'l0st_r3ader';
var links = [
{ href: body.dataset.linkHome, label: '~/home' },
@@ -16,7 +19,7 @@
{ type: 'cmd', text: 'cd ' + path },
{ type: 'out-error', text: 'bash: cd: ' + path + ': No such file or directory' },
{ type: 'cmd', text: 'whoami' },
{ type: 'out', text: 'l0st_r3ader' },
{ type: 'out', text: whoami },
{ type: 'cmd', text: 'ls ~/recovery/' },
{ type: 'ls' }
];
@@ -27,7 +30,7 @@
function ps1() {
var s = document.createElement('span');
s.className = 'term-ps1';
s.textContent = 'user@blackout:~$ ';
s.textContent = promptUser + '@' + hostname + ':~$ ';
return s;
}
+5 -2
View File
@@ -13,13 +13,16 @@
<span class="dot-yellow"></span>
<span class="dot-green"></span>
</div>
<span class="term-titlebar-label">bash — pwnbox</span>
<span class="term-titlebar-label">bash — {{ config.extra.terminal_hostname | default(value="pwnbox") }}</span>
</div>
<div class="term-body" id="term-body"
data-link-home="{{ get_url(path="") }}"
data-link-posts="{{ get_url(path="/posts") }}"
data-link-tags="{{ get_url(path="/tags") }}">
data-link-tags="{{ get_url(path="/tags") }}"
data-prompt="{{ config.extra.terminal_prompt_user | default(value="user@pwnbox") }}"
data-hostname="{{ config.extra.terminal_hostname | default(value="pwnbox") }}"
data-whoami="{{ config.extra.terminal_whoami | default(value="l0st_r3ader") }}">
<!-- lines injected by 404.js -->
</div>
+15 -15
View File
@@ -25,7 +25,7 @@
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@andwati">
<meta name="twitter:site" content="{{ config.extra.twitter_handle | default(value="@andwati_") }}">
<meta name="twitter:title" content="{% block twitter_title %}{{ config.title }}{% endblock twitter_title %}">
<meta name="twitter:description" content="{% block twitter_description %}{{ config.description }}{% endblock twitter_description %}">
<meta name="twitter:image" content="{% block twitter_image %}{{ config.base_url }}/images/og-image.png{% endblock twitter_image %}">
@@ -180,16 +180,16 @@
});
</script>
<!-- CookieConsent: emerald accent for both light and dark modes -->
<!-- CookieConsent: accent colors pulled from CSS custom properties -->
<style>
/* Light mode */
#cc-main {
--cc-btn-primary-bg: #10b981;
--cc-btn-primary-bg: var(--accent-color);
--cc-btn-primary-color: #ffffff;
--cc-btn-primary-border-color: #10b981;
--cc-btn-primary-hover-bg: #059669;
--cc-btn-primary-hover-border-color: #059669;
--cc-toggle-on-bg: #10b981;
--cc-btn-primary-border-color: var(--accent-color);
--cc-btn-primary-hover-bg: var(--accent-hover);
--cc-btn-primary-hover-border-color: var(--accent-hover);
--cc-toggle-on-bg: var(--accent-color);
--cc-font-family: 'Outfit', sans-serif;
--cc-btn-border-radius: 6px;
--cc-modal-border-radius: 10px;
@@ -200,11 +200,11 @@
--cc-bg: #111111;
--cc-primary-color: #f4f4f5;
--cc-secondary-color: #a1a1aa;
--cc-btn-primary-bg: #10b981;
--cc-btn-primary-bg: var(--accent-color);
--cc-btn-primary-color: #ffffff;
--cc-btn-primary-border-color: #10b981;
--cc-btn-primary-hover-bg: #059669;
--cc-btn-primary-hover-border-color: #059669;
--cc-btn-primary-border-color: var(--accent-color);
--cc-btn-primary-hover-bg: var(--accent-hover);
--cc-btn-primary-hover-border-color: var(--accent-hover);
--cc-btn-secondary-bg: rgba(255,255,255,0.06);
--cc-btn-secondary-color: #a1a1aa;
--cc-btn-secondary-border-color: rgba(255,255,255,0.1);
@@ -213,15 +213,15 @@
--cc-separator-border-color: rgba(255,255,255,0.1);
--cc-cookie-category-block-bg: rgba(255,255,255,0.04);
--cc-cookie-category-block-border: rgba(255,255,255,0.08);
--cc-toggle-on-bg: #10b981;
--cc-toggle-on-bg: var(--accent-color);
--cc-footer-bg: #0a0a0a;
--cc-footer-border-color: rgba(255,255,255,0.08);
}
/* Emerald top border, no default box-shadow */
/* Accent top border, no default box-shadow */
#cc-main .cm,
#cc-main .pm { box-shadow: none !important; }
#cc-main .cm { border-top: 2px solid #10b981 !important; }
#cc-main .cm { border-top: 2px solid var(--accent-color) !important; }
</style>
{% block head %}{% endblock head %}
@@ -261,7 +261,7 @@
<div class="search-modal" role="dialog" aria-modal="true" aria-label="Search posts">
<div class="search-header">
<svg viewBox="0 0 24 24" width="18" height="18" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" id="search-input" placeholder="Search posts..." autocomplete="off">
<input type="text" id="search-input" placeholder="{{ config.extra.search_placeholder | default(value="Search posts...") }}" autocomplete="off">
</div>
<div id="search-results" class="search-results"></div>
<div class="search-footer">
+4 -3
View File
@@ -34,11 +34,12 @@ block og_url %}{{ config.base_url }}/{% endblock og_url %} {% block head %}
class="post-feed-list"
style="max-width: 65ch; margin: 0 auto; display: flex; flex-direction: column; gap: 2.5rem"
>
{% set section = get_section(path="posts/_index.md") %} {% for page in section.pages | slice(end=3) %} {% include
"partials/post-card.html" %} {% endfor %}
{% set section = get_section(path="posts/_index.md") %}
{% set post_limit = config.extra.homepage_post_limit | default(value=3) %}
{% for page in section.pages | slice(end=post_limit) %} {% include "partials/post-card.html" %} {% endfor %}
</div>
<div class="view-all-posts">
<a href="/posts" class="btn-view-all">View all posts</a>
<a href="/posts" class="btn-view-all">{{ config.extra.view_all_posts_label | default(value="View all posts") }}</a>
</div>
{% endblock content %}
+1 -1
View File
@@ -17,7 +17,7 @@
<!-- Twitter Card -->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@andwati">
<meta name="twitter:site" content="{{ config.extra.twitter_handle | default(value="@andwati_") }}">
<meta name="twitter:title" content="{% block twitter_title %}{{ config.title }}{% endblock twitter_title %}">
<meta name="twitter:description" content="{% block twitter_description %}{{ config.description | default(value="Binary exploitation, reverse engineering, and offensive security blog.") }}{% endblock twitter_description %}">
{% block twitter_extra %}{% endblock twitter_extra %}
+4 -3
View File
@@ -21,12 +21,13 @@
{% endif %}
{% endfor %}
{# If we found any related pages, pick top 3 and display them #}
{# If we found any related pages, pick top N and display them #}
{% set related_limit = config.extra.related_posts_limit | default(value=3) %}
{% if related_pages | length > 0 %}
<div class="related-posts-section">
<h3>Related Posts</h3>
<h3>{{ config.extra.related_posts_title | default(value="Related Posts") }}</h3>
<div class="related-posts-grid">
{% for related_page in related_pages | slice(end=3) %}
{% for related_page in related_pages | slice(end=related_limit) %}
{# We can use a simplified card or the existing post-card.html #}
{% set page = related_page %}
{% include "partials/post-card.html" %}
+19
View File
@@ -60,3 +60,22 @@ url = "@/archive/_index.md"
enable_search = true
enable_theme_toggle = true
show_rss_link = true
# Social meta
twitter_handle = "@andwati_"
# Homepage
homepage_post_limit = 3
view_all_posts_label = "View all posts"
# Related posts
related_posts_limit = 3
related_posts_title = "Related Posts"
# Search
search_placeholder = "Search posts..."
# 404 terminal identity
terminal_hostname = "pwnbox"
terminal_prompt_user = "user@blackout"
terminal_whoami = "l0st_r3ader"