Compare commits
No commits in common. "pages" and "main" have entirely different histories.
29 changed files with 1292 additions and 2846 deletions
50
.forgejo/workflows/build-dev.yml
Normal file
50
.forgejo/workflows/build-dev.yml
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
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
|
50
.forgejo/workflows/build.yml
Normal file
50
.forgejo/workflows/build.yml
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
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
Normal file
27
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
// 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
Normal file
23
LICENSE
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
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.
|
34
README.md
Normal file
34
README.md
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# 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 or using the included HTTP server
|
||||||
|
(`python main.py --serve`).
|
||||||
|
|
||||||
|
## 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).
|
37
bridges.html
37
bridges.html
|
@ -1,37 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Bridges and bots</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;">Bridges and bots</h2>
|
|
||||||
<p>These are the bridges and bots available to Private.coffee Matrix users:</p>
|
|
||||||
<ul style="list-style: none; padding: 0;">
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@telegrambot:private.coffee">Telegram</a> - @telegrambot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@whatsappbot:private.coffee">WhatsApp</a> - @whatsappbot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@signalbot:private.coffee">Signal</a> - @signalbot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@discordbot:private.coffee">Discord</a> - @discordbot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@slackbot:private.coffee">Slack</a> - @slackbot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@linkedinbot:private.coffee">LinkedIn</a> - @linkedinbot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@gptbot:private.coffee">GPT-4o</a> - @gptbot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@rssbot:private.coffee">RSS/Atom feeds</a> - @rssbot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@instagrambot:private.coffee">Instagram</a> - @instagrambot:private.coffee</li>
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/@facebookbot:private.coffee">Facebook</a> - @facebookbot:private.coffee</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
41
contrib/caddy/Caddyfile
Normal file
41
contrib/caddy/Caddyfile
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
16
contrib/uwsgi/privatecoffee-dev.ini
Normal file
16
contrib/uwsgi/privatecoffee-dev.ini
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
[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
|
14
contrib/uwsgi/privatecoffee.ini
Normal file
14
contrib/uwsgi/privatecoffee.ini
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
[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
|
249
helpers/finances.py
Normal file
249
helpers/finances.py
Normal file
|
@ -0,0 +1,249 @@
|
||||||
|
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
|
1333
index.html
1333
index.html
File diff suppressed because it is too large
Load diff
202
legal.html
202
legal.html
|
@ -1,202 +0,0 @@
|
||||||
<!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"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="keywords"
|
|
||||||
content="privacy, digital sovereignty, non-profit, association, privacy-focused"
|
|
||||||
/>
|
|
||||||
<meta name="author" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content="Private.coffee - Empowering Privacy with Open Source"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:url" content="https://private.coffee/" />
|
|
||||||
<meta
|
|
||||||
property="og:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<meta property="og:site_name" content="Private.coffee" />
|
|
||||||
<meta name="twitter:card" content="summary" />
|
|
||||||
<meta name="twitter:title" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<link rel="icon" type="image/png" href="assets/img/logo_inv_grad.png" />
|
|
||||||
<title>Legal Notice - Private.coffee</title>
|
|
||||||
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
|
||||||
<link rel="stylesheet" href="assets/css/base.css?v=1725605378" />
|
|
||||||
</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>
|
|
||||||
</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">
|
|
||||||
<a
|
|
||||||
href="https://git.private.coffee/privatecoffee/privatecoffee-website"
|
|
||||||
><img
|
|
||||||
src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo"
|
|
||||||
/></a>
|
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
|
||||||
<!-- 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 -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
184
main.py
Normal file
184
main.py
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
from jinja2 import Environment, FileSystemLoader, TemplateNotFound
|
||||||
|
import json
|
||||||
|
import pathlib
|
||||||
|
import datetime
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
from http.server import SimpleHTTPRequestHandler
|
||||||
|
from socketserver import TCPServer
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
from helpers.finances import (
|
||||||
|
generate_transparency_table,
|
||||||
|
get_transparency_data,
|
||||||
|
get_latest_month,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class StaticPageHandler(SimpleHTTPRequestHandler):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, directory="build", **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
# 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 = {
|
||||||
|
"timestamp": int(datetime.datetime.now().timestamp()),
|
||||||
|
}
|
||||||
|
|
||||||
|
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()
|
||||||
|
)
|
||||||
|
|
||||||
|
# Load bridges data
|
||||||
|
bridges = json.loads(
|
||||||
|
(pathlib.Path(__file__).parent / "data" / "bridges.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()
|
||||||
|
|
||||||
|
context["path"] = f"{template_name}.html" if template_name != "index" else ""
|
||||||
|
|
||||||
|
if template_name in ["index", "simple"]:
|
||||||
|
context.update({"services": services})
|
||||||
|
|
||||||
|
if template_name == "bridges":
|
||||||
|
context.update({"bridges": bridges})
|
||||||
|
|
||||||
|
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")
|
||||||
|
parser.add_argument(
|
||||||
|
"--serve", action="store_true", help="Serve the site after building"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--port", type=int, default=8000, help="Port to serve the site on"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
generate_static_site(development_mode=args.dev)
|
||||||
|
|
||||||
|
if args.serve:
|
||||||
|
server = TCPServer(("", args.port), StaticPageHandler)
|
||||||
|
print(f"Serving on http://localhost:{args.port}")
|
||||||
|
thread = Thread(target=server.serve_forever)
|
||||||
|
thread.start()
|
||||||
|
thread.join()
|
297
membership.html
297
membership.html
|
@ -1,297 +0,0 @@
|
||||||
<!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"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="keywords"
|
|
||||||
content="privacy, digital sovereignty, non-profit, association, privacy-focused"
|
|
||||||
/>
|
|
||||||
<meta name="author" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content="Private.coffee - Empowering Privacy with Open Source"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:url" content="https://private.coffee/" />
|
|
||||||
<meta
|
|
||||||
property="og:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<meta property="og:site_name" content="Private.coffee" />
|
|
||||||
<meta name="twitter:card" content="summary" />
|
|
||||||
<meta name="twitter:title" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<link rel="icon" type="image/png" href="assets/img/logo_inv_grad.png" />
|
|
||||||
<title>Membership / Donations - Private.coffee</title>
|
|
||||||
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
|
||||||
<link rel="stylesheet" href="assets/css/base.css?v=1725605378" />
|
|
||||||
</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>
|
|
||||||
</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 August 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">Monero (XMR)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €245.47</td><td>+ 1.447661806 XMR</td><td>+ 0.000434000 BTC</td></tr><tr><td>Membership Fees</td><td>+ €402.42</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €416.47</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €402.42</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €416.47</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €231.42</b></td><td><b>+ 1.447661806 XMR</b></td><td><b>+ 0.000434000 BTC</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">
|
|
||||||
<a
|
|
||||||
href="https://git.private.coffee/privatecoffee/privatecoffee-website"
|
|
||||||
><img
|
|
||||||
src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo"
|
|
||||||
/></a>
|
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
|
||||||
<!-- 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 -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,5 +0,0 @@
|
||||||
# HELP privatecoffee_balance The balance of the private.coffee account
|
|
||||||
# TYPE privatecoffee_balance gauge
|
|
||||||
privatecoffee_balance{currency="EUR"} 306.42
|
|
||||||
privatecoffee_balance{currency="BTC"} 0.000434
|
|
||||||
privatecoffee_balance{currency="XMR"} 1.447661805527
|
|
1
requirements.txt
Normal file
1
requirements.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
jinja2
|
174
simple.html
174
simple.html
|
@ -1,174 +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;">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<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://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://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://facilmap.private.coffee">FacilMap</a> - FacilMap is an open-source map editor.</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://ots.private.coffee">OTS - One Time Secrets</a> - OTS is a service for sharing secrets securely.</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://traveling.coffee">Travelynx</a> - Travelynx is a service for logging your rail journeys. (German)</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://wikimore.private.coffee">Wikimore</a> - Wikimore is a privacy-friendly alternative front-end to Wikimedia wikis.</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://wishthis.private.coffee">wishthis</a> - wishthis is a service for creating and sharing wishlists.</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://breezewiki.private.coffee">BreezeWiki</a> - BreezeWiki is a privacy-friendly alternative front-end to Fandom.</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://ducksforducks.private.coffee">Ducks for Ducks</a> - Ducks for Ducks is a privacy-friendly alternative front-end to Geeks for Geeks.</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://tldraw.private.coffee">tldraw</a> - tldraw is a collaborative whiteboard.</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://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>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://monerooo.private.coffee">Moner.ooo</a> - Moner.ooo is a service for checking Monero/fiat exchange rates.</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://httpbin.private.coffee">httpbin</a> - httpbin is a service for testing HTTP requests.</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://overpass.private.coffee">Overpass</a> - Overpass is an API for OpenStreetMap.</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://googledonts.private.coffee">GoogleDonts</a> - GoogleDonts is a privacy-friendly proxy to Google Fonts.</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://nocdnbs.private.coffee">nocdnbs</a> - nocdnbs is a privacy-friendly proxy to cdnjs.cloudflare.com</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://nobsdelivr.private.coffee">nobsdelivr</a> - nobsdelivr is a privacy-friendly proxy to cdn.jsdelivr.net</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>
|
|
|
@ -45,9 +45,9 @@
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
||||||
/>
|
/>
|
||||||
<link rel="icon" type="image/png" href="assets/img/logo_inv_grad.png" />
|
<link rel="icon" type="image/png" href="assets/img/logo_inv_grad.png" />
|
||||||
<title> - Private.coffee</title>
|
<title>{% block title %}{% endblock %} - Private.coffee</title>
|
||||||
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" href="assets/css/base.css?v=1725605378" />
|
<link rel="stylesheet" href="assets/css/base.css?v={{ timestamp }}" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
@ -96,8 +96,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
{% if warning %}{{ warning|safe }}{% endif %}
|
||||||
|
{% block content %}{% endblock %}
|
||||||
<footer class="bg-primary-gradient">
|
<footer class="bg-primary-gradient">
|
||||||
<div class="container py-4 py-lg-5">
|
<div class="container py-4 py-lg-5">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
|
@ -120,7 +120,7 @@
|
||||||
<div class="fw-bold d-flex align-items-center mb-2">
|
<div class="fw-bold d-flex align-items-center mb-2">
|
||||||
<span
|
<span
|
||||||
class="bs-icon-sm bs-icon-circle bs-icon-primary d-flex justify-content-center align-items-center bs-icon me-2"
|
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
|
>{{ "coffee" | icon | safe }}</span
|
||||||
><span>Private.coffee</span>
|
><span>Private.coffee</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-muted">
|
<p class="text-muted">
|
||||||
|
@ -140,25 +140,10 @@
|
||||||
><img
|
><img
|
||||||
src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo"
|
src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo"
|
||||||
/></a>
|
/></a>
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
<a href="https://pride.coffee">{{ "rainbow" | icon | safe }}</a>
|
||||||
<!-- 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 -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
19
templates/bridges.html
Normal file
19
templates/bridges.html
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Bridges and bots</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;">Bridges and bots</h2>
|
||||||
|
<p>These are the bridges and bots available to Private.coffee Matrix users:</p>
|
||||||
|
<ul style="list-style: none; padding: 0;">
|
||||||
|
{% for bridge in bridges.bridges %}
|
||||||
|
<li style="padding: 8px 0;"><a style="color: #1a5dab; text-decoration: none;" href="https://matrix.pcof.fi/#/{{ bridge.mxid }}">{{ bridge.name }}</a> - {{ bridge.mxid }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
199
templates/index.html
Normal file
199
templates/index.html
Normal file
|
@ -0,0 +1,199 @@
|
||||||
|
{% 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="accordion">
|
||||||
|
{% for service in services.services %} {% if not
|
||||||
|
service.exclude_from_index %}
|
||||||
|
<details class="accordion-item">
|
||||||
|
<summary class="accordion-header">
|
||||||
|
{% if service.icon %}
|
||||||
|
<div
|
||||||
|
class="bs-icon-lg d-flex justify-content-center align-items-center bs-icon"
|
||||||
|
title="{{ service.name }}"
|
||||||
|
>
|
||||||
|
{{ service.icon | icon | safe }}
|
||||||
|
</div>
|
||||||
|
{% endif %} {{ service.name }}{% if service.tiny_description %} - {{
|
||||||
|
service.tiny_description }}{% endif %} {% if service.homemade %}
|
||||||
|
<div
|
||||||
|
class="bs-icon-sm 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-sm homemade"
|
||||||
|
title="Made by Private.coffee"
|
||||||
|
>
|
||||||
|
{{ "coffee" | icon | safe }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</summary>
|
||||||
|
<div class="accordion-body">
|
||||||
|
<p class="text-muted card-text mb-4">
|
||||||
|
{{ service.long_description }}
|
||||||
|
</p>
|
||||||
|
{% for link in service.links %} {% if link.alternatives %}
|
||||||
|
<div class="button-wrapper dropdown">
|
||||||
|
<div class="btn btn-primary w-100 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="button-wrapper btn btn-primary shadow w-100 text-center"
|
||||||
|
href="{{ link.url }}"
|
||||||
|
>{{ link.name }}</a
|
||||||
|
>
|
||||||
|
{% endif %} {% endfor %}
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
{% 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 %}
|
41
templates/legal.html
Normal file
41
templates/legal.html
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{% 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 %}
|
123
templates/membership.html
Normal file
123
templates/membership.html
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
{% 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,103 +1,5 @@
|
||||||
<!DOCTYPE html>
|
{% extends "base.html" %} {% block title %}Privacy Policy{% endblock %}
|
||||||
<html data-bs-theme="light" lang="en">
|
{% block content %}
|
||||||
<!-- 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"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="keywords"
|
|
||||||
content="privacy, digital sovereignty, non-profit, association, privacy-focused"
|
|
||||||
/>
|
|
||||||
<meta name="author" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content="Private.coffee - Empowering Privacy with Open Source"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:url" content="https://private.coffee/" />
|
|
||||||
<meta
|
|
||||||
property="og:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<meta property="og:site_name" content="Private.coffee" />
|
|
||||||
<meta name="twitter:card" content="summary" />
|
|
||||||
<meta name="twitter:title" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<link rel="icon" type="image/png" href="assets/img/logo_inv_grad.png" />
|
|
||||||
<title>Privacy Policy - Private.coffee</title>
|
|
||||||
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
|
||||||
<link rel="stylesheet" href="assets/css/base.css?v=1725605378" />
|
|
||||||
</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>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="text-center mb-5">
|
<div class="text-center mb-5">
|
||||||
<h1 class="special-header fancy-text-primary">Privacy Policy</h1>
|
<h1 class="special-header fancy-text-primary">Privacy Policy</h1>
|
||||||
|
@ -282,68 +184,4 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</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">
|
|
||||||
<a
|
|
||||||
href="https://git.private.coffee/privatecoffee/privatecoffee-website"
|
|
||||||
><img
|
|
||||||
src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo"
|
|
||||||
/></a>
|
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
|
||||||
<!-- 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 -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -3,4 +3,4 @@
|
||||||
version, please visit
|
version, please visit
|
||||||
<a href="https://private.coffee" class="alert-link">https://private.coffee</a
|
<a href="https://private.coffee" class="alert-link">https://private.coffee</a
|
||||||
>.
|
>.
|
||||||
</div>
|
</div>
|
30
templates/simple.html
Normal file
30
templates/simple.html
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<!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>
|
155
templates/terms.html
Normal file
155
templates/terms.html
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}Terms of Service{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<div class="text-center mb-5">
|
||||||
|
<h1 class="special-header fancy-text-primary">Terms of Service</h1>
|
||||||
|
<p class="lead">
|
||||||
|
These are the terms of service for the website private.coffee and all
|
||||||
|
services provided under this domain and its subdomains. Please read them
|
||||||
|
carefully.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="section">
|
||||||
|
<h2>1. Who are we?</h2>
|
||||||
|
<p>The website private.coffee is run by:</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 class="section">
|
||||||
|
<h2>2. What services do we provide?</h2>
|
||||||
|
<p>
|
||||||
|
The website private.coffee provides a collection of services that respect
|
||||||
|
your privacy. These services include:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Information about the Private.coffee association</li>
|
||||||
|
<li>
|
||||||
|
Proxy servers to several proprietary services (like YouTube, Twitter,
|
||||||
|
etc.)
|
||||||
|
</li>
|
||||||
|
<li>Matrix server</li>
|
||||||
|
<li>etc.</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
You can find more information about these services on the
|
||||||
|
<a href="/">main page</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="section">
|
||||||
|
<h2>3. What are your obligations?</h2>
|
||||||
|
<p>
|
||||||
|
a. We provide these services to you for free. In return, we ask you to
|
||||||
|
respect our terms of service. If you do not respect our terms of service, we
|
||||||
|
reserve the right to terminate your account and delete your data.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
b. We hope that our community will be diverse, respectful and friendly. As
|
||||||
|
such, any form of harassment, bullying, or abuse will not be tolerated. If
|
||||||
|
you are found to be harassing, bullying, or abusing other users, spreading
|
||||||
|
hate, lies or misinformation, we will terminate your account and delete your
|
||||||
|
data. Note that we may and will report you to the appropriate authorities if
|
||||||
|
we find your actions to be illegal. If you find yourself on the receiving
|
||||||
|
end of harassment, bullying, or abuse, please report it to us as soon as
|
||||||
|
possible.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
c. You are responsible for your own actions and any content you post on our
|
||||||
|
services.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
d. You are responsible for keeping your passwords, devices, private keys,
|
||||||
|
etc., secure. If you lose access, we may not be able to recover your data.
|
||||||
|
If third parties gain access to your account, we will not be able to prevent
|
||||||
|
them from accessing your data or restore any data that was lost.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
e. You are required to follow the laws governing our platform (especially
|
||||||
|
the laws of Austria and the European Union) as well as any laws or
|
||||||
|
regulations that apply to you personally. If you are found to be violating
|
||||||
|
the law, we will terminate your account and delete your data. If we are
|
||||||
|
required to do so by law, we will also report you to the authorities, or
|
||||||
|
cooperate with the authorities in any way necessary.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
f. You are responsible for any damage you cause to our services or other
|
||||||
|
users. This includes, but is not limited to, denial of service attacks,
|
||||||
|
spamming, etc. If you are found to be causing damage to our services or
|
||||||
|
other users, we will terminate your account and delete your data. We may
|
||||||
|
also report you to the appropriate authorities and request compensation for
|
||||||
|
any damage you caused, including legal fees.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
g. If you are a minor, you may be legally required to have a parent's or
|
||||||
|
guardian's permission to use our services. Unless otherwise stated, our
|
||||||
|
services are not intended for minors.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
h. In the end, this is our platform, and you are our guest. We reserve the
|
||||||
|
right to terminate your account and delete your data at any time for any
|
||||||
|
reason. We will try to give you as much notice as possible before doing so,
|
||||||
|
but we are not required to do so.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="section">
|
||||||
|
<h2>4. What are our obligations?</h2>
|
||||||
|
<p>
|
||||||
|
a. We will do our best to provide you with a stable and reliable service.
|
||||||
|
However, we cannot guarantee that our services will be available at all
|
||||||
|
times. We may need to take our services offline for maintenance or other
|
||||||
|
reasons. In case of scheduled outages, will try to give you as much notice
|
||||||
|
as possible.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
b. We will do our best to keep your data secure. However, we cannot
|
||||||
|
guarantee that your data will be secure at all times. We will do our best to
|
||||||
|
prevent unauthorized access to your data, but we cannot guarantee that we
|
||||||
|
will be able to do so. If we become aware of any unauthorized access to your
|
||||||
|
data, we will notify you as soon as possible and take all reasonable steps
|
||||||
|
to prevent further unauthorized access. However, we are not responsible for
|
||||||
|
any damage that may result from unauthorized access to your data.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
c. We will do our best to prevent data loss. However, we cannot guarantee
|
||||||
|
that your data will not be lost at any time. We will do our best to prevent
|
||||||
|
data loss, but we cannot guarantee that we will be able to do so. If we
|
||||||
|
become aware of any data loss, we will take all reasonable steps to restore
|
||||||
|
your data. If we are unable to restore your data, we are not responsible for
|
||||||
|
any damage that may result from the loss of your data.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
d. We will do our best to keep our services available free of charge. If at
|
||||||
|
any time we decide to cease our operations, or start charging for our
|
||||||
|
services, we will give you as much notice as possible. We will also try to
|
||||||
|
find a suitable replacement for our services and, where possible, help you
|
||||||
|
migrate your data to the new service.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
e. We commit to providing you with a service that respects your privacy. We
|
||||||
|
will not sell your data to third parties, and we will not use your data for
|
||||||
|
any purpose other than providing you with our services. We will not share
|
||||||
|
your data with third parties unless we are required to do so by law.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
f. We commit to keeping our community diverse, respectful and friendly. As
|
||||||
|
such, we will actively monitor and moderate our community. We will not
|
||||||
|
tolerate any form of harassment, bullying, or abuse. If we become aware of
|
||||||
|
any harassment, bullying, or abuse, we will take all reasonable steps to
|
||||||
|
prevent it from continuing. If we are unable to prevent it from continuing,
|
||||||
|
we will terminate the accounts of the users involved and delete their data.
|
||||||
|
We may also report the users involved to the appropriate authorities.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
25
templates/transparency.html
Normal file
25
templates/transparency.html
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{% 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 %}
|
316
terms.html
316
terms.html
|
@ -1,316 +0,0 @@
|
||||||
<!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"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="keywords"
|
|
||||||
content="privacy, digital sovereignty, non-profit, association, privacy-focused"
|
|
||||||
/>
|
|
||||||
<meta name="author" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content="Private.coffee - Empowering Privacy with Open Source"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:url" content="https://private.coffee/" />
|
|
||||||
<meta
|
|
||||||
property="og:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<meta property="og:site_name" content="Private.coffee" />
|
|
||||||
<meta name="twitter:card" content="summary" />
|
|
||||||
<meta name="twitter:title" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<link rel="icon" type="image/png" href="assets/img/logo_inv_grad.png" />
|
|
||||||
<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?v=1725605378" />
|
|
||||||
</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>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
<div class="text-center mb-5">
|
|
||||||
<h1 class="special-header fancy-text-primary">Terms of Service</h1>
|
|
||||||
<p class="lead">
|
|
||||||
These are the terms of service for the website private.coffee and all
|
|
||||||
services provided under this domain and its subdomains. Please read them
|
|
||||||
carefully.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="section">
|
|
||||||
<h2>1. Who are we?</h2>
|
|
||||||
<p>The website private.coffee is run by:</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 class="section">
|
|
||||||
<h2>2. What services do we provide?</h2>
|
|
||||||
<p>
|
|
||||||
The website private.coffee provides a collection of services that respect
|
|
||||||
your privacy. These services include:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Information about the Private.coffee association</li>
|
|
||||||
<li>
|
|
||||||
Proxy servers to several proprietary services (like YouTube, Twitter,
|
|
||||||
etc.)
|
|
||||||
</li>
|
|
||||||
<li>Matrix server</li>
|
|
||||||
<li>etc.</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
You can find more information about these services on the
|
|
||||||
<a href="/">main page</a>.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="section">
|
|
||||||
<h2>3. What are your obligations?</h2>
|
|
||||||
<p>
|
|
||||||
a. We provide these services to you for free. In return, we ask you to
|
|
||||||
respect our terms of service. If you do not respect our terms of service, we
|
|
||||||
reserve the right to terminate your account and delete your data.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
b. We hope that our community will be diverse, respectful and friendly. As
|
|
||||||
such, any form of harassment, bullying, or abuse will not be tolerated. If
|
|
||||||
you are found to be harassing, bullying, or abusing other users, spreading
|
|
||||||
hate, lies or misinformation, we will terminate your account and delete your
|
|
||||||
data. Note that we may and will report you to the appropriate authorities if
|
|
||||||
we find your actions to be illegal. If you find yourself on the receiving
|
|
||||||
end of harassment, bullying, or abuse, please report it to us as soon as
|
|
||||||
possible.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
c. You are responsible for your own actions and any content you post on our
|
|
||||||
services.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
d. You are responsible for keeping your passwords, devices, private keys,
|
|
||||||
etc., secure. If you lose access, we may not be able to recover your data.
|
|
||||||
If third parties gain access to your account, we will not be able to prevent
|
|
||||||
them from accessing your data or restore any data that was lost.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
e. You are required to follow the laws governing our platform (especially
|
|
||||||
the laws of Austria and the European Union) as well as any laws or
|
|
||||||
regulations that apply to you personally. If you are found to be violating
|
|
||||||
the law, we will terminate your account and delete your data. If we are
|
|
||||||
required to do so by law, we will also report you to the authorities, or
|
|
||||||
cooperate with the authorities in any way necessary.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
f. You are responsible for any damage you cause to our services or other
|
|
||||||
users. This includes, but is not limited to, denial of service attacks,
|
|
||||||
spamming, etc. If you are found to be causing damage to our services or
|
|
||||||
other users, we will terminate your account and delete your data. We may
|
|
||||||
also report you to the appropriate authorities and request compensation for
|
|
||||||
any damage you caused, including legal fees.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
g. If you are a minor, you may be legally required to have a parent's or
|
|
||||||
guardian's permission to use our services. Unless otherwise stated, our
|
|
||||||
services are not intended for minors.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
h. In the end, this is our platform, and you are our guest. We reserve the
|
|
||||||
right to terminate your account and delete your data at any time for any
|
|
||||||
reason. We will try to give you as much notice as possible before doing so,
|
|
||||||
but we are not required to do so.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="section">
|
|
||||||
<h2>4. What are our obligations?</h2>
|
|
||||||
<p>
|
|
||||||
a. We will do our best to provide you with a stable and reliable service.
|
|
||||||
However, we cannot guarantee that our services will be available at all
|
|
||||||
times. We may need to take our services offline for maintenance or other
|
|
||||||
reasons. In case of scheduled outages, will try to give you as much notice
|
|
||||||
as possible.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
b. We will do our best to keep your data secure. However, we cannot
|
|
||||||
guarantee that your data will be secure at all times. We will do our best to
|
|
||||||
prevent unauthorized access to your data, but we cannot guarantee that we
|
|
||||||
will be able to do so. If we become aware of any unauthorized access to your
|
|
||||||
data, we will notify you as soon as possible and take all reasonable steps
|
|
||||||
to prevent further unauthorized access. However, we are not responsible for
|
|
||||||
any damage that may result from unauthorized access to your data.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
c. We will do our best to prevent data loss. However, we cannot guarantee
|
|
||||||
that your data will not be lost at any time. We will do our best to prevent
|
|
||||||
data loss, but we cannot guarantee that we will be able to do so. If we
|
|
||||||
become aware of any data loss, we will take all reasonable steps to restore
|
|
||||||
your data. If we are unable to restore your data, we are not responsible for
|
|
||||||
any damage that may result from the loss of your data.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
d. We will do our best to keep our services available free of charge. If at
|
|
||||||
any time we decide to cease our operations, or start charging for our
|
|
||||||
services, we will give you as much notice as possible. We will also try to
|
|
||||||
find a suitable replacement for our services and, where possible, help you
|
|
||||||
migrate your data to the new service.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
e. We commit to providing you with a service that respects your privacy. We
|
|
||||||
will not sell your data to third parties, and we will not use your data for
|
|
||||||
any purpose other than providing you with our services. We will not share
|
|
||||||
your data with third parties unless we are required to do so by law.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
f. We commit to keeping our community diverse, respectful and friendly. As
|
|
||||||
such, we will actively monitor and moderate our community. We will not
|
|
||||||
tolerate any form of harassment, bullying, or abuse. If we become aware of
|
|
||||||
any harassment, bullying, or abuse, we will take all reasonable steps to
|
|
||||||
prevent it from continuing. If we are unable to prevent it from continuing,
|
|
||||||
we will terminate the accounts of the users involved and delete their data.
|
|
||||||
We may also report the users involved to the appropriate authorities.
|
|
||||||
</p>
|
|
||||||
</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">
|
|
||||||
<a
|
|
||||||
href="https://git.private.coffee/privatecoffee/privatecoffee-website"
|
|
||||||
><img
|
|
||||||
src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo"
|
|
||||||
/></a>
|
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
|
||||||
<!-- 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 -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,294 +0,0 @@
|
||||||
<!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"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="keywords"
|
|
||||||
content="privacy, digital sovereignty, non-profit, association, privacy-focused"
|
|
||||||
/>
|
|
||||||
<meta name="author" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content="Private.coffee - Empowering Privacy with Open Source"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:url" content="https://private.coffee/" />
|
|
||||||
<meta
|
|
||||||
property="og:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<meta property="og:site_name" content="Private.coffee" />
|
|
||||||
<meta name="twitter:card" content="summary" />
|
|
||||||
<meta name="twitter:title" content="Private.coffee" />
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content="Private.coffee is a privacy-focused non-profit association, dedicated to supporting privacy and digital sovereignty."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:image"
|
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png"
|
|
||||||
/>
|
|
||||||
<link rel="icon" type="image/png" href="assets/img/logo_inv_grad.png" />
|
|
||||||
<title>Membership / Donations - Private.coffee</title>
|
|
||||||
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
|
||||||
<link rel="stylesheet" href="assets/css/base.css?v=1725605378" />
|
|
||||||
</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>
|
|
||||||
</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 September 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">Monero (XMR)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €231.42</td><td>+ 1.447661806 XMR</td><td>+ 0.000434000 BTC</td></tr><tr><td>Membership Fees</td><td>+ €75.00</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €75.00</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>€0.00</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €306.42</b></td><td><b>+ 1.447661806 XMR</b></td><td><b>+ 0.000434000 BTC</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 August 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">Monero (XMR)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €245.47</td><td>+ 1.447661806 XMR</td><td>+ 0.000434000 BTC</td></tr><tr><td>Membership Fees</td><td>+ €402.42</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €416.47</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €402.42</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €416.47</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €231.42</b></td><td><b>+ 1.447661806 XMR</b></td><td><b>+ 0.000434000 BTC</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 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">Monero (XMR)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €88.04</td><td>+ 0.447661806 XMR</td><td>+ 0.000434000 BTC</td></tr><tr><td>Membership Fees</td><td>+ €422.42</td><td></td><td></td></tr><tr><td>Donations</td><td></td><td>+ 1.000000000 XMR</td><td></td></tr><tr><td>Server Costs</td><td>- €264.99</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €422.42</b></td><td><b>+ 1.000000000 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €264.99</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €245.47</b></td><td><b>+ 1.447661806 XMR</b></td><td><b>+ 0.000434000 BTC</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">Monero (XMR)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €72.29</td><td>+ 0.447661806 XMR</td><td>+ 0.000434000 BTC</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 XMR</b></td><td><b>0.000000000 BTC</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €366.67</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</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.447661806 XMR</b></td><td><b>+ 0.000434000 BTC</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">Monero (XMR)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €112.33</td><td>0.000000000 XMR</td><td>0.000000000 BTC</td></tr><tr><td>Membership Fees</td><td>+ €390.00</td><td></td><td></td></tr><tr><td>Donations</td><td></td><td>+ 0.447661806 XMR</td><td>+ 0.000434000 BTC</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.447661806 XMR</b></td><td><b>+ 0.000434000 BTC</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €430.04</b></td><td><b>0.000000000 XMR</b></td><td><b>0.000000000 BTC</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.447661806 XMR</b></td><td><b>+ 0.000434000 BTC</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">
|
|
||||||
<a
|
|
||||||
href="https://git.private.coffee/privatecoffee/privatecoffee-website"
|
|
||||||
><img
|
|
||||||
src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo"
|
|
||||||
/></a>
|
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
|
||||||
<!-- 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 -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Reference in a new issue