Update package.json scripts, enhance layout with new components, and improve API error handling
Some checks failed
Deploy / deploy (push) Failing after 1h28m6s

- Added new scripts for database operations and temporary production in package.json.
- Integrated KaydetBannerLazy component into the layout for improved user notifications.
- Enhanced API error handling in the soru route to mark credit exhaustion.
- Updated the IletisimPage for better button styling and user experience.
- Refactored ListemPage to streamline user flow and improve session handling.
- Removed unused ListePaneli component to clean up the codebase.
This commit is contained in:
bilalgursen
2026-08-06 02:27:42 +03:00
parent 488845ae1f
commit e62c6f07df
77 changed files with 4132 additions and 1659 deletions

View File

@@ -61,9 +61,12 @@ function baslik(): string {
function kabuk({
onizleme,
govde,
baslikEtiketi,
}: {
onizleme: string;
govde: string;
/** <title> içeriği — genelde konuyla aynı. */
baslikEtiketi: string;
}): string {
return `<!doctype html>
<html lang="tr">
@@ -71,7 +74,7 @@ function kabuk({
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light">
<title>Merhaba, giriş bağlantını gönderdik</title>
<title>${kacir(baslikEtiketi)}</title>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,300;12..96,600&family=Cal+Sans&display=swap" rel="stylesheet">
</head>
@@ -141,6 +144,7 @@ export function magicLinkEpostasi(url: string): EpostaIcerik {
html: kabuk({
onizleme: "Giriş bağlantın 5 dakika geçerli.",
govde,
baslikEtiketi: "Merhaba, giriş bağlantını gönderdik",
}),
text: [
"Merhaba, giriş bağlantını gönderdik",
@@ -153,3 +157,49 @@ export function magicLinkEpostasi(url: string): EpostaIcerik {
].join("\n"),
};
}
/**
* Kredi bittikten 48 saat sonra giden tek seferlik hatırlatma. KVKK sınıfı
* netleşene dek yalnızca işlemsel dil: hesaptaki mevcut listeyi hatırlatır,
* ödeme ancak ikincil bir cümlede geçer (bkz. PRD İP-A / A2).
*/
export function krediHatirlatmaEpostasi(): EpostaIcerik {
const listemUrl = `${SITE_URL}/listem`;
const konu = "Listen seni bekliyor — açık satırların hazır";
const govde = `
<h1 style="margin:0 0 12px;font-family:${BASLIK_TIPI};font-size:22px;line-height:1.35;font-weight:700;color:${LACIVERT};">
Listen seni bekliyor
</h1>
<p style="margin:0 0 24px;">
Yapay zekânın senin sıralamana göre kurduğu tercih listesi hesabında
duruyor; gerekçeleri ve risk notlarıyla
<strong style="color:${LACIVERT};">açık satırların hazır</strong>.
Kaldığın yerden devam edebilirsin.
</p>
${buton(listemUrl, "Listeni gör")}
<p style="margin:24px 0 0;font-size:13px;">
Listenin tamamını açmak ya da danışmana soru sormak istersen kredi
yükleyebilirsin — listen ve sohbet geçmişin olduğu gibi durur.
</p>`;
return {
subject: konu,
html: kabuk({
onizleme: "Yapay zekânın kurduğu listen hesabında duruyor.",
govde,
baslikEtiketi: konu,
}),
text: [
"Listen seni bekliyor",
"",
"Yapay zekânın senin sıralamana göre kurduğu tercih listesi hesabında",
"duruyor; gerekçeleri ve risk notlarıyla açık satırların hazır.",
"",
"Listeni görmek için:",
listemUrl,
"",
"Listenin tamamını açmak ya da danışmana soru sormak istersen kredi",
"yükleyebilirsin — listen ve sohbet geçmişin olduğu gibi durur.",
].join("\n"),
};
}