mirror of
https://github.com/ION606/sharing.git
synced 2026-05-14 21:56:54 +00:00
added home page
This commit is contained in:
@@ -39,6 +39,7 @@ http://{$FILES_DOMAIN}:8550 {
|
||||
reverse_proxy http://lufi:8081
|
||||
}
|
||||
|
||||
http://{$HOMR_DOMAIN} {
|
||||
respond "KFDJSLKFJSLKFJSLKFDJLKDS" 200
|
||||
http://{$HOME_DOMAIN}:8550 {
|
||||
root * /var/www/share
|
||||
file_server
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ services:
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile:ro,Z
|
||||
- caddy-data:/data
|
||||
- ./public:/var/www/share
|
||||
- ./public:/var/www/share:ro,Z
|
||||
environment:
|
||||
- PASTE_DOMAIN=${PASTE_DOMAIN}
|
||||
- FILES_DOMAIN=${FILES_DOMAIN}
|
||||
|
||||
+14
-4
@@ -1,17 +1,27 @@
|
||||
import { privateNoteUrl, fileDropUrl, homeDomain } from "./links.js";
|
||||
import { privateNoteUrl, fileDropUrl, homeDomain, github } from "./links.js";
|
||||
|
||||
const yearEl = document.querySelector("#year"),
|
||||
homeDomainEl = document.querySelector("#home-domain"),
|
||||
noteLink = document.querySelector('[data-link="note"]'),
|
||||
dropLink = document.querySelector('[data-link="drop"]');
|
||||
dropLink = document.querySelector('[data-link="drop"]'),
|
||||
githubLink = document.querySelector('[data-link="github"]');
|
||||
|
||||
// set the current year
|
||||
if (yearEl) { yearEl.textContent = String(new Date().getFullYear()); }
|
||||
|
||||
// set home domain text
|
||||
if (homeDomainEl) { homeDomainEl.textContent = homeDomain; }
|
||||
// set home domain text and href
|
||||
if (homeDomainEl) {
|
||||
homeDomainEl.textContent = homeDomain.replace(/^https?:\/\//, "");
|
||||
homeDomainEl.setAttribute("href", homeDomain);
|
||||
homeDomainEl.setAttribute("target", "_blank");
|
||||
homeDomainEl.setAttribute("rel", "noopener");
|
||||
}
|
||||
|
||||
// wire up links from config
|
||||
if (noteLink) { noteLink.setAttribute("href", privateNoteUrl); }
|
||||
if (dropLink) { dropLink.setAttribute("href", fileDropUrl); }
|
||||
if (githubLink) {
|
||||
githubLink.setAttribute("href", github);
|
||||
githubLink.textContent = github;
|
||||
}
|
||||
|
||||
|
||||
+35
-20
@@ -3,45 +3,60 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>ION606's sharing hub</title>
|
||||
<meta name="description" content="friendly landing page linking to privatenote and lufi.">
|
||||
<title>ION606 — Share Portal</title>
|
||||
<meta name="description" content="ION606 self-hosted Share Portal — quick access to PrivateBin (notes) and LUFI (file drops).">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;800&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="./styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<!-- all comments are lower case -->
|
||||
<header class="site-header">
|
||||
<div class="container">
|
||||
<h1 class="brand"><span aria-hidden="true">✨</span> ion606 hub</h1>
|
||||
<p class="tagline">welcome to my privatenote and lufi instances!</p>
|
||||
<div class="container header-inner">
|
||||
<div class="brand-row">
|
||||
<div class="logo">🔐</div>
|
||||
<div>
|
||||
<h1 class="brand">ION606's Share Portal</h1>
|
||||
<p class="tagline">Self‑hosted privacy tools: encrypted notes & secure file drops</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<section class="card">
|
||||
<h2>quick links</h2>
|
||||
<p>pick a destination:</p>
|
||||
<section class="hero card">
|
||||
<h2 class="hero-title">Private notes • Encrypted file drops</h2>
|
||||
<p class="hero-lead">Quick links to your self‑hosted services. Nothing stored here — just shortcuts to PrivateBin (end‑to‑end encrypted notes) and LUFI (client‑side encrypted file sharing).</p>
|
||||
|
||||
<nav class="actions">
|
||||
<a class="btn" data-link="note" href="#" rel="noopener">open privatenote</a>
|
||||
<a class="btn secondary" data-link="drop" href="#" rel="noopener">open lufi</a>
|
||||
<a class="btn" data-link="note" href="#" target="_blank" rel="noopener">Open PrivateBin (notes)</a>
|
||||
<a class="btn" data-link="drop" href="#" target="_blank" rel="noopener">Open LUFI (file drop)</a>
|
||||
</nav>
|
||||
<p class="hint">psst: bookmark this page at <strong id="home-domain">share.ion606.com</strong> for next time.</p>
|
||||
|
||||
<p class="hint">Bookmark this page at <a id="home-domain" href="#" target="_blank" rel="noopener"></a></p>
|
||||
</section>
|
||||
|
||||
<section class="card info">
|
||||
<h3>what are these?</h3>
|
||||
<ul class="bullets">
|
||||
<li><strong>privatenote</strong> is an end-to-end encrypted pastebin for sharing text or code snippets securely.</li>
|
||||
<li><strong>lufi</strong> lets you upload and share files; encryption happens before upload for extra privacy.</li>
|
||||
</ul>
|
||||
<section class="cards-grid">
|
||||
<article class="card feature">
|
||||
<h3>Why PrivateBin?</h3>
|
||||
<p>End‑to‑end encrypted pastes. Paste content is encrypted in your browser before upload — the server never sees plain text.</p>
|
||||
</article>
|
||||
|
||||
<article class="card feature">
|
||||
<h3>Why LUFI?</h3>
|
||||
<p>Client‑side encrypted file sharing with configurable expiry. Share large files securely without third‑party hosting.</p>
|
||||
</article>
|
||||
|
||||
<article class="card feature">
|
||||
<h3>Wanna self-host?</h3>
|
||||
<p>You can view the source code/instructions at <a data-link="github" href="https://github.com/ION606/tempfiles" target="_blank"></a></p>
|
||||
</article>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<p><span id="year"></span> · served by caddy · made with ❤️</p>
|
||||
<div class="container footer-inner">
|
||||
<p><span id="year"></span> · served by caddy · ION606</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
export const privateNoteUrl = "https://bin.ion606.com",
|
||||
fileDropUrl = "https://tfiles.ion606.com",
|
||||
homeDomain = "share.ion606.com";
|
||||
|
||||
homeDomain = "https://share.ion606.com",
|
||||
github = "https://github.com/ION606/sharing";
|
||||
|
||||
+192
-39
@@ -1,91 +1,244 @@
|
||||
:root {
|
||||
--bg: #0b0f14;
|
||||
--panel: #121821;
|
||||
--text: #e6edf3;
|
||||
--bg: #071019;
|
||||
--panel: #0f1720;
|
||||
--muted: #9fb0c0;
|
||||
--text: #e6edf3;
|
||||
--accent: #7cc7ff;
|
||||
--accent-2: #8ae3cf;
|
||||
--btn-bg: #1a2330;
|
||||
--btn-border: #2a374a;
|
||||
--card-border: rgba(255, 255, 255, .04);
|
||||
--radius: 12px;
|
||||
--container-width: 980px;
|
||||
font-family: Inter, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
* {
|
||||
box-sizing: border-box
|
||||
}
|
||||
|
||||
html, body {
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: radial-gradient(1000px 600px at 10% -10%, rgba(124,199,255,.12), transparent 60%),
|
||||
radial-gradient(800px 500px at 110% 10%, rgba(138,227,207,.12), transparent 60%), var(--bg);
|
||||
background:
|
||||
radial-gradient(800px 500px at 10% -10%, rgba(124, 199, 255, .06), transparent 40%),
|
||||
radial-gradient(700px 400px at 110% 10%, rgba(138, 227, 207, .04), transparent 40%),
|
||||
var(--bg);
|
||||
color: var(--text);
|
||||
font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
|
||||
line-height: 1.6;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 880px;
|
||||
max-width: var(--container-width);
|
||||
margin: 0 auto;
|
||||
padding: 1.25rem;
|
||||
}
|
||||
|
||||
.site-header {
|
||||
padding: 2.5rem 0 1rem;
|
||||
text-align: center;
|
||||
.header-inner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 2.25rem 0 1rem
|
||||
}
|
||||
|
||||
.brand-row {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
align-items: center
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-size: 2rem
|
||||
}
|
||||
|
||||
.brand {
|
||||
margin: 0 0 .5rem;
|
||||
font-size: clamp(1.6rem, 3vw, 2rem);
|
||||
letter-spacing: .2px;
|
||||
margin: 0;
|
||||
font-weight: 800;
|
||||
font-size: clamp(1.4rem, 3vw, 1.9rem)
|
||||
}
|
||||
|
||||
.tagline {
|
||||
margin: 0;
|
||||
color: var(--muted);
|
||||
font-size: .95rem
|
||||
}
|
||||
|
||||
.card {
|
||||
background: linear-gradient(180deg, rgba(255,255,255,.04), rgba(255,255,255,.02));
|
||||
border: 1px solid rgba(255,255,255,.08);
|
||||
border-radius: 16px;
|
||||
background: linear-gradient(180deg, rgba(255, 255, 255, .02), rgba(255, 255, 255, .01));
|
||||
border: 1px solid var(--card-border);
|
||||
border-radius: var(--radius);
|
||||
padding: 1.25rem;
|
||||
margin: 1rem 0;
|
||||
box-shadow: 0 10px 30px rgba(0,0,0,.25);
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, .32);
|
||||
}
|
||||
|
||||
.card.info { color: var(--muted); }
|
||||
.hero {
|
||||
padding: 1.5rem
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
margin: .25rem 0 0;
|
||||
font-size: 1.25rem
|
||||
}
|
||||
|
||||
.hero-lead {
|
||||
color: var(--muted);
|
||||
margin: .5rem 0 1rem
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: .75rem;
|
||||
margin: 1rem 0 0;
|
||||
margin: 2em;
|
||||
justify-content: space-evenly;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-block;
|
||||
padding: .9rem 1.1rem;
|
||||
border-radius: 12px;
|
||||
background: var(--btn-bg);
|
||||
border: 1px solid var(--btn-border);
|
||||
color: var(--text);
|
||||
padding: .85rem 1.1rem;
|
||||
border-radius: 10px;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
transition: transform .06s ease, background .2s ease, border-color .2s ease;
|
||||
font-weight: 700;
|
||||
color: var(--text);
|
||||
background: var(--panel);
|
||||
border: 1px solid rgba(255, 255, 255, .06)
|
||||
}
|
||||
|
||||
.btn:hover { transform: translateY(-1px); }
|
||||
.btn:active { transform: translateY(0); }
|
||||
/* contrast style for the "Open LUFI (file drop)" button */
|
||||
[data-link="drop"] {
|
||||
background: linear-gradient(90deg, rgba(4, 32, 42, 1), rgba(7, 17, 22, 1));
|
||||
color: var(--accent-2);
|
||||
border: 1px solid rgba(138, 227, 207, .22);
|
||||
box-shadow: inset 0 -2px 8px rgba(0, 0, 0, .45), 0 6px 20px rgba(7, 12, 15, .6);
|
||||
backdrop-filter: blur(6px);
|
||||
transition: transform .12s ease, box-shadow .12s ease, background .12s ease;
|
||||
}
|
||||
|
||||
.btn.secondary { background: #101723; }
|
||||
[data-link="drop"]:hover {
|
||||
transform: translateY(-3px);
|
||||
box-shadow: inset 0 -2px 10px rgba(0, 0, 0, .5), 0 10px 30px rgba(7, 12, 15, .6);
|
||||
background: linear-gradient(90deg, rgba(12, 56, 64, 1), rgba(10, 34, 40, 1));
|
||||
}
|
||||
|
||||
.hint { color: var(--muted); font-size: .95rem; }
|
||||
[data-link="drop"]:active {
|
||||
transform: translateY(0);
|
||||
box-shadow: inset 0 -1px 6px rgba(0, 0, 0, .5), 0 4px 12px rgba(7, 12, 15, .5);
|
||||
}
|
||||
|
||||
.bullets { padding-left: 1.1rem; }
|
||||
/* PrivateBin (notes) */
|
||||
[data-link="note"] {
|
||||
background: linear-gradient(90deg, var(--accent), var(--accent-2));
|
||||
color: #04202a;
|
||||
border: none;
|
||||
box-shadow: 0 6px 18px rgba(124, 199, 255, .08);
|
||||
transition: transform .12s ease, box-shadow .12s ease, background .12s ease;
|
||||
}
|
||||
|
||||
[data-link="note"]:hover {
|
||||
transform: translateY(-3px);
|
||||
box-shadow: 0 10px 30px rgba(124, 199, 255, .12);
|
||||
background: linear-gradient(90deg, rgba(124, 199, 255, .98), rgba(138, 227, 207, .92));
|
||||
}
|
||||
|
||||
[data-link="note"]:active {
|
||||
transform: translateY(0);
|
||||
box-shadow: 0 4px 12px rgba(124, 199, 255, .08);
|
||||
}
|
||||
|
||||
.hint {
|
||||
color: var(--muted);
|
||||
margin-top: 1rem;
|
||||
font-size: .95rem
|
||||
}
|
||||
|
||||
.hint a {
|
||||
color: var(--accent);
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
.cards-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
||||
gap: 1rem;
|
||||
margin-top: 1rem
|
||||
}
|
||||
|
||||
.feature h3 {
|
||||
margin: 0 0 .5rem
|
||||
}
|
||||
|
||||
.feature p {
|
||||
margin: 0;
|
||||
color: var(--muted)
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
text-align: center;
|
||||
padding: 2rem 0 3rem;
|
||||
color: var(--muted);
|
||||
font-size: .95rem;
|
||||
text-align: center
|
||||
}
|
||||
|
||||
.footer-inner {
|
||||
display: flex;
|
||||
justify-content: center
|
||||
}
|
||||
|
||||
/* GitHub link (inline, subtle CTA) */
|
||||
[data-link="github"] {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.45rem 0.75rem;
|
||||
border-radius: 10px;
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
font-size: 0.95rem;
|
||||
color: var(--muted);
|
||||
background: transparent;
|
||||
border: 1px solid rgba(255, 255, 255, .03);
|
||||
transition: background .12s ease, color .12s ease, transform .12s ease, box-shadow .12s ease, border-color .12s ease;
|
||||
}
|
||||
|
||||
[data-link="github"]::before {
|
||||
content: "🐙";
|
||||
display: inline-block;
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
[data-link="github"]:hover {
|
||||
background: linear-gradient(180deg, rgba(255, 255, 255, .02), rgba(255, 255, 255, .01));
|
||||
color: var(--text);
|
||||
border-color: rgba(255, 255, 255, .06);
|
||||
transform: translateY(-3px);
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, .32);
|
||||
}
|
||||
|
||||
[data-link="github"]:active {
|
||||
transform: translateY(0);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, .2);
|
||||
}
|
||||
|
||||
/* small screens */
|
||||
@media (max-width:520px) {
|
||||
.brand {
|
||||
font-size: 1.25rem
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-size: 1.6rem
|
||||
}
|
||||
|
||||
.actions {
|
||||
flex-direction: column
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 100%;
|
||||
text-align: center
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user