Update.
This commit is contained in:
parent
bdddbf678c
commit
bb9d763416
src/snek/templates
@ -1,10 +1,141 @@
|
||||
{% extends "base.html" %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>About – Snek Web Community</title>
|
||||
<meta name="description" content="Snek is a robust, privacy-first web community platform engineered for reliability, security, and uncompromising design integrity." />
|
||||
<link rel="stylesheet" href="/sandbox.css" />
|
||||
<style>
|
||||
* { margin:0; padding:0; box-sizing:border-box; }
|
||||
html, body { height: 100%; }
|
||||
body {
|
||||
font-family: 'Segoe UI',sans-serif;
|
||||
background: #111;
|
||||
color: #eee;
|
||||
line-height:1.5;
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
a { color: #7ef; text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
.container { width: 90%; max-width: 800px; margin: auto; padding: 2rem 0; }
|
||||
.about-hero {
|
||||
text-align: center;
|
||||
padding: 3rem 0 2rem 0;
|
||||
}
|
||||
.about-hero h1 {
|
||||
font-size: 2.5rem;
|
||||
background: linear-gradient(90deg,#7ef 0%,#0fa 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
text-fill-color: transparent;
|
||||
margin-bottom: .5rem;
|
||||
}
|
||||
.about-hero img {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.section {
|
||||
background: #181818;
|
||||
border-radius: 6px;
|
||||
padding: 2rem;
|
||||
margin-bottom: 2rem;
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
||||
}
|
||||
.section h2 {
|
||||
color: #7ef;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.section p, .section ul {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.section ul {
|
||||
list-style: disc inside;
|
||||
}
|
||||
footer {
|
||||
text-align: center;
|
||||
font-size: .9rem;
|
||||
padding: 2rem 0;
|
||||
color: #888;
|
||||
}
|
||||
@media (max-width: 480px) {
|
||||
.about-hero h1 { font-size: 2rem; }
|
||||
.about-hero img { width: 48px; height: 48px; }
|
||||
.section { padding: 1rem; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="container about-hero">
|
||||
<img src="/image/snek_logo_256x256.png" alt="Snek Logo" />
|
||||
<h1>About Snek</h1>
|
||||
<p>Precision. Security. Engineering Excellence. Snek is built as a Mercedes.</p>
|
||||
</header>
|
||||
<main class="container">
|
||||
<section class="section">
|
||||
<h2>What is Snek?</h2>
|
||||
<p>
|
||||
Snek is a professional-grade, privacy-centric web community and collaboration platform. It is engineered for individuals and organizations that demand uncompromising reliability, security, and performance. Snek is serious software, designed and built with the rigor and attention to detail found in world-class engineering.
|
||||
</p>
|
||||
<p>
|
||||
The platform supports modern protocols for seamless integration. Connect via WebDAV (<strong>davs://molodetz.online/webdav</strong>) or SFTP (<strong>sftp://molodetz.online:2242</strong>) with your Snek credentials—no additional setup required. All storage is subject to fair use policy (FUP).
|
||||
</p>
|
||||
<p>
|
||||
Repository management is centralized and straightforward via the settings interface. Editing sent texts is intentionally disabled: Snek enforces conscious and deliberate communication. Consideration is a feature, not a byproduct.
|
||||
</p>
|
||||
<p>
|
||||
Snek is built on <strong>aiohttp</strong>, a high-performance asynchronous web framework, and leverages a custom ORM for data integrity. Every data operation is validated at a single source of truth. Deployment is trivial—installable in one command. Optional Docker support is available for containerized environments. Snek uses <strong>SQLite</strong> for data storage by default, optimized for speed and reliability, and is PostgreSQL-ready for scale.
|
||||
</p>
|
||||
<p>
|
||||
The front-end is written in plain JavaScript: fast, lightweight, and maintainable. Features include live typing, a web-based bash terminal, markdown support, and backend rendering for optimal initial load. Snek arose from a need for a trustworthy, open alternative to commercial platforms—where privacy is preserved, and user autonomy is paramount.
|
||||
</p>
|
||||
</section>
|
||||
<section class="section">
|
||||
<h2>Why does Snek exist?</h2>
|
||||
<p>
|
||||
Snek exists because most communication platforms compromise on control, privacy, or cost. Existing solutions have become either prohibitively commercial, invasive, or dependent on closed ecosystems. Snek is the answer: a platform that puts the user first, respects privacy by design, and eliminates unnecessary dependencies.
|
||||
</p>
|
||||
<p>
|
||||
Snek was born from dissatisfaction with the status quo. RocketChat lost its edge to commercial interests. Slack is expensive and proprietary. Microsoft Teams requires a Microsoft account and brings corporate overhead. Snek is different. Snek is built for those who value independence, transparency, and technical excellence.
|
||||
</p>
|
||||
</section>
|
||||
<section class="section">
|
||||
<h2>Design Decisions</h2>
|
||||
<ul>
|
||||
<li><strong>Privacy First:</strong> No email required. No intrusive logging. Instant signup. User data is protected, always.</li>
|
||||
<li><strong>Open Source:</strong> Snek is fully open-sourced. Self-hosting is supported and encouraged. Extensibility is integral.</li>
|
||||
<li><strong>Engineering Discipline:</strong> Minimal dependencies. Every line of code is reviewed for performance and security.</li>
|
||||
<li><strong>Protocol Agnostic:</strong> Multi-protocol support (WebDAV, SFTP) enables integration with existing workflows. No vendor lock-in.</li>
|
||||
<li><strong>Lightweight by Design:</strong> Lean front-end. Efficient back-end. No bloat, no distractions.</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="section">
|
||||
<h2>How is Snek Different?</h2>
|
||||
<p>
|
||||
Snek is not an experiment. Snek is not a toy. Snek is not a compromise. Snek is built for professionals who value robust architecture, auditability, and technical clarity. Snek does not collect your data. Snek does not analyze your behavior. Snek does not sell your attention.
|
||||
</p>
|
||||
<p>
|
||||
Every feature is implemented with purpose. Simplicity is enforced. Features are added only when justified, tested, and proven reliable. Snek is designed to last. Snek is engineered to serve.
|
||||
</p>
|
||||
</section>
|
||||
<section class="section">
|
||||
<h2>Our Mission</h2>
|
||||
<p>
|
||||
Snek's mission is to empower users with uncompromising tools for communication and collaboration. We believe in the right to privacy, the value of open systems, and the necessity of technical excellence. Snek is a platform for builders, engineers, and thinkers who demand more from their tools.
|
||||
</p>
|
||||
<p>
|
||||
Snek fosters a community where hacking is encouraged, transparency is mandatory, and global inclusion is the standard. We serve those who are willing to think before they write and strive for clarity in every interaction.
|
||||
</p>
|
||||
</section>
|
||||
</main>
|
||||
<footer>
|
||||
<p>© 2025 Snek – Precision Engineering for the Web. Serious software for serious people.</p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
{% block main %}
|
||||
<div class="dialog">
|
||||
|
||||
<fancy-button size="auto" text="Back" url="/back"></fancy-button>
|
||||
<html-frame url="/about.md"></html-frame>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
@ -3,7 +3,19 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Snek – The Ultimate Web Community</title>
|
||||
<title>Snek – Web Community for Developers, Testers & AI Enthusiasts</title>
|
||||
<meta name="description" content="Snek is a privacy-first web community for developers, testers, and AI enthusiasts. Share files, code, chat, self-host, and explore AI-powered tools with zero email, no logs, and instant signup." />
|
||||
<meta name="keywords" content="Snek, developer community, web community, testers, AI, artificial intelligence, file sharing, Git, SFTP, WebDAV, chat, media, open source, self-host, privacy, PWA, Ubuntu terminal, web terminal, no logs, no email" />
|
||||
<meta property="og:title" content="Snek – Web Community for Developers, Testers & AI Enthusiasts" />
|
||||
<meta property="og:description" content="Join Snek: a global, privacy-first community platform for developers, testers, and AI enthusiasts. Chat, share files, collaborate on code, and self-host your own instance." />
|
||||
<meta property="og:image" content="/image/snek_logo_256x256.png" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://snek.community/" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="Snek – Web Community for Developers, Testers & AI Enthusiasts" />
|
||||
<meta name="twitter:description" content="A privacy-first platform for devs, testers, and AI fanatics. No email, no logs – just code, chat, and collaborate." />
|
||||
<meta name="twitter:image" content="/image/snek_logo_256x256.png" />
|
||||
<link rel="canonical" href="https://snek.community/" />
|
||||
<link rel="stylesheet" href="/sandbox.css" />
|
||||
<style>
|
||||
* { margin:0; padding:0; box-sizing:border-box; }
|
||||
@ -110,19 +122,6 @@
|
||||
border-radius: 3px;
|
||||
color: #7ef;
|
||||
}
|
||||
.star {
|
||||
position: fixed;
|
||||
background: #fff;
|
||||
border-radius: 50%;
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
opacity: .8;
|
||||
animation: star-flicker 4s infinite alternate;
|
||||
}
|
||||
@keyframes star-flicker {
|
||||
0%, 100% { opacity: .7; }
|
||||
50% { opacity: 1; }
|
||||
}
|
||||
@media (max-width: 480px) {
|
||||
.hero h1 { font-size: 2.4rem; }
|
||||
.btn { width: 100%; box-sizing: border-box; text-align:center; }
|
||||
@ -131,23 +130,12 @@
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
#starfield {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: -2;
|
||||
pointer-events: none;
|
||||
background: transparent;
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="container hero">
|
||||
<h1>Snek</h1>
|
||||
<p>The Ultimate Web Community for Devs, Testers & AI Enthusiasts</p>
|
||||
<p>Web Community for Developers, Testers & AI Enthusiasts</p>
|
||||
<a href="/login.html" class="btn">Login</a>
|
||||
<a href="/register.html" class="btn">Register</a>
|
||||
</header>
|
||||
@ -227,62 +215,6 @@ snek serve
|
||||
<footer>
|
||||
<p>© 2025 Snek – Join our global community of developers, testers & AI enthusiasts.</p>
|
||||
</footer>
|
||||
<script>
|
||||
(function() {
|
||||
const canvas = document.getElementById('starfield');
|
||||
const ctx = canvas.getContext('2d');
|
||||
let stars = [];
|
||||
let w = window.innerWidth;
|
||||
let h = window.innerHeight;
|
||||
function resize() {
|
||||
w = window.innerWidth;
|
||||
h = window.innerHeight;
|
||||
canvas.width = w;
|
||||
canvas.height = h;
|
||||
}
|
||||
function randomStar() {
|
||||
return {
|
||||
x: Math.random() * w,
|
||||
y: Math.random() * h,
|
||||
r: Math.random() * 0.8 + 0.2,
|
||||
o: Math.random() * 0.5 + 0.5,
|
||||
tw: Math.random() * 100 + 60,
|
||||
phase: Math.random() * 2 * Math.PI
|
||||
};
|
||||
}
|
||||
function createStars(count) {
|
||||
stars = [];
|
||||
for (let i=0; i<count; ++i) stars.push(randomStar());
|
||||
}
|
||||
function drawStars(time) {
|
||||
ctx.clearRect(0, 0, w, h);
|
||||
for (const s of stars) {
|
||||
const twinkle = 0.5 + 0.5 * Math.sin(time/1000 * (1000/s.tw) + s.phase);
|
||||
ctx.globalAlpha = s.o * twinkle;
|
||||
ctx.beginPath();
|
||||
ctx.arc(s.x, s.y, s.r, 0, 2 * Math.PI);
|
||||
ctx.fillStyle = '#fff';
|
||||
ctx.fill();
|
||||
}
|
||||
ctx.globalAlpha = 1;
|
||||
}
|
||||
function animate(time) {
|
||||
drawStars(time || 0);
|
||||
requestAnimationFrame(animate);
|
||||
}
|
||||
function updateStars() {
|
||||
const count = Math.floor(w * h / 4500);
|
||||
createStars(count);
|
||||
}
|
||||
window.addEventListener('resize', function() {
|
||||
resize();
|
||||
updateStars();
|
||||
});
|
||||
resize();
|
||||
updateStars();
|
||||
animate();
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user