diff --git a/assets/android-chrome-192x192.png b/assets/android-chrome-192x192.png
new file mode 100644
index 0000000..4ac029a
Binary files /dev/null and b/assets/android-chrome-192x192.png differ
diff --git a/assets/android-chrome-512x512.png b/assets/android-chrome-512x512.png
new file mode 100644
index 0000000..17b32c5
Binary files /dev/null and b/assets/android-chrome-512x512.png differ
diff --git a/assets/apple-touch-icon.png b/assets/apple-touch-icon.png
new file mode 100644
index 0000000..a000164
Binary files /dev/null and b/assets/apple-touch-icon.png differ
diff --git a/assets/favicon-16x16.png b/assets/favicon-16x16.png
new file mode 100644
index 0000000..b3b1907
Binary files /dev/null and b/assets/favicon-16x16.png differ
diff --git a/assets/favicon-32x32.png b/assets/favicon-32x32.png
new file mode 100644
index 0000000..483ca64
Binary files /dev/null and b/assets/favicon-32x32.png differ
diff --git a/assets/favicon.ico b/assets/favicon.ico
new file mode 100644
index 0000000..b3ea598
Binary files /dev/null and b/assets/favicon.ico differ
diff --git a/assets/linkedin.png b/assets/linkedin.png
new file mode 100644
index 0000000..298f3d6
Binary files /dev/null and b/assets/linkedin.png differ
diff --git a/assets/site.webmanifest b/assets/site.webmanifest
new file mode 100644
index 0000000..45dc8a2
--- /dev/null
+++ b/assets/site.webmanifest
@@ -0,0 +1 @@
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
diff --git a/assets/tiktok.png b/assets/tiktok.png
new file mode 100644
index 0000000..b561e89
Binary files /dev/null and b/assets/tiktok.png differ
diff --git a/assets/youtube.png b/assets/youtube.png
new file mode 100644
index 0000000..80908c3
Binary files /dev/null and b/assets/youtube.png differ
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..b3ea598
Binary files /dev/null and b/favicon.ico differ
diff --git a/index - Copia.html b/index - Copia.html
new file mode 100644
index 0000000..c37ee9b
--- /dev/null
+++ b/index - Copia.html
@@ -0,0 +1,103 @@
+
+
+ In The Drunken Beard, you take the reins of a lively tavern where every pint tells a story. Brew craft beers, manage orders between thirsty dwarves and impatient adventurers, expand the inn and turn it into a legendary haven. Between secret recipes, rustic furnishings, and demanding customers, only the finest innkeeper will win over hearts and livers. Glory awaits.. one beer at a time!
-
© 2025 JMP Games srls. All rights reserved.
diff --git a/script - Copia.js b/script - Copia.js
new file mode 100644
index 0000000..80d8b18
--- /dev/null
+++ b/script - Copia.js
@@ -0,0 +1,111 @@
+document.addEventListener('DOMContentLoaded', () => {
+
+ // Newsletter form submission
+ const form = document.getElementById('newsletter-form');
+ form.addEventListener('submit', async (e) => {
+ e.preventDefault();
+ const email = e.target.querySelector('input[type="email"]').value;
+ const subscribe = e.target.querySelector('input[id="subscribe"]').value;
+ const message = e.target.querySelector('input[id="sub_message"]');
+ message.setAttribute('type','text');
+ message.type = 'text';
+ const response = await fetch('/api/newsletter', {
+ method: 'POST',
+ body: JSON.stringify({
+ "email": email,
+ "subscribe": subscribe
+ }),
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+ });
+
+ // Add subtle parallax effect to video background
+ document.addEventListener('mousemove', (e) => {
+ const mouseX = e.clientX / window.innerWidth;
+ const mouseY = e.clientY / window.innerHeight;
+
+ const video = document.getElementById('background-video');
+ video.style.transform = `scale(1.1) translate(${mouseX * -20}px, ${mouseY * -20}px)`;
+ });
+
+
+ //retrieve steam events
+ (async () => {
+ const container = document.querySelector("#steam-events");
+ console.log(container);
+ if (!container) return;
+
+ const appId = container.dataset.appid || "3622810";
+ const count = 5;
+
+ async function loadSteamEvents({ appId, count }) {
+ const url = `/api/steamevents?appId=${appId}&count=${count}`;
+ const res = await fetch(url);
+ if (!res.ok) throw new Error("Unable to retrieve events");
+ return res.json();
+ }
+
+ function escapeHTML(str) {
+ const p = document.createElement("p");
+ p.textContent = str || "";
+ return p.innerHTML;
+ }
+
+ function renderSteamEvents(container, data) {
+ if (!data.items?.length) {
+ container.innerHTML = "
No event available.
";
+ return;
+ }
+
+ const list = document.createElement("ul");
+ list.style.listStyle = "none";
+ list.style.padding = "0";
+ list.style.margin = "0";
+
+ data.items.forEach(item => {
+ const li = document.createElement("li");
+ li.style.border = "1px solid #ddd";
+ li.style.borderRadius = "12px";
+ li.style.padding = "12px 16px";
+ li.style.margin = "8px 0";
+ li.style.background = "#fff";
+ li.style.boxShadow = "0 1px 2px rgba(0,0,0,0.05)";
+
+ const title = document.createElement("a");
+ title.href = item.url;
+ title.target = "_blank";
+ title.rel = "noopener";
+ title.textContent = item.title || "Update";
+
+ const meta = document.createElement("div");
+ meta.style.fontSize = "12px";
+ meta.style.opacity = "0.7";
+ const d = item.date ? new Date(item.date).toLocaleString() : "";
+ meta.textContent = [d, item.feedlabel].filter(Boolean).join(" • ");
+
+ const excerpt = document.createElement("p");
+ const short = (item.contents || "").replace(/\s+/g, " ").trim().slice(0, 240);
+ excerpt.innerHTML = escapeHTML(short) + (short.length >= 240 ? "…" : "");
+
+ li.appendChild(title);
+ li.appendChild(meta);
+ li.appendChild(excerpt);
+ list.appendChild(li);
+ });
+
+ container.innerHTML = "";
+ container.appendChild(list);
+ }
+
+ try {
+ const data = await loadSteamEvents({ appId, count });
+ renderSteamEvents(container, data);
+ } catch (e) {
+ container.innerHTML = "
Error loading Steam events.
";
+ console.error(e);
+ }
+ })();
+
+});
\ No newline at end of file
diff --git a/script.js b/script.js
index b12a62d..80d8b18 100644
--- a/script.js
+++ b/script.js
@@ -1,4 +1,5 @@
document.addEventListener('DOMContentLoaded', () => {
+
// Newsletter form submission
const form = document.getElementById('newsletter-form');
form.addEventListener('submit', async (e) => {
@@ -8,7 +9,7 @@ document.addEventListener('DOMContentLoaded', () => {
const message = e.target.querySelector('input[id="sub_message"]');
message.setAttribute('type','text');
message.type = 'text';
- const response = await fetch('http://localhost:3001/newsletter', {
+ const response = await fetch('/api/newsletter', {
method: 'POST',
body: JSON.stringify({
"email": email,
@@ -28,4 +29,83 @@ document.addEventListener('DOMContentLoaded', () => {
const video = document.getElementById('background-video');
video.style.transform = `scale(1.1) translate(${mouseX * -20}px, ${mouseY * -20}px)`;
});
-});
+
+
+ //retrieve steam events
+ (async () => {
+ const container = document.querySelector("#steam-events");
+ console.log(container);
+ if (!container) return;
+
+ const appId = container.dataset.appid || "3622810";
+ const count = 5;
+
+ async function loadSteamEvents({ appId, count }) {
+ const url = `/api/steamevents?appId=${appId}&count=${count}`;
+ const res = await fetch(url);
+ if (!res.ok) throw new Error("Unable to retrieve events");
+ return res.json();
+ }
+
+ function escapeHTML(str) {
+ const p = document.createElement("p");
+ p.textContent = str || "";
+ return p.innerHTML;
+ }
+
+ function renderSteamEvents(container, data) {
+ if (!data.items?.length) {
+ container.innerHTML = "
No event available.
";
+ return;
+ }
+
+ const list = document.createElement("ul");
+ list.style.listStyle = "none";
+ list.style.padding = "0";
+ list.style.margin = "0";
+
+ data.items.forEach(item => {
+ const li = document.createElement("li");
+ li.style.border = "1px solid #ddd";
+ li.style.borderRadius = "12px";
+ li.style.padding = "12px 16px";
+ li.style.margin = "8px 0";
+ li.style.background = "#fff";
+ li.style.boxShadow = "0 1px 2px rgba(0,0,0,0.05)";
+
+ const title = document.createElement("a");
+ title.href = item.url;
+ title.target = "_blank";
+ title.rel = "noopener";
+ title.textContent = item.title || "Update";
+
+ const meta = document.createElement("div");
+ meta.style.fontSize = "12px";
+ meta.style.opacity = "0.7";
+ const d = item.date ? new Date(item.date).toLocaleString() : "";
+ meta.textContent = [d, item.feedlabel].filter(Boolean).join(" • ");
+
+ const excerpt = document.createElement("p");
+ const short = (item.contents || "").replace(/\s+/g, " ").trim().slice(0, 240);
+ excerpt.innerHTML = escapeHTML(short) + (short.length >= 240 ? "…" : "");
+
+ li.appendChild(title);
+ li.appendChild(meta);
+ li.appendChild(excerpt);
+ list.appendChild(li);
+ });
+
+ container.innerHTML = "";
+ container.appendChild(list);
+ }
+
+ try {
+ const data = await loadSteamEvents({ appId, count });
+ renderSteamEvents(container, data);
+ } catch (e) {
+ container.innerHTML = "
Error loading Steam events.
";
+ console.error(e);
+ }
+ })();
+
+});
\ No newline at end of file
diff --git a/site-server b/site-server
new file mode 160000
index 0000000..4829615
--- /dev/null
+++ b/site-server
@@ -0,0 +1 @@
+Subproject commit 4829615367a73a7f97976befa129e53ceada63e1
diff --git a/styles.css b/styles.css
index ca50dce..2aeb452 100644
--- a/styles.css
+++ b/styles.css
@@ -18,7 +18,6 @@
body {
font-family: 'Rajdhani', sans-serif;
background-color: var(--bg-dark);
- background-image: url('norse-pattern.png');
background-blend-mode: overlay;
color: var(--text-light);
min-height: 100vh;