generated from corysanin/nodejs-web-template
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 28f18621e0 | |||
| 5e1c783a23 | |||
| a934b13df6 |
112
package-lock.json
generated
112
package-lock.json
generated
@@ -1,24 +1,24 @@
|
||||
{
|
||||
"name": "madisonlinux",
|
||||
"version": "0.0.7",
|
||||
"version": "0.2.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "madisonlinux",
|
||||
"version": "0.0.7",
|
||||
"version": "0.2.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"body-parser": "^2.2.0",
|
||||
"body-parser": "^2.2.1",
|
||||
"ejs": "3.1.10",
|
||||
"express": "5.1.0",
|
||||
"express": "^5.2.1",
|
||||
"ics": "^3.8.1",
|
||||
"json5": "2.2.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sindresorhus/tsconfig": "8.0.1",
|
||||
"@types/express": "^5.0.3",
|
||||
"@types/node": "^24.7.0",
|
||||
"@types/express": "^5.0.6",
|
||||
"@types/node": "^24.10.1",
|
||||
"forking-build-shit": "1.0.5",
|
||||
"typescript": "5.9.3"
|
||||
}
|
||||
@@ -368,15 +368,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/express": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz",
|
||||
"integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==",
|
||||
"version": "5.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz",
|
||||
"integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/body-parser": "*",
|
||||
"@types/express-serve-static-core": "^5.0.0",
|
||||
"@types/serve-static": "*"
|
||||
"@types/serve-static": "^2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/express-serve-static-core": {
|
||||
@@ -399,21 +399,14 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
|
||||
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "24.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.0.tgz",
|
||||
"integrity": "sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==",
|
||||
"version": "24.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
|
||||
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~7.14.0"
|
||||
"undici-types": "~7.16.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
@@ -441,25 +434,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/serve-static": {
|
||||
"version": "1.15.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz",
|
||||
"integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==",
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz",
|
||||
"integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/http-errors": "*",
|
||||
"@types/node": "*",
|
||||
"@types/send": "<1"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/serve-static/node_modules/@types/send": {
|
||||
"version": "0.17.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz",
|
||||
"integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/mime": "^1",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
@@ -489,23 +470,27 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/body-parser": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
|
||||
"integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==",
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz",
|
||||
"integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"bytes": "^3.1.2",
|
||||
"content-type": "^1.0.5",
|
||||
"debug": "^4.4.0",
|
||||
"debug": "^4.4.3",
|
||||
"http-errors": "^2.0.0",
|
||||
"iconv-lite": "^0.6.3",
|
||||
"iconv-lite": "^0.7.0",
|
||||
"on-finished": "^2.4.1",
|
||||
"qs": "^6.14.0",
|
||||
"raw-body": "^3.0.0",
|
||||
"type-is": "^2.0.0"
|
||||
"raw-body": "^3.0.1",
|
||||
"type-is": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/express"
|
||||
}
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
@@ -783,18 +768,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/express": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
|
||||
"integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
|
||||
"integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"accepts": "^2.0.0",
|
||||
"body-parser": "^2.2.0",
|
||||
"body-parser": "^2.2.1",
|
||||
"content-disposition": "^1.0.0",
|
||||
"content-type": "^1.0.5",
|
||||
"cookie": "^0.7.1",
|
||||
"cookie-signature": "^1.2.1",
|
||||
"debug": "^4.4.0",
|
||||
"depd": "^2.0.0",
|
||||
"encodeurl": "^2.0.0",
|
||||
"escape-html": "^1.0.3",
|
||||
"etag": "^1.8.1",
|
||||
@@ -1006,15 +992,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz",
|
||||
"integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/express"
|
||||
}
|
||||
},
|
||||
"node_modules/ics": {
|
||||
@@ -1377,22 +1367,6 @@
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/raw-body/node_modules/iconv-lite": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz",
|
||||
"integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/express"
|
||||
}
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
@@ -1699,9 +1673,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "7.14.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz",
|
||||
"integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==",
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
|
||||
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
|
||||
10
package.json
10
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "madisonlinux",
|
||||
"version": "0.0.7",
|
||||
"version": "0.2.0",
|
||||
"description": "Website for upcoming Linux install party in Madison WI",
|
||||
"keywords": [
|
||||
"web",
|
||||
@@ -24,16 +24,16 @@
|
||||
"views"
|
||||
],
|
||||
"dependencies": {
|
||||
"body-parser": "^2.2.0",
|
||||
"body-parser": "^2.2.1",
|
||||
"ejs": "3.1.10",
|
||||
"express": "5.1.0",
|
||||
"express": "^5.2.1",
|
||||
"ics": "^3.8.1",
|
||||
"json5": "2.2.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sindresorhus/tsconfig": "8.0.1",
|
||||
"@types/express": "^5.0.3",
|
||||
"@types/node": "^24.7.0",
|
||||
"@types/express": "^5.0.6",
|
||||
"@types/node": "^24.10.1",
|
||||
"forking-build-shit": "1.0.5",
|
||||
"typescript": "5.9.3"
|
||||
},
|
||||
|
||||
18
src/Web.ts
18
src/Web.ts
@@ -83,7 +83,7 @@ class Web {
|
||||
else if(!adminMode){
|
||||
console.log(req.headers?.['user-agent']);
|
||||
}
|
||||
res.render('index', {
|
||||
res.render('lug', {
|
||||
page: {
|
||||
title: 'Madison End of 10 Install Party',
|
||||
titlesuffix: 'Get help installing Linux',
|
||||
@@ -129,18 +129,22 @@ class Web {
|
||||
|
||||
app.get('/event.ics', (_, res) => {
|
||||
createEvent({
|
||||
uid: '1@madisonlinux.com',
|
||||
start: [2025, 11, 1, 19, 30],
|
||||
duration: { hours: 3, minutes: 0 },
|
||||
title: 'Madison Linux Workshop',
|
||||
description: 'Keep your current PC up-to-date by installing a free OS!',
|
||||
uid: '2@madisonlinux.com',
|
||||
sequence: 1,
|
||||
startInputType: 'local',
|
||||
startOutputType: 'local',
|
||||
start: [2026, 1, 15, 19, 0],
|
||||
duration: { hours: 1, minutes: 0 },
|
||||
title: 'Madison Linux User Group',
|
||||
description: 'A place for Linux users of all skill levels to meet and share knowledge, troubleshoot, and show off',
|
||||
location: '56 Corry St, Madison, WI 53704',
|
||||
url: 'https://madisonlinux.com/',
|
||||
geo: { lat: 43.0982199, lon: -89.3481373 },
|
||||
status: 'CONFIRMED',
|
||||
busyStatus: 'TENTATIVE',
|
||||
organizer: { name: 'Cory Sanin', email: 'endof10@cory.sanin.dev' },
|
||||
method: 'REQUEST'
|
||||
method: 'REQUEST',
|
||||
recurrenceRule: 'FREQ=MONTHLY;BYDAY=TH;BYSETPOS=3'
|
||||
}, (err, s) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
|
||||
38
views/index_after.ejs
Normal file
38
views/index_after.ejs
Normal file
@@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||
|
||||
<head>
|
||||
<%- include("head", locals) %>
|
||||
</head>
|
||||
|
||||
<body class="preload">
|
||||
<%- include("navigation", locals) %>
|
||||
<div class="content">
|
||||
<% if (adminMode) { %>
|
||||
<%- include("installform", locals) %>
|
||||
<% } %>
|
||||
<h1>Linux Install Party Madison</h1>
|
||||
<% if (installs && installs.length) { %>
|
||||
<div id="installs">
|
||||
<h1>We have saved <span><%= installs.length %></span> computer<% if (installs.length > 1) { %>s<% } %>!</h1>
|
||||
</div>
|
||||
<% } %>
|
||||
<h2>Thanks for saving your computers!</h2>
|
||||
<p>
|
||||
Thank you all for attending! It was great meeting everyone and I hope you all
|
||||
enjoy your new OS's! Thanks to <a href="https://www.sector67.org/">Sector67</a>
|
||||
for hosting the event and recruiting volunteers as well.
|
||||
</p>
|
||||
<p>
|
||||
No promises, but perhaps we'll do this again in the future. You better believe if
|
||||
Windows 10 ends up in the news due to a major vulnerability, I will almost certainly
|
||||
be contemplating organizing another event. So stay tuned.
|
||||
</p>
|
||||
<h2>Need help?</h2>
|
||||
<p>
|
||||
If we set up your Linux installation and you need help or guidance, shoot me an
|
||||
email at <a href="mailto:endof10@cory.sanin.dev">endof10@cory.sanin.dev</a>.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
51
views/lug.ejs
Normal file
51
views/lug.ejs
Normal file
@@ -0,0 +1,51 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||
|
||||
<head>
|
||||
<%- include("head", locals) %>
|
||||
</head>
|
||||
|
||||
<body class="preload">
|
||||
<%- include("navigation", locals) %>
|
||||
<div class="content">
|
||||
<% if (adminMode) { %>
|
||||
<%- include("installform", locals) %>
|
||||
<% } %>
|
||||
<h1>Madison Linux</h1>
|
||||
<p>
|
||||
A Linux user Group (LUG) is coming to your neighborhood...
|
||||
</p>
|
||||
<p>
|
||||
Madison Linux is (will be?) a place for Linux users of all skill levels to meet and share knowledge, troubleshoot, and show off.
|
||||
Completely open to the pulic, we will meet monthly starting in January 2026. Every 3rd Thursday, at 7PM.
|
||||
<a href="https://www.sector67.org/">Sector67</a> is hosting us again, so a big thank you to them!
|
||||
</p>
|
||||
<p>
|
||||
<a class="btn" href="/event.ics">🗓️ Add to Calendar</a>
|
||||
</p>
|
||||
<p>
|
||||
Agenda for January 15th:
|
||||
<ul>
|
||||
<li>Decide on what communication platform(s) will we use</li>
|
||||
<li>Casual presentation on the format of other Linux User Groups; how-to LUG</li>
|
||||
<li>Get a sense where the community's interests lie</li>
|
||||
<li>Some time to meet and chat</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>
|
||||
Hope to see you soon!
|
||||
</p>
|
||||
<hr/>
|
||||
<% if (installs && installs.length) { %>
|
||||
<div id="installs">
|
||||
<h1>We have saved <span><%= installs.length %></span> computer<% if (installs.length > 1) { %>s<% } %>!</h1>
|
||||
</div>
|
||||
<% } %>
|
||||
<h2>Need help?</h2>
|
||||
<p>
|
||||
If we set up your Linux installation and you need help or guidance, shoot me an
|
||||
email at <a href="mailto:endof10@cory.sanin.dev">endof10@cory.sanin.dev</a>.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -2,7 +2,6 @@
|
||||
<nav>
|
||||
<ul class="nav_links">
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/#event">Event Details</a></li>
|
||||
<li><a href="/os">OS Recommendations</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
Reference in New Issue
Block a user