initial commit
This commit is contained in:
commit
876af2ffaf
7
Dockerfile
Normal file
7
Dockerfile
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
FROM node
|
||||||
|
WORKDIR /project
|
||||||
|
ADD index.html index.js /project/
|
||||||
|
LABEL traefik.enable=true
|
||||||
|
LABEL traefik.http.routers.tws_links.rule=Host(`techwork.zone`)
|
||||||
|
LABEL traefik.http.routers.tws_links.tls.certresolver=letsencrypt
|
||||||
|
CMD [ "node", "index.js" ]
|
8
README.md
Normal file
8
README.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# TWS Links Page
|
||||||
|
|
||||||
|
This is just a simple page which shows a list of links, styled after the popular
|
||||||
|
LinkTree service. It's nothing more than a static HTML page with embedded CSS which is served by a barebones node.js server.
|
||||||
|
|
||||||
|
## Local testing
|
||||||
|
|
||||||
|
The only dependency is Node.js, and you can work with that by just loading the HTML file in your web browser without the server. Just run `node index.js`.
|
10
docker-compose.yml
Normal file
10
docker-compose.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
version: '3.5'
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build: .
|
||||||
|
networks: [web]
|
||||||
|
|
||||||
|
networks:
|
||||||
|
web:
|
||||||
|
external: true
|
75
index.html
Normal file
75
index.html
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Tech Workers' Syndicate</title>
|
||||||
|
<style>
|
||||||
|
html,
|
||||||
|
body,
|
||||||
|
.links {
|
||||||
|
height: 90%;
|
||||||
|
background: #222;
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.links {
|
||||||
|
display: -webkit-flexbox;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
-webkit-align-items: center;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.links>a {
|
||||||
|
border: 1px solid orange;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
color: white;
|
||||||
|
padding: 1.5em;
|
||||||
|
margin: 1em;
|
||||||
|
width: 33%;
|
||||||
|
text-decoration: none;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1.title {
|
||||||
|
color: orange;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 10%;
|
||||||
|
}
|
||||||
|
@media (max-height: 650px) {
|
||||||
|
.links {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 3em;
|
||||||
|
}
|
||||||
|
.links > a {
|
||||||
|
margin: 1em auto 1em auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
h1.title {
|
||||||
|
margin-bottom: 5%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1 class="title">Tech Workers' Syndicate</h1>
|
||||||
|
<div class="links">
|
||||||
|
<a href="https://matrix.to/#/#tws:matrix.org">Join us!</a>
|
||||||
|
<a href="https://blog.techwork.zone/">Blog</a>
|
||||||
|
<a href="https://tams.tech/@syndicate" rel="me">Mastodon</a>
|
||||||
|
<a href="https://bsky.app/profile/techwork.zone" rel="me">BlueSky</a>
|
||||||
|
<a href="https://git.techwork.zone">Source Code</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
15
index.js
Normal file
15
index.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
const { readFile } = require('fs/promises')
|
||||||
|
const { Server } = require('http')
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const webPage = await readFile('index.html', { encoding: 'utf-8' })
|
||||||
|
const server = new Server(
|
||||||
|
(_, res) => res.writeHead(200, {'Content-Type': 'text/html'}).end(webPage)
|
||||||
|
)
|
||||||
|
|
||||||
|
server.listen(1312, () => {
|
||||||
|
console.log('listening on 0.0.0.0:1312')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
Loading…
Reference in a new issue