site new version with events from steam
BIN
assets/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
assets/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 462 B |
BIN
assets/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
assets/linkedin.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
1
assets/site.webmanifest
Normal file
@@ -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"}
|
||||||
BIN
assets/tiktok.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
assets/youtube.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
103
index - Copia.html
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||||
|
<title>JMP GAMES</title>
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Rajdhani:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<video autoplay muted loop playsinline id="background-video">
|
||||||
|
<source src="assets/background.mp4" type="video/mp4">
|
||||||
|
Your browser does not support the video tag.
|
||||||
|
</video>
|
||||||
|
<main class="container">
|
||||||
|
<div class="card logo-card">
|
||||||
|
<img src="assets/jmpbianco.png" alt="JMP Games" class="logo">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card game-card">
|
||||||
|
<h2>GAMES</h2>
|
||||||
|
<div class="game-preview">
|
||||||
|
<h3>The Drunken Beard</h3>
|
||||||
|
<iframe style="width:100%" height="315" src="https://www.youtube.com/embed/IGv_IGnXH6s?si=nnKGEUqYjIs4Nw90" title="The Drunken Beard" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<p>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!
|
||||||
|
</p>
|
||||||
|
<div class="release-date">Demo available May 2025</div>
|
||||||
|
<div class="release-date">Coming December 2025</div>
|
||||||
|
<a href="https://store.steampowered.com/app/3622810/THE_DRUNKEN_BEARD/" target="_blank"><img src="assets/steam.png" width="50px" alt="Steam"></a>
|
||||||
|
<div id="steam-events">
|
||||||
|
<p>
|
||||||
|
Searching Steam events...
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card newsletter-card">
|
||||||
|
<h2>JOIN THE NEWSLETTER</h2>
|
||||||
|
<p>Subscribe for development updates and exclusive content</p>
|
||||||
|
<form id="newsletter-form">
|
||||||
|
<input type="email" placeholder="Enter your email" required>
|
||||||
|
<input id="subscribe" type="hidden" value="1">
|
||||||
|
<input id="sub_message" type="hidden" value="Check your mail for confirmation">
|
||||||
|
<button type="submit">SUBSCRIBE</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card team-card">
|
||||||
|
<h2>THE TEAM</h2>
|
||||||
|
<div class="team-grid">
|
||||||
|
<div class="team-member">
|
||||||
|
<h3>Michele Rossi</h3>
|
||||||
|
<p>Developer</p>
|
||||||
|
</div>
|
||||||
|
<div class="team-member">
|
||||||
|
<h3>Mauro Cirafisi</h3>
|
||||||
|
<p>Developer</p>
|
||||||
|
</div>
|
||||||
|
<div class="team-member">
|
||||||
|
<h3>Flavio Fabbrizi</h3>
|
||||||
|
<p>CEO</p>
|
||||||
|
</div>
|
||||||
|
<div class="team-member">
|
||||||
|
<h3>Matteo Sonaglioni</h3>
|
||||||
|
<p>2D & 3D Artist</p>
|
||||||
|
</div>
|
||||||
|
<div class="team-member">
|
||||||
|
<h3>Ambra Cirafisi</h3>
|
||||||
|
<p>Concept Artist</p>
|
||||||
|
</div>
|
||||||
|
<div class="team-member">
|
||||||
|
<h3>Agnese Lucchese</h3>
|
||||||
|
<p>Animator</p>
|
||||||
|
</div>
|
||||||
|
<div class="team-member">
|
||||||
|
<h3>Angelo Carnemolla</h3>
|
||||||
|
<p>Sound Designer & Composer</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-links">
|
||||||
|
<a href="privacy-policy.html" target="_self">Privacy Policy</a>
|
||||||
|
<a href="cookie-policy.html" target="_self">Cookie Policy</a>
|
||||||
|
</div>
|
||||||
|
<div class="contact-links">
|
||||||
|
<a href="https://steamcommunity.com/id/jmpgames/" target="_blank"><img src="assets/steam.png" height="50px" alt="Steam JMP Games"></a>
|
||||||
|
<a href="https://www.instagram.com/jmpgamesstudio/" target="_blank"><img src="assets/instagram.png" height="50px" alt="Instagram JMP Games"></a>
|
||||||
|
<a href="https://discord.gg/QudFnQkEcQ" target="_blank"><img src="assets/discord.png" height="50px" alt="Discord JMP Games"></a>
|
||||||
|
<a href="https://www.youtube.com/@JMPGames-x7b" target="_blank"><img src="assets/youtube.png" height="50px" alt="YouTube JMP Games"></a>
|
||||||
|
<a href="https://www.tiktok.com/@jmpgamesstudio" target="_blank"><img src="assets/tiktok.png" height="50px" alt="TikTok JMP Games"></a>
|
||||||
|
<a href="https://www.linkedin.com/company/108363891/" target="_blank"><img src="assets/linkedin.png" height="50px" alt="Linkedin JMP Games"></a>
|
||||||
|
</div>
|
||||||
|
<div class="copyright">
|
||||||
|
<p>© 2025 JMP Games srls. All rights reserved.</p>
|
||||||
|
<p>VAT: IT02571090444</p>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
10
index.html
@@ -25,9 +25,14 @@
|
|||||||
<br/>
|
<br/>
|
||||||
<p>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!
|
<p>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!
|
||||||
</p>
|
</p>
|
||||||
<div class="release-date">Demo available May 9th 2025</div>
|
<div class="release-date">Demo available May 2025</div>
|
||||||
<div class="release-date">Coming December 2025</div>
|
<div class="release-date">Coming December 2025</div>
|
||||||
<a href="https://store.steampowered.com/app/3622810/THE_DRUNKEN_BEARD/" target="_blank"><img src="assets/steam.png" width="50px" alt="Steam"></a>
|
<a href="https://store.steampowered.com/app/3622810/THE_DRUNKEN_BEARD/" target="_blank"><img src="assets/steam.png" width="50px" alt="Steam"></a>
|
||||||
|
<div id="steam-events">
|
||||||
|
<p>
|
||||||
|
Searching Steam events...
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -83,6 +88,9 @@
|
|||||||
<a href="https://steamcommunity.com/id/jmpgames/" target="_blank"><img src="assets/steam.png" height="50px" alt="Steam JMP Games"></a>
|
<a href="https://steamcommunity.com/id/jmpgames/" target="_blank"><img src="assets/steam.png" height="50px" alt="Steam JMP Games"></a>
|
||||||
<a href="https://www.instagram.com/jmpgamesstudio/" target="_blank"><img src="assets/instagram.png" height="50px" alt="Instagram JMP Games"></a>
|
<a href="https://www.instagram.com/jmpgamesstudio/" target="_blank"><img src="assets/instagram.png" height="50px" alt="Instagram JMP Games"></a>
|
||||||
<a href="https://discord.gg/QudFnQkEcQ" target="_blank"><img src="assets/discord.png" height="50px" alt="Discord JMP Games"></a>
|
<a href="https://discord.gg/QudFnQkEcQ" target="_blank"><img src="assets/discord.png" height="50px" alt="Discord JMP Games"></a>
|
||||||
|
<a href="https://www.youtube.com/@JMPGames-x7b" target="_blank"><img src="assets/youtube.png" height="50px" alt="YouTube JMP Games"></a>
|
||||||
|
<a href="https://www.tiktok.com/@jmpgamesstudio" target="_blank"><img src="assets/tiktok.png" height="50px" alt="TikTok JMP Games"></a>
|
||||||
|
<a href="https://www.linkedin.com/company/108363891/" target="_blank"><img src="assets/linkedin.png" height="50px" alt="Linkedin JMP Games"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="copyright">
|
<div class="copyright">
|
||||||
<p>© 2025 JMP Games srls. All rights reserved.</p>
|
<p>© 2025 JMP Games srls. All rights reserved.</p>
|
||||||
|
|||||||
111
script - Copia.js
Normal file
@@ -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 = "<p>No event available.</p>";
|
||||||
|
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 = "<p>Error loading Steam events.</p>";
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
});
|
||||||
84
script.js
@@ -1,4 +1,5 @@
|
|||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
|
||||||
// Newsletter form submission
|
// Newsletter form submission
|
||||||
const form = document.getElementById('newsletter-form');
|
const form = document.getElementById('newsletter-form');
|
||||||
form.addEventListener('submit', async (e) => {
|
form.addEventListener('submit', async (e) => {
|
||||||
@@ -8,7 +9,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const message = e.target.querySelector('input[id="sub_message"]');
|
const message = e.target.querySelector('input[id="sub_message"]');
|
||||||
message.setAttribute('type','text');
|
message.setAttribute('type','text');
|
||||||
message.type = 'text';
|
message.type = 'text';
|
||||||
const response = await fetch('http://localhost:3001/newsletter', {
|
const response = await fetch('/api/newsletter', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
"email": email,
|
"email": email,
|
||||||
@@ -28,4 +29,83 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const video = document.getElementById('background-video');
|
const video = document.getElementById('background-video');
|
||||||
video.style.transform = `scale(1.1) translate(${mouseX * -20}px, ${mouseY * -20}px)`;
|
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 = "<p>No event available.</p>";
|
||||||
|
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 = "<p>Error loading Steam events.</p>";
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
});
|
||||||
1
site-server
Submodule
@@ -18,7 +18,6 @@
|
|||||||
body {
|
body {
|
||||||
font-family: 'Rajdhani', sans-serif;
|
font-family: 'Rajdhani', sans-serif;
|
||||||
background-color: var(--bg-dark);
|
background-color: var(--bg-dark);
|
||||||
background-image: url('norse-pattern.png');
|
|
||||||
background-blend-mode: overlay;
|
background-blend-mode: overlay;
|
||||||
color: var(--text-light);
|
color: var(--text-light);
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
|
|||||||