basically finished site
This commit is contained in:
		
							parent
							
								
									3978670bf6
								
							
						
					
					
						commit
						557a7e4b3f
					
				
					 10 changed files with 2780 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| node_modules | ||||
							
								
								
									
										5
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| { | ||||
|     "cSpell.words": [ | ||||
|         "ALEXHELDT" | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										99
									
								
								assets/css/index.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								assets/css/index.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,99 @@ | |||
| @import url("https://fonts.googleapis.com/css2?family=Orbitron&display=swap"); | ||||
| * { | ||||
|   margin: 0; | ||||
|   padding: 0; } | ||||
| 
 | ||||
| /* Hide scrollbar for Chrome, Safari and Opera */ | ||||
| ::-webkit-scrollbar { | ||||
|   display: none; } | ||||
| 
 | ||||
| body { | ||||
|   background: #000; | ||||
|   color: #fff; | ||||
|   font-family: 'Orbitron', sans-serif; | ||||
|   -ms-overflow-style: none; | ||||
|   /* IE and Edge */ | ||||
|   scrollbar-width: none; | ||||
|   /* Firefox */ } | ||||
| 
 | ||||
| .logo { | ||||
|   width: 150px; | ||||
|   text-align: center; | ||||
|   margin: auto; | ||||
|   justify-content: center; | ||||
|   display: flex; } | ||||
| 
 | ||||
| a { | ||||
|   color: white; | ||||
|   font-size: 2vw; | ||||
|   text-decoration: none; } | ||||
|   a:hover { | ||||
|     color: grey; } | ||||
| 
 | ||||
| svg { | ||||
|   fill: white; | ||||
|   padding: 0 10px; | ||||
|   width: 50px; | ||||
|   height: 50px; } | ||||
| 
 | ||||
| .sub-nav { | ||||
|   text-align: center; | ||||
|   margin: auto; | ||||
|   justify-content: center; | ||||
|   display: flex; } | ||||
| 
 | ||||
| .bar { | ||||
|   position: absolute; | ||||
|   width: 99%; | ||||
|   height: 20px; | ||||
|   background-color: white; | ||||
|   mix-blend-mode: difference; | ||||
|   color: black; | ||||
|   font-size: 15px; | ||||
|   margin: auto; | ||||
|   display: flex; | ||||
|   padding-left: 1%; } | ||||
|   .bar a { | ||||
|     font-size: inherit; | ||||
|     color: black; } | ||||
| 
 | ||||
| .top { | ||||
|   top: 50px; } | ||||
| 
 | ||||
| .bottom { | ||||
|   bottom: 50px; } | ||||
| 
 | ||||
| section { | ||||
|   height: 100vh; | ||||
|   width: 100vw; } | ||||
| 
 | ||||
| .music { | ||||
|   display: flex; | ||||
|   text-align: center; | ||||
|   margin: auto; | ||||
|   justify-content: space-between; | ||||
|   padding-top: 5vh; | ||||
|   margin: 0 100px; } | ||||
|   .music .title { | ||||
|     font-size: 3vh; | ||||
|     display: flex; | ||||
|     text-align: left; | ||||
|     margin: auto; | ||||
|     justify-content: space-between; | ||||
|     padding-top: 2vh; } | ||||
|   .music img { | ||||
|     height: 30vh; } | ||||
| 
 | ||||
| @media screen and (max-width: 1350px) { | ||||
|   .music { | ||||
|     display: table; | ||||
|     margin: auto; } | ||||
|   .title { | ||||
|     padding-bottom: 20px; } | ||||
|   img { | ||||
|     height: 20vh; } | ||||
|   .bottom { | ||||
|     position: sticky; | ||||
|     bottom: 0; } } | ||||
| 
 | ||||
| /*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiYXNzZXRzL3Nhc3MvaW5kZXguY3NzIiwKCSJzb3VyY2VzIjogWwoJCSJhc3NldHMvc2Fzcy9pbmRleC5zYXNzIgoJXSwKCSJuYW1lcyI6IFtdLAoJIm1hcHBpbmdzIjogIkFBQ0EsT0FBTyxDQUFDLHFFQUFJO0FBQ1osQUFBQSxDQUFDLENBQUM7RUFDRSxNQUFNLEVBQUUsQ0FBQztFQUNULE9BQU8sRUFBRSxDQUFDLEdBQUc7O0FBRWpCLGlEQUFpRDtBQUNqRCxBQUFBLG1CQUFtQixDQUFDO0VBQ2hCLE9BQU8sRUFBRSxJQUFJLEdBQUc7O0FBRXBCLEFBQUEsSUFBSSxDQUFDO0VBQ0QsVUFBVSxFQUFFLElBQUk7RUFDaEIsS0FBSyxFQUFFLElBQUk7RUFDWCxXQUFXLEVBQUUsc0JBQXNCO0VBQ25DLGtCQUFrQixFQUFFLElBQUk7RUFBRyxpQkFBaUI7RUFDNUMsZUFBZSxFQUFFLElBQUk7RUFBRyxhQUFhLEVBQUc7O0FBRzVDLEFBQUEsS0FBSyxDQUFDO0VBQ0YsS0FBSyxFQUFFLEtBQUs7RUFDWixVQUFVLEVBQUUsTUFBTTtFQUNsQixNQUFNLEVBQUUsSUFBSTtFQUNaLGVBQWUsRUFBRSxNQUFNO0VBQ3ZCLE9BQU8sRUFBRSxJQUFJLEdBQUc7O0FBRXBCLEFBQUEsQ0FBQyxDQUFDO0VBQ0UsS0FBSyxFQUFFLEtBQUs7RUFDWixTQUFTLEVBQUUsR0FBRztFQUNkLGVBQWUsRUFBRSxJQUFJLEdBRUQ7RUFMeEIsQUFJSSxDQUpILEFBSUksTUFBTSxDQUFDO0lBQ0osS0FBSyxFQUFFLElBQUksR0FBRzs7QUFFdEIsQUFBQSxHQUFHLENBQUM7RUFDQSxJQUFJLEVBQUUsS0FBSztFQUNYLE9BQU8sRUFBRSxNQUFNO0VBQ2YsS0FBSyxFQUFFLElBQUk7RUFDWCxNQUFNLEVBQUUsSUFBSSxHQUFHOztBQUVuQixBQUFBLFFBQVEsQ0FBQztFQUNMLFVBQVUsRUFBRSxNQUFNO0VBQ2xCLE1BQU0sRUFBRSxJQUFJO0VBQ1osZUFBZSxFQUFFLE1BQU07RUFDdkIsT0FBTyxFQUFFLElBQUksR0FBRzs7QUFJcEIsQUFBQSxJQUFJLENBQUM7RUFDRCxRQUFRLEVBQUUsUUFBUTtFQUNsQixLQUFLLEVBQUUsR0FBRztFQUNWLE1BQU0sRUFBRSxJQUFJO0VBQ1osZ0JBQWdCLEVBQUUsS0FBSztFQUN2QixjQUFjLEVBQUUsVUFBVTtFQUMxQixLQUFLLEVBQUUsS0FBSztFQUNaLFNBQVMsRUFBRSxJQUFJO0VBQ2YsTUFBTSxFQUFFLElBQUk7RUFDWixPQUFPLEVBQUUsSUFBSTtFQUNiLFlBQVksRUFBRSxFQUFFLEdBR0s7RUFiekIsQUFXSSxJQVhBLENBV0EsQ0FBQyxDQUFDO0lBQ0UsU0FBUyxFQUFFLE9BQU87SUFDbEIsS0FBSyxFQUFFLEtBQUssR0FBRzs7QUFFdkIsQUFBQSxJQUFJLENBQUM7RUFDRCxHQUFHLEVBQUUsSUFBSSxHQUFHOztBQUVoQixBQUFBLE9BQU8sQ0FBQztFQUNKLE1BQU0sRUFBRSxJQUFJLEdBQUc7O0FBRW5CLEFBQUEsT0FBTyxDQUFDO0VBQ0osTUFBTSxFQUFFLEtBQUs7RUFDYixLQUFLLEVBQUUsS0FBSyxHQUFHOztBQUVuQixBQUFBLE1BQU0sQ0FBQztFQUNILE9BQU8sRUFBRSxJQUFJO0VBQ2IsVUFBVSxFQUFFLE1BQU07RUFDbEIsTUFBTSxFQUFFLElBQUk7RUFDWixlQUFlLEVBQUUsYUFBYTtFQUM5QixXQUFXLEVBQUUsR0FBRztFQUNoQixNQUFNLEVBQUUsT0FBTyxHQVNNO0VBZnpCLEFBT0ksTUFQRSxDQU9GLE1BQU0sQ0FBQztJQUNILFNBQVMsRUFBRSxHQUFHO0lBQ2QsT0FBTyxFQUFFLElBQUk7SUFDYixVQUFVLEVBQUUsSUFBSTtJQUNoQixNQUFNLEVBQUUsSUFBSTtJQUNaLGVBQWUsRUFBRSxhQUFhO0lBQzlCLFdBQVcsRUFBRSxHQUFHLEdBQUc7RUFiM0IsQUFjSSxNQWRFLENBY0YsR0FBRyxDQUFDO0lBQ0EsTUFBTSxFQUFFLElBQUksR0FBRzs7QUFHdkIsTUFBTSxDQUFDLE1BQU0sTUFBTSxTQUFTLEVBQUUsTUFBTTtFQUNoQyxBQUFBLE1BQU0sQ0FBQztJQUNILE9BQU8sRUFBRSxLQUFLO0lBQ2QsTUFBTSxFQUFFLElBQUksR0FBRztFQUNuQixBQUFBLE1BQU0sQ0FBQztJQUNILGNBQWMsRUFBRSxJQUFJLEdBQUc7RUFDM0IsQUFBQSxHQUFHLENBQUM7SUFDQSxNQUFNLEVBQUUsSUFBSSxHQUFHO0VBQ25CLEFBQUEsT0FBTyxDQUFDO0lBQ0osUUFBUSxFQUFFLE1BQU07SUFDaEIsTUFBTSxFQUFFLENBQUMsR0FBRyIKfQ== */ | ||||
							
								
								
									
										105
									
								
								assets/sass/index.sass
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								assets/sass/index.sass
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,105 @@ | |||
| // @import url('https://manekit.now.sh/assets/css/manekit.min.css') | ||||
| @import url('https://fonts.googleapis.com/css2?family=Orbitron&display=swap'); | ||||
| * | ||||
|     margin: 0 | ||||
|     padding: 0 | ||||
| 
 | ||||
| /* Hide scrollbar for Chrome, Safari and Opera */ | ||||
| ::-webkit-scrollbar | ||||
|     display: none; | ||||
| 
 | ||||
| 
 | ||||
| // MAKE SVGS FILL WITH THEIR COLOR ON HOVER | ||||
| 
 | ||||
| body | ||||
|     background: #000 | ||||
|     color: #fff | ||||
|     font-family: 'Orbitron', sans-serif; | ||||
|     -ms-overflow-style: none;  /* IE and Edge */ | ||||
|     scrollbar-width: none;  /* Firefox */ | ||||
|      | ||||
|      | ||||
| .logo | ||||
|     width: 150px | ||||
|     text-align: center; | ||||
|     margin: auto; | ||||
|     justify-content: center; | ||||
|     display: flex | ||||
| 
 | ||||
| a | ||||
|     color: white | ||||
|     font-size: 2vw | ||||
|     text-decoration: none | ||||
|     &:hover | ||||
|         color: grey | ||||
| 
 | ||||
| svg | ||||
|     fill: white | ||||
|     padding: 0 10px | ||||
|     width: 50px | ||||
|     height: 50px | ||||
| 
 | ||||
| .sub-nav | ||||
|     text-align: center; | ||||
|     margin: auto; | ||||
|     justify-content: center; | ||||
|     display: flex | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| .bar | ||||
|     position: absolute | ||||
|     width: 99% | ||||
|     height: 20px | ||||
|     background-color: white | ||||
|     mix-blend-mode: difference; | ||||
|     color: black | ||||
|     font-size: 15px | ||||
|     margin: auto; | ||||
|     display: flex | ||||
|     padding-left: 1% | ||||
|     a | ||||
|         font-size: inherit | ||||
|         color: black | ||||
| 
 | ||||
| .top | ||||
|     top: 50px | ||||
| 
 | ||||
| .bottom | ||||
|     bottom: 50px | ||||
| 
 | ||||
| section | ||||
|     height: 100vh | ||||
|     width: 100vw | ||||
| 
 | ||||
| .music | ||||
|     display: flex | ||||
|     text-align: center; | ||||
|     margin: auto; | ||||
|     justify-content: space-between | ||||
|     padding-top: 5vh | ||||
|     margin: 0 100px | ||||
|     .title | ||||
|         font-size: 3vh | ||||
|         display: flex | ||||
|         text-align: left; | ||||
|         margin: auto; | ||||
|         justify-content: space-between | ||||
|         padding-top: 2vh | ||||
|     img | ||||
|         height: 30vh | ||||
| 
 | ||||
| 
 | ||||
| @media screen and ( max-width: 1350px ) | ||||
|     .music | ||||
|         display: table | ||||
|         margin: auto | ||||
|     .title | ||||
|         padding-bottom: 20px | ||||
|     img | ||||
|         height: 20vh | ||||
|     .bottom | ||||
|         position: sticky | ||||
|         bottom: 0 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										61
									
								
								c.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								c.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| const icons = require("simple-icons"); | ||||
| // Since I can't refer back to things, I'm just gonna make them consts
 | ||||
| // and export them
 | ||||
| 
 | ||||
| const dev = true; | ||||
| 
 | ||||
| const port = 9696; | ||||
| const name = "ALEX HELDT"; | ||||
| const socials = [ | ||||
|   { | ||||
|     name: "twitch", | ||||
|     link: "https://twitter.com/abisoos", | ||||
|     icon: icons["Twitch"], | ||||
|   }, | ||||
|   { | ||||
|     name: "twitter", | ||||
|     link: "https://twitter.com/abisoos", | ||||
|     icon: icons["Twitter"], | ||||
|   }, | ||||
|   { | ||||
|     name: "instagram", | ||||
|     link: "https://twitter.com/abisoos", | ||||
|     icon: icons["Instagram"], | ||||
|   }, | ||||
| ]; | ||||
| const music = [ | ||||
|   { | ||||
|     id: "rumorsremix", | ||||
|     shown: "Rumors Remix", | ||||
|     image: "/assets/images/serrated.jpg", | ||||
|     link: "https://soundcloud.com/abisoos/overdrive", | ||||
|   }, | ||||
|   { | ||||
|     id: "serrated", | ||||
|     shown: "Serrated", | ||||
|     image: "/assets/images/serrated.jpg", | ||||
|     link: "https://soundcloud.com/abisoos/overdrive", | ||||
|   }, | ||||
|   { | ||||
|     id: "overdrive3", | ||||
|     shown: "Serrated", | ||||
|     image: "/assets/images/serrated.jpg", | ||||
|     link: "https://soundcloud.com/abisoos/overdrive", | ||||
|   }, | ||||
|   { | ||||
|     id: "overdrive4", | ||||
|     shown: "Serrated", | ||||
|     image: "/assets/images/serrated.jpg", | ||||
|     link: "https://soundcloud.com/abisoos/overdrive", | ||||
|   }, | ||||
| ]; | ||||
| 
 | ||||
| const allMusic = [...music]; | ||||
| module.exports = { | ||||
|   dev, | ||||
|   port, | ||||
|   name, | ||||
|   socials, | ||||
|   music, | ||||
|   allMusic, | ||||
| }; | ||||
							
								
								
									
										93
									
								
								index.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								index.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,93 @@ | |||
| // ! Imports
 | ||||
| const express = require("express"); | ||||
| const helmet = require("helmet"); | ||||
| const compression = require("compression"); | ||||
| const cors = require("cors"); | ||||
| const morgan = require("morgan"); | ||||
| const chalk = require("chalk"); | ||||
| const hbs = require("express-handlebars"); | ||||
| const { dev, music, port, socials, name } = require("./c"); | ||||
| const redis = require("ioredis"); | ||||
| const { promisify } = require("util"); | ||||
| 
 | ||||
| const { | ||||
|   compileSassAndSaveMultiple, | ||||
|   setupCleanupOnExit, | ||||
| } = require("compile-sass"); | ||||
| const path = require("path"); | ||||
| // Init
 | ||||
| const app = express(); | ||||
| const r = new redis(6379, "192.168.1.8", { | ||||
|   connectionName: `ALEXHELDT${dev ? "-dev" : ""}`, | ||||
| }); | ||||
| const get = promisify(r.get).bind(r); | ||||
| compileSassAndSaveMultiple({ | ||||
|   sassPath: path.join(__dirname, "assets/sass/"), | ||||
|   cssPath: path.join(__dirname, "assets/css/"), | ||||
|   files: ["index.sass"], | ||||
| }); | ||||
| 
 | ||||
| process.on("SIGINT", () => { | ||||
|   try { | ||||
|     setupCleanupOnExit("assets/css"); | ||||
|     console.log("worked"); | ||||
|     process.exit(0); | ||||
|   } catch (error) { | ||||
|     console.error(error); | ||||
|     process.exit(1); | ||||
|   } | ||||
| }); | ||||
| 
 | ||||
| app.engine("hbs", hbs({ extname: "hbs", defaultView: "default" })); | ||||
| app.set("view engine", "hbs"); | ||||
| app.set("json spaces", 4); | ||||
| app.use("/assets", express.static("./assets")); | ||||
| app.use(express.json()); | ||||
| app.use( | ||||
|   express.urlencoded({ | ||||
|     extended: true, | ||||
|   }) | ||||
| ); | ||||
| app.use(helmet()); | ||||
| app.use(compression()); | ||||
| app.use(cors()); | ||||
| app.use( | ||||
|   morgan((tokens, req, res) => { | ||||
|     return [ | ||||
|       chalk.hex("#34ace0").bold(`[ ${tokens.method(req, res)} ]`), | ||||
|       chalk.hex("#ffb142").bold(tokens.status(req, res)), | ||||
|       chalk.hex("#ff5252").bold(req.hostname + tokens.url(req, res)), | ||||
|       chalk.hex("#2ed573").bold(tokens["response-time"](req, res) + "ms"), | ||||
|       chalk.hex("#f78fb3").bold("@ " + tokens.date(req, res)), | ||||
|     ].join(" "); | ||||
|   }) | ||||
| ); | ||||
| 
 | ||||
| app.get("/", async (req, res) => { | ||||
|   res.render("index", { | ||||
|     layout: "index", | ||||
|     name, | ||||
|     protocol: dev ? `http` : `https`, | ||||
|     host: dev ? `${req.hostname}:${port}` : `${req.hostname}`, | ||||
|     socials, | ||||
|     music, | ||||
|     creator: { | ||||
|       name: await r.get("creator_name"), | ||||
|       website: await r.get("creator_website"), | ||||
|     }, | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
| // ! SOCIAL LINKS
 | ||||
| socials.forEach((social) => { | ||||
|   app.get(`/${social.name}`, (req, res) => res.redirect(social.link)); | ||||
| }); | ||||
| 
 | ||||
| // ! MUSIC LINKS
 | ||||
| music.forEach((item) => { | ||||
|   app.get(`/${item.id}`, (req, res) => res.redirect(item.link)); | ||||
| }); | ||||
| 
 | ||||
| app.listen(port, () => { | ||||
|   console.log(`[ Server ] Listening on ${port}`); | ||||
| }); | ||||
							
								
								
									
										2320
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2320
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										26
									
								
								package.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								package.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| { | ||||
|   "name": "alexheldt", | ||||
|   "version": "1.0.0", | ||||
|   "description": "", | ||||
|   "main": "index.js", | ||||
|   "dependencies": { | ||||
|     "chalk": "^3.0.0", | ||||
|     "compile-sass": "^1.1.1", | ||||
|     "compression": "^1.7.4", | ||||
|     "cors": "^2.8.5", | ||||
|     "express": "^4.17.1", | ||||
|     "express-handlebars": "^3.1.0", | ||||
|     "helmet": "^3.21.2", | ||||
|     "ioredis": "^4.17.3", | ||||
|     "morgan": "^1.9.1", | ||||
|     "node-cache": "^5.1.2", | ||||
|     "simple-icons": "^3.10.0" | ||||
|   }, | ||||
|   "devDependencies": {}, | ||||
|   "scripts": { | ||||
|     "test": "echo \"Error: no test specified\" && exit 1" | ||||
|   }, | ||||
|   "keywords": [], | ||||
|   "author": "", | ||||
|   "license": "ISC" | ||||
| } | ||||
							
								
								
									
										32
									
								
								views/index.hbs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								views/index.hbs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| {{!-- NAV --}} | ||||
| <div class="nav"> | ||||
|     <img class="logo" src="/assets/images/logo.png" alt="Alex Heldt Logo"> | ||||
|     {{!-- SOCIALS --}} | ||||
|     <div class="sub-nav"> | ||||
|         {{#each socials}} | ||||
|         <a href="{{../protocol}}://{{../host}}/{{name}}" class="social"> | ||||
|             <svg class="{{name}}" role="img" viewBox="0 0 24 24"> | ||||
|                 <title>{{name}} Icon</title> | ||||
|                 <path d="{{icon.path}}"></path> | ||||
|             </svg> | ||||
|         </a> | ||||
|         {{/each}} | ||||
|     </div> | ||||
| </div> | ||||
| 
 | ||||
| {{!-- MUSIC --}} | ||||
| <div class="music"> | ||||
|     {{#each music}} | ||||
|     <div class="song"> | ||||
|         <a href="{{../protocol}}://{{../host}}/{{id}}"><img src="{{image}}" alt="{{shown}} Cover Art"></a> | ||||
|         <a href="{{../protocol}}://{{../host}}/{{id}}" class="title"> | ||||
|             {{shown}} | ||||
|         </a> | ||||
|     </div> | ||||
|     {{/each}} | ||||
| </div> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <div class="bar top"></div> | ||||
| <div class="bar bottom">made by  <a href="{{creator.website}}">{{creator.name}}</a></div> | ||||
							
								
								
									
										38
									
								
								views/layouts/index.hbs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								views/layouts/index.hbs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| 
 | ||||
| <head> | ||||
|     <title>{{name}}</title> | ||||
|     <meta charset="UTF-8"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||
| 
 | ||||
|     <link rel="stylesheet" type="text/css" href="./assets/css/index.css"> | ||||
|     <script src="/assets/js/main.js"></script> | ||||
| 
 | ||||
| 
 | ||||
|     <link rel="icon" type="image/png" href="/assets/images/logo.png" sizes="32x32"> | ||||
|     <link rel="icon" type="image/png" href="/assets/images/logo.png" sizes="96x96"> | ||||
|     <link rel="apple-touch-icon" sizes="180x180" href="/assets/images/logo.png"> | ||||
| 
 | ||||
|     <meta name="theme-color" content="#ffffff"> | ||||
|     <meta property="og:title" content="abisu"> | ||||
|     <meta property="og:type" content="website"> | ||||
|     <meta property="og:url" content="{{protocol}}://{{host}}"> | ||||
|     <meta property="og:description" content="alex"> | ||||
|     <meta property="og:image" content="/assets/images/logo.png"> | ||||
| 
 | ||||
|     <meta name="description" content="alex"> | ||||
|     <meta name="keywords" content="abisu, music"> | ||||
| 
 | ||||
|     <meta name="twitter:card" content="summary"> | ||||
|     <meta name="twitter:image" content="{{protocol}}://{{host}}/assets/images/logo.png"> | ||||
|     <meta name="twitter:creator" content="@alexheldt"> | ||||
| 
 | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|     {{{body}}} | ||||
| </body> | ||||
| 
 | ||||
| 
 | ||||
| </html> | ||||
		Loading…
	
	Add table
		
		Reference in a new issue