Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/FeedbackIntelligence.Api/Analysis/ReportText.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,15 @@ public sealed record SnapshotLabels(
string ModerationHeading);

private static readonly SnapshotLabels SnapFi = new(
"fi", "Palautetilanne — tallennettu tilannekuva", "Tallennettu tilannekuva", "Palautetilanne",
"fi", "Tallennettu tilannekuva — Feedback Intelligence", "Tallennettu tilannekuva", "Palautetilanne",
"Aikaväli", "palautetta", "koostettu",
"Hälytykset", "Ei hälytyksiä aikavälillä.", "sanahaku", "kielimalli",
"Teemat ja trendit", "palautetta", "suunta",
"tarkistettavana (mahdollinen manipulointi — mukana laskennassa)", "tarkistettava",
"Moderoitava sisältö");

private static readonly SnapshotLabels SnapEn = new(
"en", "Feedback situationsaved snapshot", "Saved snapshot", "Feedback situation",
"en", "Saved snapshotFeedback Intelligence", "Saved snapshot", "Feedback situation",
"Window", "items", "generated",
"Alerts", "No alerts in the window.", "keyword", "model",
"Themes & trends", "items", "trend",
Expand Down
10 changes: 10 additions & 0 deletions src/FeedbackIntelligence.Api/Analysis/SnapshotHtml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@ public static string Render(
sb.AppendLine($"<!DOCTYPE html><html lang=\"{t.HtmlLang}\"><head><meta charset=\"utf-8\">");
sb.AppendLine("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
sb.AppendLine($"<title>{E(t.PageTitle)}</title>");
// A saved snapshot is the artefact most likely to be pasted into a chat
// or an email, so it needs the same link preview the live pages have.
// No og:image: there is no asset to point at, and a broken one previews
// worse than none.
sb.AppendLine($"<meta name=\"description\" content=\"{E(t.Heading)}\">");
sb.AppendLine("<meta property=\"og:type\" content=\"article\">");
sb.AppendLine("<meta property=\"og:site_name\" content=\"Feedback Intelligence\">");
sb.AppendLine($"<meta property=\"og:title\" content=\"{E(t.PageTitle)}\">");
sb.AppendLine($"<meta property=\"og:description\" content=\"{E(t.Heading)}\">");
sb.AppendLine("<meta name=\"twitter:card\" content=\"summary\">");
sb.AppendLine("<style>body{font:16px/1.5 system-ui,sans-serif;max-width:52rem;margin:0 auto;padding:1rem;color:#1c2430}" +
"h1{font-size:1.3rem}.badge{display:inline-block;background:#b3541e;color:#fff;border-radius:.4rem;padding:.15rem .5rem;font-size:.8rem}" +
".card{border:1px solid #d9dde3;border-radius:.6rem;padding:.9rem;margin:.7rem 0}" +
Expand Down
17 changes: 14 additions & 3 deletions src/FeedbackIntelligence.Api/wwwroot/desk.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,18 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Feedback — desk entry</title>
<title>Desk entry — Feedback Intelligence</title>
<meta name="description" content="A feedback intelligence demo: customer feedback from four channels, structured and grouped, with every claim traceable to the exact items behind it. Synthetic data, local LLM.">
<link rel="canonical" href="https://mikkonumminen.dev/feedback/desk">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Feedback Intelligence">
<meta property="og:title" content="Desk entry — Feedback Intelligence">
<meta property="og:description" content="A feedback intelligence demo: customer feedback from four channels, structured and grouped, with every claim traceable to the exact items behind it. Synthetic data, local LLM.">
<meta property="og:url" content="https://mikkonumminen.dev/feedback/desk">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Desk entry — Feedback Intelligence">
<meta name="twitter:description" content="A feedback intelligence demo: customer feedback from four channels, structured and grouped, with every claim traceable to the exact items behind it. Synthetic data, local LLM.">

<style>
:root { --bg:#f4f5f7; --card:#fff; --ink:#1c2430; --mut:#66707d; --line:#d9dde3;
--acc:#0b5fa5; --ok:#1b7f4d; --warn:#b3541e; --err:#b3261e; }
Expand Down Expand Up @@ -118,7 +129,7 @@ <h1 id="h1"></h1>
// domain (categoryField), not from here.
const STR = {
fi: {
htmlLang: "fi", locale: "fi-FI", pageTitle: "Palautetiskikirjaus",
htmlLang: "fi", locale: "fi-FI", pageTitle: "TiskikirjausFeedback Intelligence",
h1: "Tiskikirjaus — kirjaa asiakaspalaute yhdellä lauseella",
textLabel: "Mitä asiakas sanoi?",
placeholder: "esim. asiakas sano et maitokaapis oli vanhoi purkkei",
Expand Down Expand Up @@ -152,7 +163,7 @@ <h1 id="h1"></h1>
moderationHeading: "Moderoitava sisältö",
},
en: {
htmlLang: "en", locale: "en-GB", pageTitle: "Feedback — desk entry",
htmlLang: "en", locale: "en-GB", pageTitle: "Desk entry — Feedback Intelligence",
h1: "Desk entry — log feedback in one sentence",
textLabel: "What did they say?",
placeholder: "e.g. what the customer/player said, in their own words",
Expand Down
17 changes: 14 additions & 3 deletions src/FeedbackIntelligence.Api/wwwroot/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,18 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Feedback situation</title>
<title>Feedback Intelligence — Mikko Numminen</title>
<meta name="description" content="A feedback intelligence demo: customer feedback from four channels, structured and grouped, with every claim traceable to the exact items behind it. Synthetic data, local LLM.">
<link rel="canonical" href="https://mikkonumminen.dev/feedback">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Feedback Intelligence">
<meta property="og:title" content="Feedback Intelligence — Mikko Numminen">
<meta property="og:description" content="A feedback intelligence demo: customer feedback from four channels, structured and grouped, with every claim traceable to the exact items behind it. Synthetic data, local LLM.">
<meta property="og:url" content="https://mikkonumminen.dev/feedback">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Feedback Intelligence — Mikko Numminen">
<meta name="twitter:description" content="A feedback intelligence demo: customer feedback from four channels, structured and grouped, with every claim traceable to the exact items behind it. Synthetic data, local LLM.">

<style>
:root { --bg:#f4f5f7; --card:#fff; --ink:#1c2430; --mut:#66707d; --line:#d9dde3;
--acc:#0b5fa5; --err:#b3261e; --warn:#b3541e; --ok:#1b7f4d; }
Expand Down Expand Up @@ -93,7 +104,7 @@ <h1 id="h1"></h1>
// it (plus category labels) when the backend is up.
const STR = {
fi: {
htmlLang: "fi", locale: "fi-FI", pageTitle: "Palautetilanne", h1: "Palautetilanne",
htmlLang: "fi", locale: "fi-FI", pageTitle: "Feedback Intelligence — Mikko Numminen", h1: "Palautetilanne",
today: "Tänään", d7: "7 päivää", d30: "30 päivää", custom: "Oma aikaväli…", refresh: "Päivitä",
footBefore: "Jokainen väite on jäljitettävissä: avaa teeman takaa löytyvät viestit. Kirjaa uusi palaute: ",
footLink: "tiskikirjaus", close: "Sulje", live: "Live", snap: "Tilannekuva",
Expand All @@ -113,7 +124,7 @@ <h1 id="h1"></h1>
noReport: "Raporttia ei saatu eikä tallennettua tilannekuvaa löytynyt.",
},
en: {
htmlLang: "en", locale: "en-GB", pageTitle: "Feedback situation", h1: "Feedback situation",
htmlLang: "en", locale: "en-GB", pageTitle: "Feedback Intelligence — Mikko Numminen", h1: "Feedback situation",
today: "Today", d7: "7 days", d30: "30 days", custom: "Custom range…", refresh: "Refresh",
footBefore: "Every claim is traceable: open the messages behind each theme. Log new feedback: ",
footLink: "desk entry", close: "Close", live: "Live", snap: "Snapshot",
Expand Down
Loading