Compare commits
No commits in common. "main" and "pages" have entirely different histories.
|
@ -1,50 +0,0 @@
|
|||
name: Build and Deploy Static Site
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
build:
|
||||
container: node:20-bookworm
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
apt update
|
||||
apt install -y python3 python3-pip
|
||||
python3 -m pip install -r requirements.txt --break-system-packages
|
||||
|
||||
- name: Generate static site
|
||||
run: python3 main.py --dev
|
||||
|
||||
- name: Deploy to pages branch
|
||||
run: |
|
||||
# Configure Git
|
||||
git config --global user.name "Forgejo"
|
||||
git config --global user.email "noreply@private.coffee"
|
||||
|
||||
# Move generated static site files to a temporary location
|
||||
mv build ../static_site_temp
|
||||
cp .gitignore ../static_site_temp
|
||||
|
||||
# Create a new orphan branch named 'pages-dev'
|
||||
git checkout --orphan pages-dev
|
||||
|
||||
# Remove all files from the working directory
|
||||
git rm -rf .
|
||||
|
||||
# Move the static site files back to the working directory
|
||||
mv ../static_site_temp/* ./
|
||||
mv ../static_site_temp/.* ./ 2>/dev/null || true
|
||||
|
||||
# Add and commit the static site files
|
||||
git add .
|
||||
git commit -m "Deploy static site"
|
||||
|
||||
# Force push to the 'pages-dev' branch
|
||||
git push origin pages-dev --force
|
|
@ -1,50 +0,0 @@
|
|||
name: Build and Deploy Static Site
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
container: node:20-bookworm
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
apt update
|
||||
apt install -y python3 python3-pip
|
||||
python3 -m pip install -r requirements.txt --break-system-packages
|
||||
|
||||
- name: Generate static site
|
||||
run: python3 main.py
|
||||
|
||||
- name: Deploy to pages branch
|
||||
run: |
|
||||
# Configure Git
|
||||
git config --global user.name "Forgejo"
|
||||
git config --global user.email "noreply@private.coffee"
|
||||
|
||||
# Move generated static site files to a temporary location
|
||||
mv build ../static_site_temp
|
||||
cp .gitignore ../static_site_temp
|
||||
|
||||
# Create a new orphan branch named 'pages'
|
||||
git checkout --orphan pages
|
||||
|
||||
# Remove all files from the working directory
|
||||
git rm -rf .
|
||||
|
||||
# Move the static site files back to the working directory
|
||||
mv ../static_site_temp/* ./
|
||||
mv ../static_site_temp/.* ./ 2>/dev/null || true
|
||||
|
||||
# Add and commit the static site files
|
||||
git add .
|
||||
git commit -m "Deploy static site"
|
||||
|
||||
# Force push to the 'pages' branch
|
||||
git push origin pages --force
|
27
.vscode/launch.json
vendored
27
.vscode/launch.json
vendored
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Debug: Development Mode",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "main.py",
|
||||
"console": "integratedTerminal",
|
||||
"cwd": "${workspaceFolder}",
|
||||
"env": {
|
||||
"PRIVATECOFFEE_DEV": "1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Debug: Production Mode",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "main.py",
|
||||
"console": "integratedTerminal",
|
||||
"cwd": "${workspaceFolder}"
|
||||
}
|
||||
]
|
||||
}
|
23
LICENSE
23
LICENSE
|
@ -1,23 +0,0 @@
|
|||
Copyright (c) 2023 Private.coffee Team <support@private.coffee>
|
||||
|
||||
Use of the Private.coffee / Private Coffee name or the Private.coffee logo
|
||||
without express permission by the Private.coffee team is prohibited. However,
|
||||
you are free to use all code components under the MIT License:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
33
README.md
33
README.md
|
@ -1,33 +0,0 @@
|
|||
# Private.coffee Website
|
||||
|
||||
[![Support Private.coffee!](https://shields.private.coffee/badge/private.coffee-Support%20us!-pink?logo=coffeescript)](https://private.coffee)
|
||||
|
||||
This is the source code for the [Private.coffee](https://private.coffee)
|
||||
website.
|
||||
|
||||
It is a simple Jinja2 static website generator that compiles the templates in
|
||||
the `templates` directory in conjunction with the JSON files in the `data`
|
||||
directory to generate the static HTML files in the `build` directory.
|
||||
|
||||
## Development
|
||||
|
||||
To run the website locally, you will need to have Python 3 installed. Then, you
|
||||
can install the dependencies and run the website with the following commands:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
python main.py
|
||||
```
|
||||
|
||||
The website will be built into the `build` directory, and you can view it by
|
||||
opening the `index.html` file in your browser.
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the [LICENSE](LICENSE)
|
||||
file for details.
|
||||
|
||||
## Attribution
|
||||
|
||||
This website is built using the [Bootstrap](https://getbootstrap.com) framework
|
||||
and [Phosphor Icons](https://phosphoricons.com).
|
|
@ -10,7 +10,7 @@
|
|||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
|
||||
/>
|
||||
<title>{% block title %}{% endblock %} - Private.coffee</title>
|
||||
<title> - Private.coffee</title>
|
||||
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="assets/css/base.css" />
|
||||
</head>
|
||||
|
@ -51,8 +51,8 @@
|
|||
</ul><a class="btn btn-primary shadow navbar-btn" role="button" href="/membership.html">JOIN & SUPPORT</a>
|
||||
</div>
|
||||
</nav>
|
||||
{% if warning %}{{ warning|safe }}{% endif %}
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
|
||||
<footer class="bg-primary-gradient">
|
||||
<div class="container py-4 py-lg-5">
|
||||
<div class="row justify-content-center">
|
||||
|
@ -75,7 +75,7 @@
|
|||
<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"
|
||||
>{{ "coffee" | icon | safe }}</span
|
||||
><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span
|
||||
><span>Private.coffee</span>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
|
@ -89,7 +89,19 @@
|
|||
class="text-muted d-flex justify-content-between align-items-center pt-3"
|
||||
>
|
||||
<p class="mb-0">Made with ❤️ and ☕ by Private.coffee</p>
|
||||
<p class="mb-0">{{ "rainbow" | icon | safe }}</p>
|
||||
<p class="mb-0"><svg xmlns="http://www.w3.org/2000/svg" width="94" height="20" role="img" aria-label="LGBTIQ+">
|
||||
<title>LGBTIQ+</title>
|
||||
<rect rx="3" width="94" height="20" fill="#555"/>
|
||||
<rect x="37" width="57" height="20" fill="#e05d44"/>
|
||||
<rect x="46.5" width="47.5" height="20" fill="#fecc00"/>
|
||||
<rect x="56" width="37" height="20" fill="#61c354"/>
|
||||
<rect x="65.5" width="27" height="20" fill="#007ec6"/>
|
||||
<rect x="75" width="17" height="20" fill="#744ca1"/>
|
||||
<rect x="84.5" width="9.5" height="20" rx="3" ry="3" fill="#8b00ff"/>
|
||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
||||
<text x="18.5" y="15" fill="#fff">LGBTIQ+</text>
|
||||
</g>
|
||||
</svg></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
|
@ -1,41 +0,0 @@
|
|||
private.coffee www.private.coffee {
|
||||
header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
|
||||
|
||||
header Access-Control-Allow-Origin https://element.private.coffee
|
||||
header Access-Control-Allow-Methods "GET"
|
||||
header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range"
|
||||
header Access-Control-Expose-Headers "Content-Length,Content-Range"
|
||||
|
||||
@matrix {
|
||||
path matrix /.well-known/matrix/*
|
||||
}
|
||||
|
||||
@assets {
|
||||
path assets /assets/*
|
||||
}
|
||||
|
||||
@security {
|
||||
path security-well-known /.well-known/security.txt
|
||||
path security /security.txt
|
||||
}
|
||||
|
||||
handle @matrix {
|
||||
header /.well-known/matrix/* Content-Type application/json
|
||||
header /.well-known/matrix/* Access-Control-Allow-Origin *
|
||||
respond /.well-known/matrix/server `{"m.server": "matrix.private.coffee:443"}`
|
||||
respond /.well-known/matrix/client `{"m.homeserver":{"base_url":"https://matrix.private.coffee"}}`
|
||||
}
|
||||
|
||||
handle @assets {
|
||||
file_server
|
||||
root * /srv/private.coffee
|
||||
}
|
||||
|
||||
handle @security {
|
||||
redir https://security.private.coffee/security.txt
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy * unix//var/run/uwsgi/privatecoffee.sock
|
||||
}
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
[uwsgi]
|
||||
module = main:app
|
||||
|
||||
uid = %n
|
||||
gid = %n
|
||||
master = true
|
||||
processes = 5
|
||||
|
||||
plugins = python3
|
||||
virtualenv = /srv/%n/venv/
|
||||
chdir = /srv/%n/
|
||||
|
||||
env = PRIVATECOFFEE_DEV=true
|
||||
|
||||
http-socket = /var/run/uwsgi/%n.sock
|
||||
chown-socket = caddy
|
|
@ -1,14 +0,0 @@
|
|||
[uwsgi]
|
||||
module = main:app
|
||||
|
||||
uid = %n
|
||||
gid = %n
|
||||
master = true
|
||||
processes = 5
|
||||
|
||||
plugins = python3
|
||||
virtualenv = /srv/%n/venv/
|
||||
chdir = /srv/%n/
|
||||
|
||||
http-socket = /var/run/uwsgi/%n.sock
|
||||
chown-socket = caddy
|
|
@ -1,249 +0,0 @@
|
|||
from decimal import Decimal
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
def get_latest_month(data, allow_current=False):
|
||||
years = sorted(data.keys())
|
||||
latest_year = years[-1]
|
||||
months = sorted(data[latest_year].keys())
|
||||
latest_month = months[-1]
|
||||
|
||||
if (
|
||||
not allow_current
|
||||
and latest_year == str(datetime.now().year)
|
||||
and latest_month == str(datetime.now().month)
|
||||
):
|
||||
try:
|
||||
latest_month = months[-2]
|
||||
except IndexError:
|
||||
latest_year = years[-2]
|
||||
latest_month = months[-1]
|
||||
|
||||
return int(latest_month), int(latest_year)
|
||||
|
||||
|
||||
def get_transparency_data(data, year=None, month=None, allow_current=False):
|
||||
if year is None:
|
||||
year = max(data.keys())
|
||||
|
||||
if month is None:
|
||||
month = max(data[year].keys())
|
||||
|
||||
year = str(year)
|
||||
month = str(month)
|
||||
|
||||
if (
|
||||
not allow_current
|
||||
and year == str(datetime.now().year)
|
||||
and month == str(datetime.now().month)
|
||||
):
|
||||
try:
|
||||
month = max([m for m in data[year].keys() if m != str(datetime.now().month)])
|
||||
except ValueError:
|
||||
year = str(int(year) - 1)
|
||||
month = max(data[year].keys())
|
||||
|
||||
assert year in data, f"Year {year} not found in data"
|
||||
assert month in data[year], f"Month {month}-{year} not found in data"
|
||||
|
||||
# Initialize balances
|
||||
balances = {}
|
||||
incomes = {}
|
||||
expenses = {}
|
||||
notes = {}
|
||||
|
||||
start_balance = {}
|
||||
end_balance = {}
|
||||
|
||||
for y in sorted(data.keys()):
|
||||
if int(y) > int(year):
|
||||
break
|
||||
|
||||
for m in sorted(data[y].keys()):
|
||||
if int(y) == int(year) and int(m) > int(month):
|
||||
break
|
||||
|
||||
# If the month is the one we are interested in, capture the start balance
|
||||
if int(y) == int(year) and int(m) == int(month):
|
||||
start_balance = {
|
||||
k: Decimal(v) for k, v in balances.items() if k != "Notes"
|
||||
}
|
||||
|
||||
for category in data[y][m]:
|
||||
for currency, amount in data[y][m][category].items():
|
||||
if currency == "Notes":
|
||||
if int(y) == int(year) and int(m) == int(month):
|
||||
notes[category] = amount
|
||||
else:
|
||||
if currency not in balances:
|
||||
balances[currency] = Decimal(0)
|
||||
balances[currency] += Decimal(str(amount))
|
||||
|
||||
# Track incomes and expenses
|
||||
if int(y) == int(year) and int(m) == int(month):
|
||||
if Decimal(str(amount)) > 0:
|
||||
if category not in incomes:
|
||||
incomes[category] = {}
|
||||
if currency not in incomes[category]:
|
||||
incomes[category][currency] = Decimal(0)
|
||||
incomes[category][currency] += Decimal(str(amount))
|
||||
else:
|
||||
if category not in expenses:
|
||||
expenses[category] = {}
|
||||
if currency not in expenses[category]:
|
||||
expenses[category][currency] = Decimal(0)
|
||||
expenses[category][currency] += Decimal(str(amount))
|
||||
|
||||
# If the month is the one we are interested in, capture the end balance
|
||||
if int(y) == int(year) and int(m) == int(month):
|
||||
end_balance = {
|
||||
k: Decimal(v) for k, v in balances.items() if k != "Notes"
|
||||
}
|
||||
|
||||
# Calculate accumulated sums of incomes and expenses
|
||||
accumulated_incomes = {
|
||||
currency: sum(incomes[cat].get(currency, Decimal(0)) for cat in incomes)
|
||||
for currency in balances
|
||||
if currency != "Notes"
|
||||
}
|
||||
accumulated_expenses = {
|
||||
currency: sum(expenses[cat].get(currency, Decimal(0)) for cat in expenses)
|
||||
for currency in balances
|
||||
if currency != "Notes"
|
||||
}
|
||||
|
||||
return {
|
||||
"start_balance": start_balance,
|
||||
"end_balance": end_balance,
|
||||
"incomes": incomes,
|
||||
"expenses": expenses,
|
||||
"accumulated_incomes": accumulated_incomes,
|
||||
"accumulated_expenses": accumulated_expenses,
|
||||
"notes": notes,
|
||||
}
|
||||
|
||||
|
||||
def generate_transparency_table(result, currencies=None):
|
||||
def extract_currencies(data):
|
||||
return ["EUR"] + (
|
||||
list(
|
||||
set(
|
||||
list(data["start_balance"].keys())
|
||||
+ list(data["end_balance"].keys())
|
||||
+ list(data["accumulated_incomes"].keys())
|
||||
+ list(data["accumulated_expenses"].keys())
|
||||
)
|
||||
- {"EUR", "Notes"}
|
||||
)
|
||||
)
|
||||
|
||||
def format_currency(value, currency):
|
||||
if currency == "EUR":
|
||||
return f"€{value:,.2f}"
|
||||
elif currency in ["BTC", "ETH", "XMR"]:
|
||||
return f"{value:,.9f} {currency}"
|
||||
else:
|
||||
return f"{value} {currency}"
|
||||
|
||||
def format_value(value, currency):
|
||||
if value == 0:
|
||||
return f"{format_currency(value, currency)}"
|
||||
elif value > 0:
|
||||
return f"+ {format_currency(value, currency)}"
|
||||
else:
|
||||
return f"- {format_currency(abs(value), currency)}"
|
||||
|
||||
html = """
|
||||
<table class="table table-bordered table-transparency">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th scope="col">Category</th>
|
||||
"""
|
||||
|
||||
if currencies is None:
|
||||
currencies = extract_currencies(result)
|
||||
|
||||
# Add currency headers
|
||||
for currency in currencies:
|
||||
if currency == "EUR":
|
||||
html += '<th class="currency-col" scope="col">Euros (€)</th>'
|
||||
elif currency == "BTC":
|
||||
html += '<th class="currency-col" scope="col">Bitcoin (BTC)</th>'
|
||||
elif currency == "ETH":
|
||||
html += '<th class="currency-col" scope="col">Ethereum (ETH)</th>'
|
||||
elif currency == "XMR":
|
||||
html += '<th class="currency-col" scope="col">Monero (XMR)</th>'
|
||||
else:
|
||||
html += f'<th class="currency-col" scope="col">{currency}</th>'
|
||||
|
||||
html += """
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
"""
|
||||
|
||||
# Add start balance row
|
||||
html += "<tr><td>Account Balance (start of month)</td>"
|
||||
for currency in currencies:
|
||||
value = result["start_balance"].get(currency, Decimal(0))
|
||||
html += f"<td>{format_value(value, currency)}</td>"
|
||||
html += "</tr>"
|
||||
|
||||
# Add income rows
|
||||
for category, transactions in result["incomes"].items():
|
||||
has_notes = result["notes"].get(category)
|
||||
html += f"<tr><td>{category}{'*' if has_notes else ''}</td>"
|
||||
for currency in currencies:
|
||||
value = transactions.get(currency, "")
|
||||
if value != "":
|
||||
html += f"<td>{format_value(value, currency)}</td>"
|
||||
else:
|
||||
html += "<td></td>"
|
||||
html += "</tr>"
|
||||
|
||||
# Add expense rows
|
||||
for category, transactions in result["expenses"].items():
|
||||
has_notes = result["notes"].get(category)
|
||||
html += f"<tr><td>{category}{'*' if has_notes else ''}</td>"
|
||||
for currency in currencies:
|
||||
value = transactions.get(currency, "")
|
||||
if value != "":
|
||||
html += f"<td>{format_value(value, currency)}</td>"
|
||||
else:
|
||||
html += "<td></td>"
|
||||
html += "</tr>"
|
||||
|
||||
# Add total income row
|
||||
html += '<tr class="table-secondary"><td><b>Total Income</b></td>'
|
||||
for currency in currencies:
|
||||
value = result["accumulated_incomes"].get(currency, Decimal(0))
|
||||
html += f"<td><b>{format_value(value, currency)}</b></td>"
|
||||
html += "</tr>"
|
||||
|
||||
# Add total expenses row
|
||||
html += '<tr class="table-secondary"><td><b>Total Expenses</b></td>'
|
||||
for currency in currencies:
|
||||
value = result["accumulated_expenses"].get(currency, Decimal(0))
|
||||
html += f"<td><b>{format_value(value, currency)}</b></td>"
|
||||
html += "</tr>"
|
||||
|
||||
# Add end balance row
|
||||
html += '<tr class="table-secondary"><td><b>Account Balance (end of month)</b></td>'
|
||||
for currency in currencies:
|
||||
value = result["end_balance"].get(currency, Decimal(0))
|
||||
html += f"<td><b>{format_value(value, currency)}</b></td>"
|
||||
html += "</tr>"
|
||||
|
||||
html += """
|
||||
</tbody>
|
||||
</table>
|
||||
"""
|
||||
|
||||
if result["notes"]:
|
||||
html += "<p><b>Notes:</b></p>"
|
||||
html += "<ul>"
|
||||
for category, footnote in result["notes"].items():
|
||||
html += f"<li>{category}: {footnote}</li>"
|
||||
html += "</ul>"
|
||||
|
||||
return html
|
945
index.html
Normal file
945
index.html
Normal file
|
@ -0,0 +1,945 @@
|
|||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en">
|
||||
<!-- 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 -->
|
||||
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
|
||||
/>
|
||||
<title>Home - 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-md py-3 navbar-light"
|
||||
id="mainNav"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row d-lg-flex align-items-lg-center">
|
||||
<div class="col p-0">
|
||||
<a href="/"
|
||||
><img src="assets/img/logo-inv_grad.svg" style="height: 60px"
|
||||
/></a>
|
||||
</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 class="that-br" /><span class="ps-2 slogan"
|
||||
>Empowering Privacy with Open Source</span
|
||||
>
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="navbar" 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 navbar-btn" role="button" href="/membership.html">JOIN & SUPPORT</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<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" 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 row-cols-lg-3 mx-auto"
|
||||
style="max-width: 1200px"
|
||||
>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M72,216a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8H64a8,8,0,0,1,0,16H48V208H64A8,8,0,0,1,72,216ZM216,32H192a8,8,0,0,0,0,16h16V208H192a8,8,0,0,0,0,16h24a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32Zm-32,88a32,32,0,0,0-56-21.13,31.93,31.93,0,0,0-40.71-6.15A8,8,0,0,0,72,96v64a8,8,0,0,0,16,0V120a16,16,0,0,1,32,0v40a8,8,0,0,0,16,0V120a16,16,0,0,1,32,0v40a8,8,0,0,0,16,0Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Matrix</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Private.coffee runs a Matrix server. You can use it to chat with other people at Private.coffee or around the world. Use it with a client of your choice, or use our Element web client.
|
||||
</p>
|
||||
|
||||
<div class="dropdown">
|
||||
<div class="btn btn-primary shadow">
|
||||
<a class="main-link" href="https://element.private.coffee">
|
||||
Go to Element
|
||||
</a>
|
||||
<div class="dropdown-toggle-area">▼</div>
|
||||
</div>
|
||||
<div class="dropdown-content">
|
||||
|
||||
<a href="http://element.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion">Tor</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,96H232a8,8,0,0,1,0,16H128a8,8,0,0,1,0-16Zm104,32H128a8,8,0,0,0,0,16H232a8,8,0,0,0,0-16Zm0,32H80a8,8,0,0,0,0,16H232a8,8,0,0,0,0-16Zm0,32H80a8,8,0,0,0,0,16H232a8,8,0,0,0,0-16ZM96,144a8,8,0,0,0,0-16H88V64h32v8a8,8,0,0,0,16,0V56a8,8,0,0,0-8-8H32a8,8,0,0,0-8,8V72a8,8,0,0,0,16,0V64H72v64H64a8,8,0,0,0,0,16Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">CryptPad</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
CryptPad is a private, encrypted, zero-knowledge, realtime collaborative editor, similar to Google Docs and Office 365.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://cryptpad.private.coffee"
|
||||
>Go to CryptPad</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M164.44,105.34l-48-32A8,8,0,0,0,104,80v64a8,8,0,0,0,12.44,6.66l48-32a8,8,0,0,0,0-13.32ZM120,129.05V95l25.58,17ZM216,40H40A16,16,0,0,0,24,56V168a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,128H40V56H216V168Zm16,40a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16H224A8,8,0,0,1,232,208Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Piped / Invidious</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Piped and Invidious are alternative front-ends to YouTube. They allow you to watch YouTube videos without Google tracking you.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://piped.private.coffee"
|
||||
>Go to Piped</a
|
||||
>
|
||||
|
||||
<div class="dropdown">
|
||||
<div class="btn btn-primary shadow">
|
||||
<a class="main-link" href="https://invidious.private.coffee">
|
||||
Go to Invidious
|
||||
</a>
|
||||
<div class="dropdown-toggle-area">▼</div>
|
||||
</div>
|
||||
<div class="dropdown-content">
|
||||
|
||||
<a href="http://invidious.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion">Tor</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M240,136v64a16,16,0,0,1-16,16H32a16,16,0,0,1-16-16V136a16,16,0,0,1,16-16H80a8,8,0,0,1,0,16H32v64H224V136H176a8,8,0,0,1,0-16h48A16,16,0,0,1,240,136ZM85.66,77.66,120,43.31V128a8,8,0,0,0,16,0V43.31l34.34,34.35a8,8,0,0,0,11.32-11.32l-48-48a8,8,0,0,0-11.32,0l-48,48A8,8,0,0,0,85.66,77.66ZM200,168a12,12,0,1,0-12,12A12,12,0,0,0,200,168Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Transfer.coffee</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Transfer.coffee allows you to transfer files securely using peer-to-peer connections. Your files are never stored on our servers.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://transfer.coffee"
|
||||
>Go to Transfer.coffee</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M232,112H136V88h8a16,16,0,0,0,16-16V40a16,16,0,0,0-16-16H112A16,16,0,0,0,96,40V72a16,16,0,0,0,16,16h8v24H24a8,8,0,0,0,0,16H56v32H48a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16H80a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16H72V128H184v32h-8a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16h-8V128h32a8,8,0,0,0,0-16ZM112,40h32V72H112ZM80,208H48V176H80Zm128,0H176V176h32Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">MyIP.Coffee</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
MyIP.Coffee allows you to check your current IPv4 and IPv6 addresses.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://myip.coffee"
|
||||
>Go to MyIP.Coffee</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M184,32H72A40,40,0,0,0,32,72V192a40,40,0,0,0,40,40h88a8,8,0,0,0,0-16H72a24,24,0,0,1-24-24v-8H184a40,40,0,0,0,40-40V72A40,40,0,0,0,184,32Zm24,112a24,24,0,0,1-24,24H48V72A24,24,0,0,1,72,48H184a24,24,0,0,1,24,24Zm-24-40v32a8,8,0,0,1-16,0V104a16,16,0,0,0-32,0v32a8,8,0,0,1-16,0V104a16,16,0,0,0-32,0v32a8,8,0,0,1-16,0V104a32,32,0,0,1,56-21.13A32,32,0,0,1,184,104Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Mastodon</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Mastodon is a decentralized social network. You can use it to post short messages, follow other people, and more.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://cuddly.space"
|
||||
>Go to Cuddly Space</a
|
||||
>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://skrt.social"
|
||||
>Go to Skrt Social</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Forgejo</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Forgejo is our in-house Git forge. You can use it to host your Git repositories, and to collaborate with others.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://git.private.coffee"
|
||||
>Go to Forgejo</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M168,104a40,40,0,1,0-40,40A40,40,0,0,0,168,104Zm-64,0a24,24,0,1,1,24,24A24,24,0,0,1,104,104Zm120,96H136V183.6a80,80,0,1,0-16,0V200H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM64,104a64,64,0,1,1,64,64A64.07,64.07,0,0,1,64,104Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">BigBlueButton</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
BigBlueButton is an open-source video conferencing system. You can use it to hold video conferences, webinars, and more.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://bbb.private.coffee"
|
||||
>Go to BigBlueButton</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M232,48H24A16,16,0,0,0,8,64V192a16,16,0,0,0,16,16H232a16,16,0,0,0,16-16V64A16,16,0,0,0,232,48Zm0,144H24V64H232V192ZM128,104v48a8,8,0,0,1-16,0V123.31L93.66,141.66a8,8,0,0,1-11.32,0L64,123.31V152a8,8,0,0,1-16,0V104a8,8,0,0,1,13.66-5.66L88,124.69l26.34-26.35A8,8,0,0,1,128,104Zm77.66,18.34a8,8,0,0,1,0,11.32l-24,24a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L168,132.69V104a8,8,0,0,1,16,0v28.69l10.34-10.35A8,8,0,0,1,205.66,122.34Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">HedgeDoc</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
HedgeDoc is an open-source collaborative markdown editor. You can use it to write and edit documents in markdown, and to collaborate with others.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://hedgedoc.private.coffee"
|
||||
>Go to HedgeDoc</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M106.91,149.09A71.53,71.53,0,0,1,128,200a8,8,0,0,1-16,0,56,56,0,0,0-56-56,8,8,0,0,1,0-16A71.53,71.53,0,0,1,106.91,149.09ZM56,80a8,8,0,0,0,0,16A104,104,0,0,1,160,200a8,8,0,0,0,16,0A120,120,0,0,0,56,80Zm118.79,1.21A166.9,166.9,0,0,0,56,32a8,8,0,0,0,0,16A151,151,0,0,1,163.48,92.52,151,151,0,0,1,208,200a8,8,0,0,0,16,0A166.9,166.9,0,0,0,174.79,81.21ZM60,184a12,12,0,1,0,12,12A12,12,0,0,0,60,184Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">FreshRSS</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
FreshRSS is a RSS feed reader. You can use it to subscribe to RSS feeds and read the latest articles from your favorite websites.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://freshrss.private.coffee"
|
||||
>Go to FreshRSS</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M216,80H184V48a16,16,0,0,0-16-16H40A16,16,0,0,0,24,48V176a8,8,0,0,0,13,6.22L72,154V184a16,16,0,0,0,16,16h93.59L219,230.22a8,8,0,0,0,5,1.78,8,8,0,0,0,8-8V96A16,16,0,0,0,216,80ZM66.55,137.78,40,159.25V48H168v88H71.58A8,8,0,0,0,66.55,137.78ZM216,207.25l-26.55-21.47a8,8,0,0,0-5-1.78H88V152h80a16,16,0,0,0,16-16V96h32Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">redlib</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
redlib is a privacy-friendly alternative front-end to Reddit. It allows you to browse Reddit without being tracked.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://redlib.private.coffee"
|
||||
>Go to redlib</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M164.44,105.34l-48-32A8,8,0,0,0,104,80v64a8,8,0,0,0,12.44,6.66l48-32a8,8,0,0,0,0-13.32ZM120,129.05V95l25.58,17ZM216,40H40A16,16,0,0,0,24,56V168a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,128H40V56H216V168Zm16,40a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16H224A8,8,0,0,1,232,208Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">AllTube</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
AllTube is a video downloader powered by yt-dlp. It allows you to download videos from YouTube, Vimeo, and many other sites. You can also stream the download through our server for extra privacy.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://alltube.private.coffee"
|
||||
>Go to AllTube</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.49C39.74,56.83,78.26,17.14,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.65,71.65,0,0,0,27.64,56.3A32,32,0,0,1,96,186v6h64v-6a32.15,32.15,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Zm-16.11-9.34a57.6,57.6,0,0,0-46.56-46.55,8,8,0,0,0-2.66,15.78c16.57,2.79,30.63,16.85,33.44,33.45A8,8,0,0,0,176,104a9,9,0,0,0,1.35-.11A8,8,0,0,0,183.89,94.66Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Structables</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Structables allows you to browse Instructables without being tracked.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://structables.private.coffee"
|
||||
>Go to Structables</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M140,180a12,12,0,1,1-12-12A12,12,0,0,1,140,180ZM128,72c-22.06,0-40,16.15-40,36v4a8,8,0,0,0,16,0v-4c0-11,10.77-20,24-20s24,9,24,20-10.77,20-24,20a8,8,0,0,0-8,8v8a8,8,0,0,0,16,0v-.72c18.24-3.35,32-17.9,32-35.28C168,88.15,150.06,72,128,72Zm104,56A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Quetre</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Quetre is a privacy-friendly alternative front-end to Quora. It allows you to browse Quora without being tracked or having to log in.
|
||||
</p>
|
||||
|
||||
<div class="dropdown">
|
||||
<div class="btn btn-primary shadow">
|
||||
<a class="main-link" href="https://quetre.private.coffee">
|
||||
Go to Quetre
|
||||
</a>
|
||||
<div class="dropdown-toggle-area">▼</div>
|
||||
</div>
|
||||
<div class="dropdown-content">
|
||||
|
||||
<a href="http://quetre.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion">Tor</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M208,56H180.28L166.65,35.56A8,8,0,0,0,160,32H96a8,8,0,0,0-6.65,3.56L75.71,56H48A24,24,0,0,0,24,80V192a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V80A24,24,0,0,0,208,56Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H80a8,8,0,0,0,6.66-3.56L100.28,48h55.43l13.63,20.44A8,8,0,0,0,176,72h32a8,8,0,0,1,8,8ZM128,88a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,88Zm0,72a28,28,0,1,1,28-28A28,28,0,0,1,128,160Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Priviblur</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Priviblur is a privacy-friendly alternative front-end to Tumblr. It allows you to browse Tumblr without being tracked.
|
||||
</p>
|
||||
|
||||
<div class="dropdown">
|
||||
<div class="btn btn-primary shadow">
|
||||
<a class="main-link" href="https://priviblur.private.coffee">
|
||||
Go to Priviblur
|
||||
</a>
|
||||
<div class="dropdown-toggle-area">▼</div>
|
||||
</div>
|
||||
<div class="dropdown-content">
|
||||
|
||||
<a href="http://priviblur.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion">Tor</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M231.65,194.55,198.46,36.75a16,16,0,0,0-19-12.39L132.65,34.42a16.08,16.08,0,0,0-12.3,19l33.19,157.8A16,16,0,0,0,169.16,224a16.25,16.25,0,0,0,3.38-.36l46.81-10.06A16.09,16.09,0,0,0,231.65,194.55ZM136,50.15c0-.06,0-.09,0-.09l46.8-10,3.33,15.87L139.33,66Zm6.62,31.47,46.82-10.05,3.34,15.9L146,97.53Zm6.64,31.57,46.82-10.06,13.3,63.24-46.82,10.06ZM216,197.94l-46.8,10-3.33-15.87L212.67,182,216,197.85C216,197.91,216,197.94,216,197.94ZM104,32H56A16,16,0,0,0,40,48V208a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V48A16,16,0,0,0,104,32ZM56,48h48V64H56Zm0,32h48v96H56Zm48,128H56V192h48v16Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">BiblioReads</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
BiblioReads is a privacy-friendly alternative front-end to Goodreads. It allows you to browse Goodreads without being tracked.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://biblioreads.private.coffee"
|
||||
>Go to BiblioReads</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M247.15,212.42l-56-112a8,8,0,0,0-14.31,0l-21.71,43.43A88,88,0,0,1,108,126.93,103.65,103.65,0,0,0,135.69,64H160a8,8,0,0,0,0-16H104V32a8,8,0,0,0-16,0V48H32a8,8,0,0,0,0,16h87.63A87.76,87.76,0,0,1,96,116.35a87.74,87.74,0,0,1-19-31,8,8,0,1,0-15.08,5.34A103.63,103.63,0,0,0,84,127a87.55,87.55,0,0,1-52,17,8,8,0,0,0,0,16,103.46,103.46,0,0,0,64-22.08,104.18,104.18,0,0,0,51.44,21.31l-26.6,53.19a8,8,0,0,0,14.31,7.16L148.94,192h70.11l13.79,27.58A8,8,0,0,0,240,224a8,8,0,0,0,7.15-11.58ZM156.94,176,184,121.89,211.05,176Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">LibreTranslate</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
LibreTranslate is a self-hosted translation service powered by Argos Translate. It allows you to translate text between many languages.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://translate.private.coffee"
|
||||
>Go to LibreTranslate</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M216,72H180.92c.39-.33.79-.65,1.17-1A29.53,29.53,0,0,0,192,49.57,32.62,32.62,0,0,0,158.44,16,29.53,29.53,0,0,0,137,25.91a54.94,54.94,0,0,0-9,14.48,54.94,54.94,0,0,0-9-14.48A29.53,29.53,0,0,0,97.56,16,32.62,32.62,0,0,0,64,49.57,29.53,29.53,0,0,0,73.91,71c.38.33.78.65,1.17,1H40A16,16,0,0,0,24,88v32a16,16,0,0,0,16,16v64a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V136a16,16,0,0,0,16-16V88A16,16,0,0,0,216,72ZM149,36.51a13.69,13.69,0,0,1,10-4.5h.49A16.62,16.62,0,0,1,176,49.08a13.69,13.69,0,0,1-4.5,10c-9.49,8.4-25.24,11.36-35,12.4C137.7,60.89,141,45.5,149,36.51Zm-64.09.36A16.63,16.63,0,0,1,96.59,32h.49a13.69,13.69,0,0,1,10,4.5c8.39,9.48,11.35,25.2,12.39,34.92-9.72-1-25.44-4-34.92-12.39a13.69,13.69,0,0,1-4.5-10A16.6,16.6,0,0,1,84.87,36.87ZM40,88h80v32H40Zm16,48h64v64H56Zm144,64H136V136h64Zm16-80H136V88h80v32Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">wishthis</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
wishthis is a service for creating wishlists. You can use it to create wishlists for yourself, or to share them with others.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://wishthis.private.coffee"
|
||||
>Go to wishthis</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M208,32H160a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32Zm0,176H160V176h24a8,8,0,0,0,0-16H160V136h24a8,8,0,0,0,0-16H160V96h24a8,8,0,0,0,0-16H160V48h48V208ZM77.66,26.34a8,8,0,0,0-11.32,0l-32,32A8,8,0,0,0,32,64V208a16,16,0,0,0,16,16H96a16,16,0,0,0,16-16V64a8,8,0,0,0-2.34-5.66ZM48,176V80H64v96ZM80,80H96v96H80ZM72,43.31,92.69,64H51.31ZM48,208V192H96v16Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Penpot</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Penpot is an open-source design and prototyping platform. It allows you to create designs and prototypes, and to collaborate with others.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://penpot.private.coffee"
|
||||
>Go to Penpot</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M240,88.23a54.43,54.43,0,0,1-16,37L189.25,160a54.27,54.27,0,0,1-38.63,16h-.05A54.63,54.63,0,0,1,96,119.84a8,8,0,0,1,16,.45A38.62,38.62,0,0,0,150.58,160h0a38.39,38.39,0,0,0,27.31-11.31l34.75-34.75a38.63,38.63,0,0,0-54.63-54.63l-11,11A8,8,0,0,1,135.7,59l11-11A54.65,54.65,0,0,1,224,48,54.86,54.86,0,0,1,240,88.23ZM109,185.66l-11,11A38.41,38.41,0,0,1,70.6,208h0a38.63,38.63,0,0,1-27.29-65.94L78,107.31A38.63,38.63,0,0,1,144,135.71a8,8,0,0,0,16,.45A54.86,54.86,0,0,0,144,96a54.65,54.65,0,0,0-77.27,0L32,130.75A54.62,54.62,0,0,0,70.56,224h0a54.28,54.28,0,0,0,38.64-16l11-11A8,8,0,0,0,109,185.66Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">YOURLS</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Use our URL shortener at pcof.fi to turn long, complicated URLs into something more handy.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://pcof.fi"
|
||||
>Go to pcof.fi</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM72,48v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80H48V48ZM208,208H48V96H208V208Zm-96-88v64a8,8,0,0,1-16,0V132.94l-4.42,2.22a8,8,0,0,1-7.16-14.32l16-8A8,8,0,0,1,112,120Zm59.16,30.45L152,176h16a8,8,0,0,1,0,16H136a8,8,0,0,1-6.4-12.8l28.78-38.37A8,8,0,1,0,145.07,132a8,8,0,1,1-13.85-8A24,24,0,0,1,176,136,23.76,23.76,0,0,1,171.16,150.45Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Rallly</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Rallly is a free collaborative scheduling service. It allows you to create polls and vote on them, similar to Doodle. Pro features are enabled for free after signing in.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://rallly.private.coffee"
|
||||
>Go to Rallly</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">LibreY</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
LibreY is an open-source, privacy-friendly metasearch engine. It allows you to search for web, image, video, torrents, and more, and it can also search onion sites.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://librey.private.coffee"
|
||||
>Go to LibreY</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M223.45,40.07a8,8,0,0,0-7.52-7.52C139.8,28.08,78.82,51,52.82,94a87.09,87.09,0,0,0-12.76,49c.57,15.92,5.21,32,13.79,47.85l-19.51,19.5a8,8,0,0,0,11.32,11.32l19.5-19.51C81,210.73,97.09,215.37,113,215.94q1.67.06,3.33.06A86.93,86.93,0,0,0,162,203.18C205,177.18,227.93,116.21,223.45,40.07ZM153.75,189.5c-22.75,13.78-49.68,14-76.71.77l88.63-88.62a8,8,0,0,0-11.32-11.32L65.73,179c-13.19-27-13-54,.77-76.71,22.09-36.47,74.6-56.44,141.31-54.06C210.2,114.89,190.22,167.41,153.75,189.5Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Overleaf</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Overleaf is an online LaTeX editor for writing and sharing documents. It allows you to write documents in LaTeX, and to collaborate with others.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://overleaf.private.coffee"
|
||||
>Go to Overleaf</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">GotHub</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Gothub is an alternative GitHub interface that respects your privacy. It is currently in alpha, but you can browse and download repositories, and you can also clone them using git+https (although the text on the main page would disagree).
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://gothub.private.coffee"
|
||||
>Go to GotHub</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M216,40H72A16,16,0,0,0,56,56V72H40A16,16,0,0,0,24,88V200a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V184h16a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM72,56H216v62.75l-10.07-10.06a16,16,0,0,0-22.63,0l-20,20-44-44a16,16,0,0,0-22.62,0L72,109.37ZM184,200H40V88H56v80a16,16,0,0,0,16,16H184Zm32-32H72V132l36-36,49.66,49.66a8,8,0,0,0,11.31,0L194.63,120,216,141.38V168ZM160,84a12,12,0,1,1,12,12A12,12,0,0,1,160,84Z"></path></svg>
|
||||
</div>
|
||||
|
||||
<h5 class="fw-bold card-title">Binternet</h5>
|
||||
<p class="text-muted card-text mb-4">
|
||||
Binternet is a privacy-friendly alternative front-end to Pinterest. It allows you to browse Pinterest without being tracked.
|
||||
</p>
|
||||
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="https://binternet.private.coffee"
|
||||
>Go to Binternet</a
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</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 or donate</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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M224,48H32a8,8,0,0,0-8,8V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A8,8,0,0,0,224,48Zm-96,85.15L52.57,64H203.43ZM98.71,128,40,181.81V74.19Zm11.84,10.85,12,11.05a8,8,0,0,0,10.82,0l12-11.05,58,53.15H52.57ZM157.29,128,216,74.18V181.82Z"></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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M72,216a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8H64a8,8,0,0,1,0,16H48V208H64A8,8,0,0,1,72,216ZM216,32H192a8,8,0,0,0,0,16h16V208H192a8,8,0,0,0,0,16h24a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32Zm-32,88a32,32,0,0,0-56-21.13,31.93,31.93,0,0,0-40.71-6.15A8,8,0,0,0,72,96v64a8,8,0,0,0,16,0V120a16,16,0,0,1,32,0v40a8,8,0,0,0,16,0V120a16,16,0,0,1,32,0v40a8,8,0,0,0,16,0Z"></path></svg>
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<h6 class="fw-bold mb-0">Matrix</h6>
|
||||
<p class="text-muted mb-0">
|
||||
<a
|
||||
href="https://matrix.pcof.fi/#/#private.coffee:private.coffee"
|
||||
>#private.coffee:private.coffee</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<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 Notice</a></li>
|
||||
<li><a href="/terms.html">Terms of Service</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span
|
||||
><span>Private.coffee</span>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Private.coffee is a privacy-focused non-profit association, dedicated
|
||||
to supporting privacy and digital sovereignty.
|
||||
</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>
|
||||
<p class="mb-0"><svg xmlns="http://www.w3.org/2000/svg" width="94" height="20" role="img" aria-label="LGBTIQ+">
|
||||
<title>LGBTIQ+</title>
|
||||
<rect rx="3" width="94" height="20" fill="#555"/>
|
||||
<rect x="37" width="57" height="20" fill="#e05d44"/>
|
||||
<rect x="46.5" width="47.5" height="20" fill="#fecc00"/>
|
||||
<rect x="56" width="37" height="20" fill="#61c354"/>
|
||||
<rect x="65.5" width="27" height="20" fill="#007ec6"/>
|
||||
<rect x="75" width="17" height="20" fill="#744ca1"/>
|
||||
<rect x="84.5" width="9.5" height="20" rx="3" ry="3" fill="#8b00ff"/>
|
||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
||||
<text x="18.5" y="15" fill="#fff">LGBTIQ+</text>
|
||||
</g>
|
||||
</svg></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
146
legal.html
Normal file
146
legal.html
Normal file
|
@ -0,0 +1,146 @@
|
|||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en">
|
||||
<!-- 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 -->
|
||||
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
|
||||
/>
|
||||
<title>Legal Notice - 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-md py-3 navbar-light"
|
||||
id="mainNav"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row d-lg-flex align-items-lg-center">
|
||||
<div class="col p-0">
|
||||
<a href="/"
|
||||
><img src="assets/img/logo-inv_grad.svg" style="height: 60px"
|
||||
/></a>
|
||||
</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 class="that-br" /><span class="ps-2 slogan"
|
||||
>Empowering Privacy with Open Source</span
|
||||
>
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="navbar" 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 navbar-btn" role="button" href="/membership.html">JOIN & SUPPORT</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<section>
|
||||
<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">
|
||||
<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 ‐ Verein zur Förderung von Privatsphäre und
|
||||
digitaler Souveränität<br />
|
||||
c/o Klaus-Uwe Mitterer<br />
|
||||
Gartengasse 22/7/3<br />
|
||||
8010 Graz<br />
|
||||
Austria<br />
|
||||
</address>
|
||||
<p>Central Register of Associations (ZVR) Number: 1758485319</p>
|
||||
<p>
|
||||
Email:
|
||||
<a href="mailto:support@private.coffee">support@private.coffee</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<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 Notice</a></li>
|
||||
<li><a href="/terms.html">Terms of Service</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span
|
||||
><span>Private.coffee</span>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Private.coffee is a privacy-focused non-profit association, dedicated
|
||||
to supporting privacy and digital sovereignty.
|
||||
</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>
|
||||
<p class="mb-0"><svg xmlns="http://www.w3.org/2000/svg" width="94" height="20" role="img" aria-label="LGBTIQ+">
|
||||
<title>LGBTIQ+</title>
|
||||
<rect rx="3" width="94" height="20" fill="#555"/>
|
||||
<rect x="37" width="57" height="20" fill="#e05d44"/>
|
||||
<rect x="46.5" width="47.5" height="20" fill="#fecc00"/>
|
||||
<rect x="56" width="37" height="20" fill="#61c354"/>
|
||||
<rect x="65.5" width="27" height="20" fill="#007ec6"/>
|
||||
<rect x="75" width="17" height="20" fill="#744ca1"/>
|
||||
<rect x="84.5" width="9.5" height="20" rx="3" ry="3" fill="#8b00ff"/>
|
||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
||||
<text x="18.5" y="15" fill="#fff">LGBTIQ+</text>
|
||||
</g>
|
||||
</svg></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
147
main.py
147
main.py
|
@ -1,147 +0,0 @@
|
|||
from jinja2 import Environment, FileSystemLoader, TemplateNotFound
|
||||
import json
|
||||
import pathlib
|
||||
import datetime
|
||||
import shutil
|
||||
|
||||
from argparse import ArgumentParser
|
||||
|
||||
from helpers.finances import (
|
||||
generate_transparency_table,
|
||||
get_transparency_data,
|
||||
get_latest_month,
|
||||
)
|
||||
|
||||
# Configure Jinja2 environment
|
||||
env = Environment(loader=FileSystemLoader("templates"))
|
||||
|
||||
# Set up the output directory for static files
|
||||
output_dir = pathlib.Path("build")
|
||||
output_dir.mkdir(exist_ok=True, parents=True)
|
||||
|
||||
|
||||
# Define the icon filter
|
||||
def icon(icon_name):
|
||||
icon_path = pathlib.Path("assets") / f"dist/icons/{icon_name}.svg"
|
||||
try:
|
||||
with open(icon_path, "r", encoding="utf-8") as file:
|
||||
file_content = file.read()
|
||||
except FileNotFoundError:
|
||||
file_content = ""
|
||||
return file_content
|
||||
|
||||
|
||||
env.filters["icon"] = icon
|
||||
|
||||
|
||||
# Filter for rendering a month name from a number
|
||||
def month_name(month_number):
|
||||
return datetime.date(1900, int(month_number), 1).strftime("%B")
|
||||
|
||||
|
||||
env.filters["month_name"] = month_name
|
||||
|
||||
|
||||
def render_template_to_file(template_name, output_name, **kwargs):
|
||||
try:
|
||||
template = env.get_template(template_name)
|
||||
output_path = output_dir / output_name
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
f.write(template.render(**kwargs))
|
||||
except TemplateNotFound:
|
||||
print(f"Template {template_name} not found.")
|
||||
|
||||
|
||||
def generate_static_site(development_mode=False):
|
||||
# Common context
|
||||
kwargs = {}
|
||||
if development_mode:
|
||||
kwargs.update(
|
||||
{
|
||||
"warning": env.get_template("prod-warning.html").render(),
|
||||
}
|
||||
)
|
||||
|
||||
# Load services data
|
||||
services = json.loads(
|
||||
(pathlib.Path(__file__).parent / "data" / "services.json").read_text()
|
||||
)
|
||||
|
||||
# Load finances data
|
||||
finances = json.loads(
|
||||
(pathlib.Path(__file__).parent / "data" / "finances.json").read_text()
|
||||
)
|
||||
|
||||
# Iterate over all templates in the templates directory
|
||||
templates_path = pathlib.Path("templates")
|
||||
for template_file in templates_path.glob("*.html"):
|
||||
template_name = template_file.stem
|
||||
context = kwargs.copy()
|
||||
|
||||
if template_name in ["index", "simple"]:
|
||||
context.update({"services": services})
|
||||
|
||||
if template_name == "membership":
|
||||
allow_current = development_mode
|
||||
finances_month, finances_year = get_latest_month(finances, allow_current)
|
||||
finances_period = datetime.date(finances_year, finances_month, 1)
|
||||
finances_period_str = finances_period.strftime("%B %Y")
|
||||
finances_table = generate_transparency_table(
|
||||
get_transparency_data(
|
||||
finances, finances_year, finances_month, allow_current
|
||||
)
|
||||
)
|
||||
context.update(
|
||||
{
|
||||
"finances": finances_table,
|
||||
"finances_period": finances_period_str,
|
||||
}
|
||||
)
|
||||
|
||||
if template_name == "transparency":
|
||||
finance_data = {}
|
||||
for year in sorted(finances.keys(), reverse=True):
|
||||
for month in sorted(finances[year].keys(), reverse=True):
|
||||
if year not in finance_data:
|
||||
finance_data[year] = {}
|
||||
finance_data[year][month] = generate_transparency_table(
|
||||
get_transparency_data(finances, year, month, True)
|
||||
)
|
||||
context.update({"finances": finance_data})
|
||||
|
||||
render_template_to_file(
|
||||
f"{template_name}.html", f"{template_name}.html", **context
|
||||
)
|
||||
|
||||
# Generate metrics
|
||||
balances = get_transparency_data(finances, allow_current=True)["end_balance"]
|
||||
|
||||
response = (
|
||||
"# HELP privatecoffee_balance The balance of the private.coffee account\n"
|
||||
)
|
||||
response += "# TYPE privatecoffee_balance gauge\n"
|
||||
|
||||
for currency, balance in balances.items():
|
||||
response += f'privatecoffee_balance{{currency="{currency}"}} {balance}\n'
|
||||
|
||||
metrics_path = output_dir / "metrics.txt"
|
||||
with open(metrics_path, "w", encoding="utf-8") as f:
|
||||
f.write(response)
|
||||
|
||||
# Copy static assets
|
||||
for folder in ["assets", "data"]:
|
||||
src = pathlib.Path(folder)
|
||||
dst = output_dir / folder
|
||||
if dst.exists():
|
||||
shutil.rmtree(dst)
|
||||
shutil.copytree(src, dst)
|
||||
|
||||
print("Static site generated successfully.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = ArgumentParser(description="Generate the private.coffee static site.")
|
||||
parser.add_argument("--dev", action="store_true", help="Enable development mode")
|
||||
args = parser.parse_args()
|
||||
|
||||
generate_static_site(development_mode=args.dev)
|
241
membership.html
Normal file
241
membership.html
Normal file
|
@ -0,0 +1,241 @@
|
|||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en">
|
||||
<!-- 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 -->
|
||||
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
|
||||
/>
|
||||
<title>Membership / Donations - 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-md py-3 navbar-light"
|
||||
id="mainNav"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row d-lg-flex align-items-lg-center">
|
||||
<div class="col p-0">
|
||||
<a href="/"
|
||||
><img src="assets/img/logo-inv_grad.svg" style="height: 60px"
|
||||
/></a>
|
||||
</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 class="that-br" /><span class="ps-2 slogan"
|
||||
>Empowering Privacy with Open Source</span
|
||||
>
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="navbar" 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 navbar-btn" role="button" href="/membership.html">JOIN & SUPPORT</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="container my-5">
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="special-header fancy-text-primary">Membership/Donations</h1>
|
||||
<p class="lead">
|
||||
Private.coffee is a non-profit organization dedicated to supporting
|
||||
privacy and digital sovereignty. We fund our activities and running
|
||||
infrastructure costs through membership fees. Donations allow us to expand
|
||||
our services and reach more people.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Membership</h5>
|
||||
<p class="card-text">
|
||||
Membership fees help cover the costs of our day-to-day activities,
|
||||
server infrastructure, domain names, and other running operating
|
||||
expenses. This allows us to provide services to our members and the
|
||||
public.
|
||||
</p>
|
||||
<p class="card-text">
|
||||
Membership starts at € 5 / month!
|
||||
</p>
|
||||
<a href="https://pcof.fi/join" class="btn btn-primary">
|
||||
Join us now!
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-4">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Bank Donations</h5>
|
||||
<p class="card-text">
|
||||
Even if you're not a member, you can still support us by making a
|
||||
direct donation to our bank account. Your donation will be used to
|
||||
fund our activities and expand our services.
|
||||
</p>
|
||||
<p class="card-text"><b>Account holder:</b> Private.coffee</p>
|
||||
<p class="card-text"><b>IBAN:</b> AT35 2081 5000 4554 0812</p>
|
||||
<p class="card-text"><b>BIC:</b> STSPAT2GXXX</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-4">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Crypto Donations</h5>
|
||||
<p class="card-text">
|
||||
While our expenses are generally in fiat currency, we accept
|
||||
donations in cryptocurrencies, too.
|
||||
</p>
|
||||
<p class="card-text">
|
||||
<b>Bitcoin (BTC):</b>
|
||||
<code>bc1qnu7r5sed4afacfpgx5za8hsyhaj4rs45dpm26k</code>
|
||||
</p>
|
||||
<p class="card-text">
|
||||
<b>Monero (XMR):</b>
|
||||
<code
|
||||
>487Ny4iBk2pKGJwjyYrumFD8xFmrS6jCSXNA8e5EvVJ49GyS54CRDVz514MBnXgNT1EioKYiagHs33sLzUAFj8i3Pwg3AMS</code
|
||||
>
|
||||
</p>
|
||||
<p class="card-text">
|
||||
<b>Ethereum (ETH):</b> <code>Coming soon™</code>
|
||||
</p>
|
||||
<p class="card-text">
|
||||
If your client supports OpenAlias, you can just send your donation
|
||||
to <code>private.coffee</code>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Transparency Report for June 2024</h5>
|
||||
<p class="card-text">
|
||||
We believe in transparency and accountability. Below is a summary of our
|
||||
income and expenses for the last month, so you can see how your
|
||||
donations are being used.
|
||||
</p>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-transparency">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th scope="col">Category</th>
|
||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Account Balance (start of month)</td><td>+ €72.29</td><td>+ 0.000434000 BTC</td><td>+ 0.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €382.42</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €317.62</td><td></td><td></td></tr><tr><td>Bank Fees</td><td>- €49.05</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €382.42</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €366.67</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €88.04</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 0.447661806 XMR</b></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="card-text">
|
||||
Want to know how we got here? Check out all of our
|
||||
<a href="/transparency.html">transparency reports</a> for more
|
||||
information.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5>Central Register of Associations (ZVR) Number: 1758485319</h5>
|
||||
<p>
|
||||
Our statutes can be found in our Git
|
||||
<a href="https://git.private.coffee/PrivateCoffee/statuten"
|
||||
>in German (legally binding)</a
|
||||
>
|
||||
and
|
||||
<a
|
||||
href="https://git.private.coffee/PrivateCoffee/Statuten/src/branch/english"
|
||||
>in English</a
|
||||
>.
|
||||
</p>
|
||||
<p class="contact-info" id="contact-info">
|
||||
Interested in joining the association? Reach out via
|
||||
<a href="mailto:support@private.coffee">email</a> or
|
||||
<a href="https://matrix.pcof.fi/#/#private.coffee:private.coffee"
|
||||
>Matrix</a
|
||||
>
|
||||
for more information.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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 Notice</a></li>
|
||||
<li><a href="/terms.html">Terms of Service</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span
|
||||
><span>Private.coffee</span>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Private.coffee is a privacy-focused non-profit association, dedicated
|
||||
to supporting privacy and digital sovereignty.
|
||||
</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>
|
||||
<p class="mb-0"><svg xmlns="http://www.w3.org/2000/svg" width="94" height="20" role="img" aria-label="LGBTIQ+">
|
||||
<title>LGBTIQ+</title>
|
||||
<rect rx="3" width="94" height="20" fill="#555"/>
|
||||
<rect x="37" width="57" height="20" fill="#e05d44"/>
|
||||
<rect x="46.5" width="47.5" height="20" fill="#fecc00"/>
|
||||
<rect x="56" width="37" height="20" fill="#61c354"/>
|
||||
<rect x="65.5" width="27" height="20" fill="#007ec6"/>
|
||||
<rect x="75" width="17" height="20" fill="#744ca1"/>
|
||||
<rect x="84.5" width="9.5" height="20" rx="3" ry="3" fill="#8b00ff"/>
|
||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
||||
<text x="18.5" y="15" fill="#fff">LGBTIQ+</text>
|
||||
</g>
|
||||
</svg></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
5
metrics.txt
Normal file
5
metrics.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
# HELP privatecoffee_balance The balance of the private.coffee account
|
||||
# TYPE privatecoffee_balance gauge
|
||||
privatecoffee_balance{currency="EUR"} 450.32
|
||||
privatecoffee_balance{currency="BTC"} 0.000434
|
||||
privatecoffee_balance{currency="XMR"} 0.447661805527
|
|
@ -1,5 +1,58 @@
|
|||
{% extends "base.html" %} {% block title %}Privacy Policy{% endblock %}
|
||||
{% block content %}
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en">
|
||||
<!-- 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 -->
|
||||
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
|
||||
/>
|
||||
<title>Privacy Policy - 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-md py-3 navbar-light"
|
||||
id="mainNav"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row d-lg-flex align-items-lg-center">
|
||||
<div class="col p-0">
|
||||
<a href="/"
|
||||
><img src="assets/img/logo-inv_grad.svg" style="height: 60px"
|
||||
/></a>
|
||||
</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 class="that-br" /><span class="ps-2 slogan"
|
||||
>Empowering Privacy with Open Source</span
|
||||
>
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="navbar" 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 navbar-btn" role="button" href="/membership.html">JOIN & SUPPORT</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="container">
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="special-header fancy-text-primary">Privacy Policy</h1>
|
||||
|
@ -184,4 +237,57 @@
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
<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 Notice</a></li>
|
||||
<li><a href="/terms.html">Terms of Service</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span
|
||||
><span>Private.coffee</span>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Private.coffee is a privacy-focused non-profit association, dedicated
|
||||
to supporting privacy and digital sovereignty.
|
||||
</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>
|
||||
<p class="mb-0"><svg xmlns="http://www.w3.org/2000/svg" width="94" height="20" role="img" aria-label="LGBTIQ+">
|
||||
<title>LGBTIQ+</title>
|
||||
<rect rx="3" width="94" height="20" fill="#555"/>
|
||||
<rect x="37" width="57" height="20" fill="#e05d44"/>
|
||||
<rect x="46.5" width="47.5" height="20" fill="#fecc00"/>
|
||||
<rect x="56" width="37" height="20" fill="#61c354"/>
|
||||
<rect x="65.5" width="27" height="20" fill="#007ec6"/>
|
||||
<rect x="75" width="17" height="20" fill="#744ca1"/>
|
||||
<rect x="84.5" width="9.5" height="20" rx="3" ry="3" fill="#8b00ff"/>
|
||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
||||
<text x="18.5" y="15" fill="#fff">LGBTIQ+</text>
|
||||
</g>
|
||||
</svg></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
|
@ -1 +0,0 @@
|
|||
jinja2
|
126
simple.html
Normal file
126
simple.html
Normal file
|
@ -0,0 +1,126 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Private.coffee</title>
|
||||
</head>
|
||||
<body>
|
||||
<div style="font-family: Arial, sans-serif; background-color: #f2f2f2; color: #333; line-height: 1.6; padding: 20px; max-width: 600px; margin: auto;">
|
||||
<h2 style="color: #333;">Welcome to Private.coffee</h2>
|
||||
<p>Thanks for using our Element instance! Now, why don't you join our rooms?</p>
|
||||
<ul style="list-style: none; padding: 0;">
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://element.private.coffee/#/#coffeespace:private.coffee">#coffeespace:private.coffee</a> - The Private.coffee Space, containing all rooms</li>
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://element.private.coffee/#/#private.coffee:private.coffee">#private.coffee:private.coffee</a> - General support for our services</li>
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://element.private.coffee/#/#matrix:private.coffee">#matrix:private.coffee</a> - Support for our Matrix server</li>
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://element.private.coffee/#/#coffeebreak:private.coffee">#coffeebreak:private.coffee</a> - ☕ Coffee Break ☕ - our off-topic room</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<p>Private.coffee operates a collection of services that respect your privacy, here are some others:</p>
|
||||
<ul style="list-style: none; padding: 0;">
|
||||
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://cryptpad.private.coffee">CryptPad</a> - Private, encrypted, real-time collaborative editor.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://piped.private.coffee">Piped / Invidious</a> - Watch YouTube videos without Google tracking.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://transfer.coffee">Transfer.coffee</a> - Transfer files securely using peer-to-peer connections.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://myip.coffee">MyIP.Coffee</a> - Check your IP address.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://cuddly.space">Mastodon</a> - Mastodon is a decentralized social network.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://git.private.coffee">Forgejo</a> - Forgejo is our in-house Git forge.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://bbb.private.coffee">BigBlueButton</a> - BigBlueButton is an open-source video conferencing system.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://hedgedoc.private.coffee">HedgeDoc</a> - HedgeDoc is an open-source collaborative markdown editor.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://freshrss.private.coffee">FreshRSS</a> - FreshRSS is a RSS feed reader.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://redlib.private.coffee">redlib</a> - redlib is a privacy-friendly alternative front-end to Reddit.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://alltube.private.coffee">AllTube</a> - Download videos from YouTube, Vimeo, and more.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://structables.private.coffee">Structables</a> - Browse Instructables without being tracked.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://quetre.private.coffee">Quetre</a> - Quetre is a privacy-friendly alternative front-end to Quora.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://priviblur.private.coffee">Priviblur</a> - Priviblur is a privacy-friendly alternative front-end to Tumblr.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://biblioreads.private.coffee">BiblioReads</a> - BiblioReads is a privacy-friendly alternative front-end to Goodreads.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://translate.private.coffee">LibreTranslate</a> - LibreTranslate is a self-hosted translation service powered by Argos Translate.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://wishthis.private.coffee">wishthis</a> - wishthis is a service for creating wishlists.</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://penpot.private.coffee">Penpot</a> - Penpot is an open-source design and prototyping platform.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://pcof.fi">YOURLS</a> - URL shortener for creating handy links.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://rallly.private.coffee">Rallly</a> - Rallly is a free collaborative scheduling service for voting and polls.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://librey.private.coffee">LibreY</a> - Privacy-friendly metasearch engine.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://overleaf.private.coffee">Overleaf</a> - Overleaf is an online LaTeX editor for writing and sharing documents.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://gothub.private.coffee">GotHub</a> - Alternative GitHub interface that respects privacy.</li>
|
||||
|
||||
|
||||
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://binternet.private.coffee">Binternet</a> - Binternet is a privacy-friendly alternative front-end to Pinterest.</li>
|
||||
|
||||
|
||||
</ul>
|
||||
<p>For hosting inquiries for privacy-related, social, or wholesome projects, <a href="mailto:support@private.coffee" style="color: #1a5dab; text-decoration: none;">get in touch</a>!</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,186 +0,0 @@
|
|||
{% extends "base.html" %} {% block title %}Home{% endblock %} {% block content
|
||||
%}
|
||||
<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" 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 row-cols-lg-3 mx-auto"
|
||||
style="max-width: 1200px"
|
||||
>
|
||||
{% for service in services.services %} {% if not
|
||||
service.exclude_from_index %}
|
||||
<div class="col mb-5">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body px-4 py-5 px-md-5">
|
||||
{% if service.icon %}
|
||||
<div
|
||||
class="bs-icon-lg d-flex justify-content-center align-items-center mb-3 bs-icon"
|
||||
style="top: 1rem; right: 1rem; position: absolute"
|
||||
>
|
||||
{{ service.icon | icon | safe }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<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 %} {% if link.alternatives %}
|
||||
<div class="dropdown">
|
||||
<div class="btn btn-primary shadow">
|
||||
<a class="main-link" href="{{ link.url }}">
|
||||
{{ link.name }}
|
||||
</a>
|
||||
<div class="dropdown-toggle-area">▼</div>
|
||||
</div>
|
||||
<div class="dropdown-content">
|
||||
{% for alternative in link.alternatives %}
|
||||
<a href="{{ alternative.url }}">{{ alternative.name }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<a
|
||||
class="btn btn-primary shadow w-100 text-center"
|
||||
href="{{ link.url }}"
|
||||
>{{ link.name }}</a
|
||||
>
|
||||
{% endif %} {% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %} {% endfor %}
|
||||
</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 or donate</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"
|
||||
>
|
||||
{{ "envelope" | icon | safe }}
|
||||
</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"
|
||||
>
|
||||
{{ "matrix-logo" | icon | safe }}
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<h6 class="fw-bold mb-0">Matrix</h6>
|
||||
<p class="text-muted mb-0">
|
||||
<a
|
||||
href="https://matrix.pcof.fi/#/#private.coffee:private.coffee"
|
||||
>#private.coffee:private.coffee</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
|
@ -1,41 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
{% block title %}Legal Notice{% endblock %}
|
||||
{% block content %}
|
||||
<section>
|
||||
<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">
|
||||
<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 ‐ Verein zur Förderung von Privatsphäre und
|
||||
digitaler Souveränität<br />
|
||||
c/o Klaus-Uwe Mitterer<br />
|
||||
Gartengasse 22/7/3<br />
|
||||
8010 Graz<br />
|
||||
Austria<br />
|
||||
</address>
|
||||
<p>Central Register of Associations (ZVR) Number: 1758485319</p>
|
||||
<p>
|
||||
Email:
|
||||
<a href="mailto:support@private.coffee">support@private.coffee</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
|
@ -1,123 +0,0 @@
|
|||
{% extends "base.html" %} {% block title %}Membership / Donations{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="special-header fancy-text-primary">Membership/Donations</h1>
|
||||
<p class="lead">
|
||||
Private.coffee is a non-profit organization dedicated to supporting
|
||||
privacy and digital sovereignty. We fund our activities and running
|
||||
infrastructure costs through membership fees. Donations allow us to expand
|
||||
our services and reach more people.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Membership</h5>
|
||||
<p class="card-text">
|
||||
Membership fees help cover the costs of our day-to-day activities,
|
||||
server infrastructure, domain names, and other running operating
|
||||
expenses. This allows us to provide services to our members and the
|
||||
public.
|
||||
</p>
|
||||
<p class="card-text">
|
||||
Membership starts at € 5 / month!
|
||||
</p>
|
||||
<a href="https://pcof.fi/join" class="btn btn-primary">
|
||||
Join us now!
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-4">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Bank Donations</h5>
|
||||
<p class="card-text">
|
||||
Even if you're not a member, you can still support us by making a
|
||||
direct donation to our bank account. Your donation will be used to
|
||||
fund our activities and expand our services.
|
||||
</p>
|
||||
<p class="card-text"><b>Account holder:</b> Private.coffee</p>
|
||||
<p class="card-text"><b>IBAN:</b> AT35 2081 5000 4554 0812</p>
|
||||
<p class="card-text"><b>BIC:</b> STSPAT2GXXX</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-4">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Crypto Donations</h5>
|
||||
<p class="card-text">
|
||||
While our expenses are generally in fiat currency, we accept
|
||||
donations in cryptocurrencies, too.
|
||||
</p>
|
||||
<p class="card-text">
|
||||
<b>Bitcoin (BTC):</b>
|
||||
<code>bc1qnu7r5sed4afacfpgx5za8hsyhaj4rs45dpm26k</code>
|
||||
</p>
|
||||
<p class="card-text">
|
||||
<b>Monero (XMR):</b>
|
||||
<code
|
||||
>487Ny4iBk2pKGJwjyYrumFD8xFmrS6jCSXNA8e5EvVJ49GyS54CRDVz514MBnXgNT1EioKYiagHs33sLzUAFj8i3Pwg3AMS</code
|
||||
>
|
||||
</p>
|
||||
<p class="card-text">
|
||||
<b>Ethereum (ETH):</b> <code>Coming soon™</code>
|
||||
</p>
|
||||
<p class="card-text">
|
||||
If your client supports OpenAlias, you can just send your donation
|
||||
to <code>private.coffee</code>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Transparency Report for {{ finances_period }}</h5>
|
||||
<p class="card-text">
|
||||
We believe in transparency and accountability. Below is a summary of our
|
||||
income and expenses for the last month, so you can see how your
|
||||
donations are being used.
|
||||
</p>
|
||||
<div class="table-responsive">{{ finances|safe }}</div>
|
||||
<p class="card-text">
|
||||
Want to know how we got here? Check out all of our
|
||||
<a href="/transparency.html">transparency reports</a> for more
|
||||
information.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5>Central Register of Associations (ZVR) Number: 1758485319</h5>
|
||||
<p>
|
||||
Our statutes can be found in our Git
|
||||
<a href="https://git.private.coffee/PrivateCoffee/statuten"
|
||||
>in German (legally binding)</a
|
||||
>
|
||||
and
|
||||
<a
|
||||
href="https://git.private.coffee/PrivateCoffee/Statuten/src/branch/english"
|
||||
>in English</a
|
||||
>.
|
||||
</p>
|
||||
<p class="contact-info" id="contact-info">
|
||||
Interested in joining the association? Reach out via
|
||||
<a href="mailto:support@private.coffee">email</a> or
|
||||
<a href="https://matrix.pcof.fi/#/#private.coffee:private.coffee"
|
||||
>Matrix</a
|
||||
>
|
||||
for more information.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,30 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Private.coffee</title>
|
||||
</head>
|
||||
<body>
|
||||
<div style="font-family: Arial, sans-serif; background-color: #f2f2f2; color: #333; line-height: 1.6; padding: 20px; max-width: 600px; margin: auto;">
|
||||
<h2 style="color: #333;">Welcome to Private.coffee</h2>
|
||||
<p>Thanks for using our Element instance! Now, why don't you join our rooms?</p>
|
||||
<ul style="list-style: none; padding: 0;">
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://element.private.coffee/#/#coffeespace:private.coffee">#coffeespace:private.coffee</a> - The Private.coffee Space, containing all rooms</li>
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://element.private.coffee/#/#private.coffee:private.coffee">#private.coffee:private.coffee</a> - General support for our services</li>
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://element.private.coffee/#/#matrix:private.coffee">#matrix:private.coffee</a> - Support for our Matrix server</li>
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://element.private.coffee/#/#coffeebreak:private.coffee">#coffeebreak:private.coffee</a> - ☕ Coffee Break ☕ - our off-topic room</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<p>Private.coffee operates a collection of services that respect your privacy, here are some others:</p>
|
||||
<ul style="list-style: none; padding: 0;">
|
||||
{% for service in services.services %}
|
||||
{% if not service.exclude_from_simple %}
|
||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="{{ service.url }}">{{ service.name }}</a> - {{ service.short_description }}</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<p>For hosting inquiries for privacy-related, social, or wholesome projects, <a href="mailto:support@private.coffee" style="color: #1a5dab; text-decoration: none;">get in touch</a>!</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,25 +0,0 @@
|
|||
{% extends "base.html" %} {% block title %}Membership / Donations{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="special-header fancy-text-primary">Transparency</h1>
|
||||
<p class="lead">
|
||||
Private.coffee is funded by its members and donations. We believe in
|
||||
transparency and accountability. Below you can find financial reports for
|
||||
each month since our inception.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{% for year, year_data in finances.items() %}
|
||||
{% for month, month_data in year_data.items() %}
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Transparency Report for {{ month|month_name }} {{ year }}</h5>
|
||||
<div class="table-responsive">{{ month_data|safe }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,6 +1,58 @@
|
|||
{% extends "base.html" %}
|
||||
{% block title %}Terms of Service{% endblock %}
|
||||
{% block content %}
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en">
|
||||
<!-- 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 -->
|
||||
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
|
||||
/>
|
||||
<title>Terms of Service - 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-md py-3 navbar-light"
|
||||
id="mainNav"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row d-lg-flex align-items-lg-center">
|
||||
<div class="col p-0">
|
||||
<a href="/"
|
||||
><img src="assets/img/logo-inv_grad.svg" style="height: 60px"
|
||||
/></a>
|
||||
</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 class="that-br" /><span class="ps-2 slogan"
|
||||
>Empowering Privacy with Open Source</span
|
||||
>
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="navbar" 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 navbar-btn" role="button" href="/membership.html">JOIN & SUPPORT</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="container">
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="special-header fancy-text-primary">Terms of Service</h1>
|
||||
|
@ -152,4 +204,57 @@
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
<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 Notice</a></li>
|
||||
<li><a href="/terms.html">Terms of Service</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span
|
||||
><span>Private.coffee</span>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Private.coffee is a privacy-focused non-profit association, dedicated
|
||||
to supporting privacy and digital sovereignty.
|
||||
</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>
|
||||
<p class="mb-0"><svg xmlns="http://www.w3.org/2000/svg" width="94" height="20" role="img" aria-label="LGBTIQ+">
|
||||
<title>LGBTIQ+</title>
|
||||
<rect rx="3" width="94" height="20" fill="#555"/>
|
||||
<rect x="37" width="57" height="20" fill="#e05d44"/>
|
||||
<rect x="46.5" width="47.5" height="20" fill="#fecc00"/>
|
||||
<rect x="56" width="37" height="20" fill="#61c354"/>
|
||||
<rect x="65.5" width="27" height="20" fill="#007ec6"/>
|
||||
<rect x="75" width="17" height="20" fill="#744ca1"/>
|
||||
<rect x="84.5" width="9.5" height="20" rx="3" ry="3" fill="#8b00ff"/>
|
||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
||||
<text x="18.5" y="15" fill="#fff">LGBTIQ+</text>
|
||||
</g>
|
||||
</svg></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
200
transparency.html
Normal file
200
transparency.html
Normal file
|
@ -0,0 +1,200 @@
|
|||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en">
|
||||
<!-- 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 -->
|
||||
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
|
||||
/>
|
||||
<title>Membership / Donations - 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-md py-3 navbar-light"
|
||||
id="mainNav"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row d-lg-flex align-items-lg-center">
|
||||
<div class="col p-0">
|
||||
<a href="/"
|
||||
><img src="assets/img/logo-inv_grad.svg" style="height: 60px"
|
||||
/></a>
|
||||
</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 class="that-br" /><span class="ps-2 slogan"
|
||||
>Empowering Privacy with Open Source</span
|
||||
>
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="navbar" 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 navbar-btn" role="button" href="/membership.html">JOIN & SUPPORT</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="container my-5">
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="special-header fancy-text-primary">Transparency</h1>
|
||||
<p class="lead">
|
||||
Private.coffee is funded by its members and donations. We believe in
|
||||
transparency and accountability. Below you can find financial reports for
|
||||
each month since our inception.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Transparency Report for July 2024</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-transparency">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th scope="col">Category</th>
|
||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Account Balance (start of month)</td><td>+ €88.04</td><td>+ 0.000434000 BTC</td><td>+ 0.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €395.00</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €32.72</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €395.00</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €32.72</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €450.32</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 0.447661806 XMR</b></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Transparency Report for June 2024</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-transparency">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th scope="col">Category</th>
|
||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Account Balance (start of month)</td><td>+ €72.29</td><td>+ 0.000434000 BTC</td><td>+ 0.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €382.42</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €317.62</td><td></td><td></td></tr><tr><td>Bank Fees</td><td>- €49.05</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €382.42</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €366.67</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €88.04</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 0.447661806 XMR</b></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Transparency Report for May 2024</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-transparency">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th scope="col">Category</th>
|
||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Account Balance (start of month)</td><td>+ €112.33</td><td>0.000000000 BTC</td><td>0.000000000 XMR</td></tr><tr><td>Membership Fees</td><td>+ €390.00</td><td></td><td></td></tr><tr><td>Donations</td><td></td><td>+ 0.000434000 BTC</td><td>+ 0.447661806 XMR</td></tr><tr><td>Server Costs*</td><td>- €430.04</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €390.00</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 0.447661806 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €430.04</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €72.29</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 0.447661806 XMR</b></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><b>Notes:</b></p><ul><li>Server Costs: Includes setup costs and two monthly payments for new server</li></ul></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Transparency Report for April 2024</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-transparency">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th scope="col">Category</th>
|
||||
<th class="currency-col" scope="col">Euros (€)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Account Balance (start of month)</td><td>€0.00</td></tr><tr><td>Membership Fees</td><td>+ €365.00</td></tr><tr><td>Server Costs</td><td>- €216.57</td></tr><tr><td>Administrative Expenses*</td><td>- €36.10</td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €365.00</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €252.67</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €112.33</b></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><b>Notes:</b></p><ul><li>Administrative Expenses: Administrative fee for the formation of the association</li></ul></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<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 Notice</a></li>
|
||||
<li><a href="/terms.html">Terms of Service</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<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="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span
|
||||
><span>Private.coffee</span>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Private.coffee is a privacy-focused non-profit association, dedicated
|
||||
to supporting privacy and digital sovereignty.
|
||||
</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>
|
||||
<p class="mb-0"><svg xmlns="http://www.w3.org/2000/svg" width="94" height="20" role="img" aria-label="LGBTIQ+">
|
||||
<title>LGBTIQ+</title>
|
||||
<rect rx="3" width="94" height="20" fill="#555"/>
|
||||
<rect x="37" width="57" height="20" fill="#e05d44"/>
|
||||
<rect x="46.5" width="47.5" height="20" fill="#fecc00"/>
|
||||
<rect x="56" width="37" height="20" fill="#61c354"/>
|
||||
<rect x="65.5" width="27" height="20" fill="#007ec6"/>
|
||||
<rect x="75" width="17" height="20" fill="#744ca1"/>
|
||||
<rect x="84.5" width="9.5" height="20" rx="3" ry="3" fill="#8b00ff"/>
|
||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
||||
<text x="18.5" y="15" fill="#fff">LGBTIQ+</text>
|
||||
</g>
|
||||
</svg></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue