added FAQ, Changelog, and Support static pages

This commit is contained in:
forest 2020-05-10 22:55:16 -05:00
parent 5d37f26585
commit 7932db90d5
9 changed files with 265 additions and 24 deletions

View File

@ -26,11 +26,9 @@ def create_app():
db.init_app(app) db.init_app(app)
@app.route("/") from capsulflask import auth, landing, console
def index():
return render_template("index.html")
from capsulflask import auth app.register_blueprint(landing.bp)
app.register_blueprint(auth.bp) app.register_blueprint(auth.bp)

View File

@ -37,7 +37,7 @@ def login():
if not email: if not email:
error = "email is required" error = "email is required"
elif not re.match(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)", email): elif len(email.strip()) < 6 or email.count('@') != 1 or email.count('.') == 0:
error = "enter a valid email address" error = "enter a valid email address"
if error is None: if error is None:

View File

@ -14,3 +14,18 @@ from capsulflask.db import get_model
bp = Blueprint("landing", __name__, url_prefix="/") bp = Blueprint("landing", __name__, url_prefix="/")
@bp.route("/")
def index():
return render_template("index.html")
@bp.route("/faq")
def faq():
return render_template("faq.html")
@bp.route("/changelog")
def changelog():
return render_template("changelog.html")
@bp.route("/support")
def support():
return render_template("support.html")

View File

@ -26,18 +26,24 @@ a:hover, a:active, a:visited {
color: #b5bd68; color: #b5bd68;
} }
header { nav .nav-row {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin: 2rem 0; margin: 2rem 0;
} }
nav .nav-row:last-child {
justify-content: center;
}
nav .nav-row:last-child a, nav .nav-row:last-child div {
margin: 0 1em;
}
.flash { .flash {
color: rgb(173, 74, 8); color: rgb(173, 74, 8);
font-weight: bold; font-weight: bold;
text-align: center; text-align: center;
border: 1px dashed rgb(173, 74, 8); border: 1px dashed rgb(173, 74, 8);
border-radius: 2em; border-radius: 0.5em;
margin-bottom: 2em; margin-bottom: 2em;
padding: 1em; padding: 1em;
} }
@ -45,6 +51,7 @@ header {
main { main {
border: 1px dashed #bdc7b8; border: 1px dashed #bdc7b8;
padding: 1rem; padding: 1rem;
margin-bottom: 2em;
} }
.hero { .hero {
@ -54,7 +61,7 @@ main {
} }
.single-content { .single-content {
margin: 4rem 0; margin: 2rem 0;
} }
form { form {
@ -79,7 +86,7 @@ input {
input[type=text] { input[type=text] {
font: calc(0.40rem + 1vmin) monospace; font: calc(0.40rem + 1vmin) monospace;
border: 0; border: 0;
border-bottom: 2px solid #777e73; border-bottom: 1px solid #777e73;
min-width: 20em; min-width: 20em;
outline: 0; outline: 0;
} }
@ -100,7 +107,15 @@ h1, h2, h3, h4, h5 {
} }
ul li { ul li {
margin-bottom: 1em; margin: 0.5em 0;
}
.code {
display: inline-block;
padding: 0.5em 2em;
border-radius: 0.5em;
border: 1px solid #777e73;
background: #bdc7b810;
} }
footer, p { footer, p {

View File

@ -8,24 +8,32 @@
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head> </head>
<body> <body>
<header> <nav>
<div> <div class="nav-row">
<a href="/"><b>Capsul</b></a>💊 <div>
<a href="/"><b>Capsul</b></a>💊
</div>
<div>
{% if session["account"] %}
{ {{ session["account"] }} <a href="{{ url_for('auth.logout') }}">Log Out</a> }
{% else %}
<a href="{{ url_for('auth.login') }}">Login</a>
{% endif %}
</div>
</div> </div>
<div> <div class="nav-row">
{% if session["account"] %} <a href="/faq">FAQ</a>
{ {{ session["account"] }} <a href="{{ url_for('auth.logout') }}">Log Out</a> } <a href="/changelog">Changelog</a>
{% else %} <a href="/support">Support</a>
<a href="{{ url_for('auth.login') }}">Login</a>
{% endif %}
</div> </div>
</header> </nav>
{% for message in get_flashed_messages() %} {% for message in get_flashed_messages() %}
<div class="flash">{{ message }}</div> <div class="flash">{{ message }}</div>
{% endfor %} {% endfor %}
<main> <main>
{% block content %}{% endblock %} {% block content %}{% endblock %}
</main> </main>
{% block subcontent %}{% endblock %}
<footer> <footer>
(c) Attribution-ShareAlike 4.0 International <br/> (c) Attribution-ShareAlike 4.0 International <br/>
&nbsp;&nbsp;&nbsp;&nbsp;A service by Cyberia Computer Club 2020-<span class="bigtext"></span> <br/> &nbsp;&nbsp;&nbsp;&nbsp;A service by Cyberia Computer Club 2020-<span class="bigtext"></span> <br/>

View File

@ -0,0 +1,29 @@
{% extends 'base.html' %}
{% block title %}Changelog{% endblock %}
{% block content %}
<div class="hero">
<div class="single-content"><h1>CHANGELOG</h1></div>
</div>
{% endblock %}
{% block subcontent %}
<p>
<ul>
<li>2020-01-30: Baikal ownership transferred to Cyberia Computer Club</li>
<li>2020-01-31: Prepping docs</li>
<li>2020-02-26: Re-prepping docs</li>
<li>2020-03-07: CVM goes live</li>
<li>2020-03-10: CVM name changed to Capsul</li>
<li>2020-03-10: Capsul site goes live</li>
<li>2020-03-22: Alpine support added</li>
<li>2020-03-25: Network limits made public</li>
<li>2020-04-17: OpenBSD support added</li>
<li>2020-04-26: Support link added</li>
<li>2020-05-04: Simplified payment page</li>
</ul>
</p>
{% endblock %}
{% block pagesource %}/templates/changelog.html{% endblock %}

View File

@ -0,0 +1,147 @@
{% extends 'base.html' %}
{% block title %}FAQ{% endblock %}
{% block content %}
<div class="hero">
<div class="single-content"><h1>Frequently Asked Questions</h1></div>
</div>
{% endblock %}
{% block subcontent %}
<p>
<ul>
<li>
Which instance type should I buy?
<ul><li>
It depends a lot on your requirements, but I can lay down a few guidelines.
<ul>
<li>
f1-s
<ul>
<li> blog </li>
<li> vpn </li>
<li> bot </li>
</ul>
</li>
<li>
f1-m
<ul>
<li> semi-popular blog </li>
<li> complicated webapp </li>
</ul>
</li>
<li>
f1-l
<ul>
<li> big ol docker box? </li>
<li> lightweight software builds </li>
</ul>
</li>
<li>
f1-x
<ul>
<li> large webservice with thousands of users </li>
<li> rotund java app </li>
</ul>
</li>
<li>
f1-xx
<ul>
<li> gitlab (wow such memory very devops) </li>
</ul>
</li>
<li>
f1-xxx
<ul>
<li> waow big box </li>
</ul>
</li>
</ul>
</li></ul>
</li>
<li>
How do I log in?
<ul><li>
<p>ssh to the ip provided to you using the cyberian user.</p>
<pre class='code'>$ ssh cyberian@1.2.3.4</pre>
</li></ul>
</li>
<li>
How do I change to the root user?
<ul><li>
<p>The cyberian user has passwordless sudo access by default. This should work:</p>
<pre class='code'>
# Linux
$ sudo su -
# OpenBSD
$ doas su -</pre>
</li></ul>
</li>
<li>
Do you offer reverse DNS?
<ul><li>
<p>We do, but right now it's a manual process. Shoot us an email and we'll get it done.</p>
</li></ul>
</li>
<li>
What if I don't pay?
<ul><li>
<p>Your VM will be deleted. You will receive coal.
You will be banned from our minetest server.
We will attempt to give you ample warning before nuking a server, but that's no guarantee.
</p>
</li></ul>
</li>
<li>
Besides my virtual machines and payments, what information do you keep about me?
<ul><li>
<p>We associate an email address with every VM so that we can track payment and respond to support requests.</p>
<p>If you pay with a credit card, Stripe sends some additional details about you that we literally cannot delete.</p>
</li></ul>
</li>
<li>
What can I do with my VM?
<ul><li>
<p>Make it into a mailserver, a bitcoin miner, a VPN host, whatever.</p>
<p>We place no restrictions on what you can do, as long as it's not illegal. Don't get us in trouble.</p>
</li></ul>
</li>
<li>
Can you recover my passwords/insert new keys?
<ul><li>
<p>Can we? Technically yes. Will we? Never. It would violate the trust that our customers have in us.
We have no interest in touching client VMs after they're running.
If you lose access to your VM, that's on you.</p>
</li></ul>
</li>
<li>
Do you offer refunds?
<ul><li>
<p>Not now.</p>
</li></ul>
</li>
<li>
Do you offer support?
<ul><li>
<p>Yes. support@cyberia.club</p>
<ul>
<li>all volunteers have very busy schedules, but we will do our best to respond in a reasonable time period.</li>
<li>If you would prefer private support, please send your mail to capsul@cyberia.club instead.</li>
</ul>
</li></ul>
</li>
<li>
Will you implement feature X?
<ul><li>
Maybe! Email ops@cyberia.club and ask us about it.
</li></ul>
</li>
</ul>
</p>
{% endblock %}
{% block pagesource %}/templates/changelog.html{% endblock %}

View File

@ -13,13 +13,12 @@
\ / \ /
`"` `"`
</pre> </pre>
<span>Simple, fast, private compute by <a href="https://cyberia.club">https://cyberia.club</a></span>
</div> </div>
{% endblock %}
{% block subcontent %}
<p> <p>
Simple, fast, private compute by <a href="https://cyberia.club">https://cyberia.club</a><br/><br/>
Spin up your choice of virtual machine by sending an email. <br/><br/>
<ul> <ul>
<li>Simply log in with your email address </li> <li>Simply log in with your email address </li>
<li>All root disks are backed up at no charge</li> <li>All root disks are backed up at no charge</li>

View File

@ -0,0 +1,30 @@
{% extends 'base.html' %}
{% block title %}Support{% endblock %}
{% block content %}
<div class="hero">
<div class="single-content">
<h1>SUPPORT</h1>
</div>
<div class="single-content">
<a href="mailto:support@cyberia.club?subject=Please%20halp!">Click Here to Email Support</a> (support@cyberia.club)
</div>
</div>
{% endblock %}
{% block subcontent %}
<p>
Note: We maintain a searchable archive of all support emails at
<a href="https://lists.cyberia.club/~cyberia/support">https://lists.cyberia.club/~cyberia/support</a>
</p>
<p>
If you do not want your mail to appear in a public archive, email capsul@cyberia.club instead.
</p>
<p>
Please describe your problem or feature request, and we will do our best to get back to you promptly. Thank you very much.
</p>
{% endblock %}
{% block pagesource %}/templates/support.html{% endblock %}