updated the makefile, added new org files (2026), and started working on adding a search feature for the website.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
output/
|
output/
|
||||||
backup/
|
backup/
|
||||||
|
*~
|
||||||
1
Makefile
1
Makefile
@@ -4,6 +4,7 @@
|
|||||||
all:
|
all:
|
||||||
@echo "Building project (full rebuild with search index)..."
|
@echo "Building project (full rebuild with search index)..."
|
||||||
emacs -Q --script build-site.el
|
emacs -Q --script build-site.el
|
||||||
|
python search-index-json.py
|
||||||
|
|
||||||
# Clean output directory
|
# Clean output directory
|
||||||
clean:
|
clean:
|
||||||
|
|||||||
3475
assets/scripts/lunr.js
Normal file
3475
assets/scripts/lunr.js
Normal file
File diff suppressed because it is too large
Load Diff
210
assets/scripts/search.js
Normal file
210
assets/scripts/search.js
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
let lunrIndex;
|
||||||
|
let documents = [];
|
||||||
|
|
||||||
|
/* ------------------------------
|
||||||
|
JSON → documents
|
||||||
|
-------------------------------- */
|
||||||
|
function extractDocuments(node, currentPath = "") {
|
||||||
|
if (node.type === "folder" && node.children) {
|
||||||
|
const nextPath = currentPath
|
||||||
|
? `${currentPath}/${node.name}`
|
||||||
|
: node.name;
|
||||||
|
|
||||||
|
node.children.forEach(child => {
|
||||||
|
extractDocuments(child, nextPath);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.type === "file") {
|
||||||
|
const filePath = currentPath
|
||||||
|
? `${currentPath}/${node.name}`
|
||||||
|
: node.name;
|
||||||
|
|
||||||
|
documents.push({
|
||||||
|
id: documents.length.toString(),
|
||||||
|
title: node.name,
|
||||||
|
content: node.content || "",
|
||||||
|
path: "/" + filePath.replace(/^output\//, "")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------
|
||||||
|
Lunr index
|
||||||
|
-------------------------------- */
|
||||||
|
function buildIndex() {
|
||||||
|
lunrIndex = lunr(function () {
|
||||||
|
this.ref("id");
|
||||||
|
this.field("title", { boost: 10 });
|
||||||
|
this.field("content");
|
||||||
|
|
||||||
|
documents.forEach(doc => this.add(doc));
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("Lunr index built with", documents.length, "documents");
|
||||||
|
}
|
||||||
|
|
||||||
|
async function initSearch() {
|
||||||
|
const response = await fetch("test.json");
|
||||||
|
const json = await response.json();
|
||||||
|
|
||||||
|
extractDocuments(json);
|
||||||
|
buildIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
initSearch();
|
||||||
|
|
||||||
|
/* ------------------------------
|
||||||
|
Fuzzy search
|
||||||
|
-------------------------------- */
|
||||||
|
function buildFuzzyQuery(query) {
|
||||||
|
return query
|
||||||
|
.split(/\s+/)
|
||||||
|
.map(term => `${term}~1`)
|
||||||
|
.join(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
function search(query) {
|
||||||
|
if (!lunrIndex) return [];
|
||||||
|
|
||||||
|
const results = lunrIndex.search(buildFuzzyQuery(query));
|
||||||
|
|
||||||
|
return results.map(r => {
|
||||||
|
const doc = documents.find(d => d.id === r.ref);
|
||||||
|
return {
|
||||||
|
title: doc.title,
|
||||||
|
path: doc.path,
|
||||||
|
score: r.score,
|
||||||
|
preview: doc.content.slice(0, 200) + "…"
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------
|
||||||
|
DOM elements
|
||||||
|
-------------------------------- */
|
||||||
|
const searchInput = document.getElementById("search-input");
|
||||||
|
const searchBtn = document.getElementById("search-btn");
|
||||||
|
|
||||||
|
/* ------------------------------
|
||||||
|
Live dropdown results
|
||||||
|
-------------------------------- */
|
||||||
|
const resultsBox = document.createElement("div");
|
||||||
|
resultsBox.id = "search-results";
|
||||||
|
document.body.appendChild(resultsBox);
|
||||||
|
|
||||||
|
function showResults(results) {
|
||||||
|
resultsBox.innerHTML = "";
|
||||||
|
|
||||||
|
if (results.length === 0) {
|
||||||
|
resultsBox.style.display = "none";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const rect = searchInput.getBoundingClientRect();
|
||||||
|
resultsBox.style.top = `${rect.bottom + window.scrollY}px`;
|
||||||
|
resultsBox.style.left = `${rect.left + window.scrollX}px`;
|
||||||
|
resultsBox.style.width = `${rect.width}px`;
|
||||||
|
|
||||||
|
results.slice(0, 5).forEach(result => {
|
||||||
|
const item = document.createElement("div");
|
||||||
|
item.className = "search-result";
|
||||||
|
item.innerHTML = `
|
||||||
|
<div class="search-result-title">${result.title}</div>
|
||||||
|
<div class="search-result-preview">${result.preview}</div>
|
||||||
|
`;
|
||||||
|
item.onclick = () => window.location.href = result.path;
|
||||||
|
resultsBox.appendChild(item);
|
||||||
|
});
|
||||||
|
|
||||||
|
resultsBox.style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
searchInput.addEventListener("input", () => {
|
||||||
|
const q = searchInput.value.trim();
|
||||||
|
if (!q) {
|
||||||
|
resultsBox.style.display = "none";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
showResults(search(q));
|
||||||
|
});
|
||||||
|
|
||||||
|
/* ------------------------------
|
||||||
|
Modal popup
|
||||||
|
-------------------------------- */
|
||||||
|
const modal = document.createElement("div");
|
||||||
|
modal.id = "search-modal";
|
||||||
|
modal.innerHTML = `
|
||||||
|
<div class="search-modal-backdrop"></div>
|
||||||
|
<div class="search-modal-content">
|
||||||
|
<h2>Search results</h2>
|
||||||
|
<div id="search-modal-results"></div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
document.body.appendChild(modal);
|
||||||
|
|
||||||
|
const modalResults = modal.querySelector("#search-modal-results");
|
||||||
|
|
||||||
|
function openSearchModal(results) {
|
||||||
|
modalResults.innerHTML = "";
|
||||||
|
|
||||||
|
if (results.length === 0) {
|
||||||
|
modalResults.innerHTML = "<p>No results found.</p>";
|
||||||
|
}
|
||||||
|
|
||||||
|
results.forEach(result => {
|
||||||
|
const item = document.createElement("div");
|
||||||
|
item.className = "search-modal-result";
|
||||||
|
item.innerHTML = `
|
||||||
|
<div class="search-modal-title">${result.title}</div>
|
||||||
|
<div class="search-modal-preview">${result.preview}</div>
|
||||||
|
`;
|
||||||
|
item.onclick = () => window.location.href = result.path;
|
||||||
|
modalResults.appendChild(item);
|
||||||
|
});
|
||||||
|
|
||||||
|
modal.style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------
|
||||||
|
Submit search (Enter / 🔍)
|
||||||
|
-------------------------------- */
|
||||||
|
function submitSearch() {
|
||||||
|
const q = searchInput.value.trim();
|
||||||
|
if (!q) return;
|
||||||
|
openSearchModal(search(q));
|
||||||
|
}
|
||||||
|
|
||||||
|
searchInput.addEventListener("keydown", e => {
|
||||||
|
if (e.key === "Enter") {
|
||||||
|
e.preventDefault();
|
||||||
|
submitSearch();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
searchBtn.addEventListener("click", submitSearch);
|
||||||
|
|
||||||
|
/* ------------------------------
|
||||||
|
Close behaviours
|
||||||
|
-------------------------------- */
|
||||||
|
document.addEventListener("click", e => {
|
||||||
|
if (
|
||||||
|
!resultsBox.contains(e.target) &&
|
||||||
|
e.target !== searchInput &&
|
||||||
|
e.target !== searchBtn
|
||||||
|
) {
|
||||||
|
resultsBox.style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
modal.addEventListener("click", e => {
|
||||||
|
if (e.target.classList.contains("search-modal-backdrop")) {
|
||||||
|
modal.style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener("keydown", e => {
|
||||||
|
if (e.key === "Escape") {
|
||||||
|
modal.style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -225,3 +225,123 @@ time.countdown.expired {
|
|||||||
text-decoration: line-through;
|
text-decoration: line-through;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Make nav a flex container */
|
||||||
|
nav {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Push search to the far right */
|
||||||
|
#search-input,
|
||||||
|
#search-btn {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Input styling */
|
||||||
|
#search-input {
|
||||||
|
width: 12rem;
|
||||||
|
padding: 0.3rem 0.5rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
border: 1px solid var(--border-color, #ccc);
|
||||||
|
border-radius: 4px;
|
||||||
|
background: var(--bg-color, #fff);
|
||||||
|
color: var(--text-color, #000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Button styling */
|
||||||
|
#search-btn {
|
||||||
|
margin-left: 0;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Focus state */
|
||||||
|
#search-input:focus {
|
||||||
|
outline: 2px solid var(--accent-color, #5b8cff);
|
||||||
|
}
|
||||||
|
@media (max-width: 700px) {
|
||||||
|
#search-input {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#search-btn {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
padding: 0.2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#search-results {
|
||||||
|
position: absolute;
|
||||||
|
max-height: 60vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
background: var(--bg-color, #fff);
|
||||||
|
border: 1px solid var(--border-color, #ccc);
|
||||||
|
border-radius: 6px;
|
||||||
|
box-shadow: 0 8px 20px rgba(0,0,0,0.12);
|
||||||
|
display: none;
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
.search-result {
|
||||||
|
padding: 0.6rem 0.8rem;
|
||||||
|
cursor: pointer;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-result:hover {
|
||||||
|
background: var(--accent-bg, #f2f6ff);
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-result-title {
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-result-preview {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
#search-modal {
|
||||||
|
position: fixed;
|
||||||
|
inset: 0;
|
||||||
|
display: none;
|
||||||
|
z-index: 10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-modal-backdrop {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background: rgba(0,0,0,0.45);
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-modal-content {
|
||||||
|
position: relative;
|
||||||
|
max-width: 700px;
|
||||||
|
margin: 10vh auto;
|
||||||
|
padding: 1.2rem;
|
||||||
|
background: var(--bg-color, #fff);
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: 0 20px 60px rgba(0,0,0,0.25);
|
||||||
|
max-height: 70vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-modal-result {
|
||||||
|
padding: 0.8rem;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-modal-result:hover {
|
||||||
|
background: var(--accent-bg, #f2f6ff);
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-modal-title {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-modal-preview {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#+TITLE: [21-12-2025] - Weekly Review
|
||||||
|
#+OPTIONS: num:nil
|
||||||
|
#+DATE: <2025-12-21 Sun 12:12>
|
||||||
|
#+filetags: :review:
|
||||||
|
#+WIP: t
|
||||||
|
#+COMMENTS: t
|
||||||
|
#+SLUG: 21-12-25-week-review
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ See the categories: @@html:<a href="../../categories.html">Categories</a>@@
|
|||||||
* 2025
|
* 2025
|
||||||
|
|
||||||
** December 2025
|
** December 2025
|
||||||
- [[file:12-december/21-12-week-review.org][21-12-week-review]] @@html:<span class="post-date">30-12-2025 10:14</span>@@
|
|
||||||
- [[file:12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]] @@html:<span class="post-date">28-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
- [[file:12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]] @@html:<span class="post-date">28-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
|
- [[file:12-december/21-12-week-review.org][[21-12-2025] - Weekly Review]] @@html:<span class="post-date">21-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
- [[file:12-december/14-12-week-review.org][[14-12-2025] - Weekly Review]] @@html:<span class="post-date">09-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
- [[file:12-december/14-12-week-review.org][[14-12-2025] - Weekly Review]] @@html:<span class="post-date">09-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
- [[file:12-december/07-12-week-review.org][[07-12-2025] - Weekly Review]] @@html:<span class="post-date">07-12-2025 20:34</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
- [[file:12-december/07-12-week-review.org][[07-12-2025] - Weekly Review]] @@html:<span class="post-date">07-12-2025 20:34</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@
|
|||||||
- +Research the xcom thing, and find out what a parquet is and how to use it+
|
- +Research the xcom thing, and find out what a parquet is and how to use it+
|
||||||
- <2025-12-30 Tue>
|
- <2025-12-30 Tue>
|
||||||
- +Finish off the conversion for the parquets (xcom -> parquet)+
|
- +Finish off the conversion for the parquets (xcom -> parquet)+
|
||||||
- Run a full version with no caps
|
- +Run a full version with no caps+ -> There are some errors that need to be fixed
|
||||||
- fix all the tests
|
- +fix all the tests+
|
||||||
- +create a PR for the datamart+
|
- +create a PR for the datamart+
|
||||||
|
|||||||
9
blogs/2026/2026-list.org
Normal file
9
blogs/2026/2026-list.org
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#+TITLE: 2026 List
|
||||||
|
#+OPTIONS: toc:nil num:nil
|
||||||
|
|
||||||
|
See the categories: @@html:<a href="../../categories.html">Categories</a>@@
|
||||||
|
|
||||||
|
* 2026
|
||||||
|
|
||||||
|
** January 2026
|
||||||
|
- [[file:01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]] @@html:<span class="post-date">04-01-2026 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
@@ -5,9 +5,10 @@ See the categories: @@html:<a href="../categories.html">Categories</a>@@
|
|||||||
|
|
||||||
* Blogs:
|
* Blogs:
|
||||||
- [[file:2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]] @@html:<span class="post-date">04-01-2026 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
- [[file:2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]] @@html:<span class="post-date">04-01-2026 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
- [[file:2025/2025-list.org][2025 List]] @@html:<span class="post-date">30-12-2025 18:24</span>@@
|
- [[file:2026/2026-list.org][2026 List]] @@html:<span class="post-date">30-12-2025 22:33</span>@@
|
||||||
- [[file:2025/12-december/21-12-week-review.org][21-12-week-review]] @@html:<span class="post-date">30-12-2025 10:14</span>@@
|
- [[file:2025/2025-list.org][2025 List]] @@html:<span class="post-date">30-12-2025 22:33</span>@@
|
||||||
- [[file:2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]] @@html:<span class="post-date">28-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
- [[file:2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]] @@html:<span class="post-date">28-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
|
- [[file:2025/12-december/21-12-week-review.org][[21-12-2025] - Weekly Review]] @@html:<span class="post-date">21-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
- [[file:2025/12-december/14-12-week-review.org][[14-12-2025] - Weekly Review]] @@html:<span class="post-date">09-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
- [[file:2025/12-december/14-12-week-review.org][[14-12-2025] - Weekly Review]] @@html:<span class="post-date">09-12-2025 12:12</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
- [[file:2025/12-december/07-12-week-review.org][[07-12-2025] - Weekly Review]] @@html:<span class="post-date">07-12-2025 20:34</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
- [[file:2025/12-december/07-12-week-review.org][[07-12-2025] - Weekly Review]] @@html:<span class="post-date">07-12-2025 20:34</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
- [[file:2025/11-november/30-11-week-review.org][[30-11-2025] - Weekly Review]] @@html:<span class="post-date">30-11-2025 17:09</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
- [[file:2025/11-november/30-11-week-review.org][[30-11-2025] - Weekly Review]] @@html:<span class="post-date">30-11-2025 17:09</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@
|
||||||
|
|||||||
@@ -49,10 +49,12 @@
|
|||||||
<link rel=\"stylesheet\" href=\"/assets/styles/media.css\" />
|
<link rel=\"stylesheet\" href=\"/assets/styles/media.css\" />
|
||||||
|
|
||||||
<script src=\"/assets/scripts/script.js\" defer></script>
|
<script src=\"/assets/scripts/script.js\" defer></script>
|
||||||
|
<script src=\"/assets/scripts/lunr.js\" defer></script>
|
||||||
<script src=\"/assets/scripts/competency-status-board.js\" defer></script>
|
<script src=\"/assets/scripts/competency-status-board.js\" defer></script>
|
||||||
<script src=\"/assets/scripts/notes.js\" defer></script>
|
<script src=\"/assets/scripts/notes.js\" defer></script>
|
||||||
<script src=\"/assets/scripts/comments.js\" defer></script>
|
<script src=\"/assets/scripts/comments.js\" defer></script>
|
||||||
<script src=\"/assets/scripts/bigger-picture.min.js\" defer></script>
|
<script src=\"/assets/scripts/bigger-picture.min.js\" defer></script>
|
||||||
|
<script src=\"/assets/scripts/search.js\" defer></script>
|
||||||
<script src=\"/assets/scripts/svg-pan-zoom.min.js\" defer></script>
|
<script src=\"/assets/scripts/svg-pan-zoom.min.js\" defer></script>
|
||||||
<script src=\"/assets/scripts/gallery-init.js\" defer></script>
|
<script src=\"/assets/scripts/gallery-init.js\" defer></script>
|
||||||
"
|
"
|
||||||
@@ -85,6 +87,10 @@
|
|||||||
<a href=\"/blogs/blogs-list.html\">Blogs | </a>
|
<a href=\"/blogs/blogs-list.html\">Blogs | </a>
|
||||||
<a href=\"/posts/career/career-list.html\">Career | </a>
|
<a href=\"/posts/career/career-list.html\">Career | </a>
|
||||||
<a href=\"/home/services.html\">Services</a>
|
<a href=\"/home/services.html\">Services</a>
|
||||||
|
|
||||||
|
|
||||||
|
<input type=\"search\\\" id=\"search-input\" placeholder=\"Search…\" aria-label=\"Search notes\" />
|
||||||
|
<button id=\"search-btn\" aria-label=\"Search\">🔍</button>
|
||||||
</nav>
|
</nav>
|
||||||
<button class=\"theme-toggle\" id=\"theme-toggle\" type=\"button\" aria-label=\"Toggle dark mode\">🌗 Theme</button>
|
<button class=\"theme-toggle\" id=\"theme-toggle\" type=\"button\" aria-label=\"Toggle dark mode\">🌗 Theme</button>
|
||||||
|
|
||||||
@@ -319,6 +325,25 @@ A file has comments if:
|
|||||||
:sitemap-sort-files anti-chronologically
|
:sitemap-sort-files anti-chronologically
|
||||||
:html-head ,z-shared-head
|
:html-head ,z-shared-head
|
||||||
)
|
)
|
||||||
|
("org-2026"
|
||||||
|
:base-directory "~/master-folder/org_files/org_web/blogs/2026/"
|
||||||
|
:publishing-directory "~/master-folder/org_files/org_web/output/blogs/2026/"
|
||||||
|
:recursive t
|
||||||
|
:base-extension "org"
|
||||||
|
:publishing-function z/z-publish-to-html
|
||||||
|
:with-author nil
|
||||||
|
:with-creator nil
|
||||||
|
:html-validation-link nil
|
||||||
|
:html-preamble ,z-preamble
|
||||||
|
:html-postamble ,z-postamble
|
||||||
|
:auto-sitemap t
|
||||||
|
:sitemap-filename "2026-list.org"
|
||||||
|
:sitemap-title "2026 List"
|
||||||
|
:sitemap-style list
|
||||||
|
:sitemap-function z/2026-sitemap
|
||||||
|
:sitemap-sort-files anti-chronologically
|
||||||
|
:html-head ,z-shared-head
|
||||||
|
)
|
||||||
("org-career"
|
("org-career"
|
||||||
:base-directory "~/master-folder/org_files/org_web/posts/career/"
|
:base-directory "~/master-folder/org_files/org_web/posts/career/"
|
||||||
:publishing-directory "~/master-folder/org_files/org_web/output/posts/career/"
|
:publishing-directory "~/master-folder/org_files/org_web/output/posts/career/"
|
||||||
|
|||||||
@@ -10,5 +10,5 @@
|
|||||||
- [[file:tags/maths.org][@@html:<span class="post-tag">maths</span>@@]] (1)
|
- [[file:tags/maths.org][@@html:<span class="post-tag">maths</span>@@]] (1)
|
||||||
- [[file:tags/notes.org][@@html:<span class="post-tag">notes</span>@@]] (11)
|
- [[file:tags/notes.org][@@html:<span class="post-tag">notes</span>@@]] (11)
|
||||||
- [[file:tags/reading.org][@@html:<span class="post-tag">reading</span>@@]] (1)
|
- [[file:tags/reading.org][@@html:<span class="post-tag">reading</span>@@]] (1)
|
||||||
- [[file:tags/review.org][@@html:<span class="post-tag">review</span>@@]] (11)
|
- [[file:tags/review.org][@@html:<span class="post-tag">review</span>@@]] (12)
|
||||||
- [[file:tags/website.org][@@html:<span class="post-tag">website</span>@@]] (2)
|
- [[file:tags/website.org][@@html:<span class="post-tag">website</span>@@]] (2)
|
||||||
@@ -171,6 +171,61 @@
|
|||||||
|
|
||||||
output))
|
output))
|
||||||
|
|
||||||
|
(defun z/2026-sitemap (title list)
|
||||||
|
"Sitemap that lists 2026 blogs grouped by month, with dates and FILETAGS."
|
||||||
|
(let ((output (concat
|
||||||
|
"#+TITLE: " title "\n"
|
||||||
|
"#+OPTIONS: toc:nil num:nil \n\n"
|
||||||
|
"See the categories: @@html:<a href=\"../../categories.html\">Categories</a>@@\n\n"
|
||||||
|
"* 2026\n"))
|
||||||
|
(current-month nil))
|
||||||
|
|
||||||
|
(dolist (entry (cdr list))
|
||||||
|
(when (consp entry)
|
||||||
|
(let* ((link (car entry))
|
||||||
|
(filename (if (string-match "\\[\\[file:\\([^]]+\\)\\]" link)
|
||||||
|
(match-string 1 link)
|
||||||
|
link))
|
||||||
|
(full-path (expand-file-name
|
||||||
|
filename
|
||||||
|
"~/master-folder/org_files/org_web/blogs/2026/"))
|
||||||
|
(date (when (file-exists-p full-path)
|
||||||
|
(org-publish-find-date full-path org-publish-project-alist)))
|
||||||
|
(date-str (if date
|
||||||
|
(format-time-string "%d-%m-%Y %H:%M" date)
|
||||||
|
"no date"))
|
||||||
|
(month-str (if date
|
||||||
|
(format-time-string "%B %Y" date)
|
||||||
|
"No date"))
|
||||||
|
(tags-str ""))
|
||||||
|
|
||||||
|
(when (file-exists-p full-path)
|
||||||
|
(with-temp-buffer
|
||||||
|
(insert-file-contents full-path)
|
||||||
|
(org-mode)
|
||||||
|
(let ((tags (cadr (assoc "FILETAGS"
|
||||||
|
(org-collect-keywords '("FILETAGS"))))))
|
||||||
|
(when tags
|
||||||
|
(setq tags-str
|
||||||
|
(mapconcat
|
||||||
|
(lambda (tag)
|
||||||
|
(format "@@html:<a href=\"/tags/%s.html\"> \
|
||||||
|
<span class=\"post-tag\">%s</span> </a>@@" tag tag))
|
||||||
|
(split-string tags ":" t)
|
||||||
|
" "))))))
|
||||||
|
|
||||||
|
(unless (equal month-str current-month)
|
||||||
|
(setq current-month month-str)
|
||||||
|
(setq output (concat output "\n** " month-str "\n")))
|
||||||
|
|
||||||
|
(setq output
|
||||||
|
(concat output
|
||||||
|
(format "- %s @@html:<span class=\"post-date\">%s</span>@@ %s\n"
|
||||||
|
link date-str tags-str))))))
|
||||||
|
|
||||||
|
output))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(defun z/career-sitemap (title list)
|
(defun z/career-sitemap (title list)
|
||||||
"Sitemap that lists careers posts grouped by month, with dates and FILETAGS."
|
"Sitemap that lists careers posts grouped by month, with dates and FILETAGS."
|
||||||
@@ -183,12 +238,9 @@
|
|||||||
))
|
))
|
||||||
(current-month nil))
|
(current-month nil))
|
||||||
|
|
||||||
;; `list` is what org-publish passes in; we skip its car (top-level title node)
|
|
||||||
(dolist (entry (cdr list))
|
(dolist (entry (cdr list))
|
||||||
;; In this setup each ENTRY is usually (LINK . OTHER-STUFF)
|
|
||||||
(when (consp entry)
|
(when (consp entry)
|
||||||
(let* ((link (car entry))
|
(let* ((link (car entry))
|
||||||
;; Extract relative filename from the [[file:...][...]] link
|
|
||||||
(filename (if (string-match "\\[\\[file:\\([^]]+\\)\\]" link)
|
(filename (if (string-match "\\[\\[file:\\([^]]+\\)\\]" link)
|
||||||
(match-string 1 link)
|
(match-string 1 link)
|
||||||
link))
|
link))
|
||||||
@@ -205,7 +257,6 @@
|
|||||||
"No date"))
|
"No date"))
|
||||||
(tags-str ""))
|
(tags-str ""))
|
||||||
|
|
||||||
;; Collect FILETAGS from the file
|
|
||||||
(when (file-exists-p full-path)
|
(when (file-exists-p full-path)
|
||||||
(with-temp-buffer
|
(with-temp-buffer
|
||||||
(insert-file-contents full-path)
|
(insert-file-contents full-path)
|
||||||
@@ -226,7 +277,6 @@
|
|||||||
(setq current-month month-str)
|
(setq current-month month-str)
|
||||||
(setq output (concat output "\n** " month-str "\n")))
|
(setq output (concat output "\n** " month-str "\n")))
|
||||||
|
|
||||||
;; Insert the actual entry
|
|
||||||
(setq output
|
(setq output
|
||||||
(concat output
|
(concat output
|
||||||
(format "- %s @@html:<span class=\"post-date\">%s</span>@@ %s\n"
|
(format "- %s @@html:<span class=\"post-date\">%s</span>@@ %s\n"
|
||||||
|
|||||||
@@ -2,11 +2,16 @@
|
|||||||
#+date: <2025-11-05 wed 20:46>
|
#+date: <2025-11-05 wed 20:46>
|
||||||
#+OPTIONS: num:nil tags:t toc:t
|
#+OPTIONS: num:nil tags:t toc:t
|
||||||
#+filetags: :learning:notes:
|
#+filetags: :learning:notes:
|
||||||
#+WIP: t
|
#+WIP:
|
||||||
#+COMMENTS: t
|
#+COMMENTS: t
|
||||||
#+SLUG: lean
|
#+SLUG: lean
|
||||||
|
|
||||||
* What Lean aims to do
|
- Lean is a management philosophy focused on **maximising value** for the customer while **minimising waste**.
|
||||||
|
- It originated from the **Toyota Production System** in manufacturing.
|
||||||
Deliver more value with less waste by shortening feedback loops, improving flow, and continually learning.
|
- The core goal is to **do more with less** (time, effort, resources, cost).
|
||||||
|
- Lean identifies and eliminates **non-value-adding activities** (waste).
|
||||||
|
- Common waste types include overproduction, waiting, defects, and excess motion.
|
||||||
|
- It emphasises **continuous improvement** (*kaizen*).
|
||||||
|
- Decision-making is driven by **customer value** and real-world process data.
|
||||||
|
- Lean promotes **efficient flow**, standardised work, and empowered teams.
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
See the categories: @@html:<a href="../categories.html">Categories</a>@@
|
See the categories: @@html:<a href="../categories.html">Categories</a>@@
|
||||||
|
|
||||||
* Posts:
|
* Posts:
|
||||||
- [[file:career/career-list.org][Career List]] @@html:<span class="post-date">30-12-2025 18:24</span>@@
|
- [[file:career/career-list.org][Career List]] @@html:<span class="post-date">30-12-2025 22:33</span>@@
|
||||||
- [[file:career/probation-objectives.org][Probation Objectives:]] @@html:<span class="post-date">08-12-2025 17:55</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@ @@html:<a href="/tags/notes.html"> <span class="post-tag">notes</span> </a>@@
|
- [[file:career/probation-objectives.org][Probation Objectives:]] @@html:<span class="post-date">08-12-2025 17:55</span>@@ @@html:<a href="/tags/review.html"> <span class="post-tag">review</span> </a>@@ @@html:<a href="/tags/notes.html"> <span class="post-tag">notes</span> </a>@@
|
||||||
- [[file:career/airflow.org][Datamarts, Airflow and DAG's]] @@html:<span class="post-date">15-11-2025 18:37</span>@@ @@html:<a href="/tags/learning.html"> <span class="post-tag">learning</span> </a>@@ @@html:<a href="/tags/notes.html"> <span class="post-tag">notes</span> </a>@@
|
- [[file:career/airflow.org][Datamarts, Airflow and DAG's]] @@html:<span class="post-date">15-11-2025 18:37</span>@@ @@html:<a href="/tags/learning.html"> <span class="post-tag">learning</span> </a>@@ @@html:<a href="/tags/notes.html"> <span class="post-tag">notes</span> </a>@@
|
||||||
- [[file:career/normalisation.org][Benefits of Normalisation]] @@html:<span class="post-date">10-11-2025 18:04</span>@@ @@html:<a href="/tags/learning.html"> <span class="post-tag">learning</span> </a>@@ @@html:<a href="/tags/notes.html"> <span class="post-tag">notes</span> </a>@@
|
- [[file:career/normalisation.org][Benefits of Normalisation]] @@html:<span class="post-date">10-11-2025 18:04</span>@@ @@html:<a href="/tags/learning.html"> <span class="post-tag">learning</span> </a>@@ @@html:<a href="/tags/notes.html"> <span class="post-tag">notes</span> </a>@@
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
#+OPTIONS: toc:nil num:nil
|
#+OPTIONS: toc:nil num:nil
|
||||||
|
|
||||||
* Recently Updated (top 26 files - per lima's request)
|
* Recently Updated (top 26 files - per lima's request)
|
||||||
- [[file:blogs/2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]] @@html:<span class="post-date">2025-12-30 15:10</span>@@
|
- [[file:posts/career/lean.org][Lean]] @@html:<span class="post-date">2025-12-30 21:04</span>@@
|
||||||
|
- [[file:blogs/2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]] @@html:<span class="post-date">2025-12-30 19:28</span>@@
|
||||||
|
- [[file:blogs/2025/12-december/21-12-week-review.org][[21-12-2025] - Weekly Review]] @@html:<span class="post-date">2025-12-30 18:47</span>@@
|
||||||
- [[file:blogs/2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]] @@html:<span class="post-date">2025-12-30 10:15</span>@@
|
- [[file:blogs/2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]] @@html:<span class="post-date">2025-12-30 10:15</span>@@
|
||||||
- [[file:blogs/2025/12-december/21-12-week-review.org][21-12-week-review]] @@html:<span class="post-date">2025-12-30 10:14</span>@@
|
|
||||||
- [[file:posts/career/probation-objectives.org][Probation Objectives:]] @@html:<span class="post-date">2025-12-29 08:11</span>@@
|
- [[file:posts/career/probation-objectives.org][Probation Objectives:]] @@html:<span class="post-date">2025-12-29 08:11</span>@@
|
||||||
- [[file:home/backlog.org][Backlog]] @@html:<span class="post-date">2025-12-18 22:43</span>@@
|
- [[file:home/backlog.org][Backlog]] @@html:<span class="post-date">2025-12-18 22:43</span>@@
|
||||||
- [[file:home/notes.org][Notes]] @@html:<span class="post-date">2025-12-18 22:30</span>@@
|
- [[file:home/notes.org][Notes]] @@html:<span class="post-date">2025-12-18 22:30</span>@@
|
||||||
@@ -17,7 +18,6 @@
|
|||||||
- [[file:posts/career/owasp.org][OWASP Top Ten]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
- [[file:posts/career/owasp.org][OWASP Top Ten]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
||||||
- [[file:posts/career/normalisation.org][Benefits of Normalisation]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
- [[file:posts/career/normalisation.org][Benefits of Normalisation]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
||||||
- [[file:posts/career/management-of-self.org][Management of self training]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
- [[file:posts/career/management-of-self.org][Management of self training]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
||||||
- [[file:posts/career/lean.org][Lean]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
|
||||||
- [[file:posts/career/invest-principles.org][Invest Principles]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
- [[file:posts/career/invest-principles.org][Invest Principles]] @@html:<span class="post-date">2025-12-16 21:43</span>@@
|
||||||
- [[file:posts/career/career-intro.org][Career Introduction]] @@html:<span class="post-date">2025-12-16 21:42</span>@@
|
- [[file:posts/career/career-intro.org][Career Introduction]] @@html:<span class="post-date">2025-12-16 21:42</span>@@
|
||||||
- [[file:posts/career/airflow.org][Datamarts, Airflow and DAG's]] @@html:<span class="post-date">2025-12-16 21:42</span>@@
|
- [[file:posts/career/airflow.org][Datamarts, Airflow and DAG's]] @@html:<span class="post-date">2025-12-16 21:42</span>@@
|
||||||
|
|||||||
64
search-index-json.py
Normal file
64
search-index-json.py
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import os
|
||||||
|
import json
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
def strip_html_tags(html):
|
||||||
|
soup = BeautifulSoup(html, "html.parser")
|
||||||
|
|
||||||
|
# Remove script and style elements completely
|
||||||
|
for tag in soup(["script", "style"]):
|
||||||
|
tag.decompose()
|
||||||
|
|
||||||
|
# Extract plain text
|
||||||
|
text = soup.get_text(separator="\n")
|
||||||
|
|
||||||
|
# Clean up whitespace
|
||||||
|
lines = [line.strip() for line in text.splitlines() if line.strip()]
|
||||||
|
return "\n".join(lines)
|
||||||
|
|
||||||
|
def create_folder_structure_json(path):
|
||||||
|
result = {
|
||||||
|
'name': os.path.basename(path),
|
||||||
|
'type': 'folder',
|
||||||
|
'children': []
|
||||||
|
}
|
||||||
|
|
||||||
|
if not os.path.isdir(path):
|
||||||
|
return result
|
||||||
|
|
||||||
|
for entry in os.listdir(path):
|
||||||
|
entry_path = os.path.join(path, entry)
|
||||||
|
|
||||||
|
if os.path.isdir(entry_path):
|
||||||
|
result['children'].append(
|
||||||
|
create_folder_structure_json(entry_path)
|
||||||
|
)
|
||||||
|
|
||||||
|
elif entry.lower().endswith('.html'):
|
||||||
|
file_entry = {
|
||||||
|
'name': entry,
|
||||||
|
'type': 'file',
|
||||||
|
'content': None
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(entry_path, 'r', encoding='utf-8') as f:
|
||||||
|
html = f.read()
|
||||||
|
file_entry['content'] = strip_html_tags(html)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
file_entry['content'] = f"<unreadable: {e}>"
|
||||||
|
|
||||||
|
result['children'].append(file_entry)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
folder_path = 'output/'
|
||||||
|
folder_json = create_folder_structure_json(folder_path)
|
||||||
|
|
||||||
|
output_file = 'output/test.json'
|
||||||
|
with open(output_file, 'w', encoding='utf-8') as f:
|
||||||
|
json.dump(folder_json, f, indent=4, ensure_ascii=False)
|
||||||
|
|
||||||
|
print("JSON saved to", output_file)
|
||||||
24
sitemap.org
24
sitemap.org
@@ -41,6 +41,12 @@
|
|||||||
- [[file:blogs/blogs-list.org][Blogs List]]
|
- [[file:blogs/blogs-list.org][Blogs List]]
|
||||||
- 2025
|
- 2025
|
||||||
- [[file:blogs/2025/2025-list.org][2025 List]]
|
- [[file:blogs/2025/2025-list.org][2025 List]]
|
||||||
|
- 11-november
|
||||||
|
- [[file:blogs/2025/11-november/02-11-week-review.org][[02-11-2025] - Weekly Review]]
|
||||||
|
- [[file:blogs/2025/11-november/09-11-week-review.org][[09-11-2025] - Weekly Review]]
|
||||||
|
- [[file:blogs/2025/11-november/16-11-week-review.org][[16-11-2025] - Weekly Review]]
|
||||||
|
- [[file:blogs/2025/11-november/23-11-week-review.org][[23-11-2025] - Weekly Review]]
|
||||||
|
- [[file:blogs/2025/11-november/30-11-week-review.org][[30-11-2025] - Weekly Review]]
|
||||||
- 08-august
|
- 08-august
|
||||||
- [[file:blogs/2025/08-august/zettelkasten.org][Zettelkasten Method]]
|
- [[file:blogs/2025/08-august/zettelkasten.org][Zettelkasten Method]]
|
||||||
- [[file:blogs/2025/08-august/wacom-with-arch.org][Wacom With Arch]]
|
- [[file:blogs/2025/08-august/wacom-with-arch.org][Wacom With Arch]]
|
||||||
@@ -49,17 +55,15 @@
|
|||||||
- [[file:blogs/2025/08-august/hilberts.hotel.org][Hilbert's Hotel]]
|
- [[file:blogs/2025/08-august/hilberts.hotel.org][Hilbert's Hotel]]
|
||||||
- [[file:blogs/2025/08-august/benefits-of-reading.org][Benefits of Reading]]
|
- [[file:blogs/2025/08-august/benefits-of-reading.org][Benefits of Reading]]
|
||||||
- [[file:blogs/2025/08-august/third-time.org][Third Time]]
|
- [[file:blogs/2025/08-august/third-time.org][Third Time]]
|
||||||
- 11-november
|
|
||||||
- [[file:blogs/2025/11-november/02-11-week-review.org][[02-11-2025] - Weekly Review]]
|
|
||||||
- [[file:blogs/2025/11-november/09-11-week-review.org][[09-11-2025] - Weekly Review]]
|
|
||||||
- [[file:blogs/2025/11-november/16-11-week-review.org][[16-11-2025] - Weekly Review]]
|
|
||||||
- [[file:blogs/2025/11-november/23-11-week-review.org][[23-11-2025] - Weekly Review]]
|
|
||||||
- [[file:blogs/2025/11-november/30-11-week-review.org][[30-11-2025] - Weekly Review]]
|
|
||||||
- 12-december
|
- 12-december
|
||||||
- [[file:blogs/2025/12-december/07-12-week-review.org][[07-12-2025] - Weekly Review]]
|
- [[file:blogs/2025/12-december/07-12-week-review.org][[07-12-2025] - Weekly Review]]
|
||||||
- [[file:blogs/2025/12-december/14-12-week-review.org][[14-12-2025] - Weekly Review]]
|
- [[file:blogs/2025/12-december/14-12-week-review.org][[14-12-2025] - Weekly Review]]
|
||||||
|
- [[file:blogs/2025/12-december/21-12-week-review.org][[21-12-2025] - Weekly Review]]
|
||||||
- [[file:blogs/2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]]
|
- [[file:blogs/2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]]
|
||||||
- [[file:blogs/2025/12-december/21-12-week-review.org][21-12-week-review]]
|
- 2026
|
||||||
|
- [[file:blogs/2026/2026-list.org][2026 List]]
|
||||||
|
- 01-january
|
||||||
|
- [[file:blogs/2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]]
|
||||||
- books
|
- books
|
||||||
- [[file:books/books-list.org][Books List]]
|
- [[file:books/books-list.org][Books List]]
|
||||||
- clean-code
|
- clean-code
|
||||||
@@ -67,11 +71,11 @@
|
|||||||
- tags
|
- tags
|
||||||
- [[file:tags/learning.org][Tag: learning]]
|
- [[file:tags/learning.org][Tag: learning]]
|
||||||
- [[file:tags/introduction.org][Tag: introduction]]
|
- [[file:tags/introduction.org][Tag: introduction]]
|
||||||
- [[file:tags/education.org][Tag: education]]
|
|
||||||
- [[file:tags/website.org][Tag: website]]
|
|
||||||
- [[file:tags/notes.org][Tag: notes]]
|
- [[file:tags/notes.org][Tag: notes]]
|
||||||
- [[file:tags/review.org][Tag: review]]
|
- [[file:tags/review.org][Tag: review]]
|
||||||
- [[file:tags/emacs.org][Tag: emacs]]
|
- [[file:tags/emacs.org][Tag: emacs]]
|
||||||
|
- [[file:tags/education.org][Tag: education]]
|
||||||
|
- [[file:tags/website.org][Tag: website]]
|
||||||
- [[file:tags/reading.org][Tag: reading]]
|
- [[file:tags/reading.org][Tag: reading]]
|
||||||
- [[file:tags/maths.org][Tag: maths]]
|
|
||||||
- [[file:tags/insights.org][Tag: insights]]
|
- [[file:tags/insights.org][Tag: insights]]
|
||||||
|
- [[file:tags/maths.org][Tag: maths]]
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
* Posts tagged review
|
* Posts tagged review
|
||||||
- [[file:../blogs/2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]]
|
- [[file:../blogs/2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]]
|
||||||
- [[file:../blogs/2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]]
|
- [[file:../blogs/2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]]
|
||||||
|
- [[file:../blogs/2025/12-december/21-12-week-review.org][[21-12-2025] - Weekly Review]]
|
||||||
- [[file:../blogs/2025/12-december/14-12-week-review.org][[14-12-2025] - Weekly Review]]
|
- [[file:../blogs/2025/12-december/14-12-week-review.org][[14-12-2025] - Weekly Review]]
|
||||||
- [[file:../posts/career/probation-objectives.org][Probation Objectives:]]
|
- [[file:../posts/career/probation-objectives.org][Probation Objectives:]]
|
||||||
- [[file:../blogs/2025/12-december/07-12-week-review.org][[07-12-2025] - Weekly Review]]
|
- [[file:../blogs/2025/12-december/07-12-week-review.org][[07-12-2025] - Weekly Review]]
|
||||||
|
|||||||
2
wip.org
2
wip.org
@@ -4,6 +4,6 @@
|
|||||||
* Work in progress
|
* Work in progress
|
||||||
- [[file:blogs/2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]] @@html:<span class="post-date">04-01-2026 12:12</span>@@
|
- [[file:blogs/2026/01-january/04-01-week-review.org][[04-01-2026] - Weekly Review]] @@html:<span class="post-date">04-01-2026 12:12</span>@@
|
||||||
- [[file:blogs/2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]] @@html:<span class="post-date">28-12-2025 12:12</span>@@
|
- [[file:blogs/2025/12-december/28-12-week-review.org][[28-12-2025] - Weekly Review]] @@html:<span class="post-date">28-12-2025 12:12</span>@@
|
||||||
|
- [[file:blogs/2025/12-december/21-12-week-review.org][[21-12-2025] - Weekly Review]] @@html:<span class="post-date">21-12-2025 12:12</span>@@
|
||||||
- [[file:posts/career/probation-objectives.org][Probation Objectives:]] @@html:<span class="post-date">08-12-2025 17:55</span>@@
|
- [[file:posts/career/probation-objectives.org][Probation Objectives:]] @@html:<span class="post-date">08-12-2025 17:55</span>@@
|
||||||
- [[file:posts/career/invest-principles.org][Invest Principles]] @@html:<span class="post-date">06-11-2025 21:08</span>@@
|
- [[file:posts/career/invest-principles.org][Invest Principles]] @@html:<span class="post-date">06-11-2025 21:08</span>@@
|
||||||
- [[file:posts/career/lean.org][Lean]] @@html:<span class="post-date">05-11-2025 20:46</span>@@
|
|
||||||
Reference in New Issue
Block a user