feat: update primary theme color and adjust style variables

Revised the primary theme color to a more vibrant shade and adjusted related style variables for consistency across the UI. This change enhances the visual appeal and user experience by introducing a fresher, more engaging color palette. Updated variables include primary, secondary, success, info, warning, and danger colors along with their associated text, background, and border utilities to ensure coherence throughout the application's design.
This commit is contained in:
Kumi 2024-05-08 19:20:37 +02:00
parent c10116c019
commit 0000c4e892
Signed by: kumi
GPG key ID: ECBCC9082395383F
13 changed files with 267 additions and 274 deletions

View file

@ -1,87 +1,68 @@
/* This file was developed as part of the Private.coffee project
It is licensed under the MIT license
See https://private.coffee for more information */
/* Make sure links in the footer are white */
footer a {
color: #6b486b !important;
:root,
[data-bs-theme="light"] {
--bs-primary: #f570b9;
--bs-primary-rgb: 245, 112, 185;
--bs-primary-text-emphasis: #622d4a;
--bs-primary-bg-subtle: #fde2f1;
--bs-primary-border-subtle: #fbc6e3;
--bs-body-color: #232323;
--bs-body-color-rgb: 35, 35, 35;
--bs-secondary-color: rgba(35, 35, 35, 0.75);
--bs-secondary-color-rgb: 35, 35, 35, 0.75;
--bs-tertiary-color: rgba(35, 35, 35, 0.5);
--bs-tertiary-color-rgb: 35, 35, 35, 0.5;
--bs-body-font-family: Inconsolata, monospace;
}
/* Give service boxes a border */
.service {
border: 4px #d1ffdd solid;
border-radius: 15px;
border-spacing: 15px;
padding: 30px;
box-sizing: border-box;
box-shadow: inset 0 0 10px #d1f3ff;
color: #6b486b;
}
/* Limit size of navbar logo */
.navbar-brand-img {
max-height: 150px;
margin-right: 10px;
}
/* Add a top/bottom padding to the content section */
#content {
padding-top: 20px;
padding-bottom: 20px;
}
.bg-coffee {
background-color: #ffb6c1;
}
.btn-primary {
background-color: #ffb6c1 !important;
border-color: #ffb6c1 !important;
color: #6b486b !important;
font-size: large!important;
--bs-btn-color: #000000;
--bs-btn-bg: #f570b9;
--bs-btn-border-color: #f570b9;
--bs-btn-hover-color: #000000;
--bs-btn-hover-bg: #f785c4;
--bs-btn-hover-border-color: #f67ec0;
--bs-btn-focus-shadow-rgb: 37, 17, 28;
--bs-btn-active-color: #000000;
--bs-btn-active-bg: #f78dc7;
--bs-btn-active-border-color: #f67ec0;
--bs-btn-disabled-color: #000000;
--bs-btn-disabled-bg: #f570b9;
--bs-btn-disabled-border-color: #f570b9;
color: #fff;
}
.title-font {
font-family: 'Dancing Script', cursive;
color: #6b486b;
.btn-outline-primary {
--bs-btn-color: #f570b9;
--bs-btn-border-color: #f570b9;
--bs-btn-focus-shadow-rgb: 245, 112, 185;
--bs-btn-hover-color: #000000;
--bs-btn-hover-bg: #f570b9;
--bs-btn-hover-border-color: #f570b9;
--bs-btn-active-color: #000000;
--bs-btn-active-bg: #f570b9;
--bs-btn-active-border-color: #f570b9;
--bs-btn-disabled-color: #f570b9;
--bs-btn-disabled-bg: transparent;
--bs-btn-disabled-border-color: #f570b9;
}
.donation-details, .zvr-number, .contact-info, .index-buttons {
background: #ffb6c1;
padding: 15px;
border-radius: 4px;
margin-bottom: 20px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);
h2 .special-header {
font-size: 10rem !important;
}
.contact-info a {
color: #005a87;
text-decoration: none;
.special-header {
font-size: 4rem;
font-weight: 900;
}
.contact-info a:hover {
text-decoration: underline;
.fancy-text-primary {
background: -webkit-linear-gradient(45deg, #ba77fc, #ff7f8c);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.zvr-number {
font-weight: bold;
text-align: center;
p {
letter-spacing: 0.03rem;
font-size: 1.1rem;
}
.support-us .btn {
font-size: 20px;
padding: 10px 20px;
color: #6b486b;
h5 {
letter-spacing: 0.05rem;
}
.support-us {
background: #ffb6c1;
padding: 15px;
border-radius: 4px;
margin-bottom: 20px;
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
}
.text-mauve {
color: #6b486b!important;
.navbar-brand {
font-weight: 800 !important;
font-size: x-large;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,84 +1,56 @@
<!DOCTYPE html>
<!-- This file was created as part of the Private.coffee project
It is licensed under the MIT license
For more information, please visit https://private.coffee -->
<html>
<html data-bs-theme="light" lang="en">
<head>
<title>Private.coffee</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/svg+xml" href="assets/img/logo-inv_grad.svg" />
<link rel="stylesheet" href="assets/css/base.css" />
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
<script src="assets/dist/js/jquery.min.js"></script>
<script src="assets/dist/js/bootstrap.bundle.min.js"></script>
<meta charset="utf8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>{% block title %}{% endblock %} - Private.coffee</title>
<link rel="stylesheet" href="/assets/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="/assets/css/base.css">
</head>
<body>
<nav class="navbar navbar-expand-sm navbar-dark" style="background-color: #ffb6c1;">
<nav class="navbar navbar-expand-md sticky-top navbar-shrink py-3 navbar-light" id="mainNav">
<div class="container">
<div class="row align-items-center w-100">
<div class="col-sm-8">
<a class="navbar-brand text-mauve" href="/">
<img class="navbar-brand-img" src="assets/img/logo-inv_grad.svg" alt="Private.coffee logo">
<h1 style="display: inline; font-family: 'title-font', sans-serif;">Private.coffee</h1>
</a>
</div>
<div class="col-sm-2 d-flex justify-content-center text-mauve index-buttons">
<a href="membership.html" class="btn btn-primary">♥ Support Us ♥</a>
</div>
<div class="col-sm-2 d-flex justify-content-center index-buttons">
<a href="https://status.private.coffee" class="btn btn-primary big">Status Monitor</a>
</div>
<div class="row d-lg-flex align-items-lg-center">
<div class="col p-0"><img src="/assets/img/logo-inv_grad.svg?h=6ec231b999bdfb1aeb31c2e7a0099b92" style="height: 60px;"></div>
<div class="col d-flex"><a class="navbar-brand d-flex align-items-center" href="/">
<p class="mb-0" style="line-height: 1.2rem;color: var(--bs-tertiary-color);"><span class="ps-2 fancy-text-primary"><span style="color: rgb(35, 35, 35);">Private.coffee</span></span><br><span class="ps-2">Empowering Privacy with Open Source</span></p>
</a></div>
</div><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navcol-1"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="navbar-nav mx-auto">
<li class="nav-item"><a class="nav-link active" href="/index.html">Home</a></li>
<li class="nav-item"><a class="nav-link" href="https://status.private.coffee/">Status</a></li>
</ul><a class="btn btn-primary shadow" role="button" href="/membership.html">JOIN &amp; REBEL</a>
</div>
</div>
</nav>
<section id="content">
{% block content %}{% endblock %}
</section>
<footer class="page-footer font-small bg-coffee text-white pt-4">
<div class="container text-center text-md-left">
<div class="row">
<div class="col-md-6 mt-md-0 mt-3">
<h5 class="text-uppercase text-mauve">Private.coffee</h5>
<p class="text-mauve">
Private.coffee is a collection of services that respect your
privacy.
</p>
</div>
<hr class="clearfix w-100 d-md-none pb-3" />
<div class="col-md-3 mb-md-0 mb-3">
<h5 class="text-uppercase text-mauve">Legal stuff:</h5>
<footer class="bg-primary-gradient">
<div class="container py-4 py-lg-5">
<div class="row justify-content-center">
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column">
<h3 class="fs-6 fw-bold">Legal Stuff</h3>
<ul class="list-unstyled">
<li>
<a href="legal.html">Legal Notice</a>
</li>
<li>
<a href="privacy.html">Privacy Policy</a>
</li>
<li>
<a href="terms.html">Terms of Service</a>
</li>
<li><a href="/legal.html">Legal Notice</a></li>
<li><a href="/privacy.html">Privacy Notice</a></li>
<li><a href="/terms.html">Terms of Service</a></li>
</ul>
</div>
<div class="col-md-3 mb-md-0 mb-3">
<h5 class="text-uppercase text-mauve">Contact</h5>
<ul class="list-unstyled">
<li><a href="mailto:support@private.coffee">Email</a></li>
<li>
<a href="https://matrix.private.cf/#/#private.coffee:private.coffee">Matrix</a>
</li>
<li>
<a href="https://git.private.coffee/PrivateCoffee/">Git</a>
</li>
</ul>
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column">
</div>
<div class="col-lg-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
<div class="fw-bold d-flex align-items-center mb-2"><span class="bs-icon-sm bs-icon-circle bs-icon-primary d-flex justify-content-center align-items-center bs-icon me-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-bezier">
<path fill-rule="evenodd" d="M0 10.5A1.5 1.5 0 0 1 1.5 9h1A1.5 1.5 0 0 1 4 10.5v1A1.5 1.5 0 0 1 2.5 13h-1A1.5 1.5 0 0 1 0 11.5zm1.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm10.5.5A1.5 1.5 0 0 1 13.5 9h1a1.5 1.5 0 0 1 1.5 1.5v1a1.5 1.5 0 0 1-1.5 1.5h-1a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zM6 4.5A1.5 1.5 0 0 1 7.5 3h1A1.5 1.5 0 0 1 10 4.5v1A1.5 1.5 0 0 1 8.5 7h-1A1.5 1.5 0 0 1 6 5.5zM7.5 4a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5z"></path>
<path d="M6 4.5H1.866a1 1 0 1 0 0 1h2.668A6.517 6.517 0 0 0 1.814 9H2.5c.123 0 .244.015.358.043a5.517 5.517 0 0 1 3.185-3.185A1.503 1.503 0 0 1 6 5.5zm3.957 1.358A1.5 1.5 0 0 0 10 5.5v-1h4.134a1 1 0 1 1 0 1h-2.668a6.517 6.517 0 0 1 2.72 3.5H13.5c-.123 0-.243.015-.358.043a5.517 5.517 0 0 0-3.185-3.185z"></path>
</svg></span><span>Private.coffee</span></div>
<p class="text-muted">Private.coffee is a collection of services that respect your privacy.</p>
</div>
</div>
<hr>
<div class="text-muted d-flex justify-content-between align-items-center pt-3">
<p class="mb-0">Made with ❤️ and ☕ by Private.coffee</p>
</div>
</div>
</footer>

View file

@ -1,85 +1,123 @@
{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% block content %}
<div class="container text-mauve">
<h1>Welcome to Private.coffee</h1>
<p>
Private.coffee provides a collection of services that respect your privacy.
</p>
<p>
Click on a service to go to it. Some services are also available using
Tor and/or I2P. Click the arrow behind the "Go to" link to see all
available versions.
</p>
<div class="row" id="services">
<header class="bg-primary-gradient">
<div class="container pt-4 pt-xl-5 pb-4 pb-xl-5">
<div class="row gy-5 pt-5">
<div class="col-md-8 col-xl-6 text-center text-md-start mx-auto">
<div class="text-center">
<h2>Empowering Privacy with Open Source</h2>
</div>
<p class="text-center special-header fancy-text-primary mb-0" style="font-weight: 500;">Private.coffee</p>
</div>
<div class="col-12 col-lg-10 mx-auto justify-content-center d-flex"><img class="mx-auto" src="/assets/img/logo-inv_grad.svg?h=6ec231b999bdfb1aeb31c2e7a0099b92" style="max-width: 400px;width: 80vw;"></div>
</div>
</div>
</header>
<section class="bg-white">
<div class="container bg-white py-5">
<div class="row">
<div class="col-md-8 col-xl-6 text-center mx-auto">
<p class="fw-bold mb-2 text-primary">Our self-hosted Services</p>
<h3 class="fw-bold">PRIVATE.COFFEE provides a collection of services that respect your privacy. </h3>
</div>
</div>
<div class="py-5 p-lg-5">
<div class="row row-cols-1 row-cols-md-2 mx-auto" style="max-width: 900px;">
{% for service in services.services %}
{% if not service.exclude_from_index %}
<div class="service col-sm-4 d-flex flex-column mb-4">
<h3>{{ service.name }}</h3>
<p>
{{ service.long_description }}
</p>
<div class="col mb-5">
<div class="card shadow-sm">
<div class="card-body px-4 py-5 px-md-5">
<div class="bs-icon-lg d-flex justify-content-center align-items-center mb-3 bs-icon" style="top: 1rem;right: 1rem;position: absolute;"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-chat-text text-primary">
<path d="M2.678 11.894a1 1 0 0 1 .287.801 10.97 10.97 0 0 1-.398 2c1.395-.323 2.247-.697 2.634-.893a1 1 0 0 1 .71-.074A8.06 8.06 0 0 0 8 14c3.996 0 7-2.807 7-6 0-3.192-3.004-6-7-6S1 4.808 1 8c0 1.468.617 2.83 1.678 3.894m-.493 3.905a21.682 21.682 0 0 1-.713.129c-.2.032-.352-.176-.273-.362a9.68 9.68 0 0 0 .244-.637l.003-.01c.248-.72.45-1.548.524-2.319C.743 11.37 0 9.76 0 8c0-3.866 3.582-7 8-7s8 3.134 8 7-3.582 7-8 7a9.06 9.06 0 0 1-2.347-.306c-.52.263-1.639.742-3.468 1.105z"></path>
<path d="M4 5.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8m0 2.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5"></path>
</svg></div>
<h5 class="fw-bold card-title">{{ service.name }}</h5>
<p class="text-muted card-text mb-4">{{ service.long_description }}</p>
{% for link in service.links %}
<div class="btn-group mt-auto">
<a href="{{ link.url }}" class="btn mb-1
{% if service.status == "OK" %}btn-primary{% else %}btn-danger{% endif %}"
>{{ link.name }}</a
>
{% if link.alternatives %}
<button
type="button"
class="btn dropdown-toggle dropdown-toggle-split mb-1
{% if service.status == "OK" %}btn-primary{% else %}btn-danger{% endif %}"
data-bs-toggle="dropdown"
aria-expanded="false"
>
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul
class="dropdown-menu"
x-placement="bottom-start"
style="
position: absolute;
transform: translate3d(80px, 38px, 0px);
top: 0px;
left: 0px;
will-change: transform;
"
>
{% for alternative in link.alternatives %}
<a class="dropdown-item" href="{{ alternative.url }}"
>{{ alternative.name }}</a
>
<a class="btn btn-primary shadow w-100 text-center" href="{{ link.url }}">{{ link.name }}</a>
{% endfor %}
</ul>
{% endif %}
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% endfor %}
<div class="service col-sm-4 d-flex flex-column mb-4">
<h3>Hosting</h3>
<p>
Need hosting for your privacy-related, social or wholesome
project? We might be able to share our resources with you for
free!
</p>
<a href="mailto:support@private.coffee" class="btn btn-primary mt-auto"
>Get in touch!</a
>
</div>
<div class="service col-sm-4 d-flex flex-column mb-4">
<h3>More?</h3>
<p>
We are working on more services. If you have any suggestions,
please let us know!
</p>
<a href="mailto:support@private.coffee" class="btn btn-primary mt-auto"
>Get in touch!</a
>
</div>
</div>
</div>
</div>
</section>
<section class="bg-primary-gradient">
<div class="container py-5">
<div class="row align-items-center">
<div class="col">
<p class="text-end special-header fancy-text-primary mb-0">Privacy</p>
</div>
<div class="col">
<p class="text-start mb-1" style="font-size: 1.6rem;">from the <strong>community</strong></p>
<p class="text-start mb-0" style="font-size: 1.6rem;">for the <strong>community</strong></p>
</div>
</div>
<div class="mx-auto" style="max-width: 900px;">
<div class="row row-cols-1 row-cols-md-2 d-flex justify-content-center">
<div class="col mb-4">
<div class="card bg-primary-subtle">
<div class="card-body text-center px-4 py-5 px-md-5">
<p class="fw-bold text-primary card-text mb-2">Join and rebel</p>
<h5 class="fw-bold card-title mb-3">Be a part of the open source community!</h5><a class="btn btn-primary btn-sm" href="/membership.html">Learn more</a>
</div>
</div>
</div>
<div class="col mb-4">
<div class="card bg-secondary-subtle">
<div class="card-body text-center px-4 py-5 px-md-5">
<p class="fw-bold text-secondary card-text mb-2">Private Hosting</p>
<h5 class="fw-bold card-title mb-3">Interested in Hosting Services?</h5><a class="btn btn-secondary btn-sm" href="mailto:support@private.coffee">Get in touch</a>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="py-5">
<div class="container">
<div class="row mb-5">
<div class="col-md-8 col-xl-6 text-center mx-auto">
<p class="fw-bold mb-2 text-primary">Contacts</p>
<h2 class="fw-bold">How you can reach us</h2>
</div>
</div>
<div class="row d-flex justify-content-center">
<div class="col-md-4 col-xl-4 d-flex justify-content-center justify-content-xl-start">
<div class="d-flex flex-wrap flex-md-column justify-content-md-start align-items-md-start h-100">
<div class="d-flex align-items-center p-3">
<div class="bs-icon-md bs-icon-circle bs-icon-primary shadow d-flex flex-shrink-0 justify-content-center align-items-center d-inline-block bs-icon bs-icon-md"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-envelope">
<path d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1zm13 2.383-4.708 2.825L15 11.105zm-.034 6.876-5.64-3.471L8 9.583l-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.741M1 11.105l4.708-2.897L1 5.383z"></path>
</svg></div>
<div class="px-2">
<h6 class="fw-bold mb-0">Email</h6>
<p class="text-muted mb-0">support@private.coffee</p>
</div>
</div>
</div>
</div>
</div>
<div class="row d-flex justify-content-center">
<div class="col-md-4 col-xl-4 d-flex justify-content-center justify-content-xl-start">
<div class="d-flex flex-wrap flex-md-column justify-content-md-start align-items-md-start h-100">
<div class="d-flex align-items-center p-3">
<div class="bs-icon-md bs-icon-circle bs-icon-primary shadow d-flex flex-shrink-0 justify-content-center align-items-center d-inline-block bs-icon bs-icon-md"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-envelope">
<path d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1zm13 2.383-4.708 2.825L15 11.105zm-.034 6.876-5.64-3.471L8 9.583l-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.741M1 11.105l4.708-2.897L1 5.383z"></path>
</svg></div>
<div class="px-2">
<h6 class="fw-bold mb-0">Matrix</h6>
<p class="text-muted mb-0">#private.coffee:private.coffee</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

View file

@ -1,12 +1,29 @@
{% extends "base.html" %}
{% block content %}
<div class="container text-mauve">
{% extends "base.html" %} {% block content %}
<section class="bg-primary-gradient">
<div class="container py-5">
<div class="row align-items-center">
<div class="col">
<p class="text-end special-header fancy-text-primary mb-0">
Legal Notice
</p>
</div>
<div class="col">
<p class="text-start mb-1" style="font-size: 1.6rem">
from the <strong>community</strong>
</p>
<p class="text-start mb-0" style="font-size: 1.6rem">
for the <strong>community</strong>
</p>
</div>
</div>
<div class="container">
<h1>Legal Notice</h1>
<p>This is a legal notice for the website private.coffee</p>
<p>The website private.coffee is run by the following entity:</p>
<address>
Private.coffee &dash; Verein zur Förderung von Privatsphäre und digitaler
Souver&auml;nit&auml;t<br />
Private.coffee &dash; Verein zur Förderung von Privatsphäre und
digitaler Souver&auml;nit&auml;t<br />
c/o Klaus-Uwe Mitterer<br />
Gartengasse 22/7/3<br />
8010 Graz<br />
@ -17,5 +34,7 @@
Email:
<a href="mailto:support@private.coffee">support@private.coffee</a>
</p>
</div>
</div>
</div>
</section>
{% endblock %}

View file

@ -1,5 +1,5 @@
{% extends "base.html" %} {% block content %}
<div class="container text-mauve">
<div class="container">
<h1>Membership/Donations</h1>
<p>
private.coffee is a non-profit organization dedicated to supporting privacy

View file

@ -1,5 +1,5 @@
{% extends "base.html" %} {% block content %}
<div class="container text-mauve">
<div class="container">
<h1>Privacy Policy</h1>
<p>
This is the privacy policy for the website private.coffee. It describes how

View file

@ -1,5 +1,5 @@
{% extends "base.html" %} {% block content %}
<div class="container text-mauve">
<div class="container">
<h1>Terms of Service</h1>
<p>
These are the terms of service for the website private.coffee and all