Initial website.

This commit is contained in:
Madeorsk 2025-01-02 12:07:56 +01:00
commit 7fde0096e2
Signed by: Madeorsk
GPG key ID: 677E51CA765BB79F
25 changed files with 4248 additions and 0 deletions

21
.eleventy.js Normal file
View file

@ -0,0 +1,21 @@
module.exports = function (eleventyConfig) {
const pluginTOC = require('eleventy-plugin-nesting-toc');
eleventyConfig.addPlugin(pluginTOC);
const markdownIt = require('markdown-it');
const markdownItAnchor = require('markdown-it-anchor');
const markdownItAttrs = require('markdown-it-attrs');
eleventyConfig.setLibrary("md",
markdownIt({
html: true,
linkify: true,
typographer: true,
}).use(markdownItAnchor, {}).use(markdownItAttrs, {})
);
eleventyConfig.addPassthroughCopy("./src/images");
eleventyConfig.addPassthroughCopy("./src/site.webmanifest");
eleventyConfig.addPassthroughCopy("./src/favicon.ico");
eleventyConfig.addPassthroughCopy("./src/favicon.svg");
eleventyConfig.addPassthroughCopy("./src/favicon");
};

7
.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
# IDEA
*.iml
# Website
.yarn/
node_modules/
webroot/

3
.yarnrc.yml Normal file
View file

@ -0,0 +1,3 @@
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.5.3.cjs

25
package.json Normal file
View file

@ -0,0 +1,25 @@
{
"name": "use-nuaj",
"version": "1.0.0",
"author": "Madeorsk",
"license": "MIT",
"main": "src/index.html",
"scripts": {
"build": "vite build & eleventy --input=src --output=webroot & echo \"=*= NUAJ =*=\"",
"dev": "vite build --watch & eleventy --watch --input=src --output=webroot & echo \"=*= NUAJ =*=\""
},
"devDependencies": {
"@11ty/eleventy": "^2.0.1",
"@types/less": "^3.0.3",
"@types/node": "^20.4.2",
"eleventy-plugin-nesting-toc": "^1.3.0",
"less": "^4.1.3",
"markdown-it": "^13.0.1",
"markdown-it-anchor": "^8.6.7",
"markdown-it-attrs": "^4.1.6",
"ts-node": "^10.9.1",
"typescript": "^5.1.6",
"vite": "^6.0.4"
},
"packageManager": "yarn@4.5.3"
}

42
src/_includes/_base.njk Normal file
View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/png" href="/favicon/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png" />
<meta name="apple-mobile-web-app-title" content="nuaj" />
<link rel="manifest" href="/site.webmanifest" />
<title>{{ title }}</title>
<link rel="stylesheet" href="/assets/nuaj.css">
</head>
<body>
<header>
<h1>
<img src="/images/logo-title.svg" alt="nuaj" draggable="false"/>
</h1>
<nav>
<ul>
<li>
<a href="/">home</a>
</li>
<li>
<a href="/wip">use</a>
</li>
<li>
<a href="https://code.zeptotech.net/nuaj" target="_blank">code</a>
</li>
</ul>
</nav>
</header>
{{ content | safe }}
</body>
</html>

12
src/_includes/docs.njk Normal file
View file

@ -0,0 +1,12 @@
---
layout: _base.njk
---
<main>
<aside>
{{ content | toc }}
</aside>
<article>
{{ content | safe }}
</article>
</main>

7
src/_includes/layout.njk Normal file
View file

@ -0,0 +1,7 @@
---
layout: _base.njk
---
<main>
{{ content | safe }}
</main>

BIN
src/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

8
src/favicon.svg Normal file
View file

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="1000" height="1000"><g clip-path="url(#SvgjsClipPath1040)"><rect width="1000" height="1000" fill="#fafafa"></rect><g transform="matrix(2.3333333333333335,0,0,2.3333333333333335,150,234.55999999999995)"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="300" height="227.52"><svg width="300" height="227.52" version="1.1" viewBox="0 0 300 227.52" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(1.1781e-6 -72.476)">
<g transform="matrix(1.2171 0 0 1.2171 -29.836 -26.144)" fill="#111">
<circle cx="177.53" cy="174.5" r="93.469"></circle>
<path d="m77.342 149.53a59.548 59.548 0 0 0-52.828 58.887 59.548 59.548 0 0 0 59.547 59.547 59.548 59.548 0 0 0 0.26758-0.0195v0.0195h49.029a103.47 103.47 0 0 1-59.297-93.469 103.47 103.47 0 0 1 3.2812-24.965z"></path>
</g>
</g>
</svg></svg></g></g><defs><clipPath id="SvgjsClipPath1040"><rect width="1000" height="1000" x="0" y="0" rx="350" ry="350"></rect></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,9 @@
<svg width="638.6" height="227.52" version="1.1" viewBox="0 0 638.6 227.52" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(1.1781e-6 -72.476)" fill="#111">
<g transform="matrix(1.2171 0 0 1.2171 -29.836 -26.144)">
<circle cx="177.53" cy="174.5" r="93.469"/>
<path d="m77.342 149.53a59.548 59.548 0 0 0-52.828 58.887 59.548 59.548 0 0 0 59.547 59.547 59.548 59.548 0 0 0 0.26758-0.0195v0.0195h49.029a103.47 103.47 0 0 1-59.297-93.469 103.47 103.47 0 0 1 3.2812-24.965z"/>
</g>
<path d="m378.58 143.32q13.653 0 22.016 8.3627 8.3627 8.3627 8.3627 22.699v55.979q0 0.85333-0.68267 1.536-0.512 0.512-1.3653 0.512h-19.968q-0.85333 0-1.536-0.512-0.512-0.68267-0.512-1.536v-51.029q0-6.8267-3.9253-11.093-3.7547-4.2667-10.069-4.2667-6.3147 0-10.24 4.2667-3.7547 4.2667-3.7547 11.093v51.029q0 0.85333-0.68267 1.536-0.512 0.512-1.3653 0.512h-19.968q-0.85334 0-1.536-0.512-0.512-0.68267-0.512-1.536v-83.627q0-0.85333 0.512-1.3653 0.68267-0.68267 1.536-0.68267h19.968q0.85333 0 1.3653 0.68267 0.68267 0.512 0.68267 1.3653v5.9734q0 0.512 0.34133 0.68267 0.34134 0.17066 0.51201-0.17067 6.9973-9.8987 20.821-9.8987zm99.816 3.4133q0-0.85333 0.512-1.3653 0.68267-0.68267 1.536-0.68267h19.968q0.85334 0 1.3653 0.68267 0.68267 0.512 0.68267 1.3653v83.627q0 0.85333-0.68267 1.536-0.512 0.512-1.3653 0.512h-19.968q-0.85333 0-1.536-0.512-0.512-0.68267-0.512-1.536v-5.8027q0-0.512-0.34134-0.512-0.34133-0.17067-0.68266 0.34133-6.8267 9.216-21.163 9.216-12.971 0-21.333-7.8507-8.3627-7.8507-8.3627-22.016v-57.003q0-0.85333 0.512-1.3653 0.68267-0.68267 1.536-0.68267h19.797q0.85334 0 1.3653 0.68267 0.68267 0.512 0.68267 1.3653v51.029q0 6.8267 3.584 11.093 3.7547 4.2667 10.24 4.2667 5.8027 0 9.5574-3.4133 3.7547-3.584 4.608-9.216zm77.8-3.4133q11.093 0 19.797 3.9253 8.704 3.7547 13.483 10.411 4.9493 6.656 4.9493 14.848v57.856q0 0.85333-0.68267 1.536-0.512 0.512-1.3653 0.512h-19.968q-0.85333 0-1.536-0.512-0.512-0.68267-0.512-1.536v-5.632q0-0.512-0.34133-0.68266-0.34134-0.17067-0.68267 0.34133-7.168 9.3867-23.04 9.3867-13.312 0-21.504-6.4854t-8.192-19.115q0-13.141 9.216-20.309 9.216-7.3387 26.283-7.3387h17.408q0.85333 0 0.85333-0.85334v-3.7547q0-5.632-3.4133-8.704-3.4133-3.2427-10.24-3.2427-5.2907 0-8.8747 1.8773-3.4133 1.8773-4.4374 5.2907-0.512 1.8773-2.2187 1.7067l-20.651-2.7307q-2.048-0.34133-1.8773-1.536 0.68267-7.168 5.632-12.971 5.12-5.8027 13.312-9.0454 8.3627-3.2427 18.603-3.2427zm-3.4133 72.533q7.3387 0 12.459-3.9253t5.12-10.069v-6.144q0-0.85333-0.85333-0.85333h-12.288q-7.68 0-12.117 2.9013-4.2667 2.9013-4.2667 8.192 0 4.608 3.2427 7.3387 3.2427 2.56 8.704 2.56zm72.339-81.067q-5.8027 0-9.5574-3.7547-3.7547-3.9253-3.7547-9.728 0-5.9734 3.7547-9.728 3.7547-3.7547 9.5574-3.7547 5.9734 0 9.728 3.7547 3.7547 3.7547 3.7547 9.728 0 5.8027-3.9253 9.728-3.7547 3.7547-9.5574 3.7547zm-29.867 132.44q-2.048 0-2.048-2.048v-16.213q0-2.2187 2.2187-1.8773 10.069 0.34134 13.995-2.9013 4.096-3.2427 4.096-11.435l-0.34133-86.016q0-0.85333 0.512-1.3653 0.68267-0.68267 1.536-0.68267h19.968q0.85334 0 1.3653 0.68267 0.68267 0.512 0.68267 1.3653v85.675q0 13.824-3.7547 21.333-3.7547 7.68-12.8 10.752-8.8747 3.072-25.429 2.7307z" aria-label="nuaj"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

36
src/index.html Normal file
View file

@ -0,0 +1,36 @@
---
layout: layout.njk
title: use nuaj!
---
<p class="intro">
<strong>nuaj</strong> is a <em>simple</em> and <em>secure</em> private cloud software.
</p>
<p class="intro">
Like this website, it is completely <em>distraction-free</em>, as a cloud software should be.
</p>
<p class="intro">
Just enable it and do your things.
</p>
<div class="intro buttons">
<a class="button" role="button" href="/wip">Install</a>
</div>
<p>
<strong>nuaj</strong> allows you to use a remote server to synchronize your files between your devices.
But don't worry, all your files are encrypted and decrypted on your devices only!
If you choose a strong enough password for your library, an attacker cannot read them,
even if they have access to the remote server.
</p>
<p>
Simple does not mean feature-less, check out all the features of <strong>nuaj</strong>:
</p>
<ul>
<li>automatic incremental files synchronization in the background.</li>
<li>end-to-end encryption between client devices.</li>
<li>easy conflicts handling (and it asks you before messing everything up...).</li>
<li>keep versions in memory, so you can use it as a personal backup system.</li>
<li>allow remote access directly.</li>
<li>GPDR-compliant by default.</li>
</ul>

21
src/site.webmanifest Normal file
View file

@ -0,0 +1,21 @@
{
"name": "nuaj",
"short_name": "nuaj",
"icons": [
{
"src": "/favicon/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/favicon/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#FAFAFA",
"background_color": "#FAFAFA",
"display": "standalone"
}

32
src/use.html Normal file
View file

@ -0,0 +1,32 @@
---
layout: layout.njk
title: use nuaj!
---
<h2 id="find-server" class="num">Find your server</h2>
<p>
First of all, you need to choose where your files will be hosted. Random people of the internet already host public
nuaj servers, so you can just pick one of them. We maintain a page of <a>known nuaj hosts</a>.
</p>
<div class="buttons">
<a class="button" role="button">Choose your host</a>
</div>
<p>
But if you want, you can also host your own nuaj server at home or on your personal server.
We provide a <em>docker image</em> and a documentation if you want to run it on your machine.
</p>
<div class="buttons">
<a class="button" role="button">Install with Docker</a>
<a class="button" role="button">Install standalone</a>
</div>
<h2 id="download" class="num">Download</h2>
<div class="buttons">
<a class="button" role="button">Download for Windows</a>
<a class="button" role="button">Download binary for Linux</a>
</div>

8
src/wip.html Normal file
View file

@ -0,0 +1,8 @@
---
layout: layout.njk
title: nuaj work in progress
---
<p class="intro">
<strong>nuaj</strong> is currently a work-in-progress. You can find its current state <a href="https://code.zeptotech.net/nuaj/nuaj">on the repository</a>.
</p>

5
style/_colors.less Normal file
View file

@ -0,0 +1,5 @@
@background: #FAFAFA;
@foreground: #111111;
@primary: #0C4BBC;
@primary-background: lighten(@primary, 110%, relative);

56
style/_common.less Normal file
View file

@ -0,0 +1,56 @@
html, body
{
margin: 0;
padding: 0;
}
html, body, input, button
{
font-family: system-ui, sans-serif;
}
body
{
background: @background;
color: @foreground;
font-size: 1.1em;
}
a
{
color: @primary;
}
a.button, button
{
transition: background 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
display: inline-block;
margin: auto;
padding: 0.66em;
border-radius: 0.2em;
box-shadow: 0 0 0 0 @primary-background;
border: solid @primary thin;
color: @primary;
cursor: pointer;
text-decoration: none;
&:hover
{
box-shadow: 0 0 0 3px @primary-background;
}
}
.buttons
{
margin: 1em auto;
text-align: center;
button, .button
{
width: 15em;
}
}

41
style/_header.less Normal file
View file

@ -0,0 +1,41 @@
header
{
margin: 2em auto;
h1
{
margin: 1em;
font-size: 4em;
text-align: center;
a { color: unset; text-decoration: none; }
img { height: 2em; pointer-events: none; }
}
nav
{
ul
{
display: flex;
flex-direction: row;
gap: 1em;
justify-content: center;
margin: 0;
padding: 0;
list-style: none;
> li
{
margin: 0;
padding: 0;
> a
{
font-size: 1.2em;
text-decoration: none;
}
}
}
}
}

52
style/_main.less Normal file
View file

@ -0,0 +1,52 @@
main
{
margin: 2em auto;
p, ul
{
margin: 0.5em auto;
width: 50em;
max-width: 95%;
line-height: 1.5em;
}
ul
{
padding: 0;
list-style: none;
> li::before
{
content: " ";
margin-right: 0.33em;
}
}
.intro
{
margin: 1em auto;
text-align: center;
font-size: 1.1em;
}
h2
{
display: block;
margin: 1em auto;
font-size: 2em;
width: 55rem;
max-width: 95%;
&.num
{
counter-increment: h2counter;
&::before
{
content: counter(h2counter)". ";
color: @primary;
}
}
}
}

6
style/nuaj.less Normal file
View file

@ -0,0 +1,6 @@
@import "_colors";
@import "_common";
@import "_header";
@import "_main";

21
vite.config.mts Normal file
View file

@ -0,0 +1,21 @@
import {defineConfig} from "vite";
import {resolve} from "path";
// https://vitejs.dev/config/
export default defineConfig(() => ({
base: "/assets",
build: {
outDir: resolve(__dirname, "webroot", "assets"),
assetsDir: "./",
emptyOutDir: true,
rollupOptions: {
input: {
"nuaj": resolve(__dirname, "style", "nuaj.less"),
},
output: {
assetFileNames: "[name].[ext]",
},
},
},
}));

3836
yarn.lock Normal file

File diff suppressed because it is too large Load diff