forked from nebulosus/web
init: initial site
This commit is contained in:
commit
d6da14e4bb
7 changed files with 292 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.vscode/
|
13
.woodpecker.yml
Normal file
13
.woodpecker.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
when:
|
||||
- push
|
||||
- tag
|
||||
- manual
|
||||
|
||||
steps:
|
||||
publish:
|
||||
image: woodpeckerci/plugin-docker-buildx
|
||||
secrets: [docker_username, docker_password]
|
||||
settings:
|
||||
repo: git.ixvd.net/${CI_REPO_OWNER}/web
|
||||
registry: git.ixvd.net
|
||||
tags: latest
|
5
README.md
Normal file
5
README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Nebulosus website
|
||||
|
||||
The site running on [nebulosus.nl](https://nebulosus.nl).
|
||||
|
||||
Written in pure HTML, JS & CSS.
|
71
public/index.html
Normal file
71
public/index.html
Normal file
|
@ -0,0 +1,71 @@
|
|||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Nebulosus</title>
|
||||
|
||||
<link rel="stylesheet" href="./res/style.css">
|
||||
<script src="./res/cases.js" defer></script>
|
||||
<script src="./res/anchors.js" defer></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<div class="logo">
|
||||
<span class="mono">[N]</span>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
<section id="intro">
|
||||
<h1>Nebulosus</h1>
|
||||
</section>
|
||||
<div class="columns">
|
||||
<div>
|
||||
<section id="offer">
|
||||
<h2>What do we offer?</h2>
|
||||
<span>We offer a variety of services:</span>
|
||||
<ol>
|
||||
<li><span>Server Hosting</span></li>
|
||||
<li><span>Website / Application Development</span></li>
|
||||
<li><span>Technical Support</span></li>
|
||||
</ol>
|
||||
<button id="cases-button" hidden>Cases</button>
|
||||
<div id="cases" hidden></div>
|
||||
</section>
|
||||
<section id="about">
|
||||
<h2>About Nebulosus</h2>
|
||||
<p>
|
||||
Nebulosus is simplicity, redundancy, reliability and friendliness. <br />
|
||||
Software should be intuitive, aware of it's environment. That's what Nebulosus strives for.
|
||||
<br />
|
||||
If you want simple, intuitive and reliable software, you're in the right spot.
|
||||
|
||||
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<section id="contact" hidden>
|
||||
<!-- Not done yet :) -->
|
||||
<!-- Technical question? dev (at) faulty (dot) nl -->
|
||||
<h2>Contact</h2>
|
||||
<span>To contact us please use the following form:</span>
|
||||
<form action="/api/form">
|
||||
<input name="name" type="text" placeholder="Name">
|
||||
<input name="email" type="text" placeholder="E-Mail">
|
||||
<textarea name="message" rows="5" placeholder="Your message"></textarea>
|
||||
<input type="button" value="Submit">
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
<section id="more-info">
|
||||
<h2>More information about Nebulosus</h2>
|
||||
<div class="rows">
|
||||
<span>Chamber of Commerce number: <strong>93409583</strong></span>
|
||||
<span>E-mail: <strong>info@nebulosus.nl</strong></span>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
|
||||
</html>
|
4
public/res/anchors.js
Normal file
4
public/res/anchors.js
Normal file
|
@ -0,0 +1,4 @@
|
|||
document.querySelectorAll("h2")
|
||||
.forEach(e => {
|
||||
e.onclick = () => window.location.hash = e.parentElement.id;
|
||||
});
|
30
public/res/cases.js
Normal file
30
public/res/cases.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
class Case {
|
||||
constructor (name = "Project", description = "This is a project.", url = undefined) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.url = url;
|
||||
}
|
||||
}
|
||||
|
||||
const CASES = [
|
||||
];
|
||||
|
||||
const casesButton = document.querySelector("button#cases-button");
|
||||
const casesDiv = document.querySelector("div#cases");
|
||||
if (casesButton && CASES.length > 0) casesButton.hidden = false;
|
||||
|
||||
function showCases() {
|
||||
if (!casesButton) return console.log("k");
|
||||
if (casesDiv.hidden) casesDiv.innerHTML = "";
|
||||
casesDiv.hidden = !casesDiv.hidden;
|
||||
|
||||
let list = document.createElement("ul");
|
||||
CASES.forEach(c => {
|
||||
console.log(c);
|
||||
// a dirty hack :p
|
||||
list.innerHTML += `<li><${c.url ? 'a' : 'span'}><strong>${c.name}<strong> - ${c.description}</${c.url ? 'a' : 'span'}></li>`;
|
||||
});
|
||||
casesDiv.appendChild(list);
|
||||
}
|
||||
|
||||
casesButton.onclick = showCases;
|
168
public/res/style.css
Normal file
168
public/res/style.css
Normal file
|
@ -0,0 +1,168 @@
|
|||
:root {
|
||||
--fonts: Inter, 'Open Sans', 'Helvetica', 'Roboto', sans-serif;
|
||||
--theme-color: #33e;
|
||||
--theme-color-highlight: #55f;
|
||||
--theme-color-highlight-2: #99f;
|
||||
--theme-color-lowlight: #11b;
|
||||
|
||||
font-family: var(--fonts);
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
header {
|
||||
position: sticky;
|
||||
top: 0%;
|
||||
width: 100vw;
|
||||
height: fit-content;
|
||||
background-color: var(--theme-color, gray);
|
||||
color: #fff;
|
||||
|
||||
box-shadow: 0 0 20px var(--theme-color-lowlight);
|
||||
}
|
||||
|
||||
header div.logo {
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
header div.logo span {
|
||||
font-weight: bolder;
|
||||
font-size: 1.5em;
|
||||
|
||||
border: 1px;
|
||||
}
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
main section {
|
||||
margin: 0 2.5em;
|
||||
width: calc(100vw - (2.5em * 2));
|
||||
|
||||
>h2 {
|
||||
text-decoration: underline;
|
||||
text-decoration-color: #aaa;
|
||||
}
|
||||
}
|
||||
|
||||
section#intro {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
margin: 0;
|
||||
width: 100vw;
|
||||
background-color: var(--theme-color);
|
||||
color: #fff;
|
||||
|
||||
font-size: 2em;
|
||||
|
||||
border-bottom: 3px solid gray;
|
||||
}
|
||||
|
||||
div section {
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
/* --- */
|
||||
|
||||
/* for anchors.js */
|
||||
h2:hover {
|
||||
cursor: pointer;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
content: '#';
|
||||
text-decoration: underline;
|
||||
text-decoration-color: var(--theme-color);
|
||||
transform: translateX(-150%);
|
||||
}
|
||||
}
|
||||
|
||||
/* --- */
|
||||
|
||||
pre,
|
||||
code,
|
||||
.mono {
|
||||
font-family: 'Mononoki', 'Droid Sans Mono', monospace;
|
||||
}
|
||||
|
||||
/* --- */
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
gap: .75em;
|
||||
margin: .5em 0;
|
||||
|
||||
padding: 1rem .5rem;
|
||||
border: 2px solid #e3e3e3;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
|
||||
form input,
|
||||
form textarea {
|
||||
font-family: var(--fonts);
|
||||
|
||||
width: 100%;
|
||||
padding: .3em .2em;
|
||||
|
||||
outline: none;
|
||||
|
||||
border: 1px solid #e3e3e3;
|
||||
border-radius: 5px;
|
||||
|
||||
|
||||
&:hover {
|
||||
background-color: 1px solid var(--theme-color-highlight);
|
||||
}
|
||||
|
||||
transition: border .2s ease-in-out;
|
||||
}
|
||||
|
||||
form input[type=button],
|
||||
form input[type=submit],
|
||||
button {
|
||||
outline: none;
|
||||
padding: .3em .5em;
|
||||
border: 1px solid #e3e3e3;
|
||||
background-color: #eee;
|
||||
border-radius: 5px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--theme-color-highlight-2);
|
||||
}
|
||||
|
||||
transition: background-color .2s ease-in-out;
|
||||
}
|
||||
|
||||
div.columns {
|
||||
display: flex;
|
||||
|
||||
@media (max-width: 600px) {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
div.rows {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.faded {
|
||||
opacity: .2;
|
||||
}
|
Loading…
Reference in a new issue