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"
|
||||
/>
|
||||
<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/css/base.css?v=1725605378" />
|
||||
<link rel="stylesheet" href="assets/css/base.css?v={{ timestamp }}" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
@ -96,8 +96,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
{% if warning %}{{ warning|safe }}{% endif %}
|
||||
{% block content %}{% endblock %}
|
||||
<footer class="bg-primary-gradient">
|
||||
<div class="container py-4 py-lg-5">
|
||||
<div class="row justify-content-center">
|
||||
|
@ -120,7 +120,7 @@
|
|||
<div class="fw-bold d-flex align-items-center mb-2">
|
||||
<span
|
||||
class="bs-icon-sm bs-icon-circle bs-icon-primary d-flex justify-content-center align-items-center bs-icon me-2"
|
||||
><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>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
|
@ -140,22 +140,7 @@
|
|||
><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>
|
||||
<a href="https://pride.coffee">{{ "rainbow" | icon | safe }}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
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>
|
||||
<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>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>
|
||||
|
||||
|
||||
{% extends "base.html" %} {% block title %}Privacy Policy{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="special-header fancy-text-primary">Privacy Policy</h1>
|
||||
|
@ -282,68 +184,4 @@
|
|||
</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>
|
||||
{% endblock %}
|
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