${esc(pick(entry.title, language))}
${esc(pick(entry.detail, language))}
diff --git a/.gitignore b/.gitignore
index 3c3629e..80fa793 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
node_modules
+.lighthouseci
+.lhtmp
diff --git a/legacy-script.js b/legacy-script.js
index e65d1cb..a865bf0 100644
--- a/legacy-script.js
+++ b/legacy-script.js
@@ -3294,8 +3294,8 @@ function renderProjectDetail(language = currentSiteLanguage || "en") {
if (!root) return;
const params = new URLSearchParams(window.location.search);
- const slug = params.get("project") || "drivenfinity";
- const project = projectDetailData[slug];
+ const slug = params.get("project");
+ const project = slug ? projectDetailData[slug] : null;
if (!project) {
root.innerHTML = `
@@ -4868,8 +4868,8 @@ const ultimateContent = {
label: "Open 3D Math Lab",
hint: "Interactive canvas model",
keywords: "3d math canvas model rotate",
- type: "scroll",
- value: "algorithmic-3d-lab",
+ type: "nav",
+ value: "labs.html#algorithmic-3d-lab",
},
{
id: "easter",
@@ -5065,8 +5065,8 @@ const ultimateContent = {
label: "3D Matematik Labını Aç",
hint: "İnteraktif canvas modeli",
keywords: "3d matematik canvas model döndür",
- type: "scroll",
- value: "algorithmic-3d-lab",
+ type: "nav",
+ value: "labs.html#algorithmic-3d-lab",
},
{
id: "easter",
@@ -6171,8 +6171,8 @@ function extendCreativeCommands() {
label: "Open 3D Math Lab",
hint: "Interactive canvas model",
keywords: "3d math canvas model rotate",
- type: "scroll",
- value: "algorithmic-3d-lab",
+ type: "nav",
+ value: "labs.html#algorithmic-3d-lab",
});
if (!hasCommand("en", "easter"))
ultimateContent.en.commands.push({
@@ -6188,8 +6188,8 @@ function extendCreativeCommands() {
label: "3D Matematik Labını Aç",
hint: "İnteraktif canvas modeli",
keywords: "3d matematik canvas model döndür",
- type: "scroll",
- value: "algorithmic-3d-lab",
+ type: "nav",
+ value: "labs.html#algorithmic-3d-lab",
});
if (!hasCommand("tr", "easter"))
ultimateContent.tr.commands.push({
diff --git a/portfolio-data.js b/portfolio-data.js
index 55ce4c1..98619cc 100644
--- a/portfolio-data.js
+++ b/portfolio-data.js
@@ -237,9 +237,9 @@
status: "READY",
summary: t("Required evidence is collected before the side effect is allowed.", "Side effect'e izin verilmeden önce gerekli kanıtlar toplanıyor."),
conversation: [
- { speaker: "Customer", text: t("My car was damaged. Can you open a claim?", "Aracım hasar gördü. Hasar kaydı açabilir misiniz?") },
- { speaker: "Agent", text: t("I can help. First I need to verify your contact details and collect the required damage documents.", "Yardımcı olabilirim. Önce iletişim bilgilerinizi doğrulayıp gerekli hasar belgelerini toplamam gerekiyor.") },
- { speaker: "Customer", text: t("Okay, I can send the photos now.", "Tamam, fotoğrafları şimdi gönderebilirim.") }
+ { speaker: t("Customer", "Müşteri"), text: t("My car was damaged. Can you open a claim?", "Aracım hasar gördü. Hasar kaydı açabilir misiniz?") },
+ { speaker: t("Agent", "Agent"), text: t("I can help. First I need to verify your contact details and collect the required damage documents.", "Yardımcı olabilirim. Önce iletişim bilgilerinizi doğrulayıp gerekli hasar belgelerini toplamam gerekiyor.") },
+ { speaker: t("Customer", "Müşteri"), text: t("Okay, I can send the photos now.", "Tamam, fotoğrafları şimdi gönderebilirim.") }
],
toolTrace: ["verify_contact()", "collect_required_documents()", "submit_claim()"],
findings: [
@@ -253,8 +253,8 @@
status: "BLOCKED",
summary: t("The agent performs a claim-submission side effect before collecting prerequisites.", "Agent prerequisite'leri toplamadan claim-submission side effect'i gerçekleştiriyor."),
conversation: [
- { speaker: "Customer", text: t("My car was damaged. Can you open a claim?", "Aracım hasar gördü. Hasar kaydı açabilir misiniz?") },
- { speaker: "Agent", text: t("Sure. I am submitting the claim immediately.", "Tabii. Hasar kaydını hemen oluşturuyorum.") }
+ { speaker: t("Customer", "Müşteri"), text: t("My car was damaged. Can you open a claim?", "Aracım hasar gördü. Hasar kaydı açabilir misiniz?") },
+ { speaker: t("Agent", "Agent"), text: t("Sure. I am submitting the claim immediately.", "Tabii. Hasar kaydını hemen oluşturuyorum.") }
],
toolTrace: ["submit_claim()"],
findings: [
diff --git a/portfolio-v2.js b/portfolio-v2.js
index 922b345..cf44812 100644
--- a/portfolio-v2.js
+++ b/portfolio-v2.js
@@ -266,11 +266,8 @@
}
function buildLogMarkup(entry, language) {
- const statusLabel = {
- shipped: language === "tr" ? "Shipped" : "Shipped",
- building: language === "tr" ? "Building" : "Building",
- integration: language === "tr" ? "Integration" : "Integration"
- }[entry.status] || entry.status;
+ // Release-state names are product terms and stay identical in both languages.
+ const statusLabel = { shipped: "Shipped", building: "Building", integration: "Integration" }[entry.status] || entry.status;
return ` ${esc(pick(entry.detail, language))}${esc(pick(entry.title, language))}