Compare commits
8 Commits
623462f3b4
...
main
Author | SHA1 | Date | |
---|---|---|---|
b580e46f4f | |||
69fde61cd8 | |||
c3bbea3edd | |||
5c930142af | |||
6276a888af | |||
db2a3151b9 | |||
e060f257d8 | |||
0a0102f456 |
@ -12,36 +12,29 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<h1>Absolvententreffen</h1>
|
<h2><strong>Geben Sie uns gerne Feedback zu unserem Diplomprojekt AlumniHub</strong></h2>
|
||||||
<h2>2025</h2>
|
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<button class="btn green" onclick="toggleOverlay('zusage')">
|
<button class="btn green" onclick="toggleOverlay('feedback')">
|
||||||
Zusage
|
Feedback
|
||||||
</button>
|
|
||||||
<button class="btn red" onclick="toggleOverlay('absage')">
|
|
||||||
Absage
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Zusage Overlay -->
|
<!-- Zusage Overlay -->
|
||||||
<div class="overlay" id="zusage">
|
<div class="overlay" id="feedback">
|
||||||
<div class="form-box">
|
<div class="form-box">
|
||||||
<h3>Zugesagt</h3>
|
<h3>Feedback</h3>
|
||||||
<p>Um es zu Finalisieren füllen Sie bitte die Felder aus</p>
|
<p>Um es zu Finalisieren füllen Sie bitte die Felder aus</p>
|
||||||
|
|
||||||
<form method="post" action="/post">
|
<form method="post" action="/post">
|
||||||
<input name="firstname" type="text" placeholder="Vorname" required />
|
|
||||||
<input name="lastname" type="text" placeholder="Nachname" required />
|
|
||||||
<input name="email" type="email" placeholder="Email" required />
|
<input name="email" type="email" placeholder="Email" required />
|
||||||
<input name="department" type="text" placeholder="Abteilung" />
|
<textarea name="Feedback"
|
||||||
<input name="year" type="text" placeholder="Jahrgang" />
|
id="feedbackText"
|
||||||
<input
|
placeholder="Feedback"
|
||||||
name="zusage"
|
rows="4"
|
||||||
id="zusage"
|
cols="40"
|
||||||
type="checkbox"
|
required>
|
||||||
checked
|
</textarea>
|
||||||
style="display: none"
|
|
||||||
/>
|
|
||||||
<button type="submit">Absenden</button>
|
<button type="submit">Absenden</button>
|
||||||
</form>
|
</form>
|
||||||
<img src="logo.png" alt="HTL Logo" class="form-logo" />
|
<img src="logo.png" alt="HTL Logo" class="form-logo" />
|
||||||
@ -57,7 +50,7 @@
|
|||||||
<input name="firstname" type="text" placeholder="Vorname" required />
|
<input name="firstname" type="text" placeholder="Vorname" required />
|
||||||
<input name="lastname" type="text" placeholder="Nachname" required />
|
<input name="lastname" type="text" placeholder="Nachname" required />
|
||||||
<input name="email" type="email" placeholder="Email" required />
|
<input name="email" type="email" placeholder="Email" required />
|
||||||
<input name="department" type="text" placeholder="Abteilung" />
|
<input name="faculty" type="text" placeholder="Fachrichtung" />
|
||||||
<input name="year" type="text" placeholder="Jahrgang" />
|
<input name="year" type="text" placeholder="Jahrgang" />
|
||||||
<input
|
<input
|
||||||
name="absage"
|
name="absage"
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
body {
|
body {
|
||||||
font-family: Arial, sans-serif;
|
font-family: Arial, sans-serif;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@ -8,41 +7,43 @@ body {
|
|||||||
|
|
||||||
header {
|
header {
|
||||||
background: #ccc;
|
background: #ccc;
|
||||||
padding: 10px;
|
padding: 1rem;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
height: 60px;
|
height: 4rem; /* Relative H<>he */
|
||||||
}
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
padding: 50px 20px;
|
padding: 5rem 2rem; /* Relative Werte f<>r Padding */
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 48px;
|
font-size: clamp(1.8rem, 5vw, 3rem); /* Relative Schriftgr<67><72>e */
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
text-align:center;
|
||||||
|
word-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size: 24px;
|
font-size: 1.5rem;
|
||||||
color: #666;
|
color: #666;
|
||||||
margin-bottom: 30px;
|
margin-bottom: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.buttons {
|
.buttons {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
gap: 15px;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
padding: 10px 25px;
|
padding: 0.6rem 2rem; /* Relative Werte f<>r Padding */
|
||||||
font-size: 16px;
|
font-size: 1rem; /* Relative Schriftgr<67><72>e */
|
||||||
color: white;
|
color: white;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 5px;
|
border-radius: 0.5rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,10 +69,10 @@ h2 {
|
|||||||
|
|
||||||
.form-box {
|
.form-box {
|
||||||
background: white;
|
background: white;
|
||||||
padding: 30px;
|
padding: 2rem;
|
||||||
border-radius: 10px;
|
border-radius: 1rem;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
max-width: 400px;
|
max-width: 25rem; /* Maximale Breite relativ */
|
||||||
position: relative;
|
position: relative;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
@ -81,34 +82,34 @@ h2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.form-box p {
|
.form-box p {
|
||||||
font-size: 12px;
|
font-size: 0.75rem; /* Relativer Wert */
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-box form {
|
.form-box form {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 10px;
|
gap: 1rem; /* Relative Gap */
|
||||||
margin-top: 15px;
|
margin-top: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-box input {
|
.form-box input {
|
||||||
padding: 10px;
|
padding: 1rem;
|
||||||
font-size: 14px;
|
font-size: 0.875rem; /* Relativer Wert */
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-box button {
|
.form-box button {
|
||||||
background: black;
|
background: black;
|
||||||
color: white;
|
color: white;
|
||||||
padding: 10px;
|
padding: 1rem;
|
||||||
font-size: 16px;
|
font-size: 1rem;
|
||||||
border: none;
|
border: none;
|
||||||
margin-top: 10px;
|
margin-top: 1rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-logo {
|
.form-logo {
|
||||||
display: block;
|
display: block;
|
||||||
margin: 20px auto 0;
|
margin: 2rem auto 0;
|
||||||
height: 40px;
|
height: 2.5rem; /* Relative H<>he */
|
||||||
}
|
}
|
||||||
|
85
index.js
85
index.js
@ -32,101 +32,38 @@ app.use(bodyParser.urlencoded({ extended: true }));
|
|||||||
|
|
||||||
app.post("/post", (req, res) => {
|
app.post("/post", (req, res) => {
|
||||||
fs.writeFile(
|
fs.writeFile(
|
||||||
`./data/${req.body.firstname}-${req.body.lastname}.json`,
|
`./data/${req.body.email}.json`,
|
||||||
JSON.stringify(req.body),
|
JSON.stringify(req.body),
|
||||||
(err) => {
|
(err) => {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
transporter.sendMail(
|
|
||||||
{
|
|
||||||
from: "Alumnihub <alumnihub@kocoder.xyz>",
|
|
||||||
to: `${req.body.firstname} ${req.body.lastname} <${req.body.email}>`,
|
|
||||||
envelope: {
|
|
||||||
from: "alumnihub@kocoder.xyz",
|
|
||||||
to: req.body.email,
|
|
||||||
},
|
|
||||||
subject: "Deine Anmeldung für's Absolvententreffen.",
|
|
||||||
text: `
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="de">
|
|
||||||
<body style="font-family: Arial, sans-serif; line-height: 1.5;">
|
|
||||||
|
|
||||||
<p>Liebe/r ${req.body.firstname},</p>
|
|
||||||
|
|
||||||
<p>vielen Dank für deine Anmeldung zum Absolvent*innentreffen am<br>
|
|
||||||
📅 <strong>Donnerstag, 25. September 2025</strong>,<br>
|
|
||||||
⏰ <strong>von 17:00 bis 20:00 Uhr</strong><br>
|
|
||||||
📍 im Speisesaal des SZU, Ungargasse 69, 1030 Wien.</p>
|
|
||||||
|
|
||||||
<p>Wir freuen uns sehr, dich an diesem besonderen Abend begrüßen zu dürfen!</p>
|
|
||||||
|
|
||||||
<p>Dich erwarten spannende Einblicke in aktuelle Entwicklungen am SZU, interessante Führungen sowie die Möglichkeit zum Wiedersehen, Austauschen und gemeinsamen Erinnern. Für das leibliche Wohl sorgt eine engagierte Abschlussklasse – der Reinerlös unterstützt ihre Abschlussreise. <strong>Bitte bring dafür Bargeld mit.</strong></p>
|
|
||||||
|
|
||||||
<p>📸 Wenn du Erinnerungsfotos aus deiner Schulzeit beisteuern möchtest, sende sie uns gerne vorab an:<br>
|
|
||||||
📧 <a href="mailto:szu.absolventinnentreffen@outlook.com">szu.absolventinnentreffen@outlook.com</a></p>
|
|
||||||
|
|
||||||
<p>❗Falls du wider Erwarten doch nicht teilnehmen kannst, bitten wir dich um eine kurze Absage per E-Mail an dieselbe Adresse. So können wir besser planen – vielen Dank!</p>
|
|
||||||
|
|
||||||
<p>Wir freuen uns auf einen stimmungsvollen Abend mit dir und auf viele schöne Begegnungen!</p>
|
|
||||||
|
|
||||||
<p>Herzliche Grüße<br>
|
|
||||||
Gerti Brindlmayer & Lukas Aigner<br>
|
|
||||||
im Namen des Teams des Absolvent*innen- & Fördervereins des SZU</p>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
(err, info) => {
|
(err, info) => {
|
||||||
if (err) return res.send(err);
|
if (err) return res.send(err);
|
||||||
}
|
}
|
||||||
);
|
|
||||||
|
|
||||||
return res.sendFile("bestaetigung.html", {
|
|
||||||
|
return res.sendFile("zusage.html", {
|
||||||
root: path.join(__dirname, "views"),
|
root: path.join(__dirname, "views"),
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
app.post("/cancel", (req, res) => {
|
app.post("/cancel", (req, res) => {
|
||||||
transporter.sendMail(
|
fs.writeFile(
|
||||||
{
|
`./data/${req.body.email}.json`,
|
||||||
from: "Alumnihub <alumnihub@kocoder.xyz>",
|
JSON.stringify(req.body),
|
||||||
to: `${req.body.firstname} ${req.body.lastname} <${req.body.email}>`,
|
(err) => {
|
||||||
envelope: {
|
console.log(err);
|
||||||
from: "alumnihub@kocoder.xyz",
|
}
|
||||||
to: req.body.email,
|
);
|
||||||
},
|
|
||||||
subject: "Deine Absage für's Absolvententreffen.",
|
|
||||||
text: `
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="de">
|
|
||||||
<body style="font-family: Arial, sans-serif; line-height: 1.5;">
|
|
||||||
|
|
||||||
<p>Liebe/r ${req.body.firstname},</p>
|
|
||||||
|
|
||||||
<p>vielen Dank für deine Rückmeldung zum Absolventinnentreffen am <strong>25. September 2025</strong>. Auch wenn du diesmal nicht teilnehmen kannst, freut es uns sehr, dass du mit dem <strong>Absolventinnen- & Förderverein des SZU</strong> in Verbindung bleiben möchtest.</p>
|
|
||||||
|
|
||||||
<p>Wir haben deine Kontaktdaten gespeichert und melden uns gerne bei zukünftigen Veranstaltungen oder Aktivitäten des Vereins wieder bei dir.</p>
|
|
||||||
|
|
||||||
<p>Wenn du Fragen hast oder dich aktiv einbringen möchtest, erreichst du uns jederzeit unter:<br>
|
|
||||||
📧 <a href="mailto:szu.absolventinnentreffen@outlook.com">szu.absolventinnentreffen@outlook.com</a></p>
|
|
||||||
|
|
||||||
<p>Herzliche Grüße<br>
|
|
||||||
Gerti Brindlmayer & Lukas Aigner<br>
|
|
||||||
im Namen des Teams des Absolvent*innen- & Fördervereins des SZU</p>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
`,
|
|
||||||
},
|
},
|
||||||
(err, info) => {
|
(err, info) => {
|
||||||
if (err) return res.send(err);
|
if (err) return res.send(err);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
return res.sendFile("bestaetigung.html", {
|
return res.sendFile("absage.html", {
|
||||||
root: path.join(__dirname, "views"),
|
root: path.join(__dirname, "views"),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
895
package-lock.json
generated
895
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -16,6 +16,7 @@
|
|||||||
"nodemailer": "^7.0.5"
|
"nodemailer": "^7.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"eslint": "^9.36.0",
|
||||||
"nodemon": "^3.1.10"
|
"nodemon": "^3.1.10"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,11 +14,11 @@
|
|||||||
<main>
|
<main>
|
||||||
<h1>Absolvententreffen</h1>
|
<h1>Absolvententreffen</h1>
|
||||||
<h2>2025</h2>
|
<h2>2025</h2>
|
||||||
<div class="buttons">
|
|
||||||
Vielen Dank für das hinterlassen der Informationen zu dir und das
|
Vielen Dank für das hinterlassen der Informationen zu dir und das
|
||||||
Interesse am Absolventinnentreffen. Wir werden dich über folgende
|
Interesse am Absolventinnentreffen. Wir werden dich über folgende
|
||||||
Veranstaltungen informieren.
|
Veranstaltungen informieren.
|
||||||
</div>
|
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
21
views/zusage.html
Normal file
21
views/zusage.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Absolvententreffen 2025</title>
|
||||||
|
<link rel="stylesheet" href="styles.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<img src="logo.png" alt="HTL Ungargasse Logo" class="logo" />
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<h1>Vielen Dank für deine Feedback</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
Reference in New Issue
Block a user