Compare commits
No commits in common. "pages" and "main" have entirely different histories.
32 changed files with 1216 additions and 3214 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-pride.yml
Normal file
50
.forgejo/workflows/build-pride.yml
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
name: Build and Deploy Static Site (Pride Theme)
|
||||||
|
|
||||||
|
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 --theme pride
|
||||||
|
|
||||||
|
- 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-pride'
|
||||||
|
git checkout --orphan pages-pride
|
||||||
|
|
||||||
|
# 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-pride' branch
|
||||||
|
git push origin pages-pride --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}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"*.html": "jinja-html"
|
||||||
|
}
|
||||||
|
}
|
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).
|
83
bridges.html
83
bridges.html
|
@ -1,83 +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).zfill(2)
|
||||||
|
|
||||||
|
if (
|
||||||
|
not allow_current
|
||||||
|
and year == str(datetime.now().year)
|
||||||
|
and month == str(datetime.now().month).zfill(2)
|
||||||
|
):
|
||||||
|
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
|
1457
index.html
1457
index.html
File diff suppressed because it is too large
Load diff
173
legal.html
173
legal.html
|
@ -1,173 +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=1731570852" />
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="assets/css/theme/plain.css?v=1731570852" />
|
|
||||||
</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="/">
|
|
||||||
<div id="smallLogoContainer"></div>
|
|
||||||
</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>
|
|
189
main.py
Normal file
189
main.py
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
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
|
||||||
|
kwargs.setdefault("theme", "plain")
|
||||||
|
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, theme="plain"):
|
||||||
|
# Common context
|
||||||
|
kwargs = {
|
||||||
|
"timestamp": int(datetime.datetime.now().timestamp()),
|
||||||
|
"theme": theme,
|
||||||
|
}
|
||||||
|
|
||||||
|
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.startswith("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"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--theme", type=str, default="plain", help="Theme to use for the site"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
generate_static_site(development_mode=args.dev, theme=args.theme)
|
||||||
|
|
||||||
|
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()
|
|
@ -1,266 +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=1731570852" />
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="assets/css/theme/plain.css?v=1731570852" />
|
|
||||||
</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="/">
|
|
||||||
<div id="smallLogoContainer"></div>
|
|
||||||
</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="alert alert-info">
|
|
||||||
<p>
|
|
||||||
<strong>Welcome to Private.coffee!</strong> Rallly Pro is free for all logged-in users. Upon first login, it may take up to five minutes for your account to be upgraded. If you have any issues, please contact us at <a href="mailto:support@private.coffee">support@private.coffee</a>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
If you find our services useful, please consider supporting us through a donation or becoming a supporting member. This will help us keep our free services running and improve our offerings. See below for more information.
|
|
||||||
</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 October 2024</h5>
|
|
||||||
<p class="card-text">
|
|
||||||
We believe in transparency and accountability. Below is a summary of our
|
|
||||||
income and expenses for the last month, so you can see how your
|
|
||||||
donations are being used.
|
|
||||||
</p>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-transparency">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Category</th>
|
|
||||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €402.75</td><td>+ 0.000434000 BTC</td><td>+ 1.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €407.65</td><td></td><td></td></tr><tr><td>Miscellaneous*</td><td>+ €0.01</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €440.98</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €407.66</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €440.98</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €369.43</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 1.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><b>Notes:</b></p><ul><li>Miscellaneous: Bank account verification</li></ul></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>
|
|
257
membership.html
257
membership.html
|
@ -1,257 +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=1731570852" />
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="assets/css/theme/plain.css?v=1731570852" />
|
|
||||||
</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="/">
|
|
||||||
<div id="smallLogoContainer"></div>
|
|
||||||
</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 October 2024</h5>
|
|
||||||
<p class="card-text">
|
|
||||||
We believe in transparency and accountability. Below is a summary of our
|
|
||||||
income and expenses for the last month, so you can see how your
|
|
||||||
donations are being used.
|
|
||||||
</p>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-transparency">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Category</th>
|
|
||||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €402.75</td><td>+ 0.000434000 BTC</td><td>+ 1.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €407.65</td><td></td><td></td></tr><tr><td>Miscellaneous*</td><td>+ €0.01</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €440.98</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €407.66</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €440.98</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €369.43</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 1.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><b>Notes:</b></p><ul><li>Miscellaneous: Bank account verification</li></ul></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"} 212.39
|
|
||||||
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
|
382
simple.html
382
simple.html
|
@ -1,382 +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://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://cuddly.tube">PeerTube</a> - PeerTube is a decentralized video hosting platform.
|
|
||||||
</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://qrmaker.private.coffee">QRMaker</a> - QRMaker is a service for generating QR codes.
|
|
||||||
</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://cyberchef.private.coffee">CyberChef</a> - CyberChef is a web app for encryption, encoding, compression, and data analysis.
|
|
||||||
</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://invidious.private.coffee">Invidious</a> - Watch YouTube videos without Google tracking.
|
|
||||||
</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://small.private.coffee">Small</a> - Small is a privacy-friendly alternative front-end to Medium.
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li style="padding: 8px 0;">
|
|
||||||
<a style="color: #1a5dab;
|
|
||||||
text-decoration: none"
|
|
||||||
href="https://scribe.private.coffee">Scribe</a> - Scribe is a privacy-friendly alternative front-end to Medium.
|
|
||||||
</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>
|
|
|
@ -29,12 +29,12 @@
|
||||||
content="https://private.coffee/assets/img/logo-inv_grad.png" />
|
content="https://private.coffee/assets/img/logo-inv_grad.png" />
|
||||||
<link rel="icon" type="image/png" href="assets/img/logo-inv_grad.png" />
|
<link rel="icon" type="image/png" href="assets/img/logo-inv_grad.png" />
|
||||||
<title>
|
<title>
|
||||||
|
{% block title %}{% endblock title %}
|
||||||
- Private.coffee</title>
|
- Private.coffee</title>
|
||||||
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" href="assets/css/base.css?v=1731570852" />
|
<link rel="stylesheet" href="assets/css/base.css?v={{ timestamp }}" />
|
||||||
<link rel="stylesheet"
|
<link rel="stylesheet"
|
||||||
href="assets/css/theme/plain.css?v=1731570852" />
|
href="assets/css/theme/{{ theme }}.css?v={{ timestamp }}" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar navbar-expand-md py-3 navbar-light" id="mainNav">
|
<nav class="navbar navbar-expand-md py-3 navbar-light" id="mainNav">
|
||||||
|
@ -72,8 +72,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
{% if warning %}{{ warning|safe }}{% endif %}
|
||||||
|
{% block content %}{% endblock %}
|
||||||
<footer class="bg-primary-gradient">
|
<footer class="bg-primary-gradient">
|
||||||
<div class="container py-4 py-lg-5">
|
<div class="container py-4 py-lg-5">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column"></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="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">
|
<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>
|
<span class="bs-icon-sm bs-icon-circle bs-icon-primary d-flex justify-content-center align-items-center bs-icon me-2">{{ "coffee" | icon | safe }}</span><span>Private.coffee</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-muted">
|
<p class="text-muted">
|
||||||
Private.coffee is a privacy-focused non-profit association,
|
Private.coffee is a privacy-focused non-profit association,
|
||||||
|
@ -109,22 +109,7 @@
|
||||||
<a href="https://git.private.coffee/privatecoffee/privatecoffee-website">
|
<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" />
|
<img src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
<a href="https://pride.coffee">{{ "rainbow" | icon | safe }}</a>
|
||||||
<!-- This file was created as part of the Private.coffee project
|
|
||||||
It is licensed under the MIT license
|
|
||||||
For more information, please visit https://private.coffee -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
29
templates/bridges.html
Normal file
29
templates/bridges.html
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<!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>
|
168
templates/index.html
Normal file
168
templates/index.html
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}Home{% endblock title %}
|
||||||
|
{% 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">
|
||||||
|
<div id="logoContainer"></div>
|
||||||
|
</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 %}
|
||||||
|
<a href="{{ 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>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if service.fork %}
|
||||||
|
<a href="{{ service.fork }}">
|
||||||
|
<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 fork"
|
||||||
|
title="Runs on a fork of the original software">{{ "git-branch" | icon | safe }}</div>
|
||||||
|
</a>
|
||||||
|
{% 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 content %}
|
43
templates/legal.html
Normal file
43
templates/legal.html
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}Legal Notice{% endblock title %}
|
||||||
|
{% 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 content %}
|
11
templates/membership-rallly.html
Normal file
11
templates/membership-rallly.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% extends "membership.html" %}
|
||||||
|
{% block serviceinfo %}
|
||||||
|
<div class="alert alert-info">
|
||||||
|
<p>
|
||||||
|
<strong>Welcome to Private.coffee!</strong> Rallly Pro is free for all logged-in users. Upon first login, it may take up to five minutes for your account to be upgraded. If you have any issues, please contact us at <a href="mailto:support@private.coffee">support@private.coffee</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you find our services useful, please consider supporting us through a donation or becoming a supporting member. This will help us keep our free services running and improve our offerings. See below for more information.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% endblock serviceinfo %}
|
115
templates/membership.html
Normal file
115
templates/membership.html
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}
|
||||||
|
Membership / Donations
|
||||||
|
{% endblock title %}
|
||||||
|
{% 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>
|
||||||
|
{% block serviceinfo %}{% endblock serviceinfo %}
|
||||||
|
<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 content %}
|
|
@ -1,79 +1,6 @@
|
||||||
<!DOCTYPE html>
|
{% extends "base.html" %}
|
||||||
<html data-bs-theme="light" lang="en">
|
{% block title %}Privacy Policy{% endblock %}
|
||||||
<!-- This file was created as part of the Private.coffee project
|
{% block content %}
|
||||||
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=1731570852" />
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="assets/css/theme/plain.css?v=1731570852" />
|
|
||||||
</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="/">
|
|
||||||
<div id="smallLogoContainer"></div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col d-flex">
|
|
||||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
|
||||||
<p class="mb-0"
|
|
||||||
style="line-height: 1.2rem;
|
|
||||||
color: var(--bs-tertiary-color)">
|
|
||||||
<span class="ps-2 fancy-text-primary"><span style="color: rgb(35, 35, 35)">Private.coffee</span></span>
|
|
||||||
<br class="that-br" />
|
|
||||||
<span class="ps-2 slogan">Empowering Privacy with Open Source</span>
|
|
||||||
</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="navbar" id="navcol-1">
|
|
||||||
<ul class="navbar-nav mx-auto">
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link active" href="/index.html">Home</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="https://status.private.coffee/">Status</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<a class="btn btn-primary shadow navbar-btn"
|
|
||||||
role="button"
|
|
||||||
href="/membership.html">JOIN & SUPPORT</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="text-center mb-5">
|
<div class="text-center mb-5">
|
||||||
<h1 class="special-header fancy-text-primary">Privacy Policy</h1>
|
<h1 class="special-header fancy-text-primary">Privacy Policy</h1>
|
||||||
|
@ -258,61 +185,4 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock %}
|
||||||
<footer class="bg-primary-gradient">
|
|
||||||
<div class="container py-4 py-lg-5">
|
|
||||||
<div class="row justify-content-center">
|
|
||||||
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column">
|
|
||||||
<h3 class="fs-6 fw-bold">Legal Stuff</h3>
|
|
||||||
<ul class="list-unstyled">
|
|
||||||
<li>
|
|
||||||
<a href="/legal.html">Legal Notice</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/privacy.html">Privacy Notice</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/terms.html">Terms of Service</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column"></div>
|
|
||||||
<div class="col-lg-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
|
|
||||||
<div class="fw-bold d-flex align-items-center mb-2">
|
|
||||||
<span class="bs-icon-sm bs-icon-circle bs-icon-primary d-flex justify-content-center align-items-center bs-icon me-2"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span><span>Private.coffee</span>
|
|
||||||
</div>
|
|
||||||
<p class="text-muted">
|
|
||||||
Private.coffee is a privacy-focused non-profit association,
|
|
||||||
dedicated to supporting privacy and digital sovereignty.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr />
|
|
||||||
<div class="text-muted d-flex justify-content-between align-items-center pt-3">
|
|
||||||
<p class="mb-0">Made with ❤️ and ☕ by Private.coffee</p>
|
|
||||||
<p class="mb-0">
|
|
||||||
<a href="https://git.private.coffee/privatecoffee/privatecoffee-website">
|
|
||||||
<img src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo" />
|
|
||||||
</a>
|
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
|
||||||
<!-- This file was created as part of the Private.coffee project
|
|
||||||
It is licensed under the MIT license
|
|
||||||
For more information, please visit https://private.coffee -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
60
templates/simple.html
Normal file
60
templates/simple.html
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Private.coffee</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div style="font-family: Arial, sans-serif;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
color: #333;
|
||||||
|
line-height: 1.6;
|
||||||
|
padding: 20px;
|
||||||
|
max-width: 600px;
|
||||||
|
margin: auto">
|
||||||
|
<h2 style="color: #333;">Welcome to Private.coffee</h2>
|
||||||
|
<p>Thanks for using our Element instance! Now, why don't you join our rooms?</p>
|
||||||
|
<ul style="list-style: none; padding: 0;">
|
||||||
|
<li style="padding: 8px 0;">
|
||||||
|
<a style="color: #1a5dab;
|
||||||
|
text-decoration: none"
|
||||||
|
href="https://element.private.coffee/#/#coffeespace:private.coffee">#coffeespace:private.coffee</a> - The Private.coffee Space, containing all rooms
|
||||||
|
</li>
|
||||||
|
<li style="padding: 8px 0;">
|
||||||
|
<a style="color: #1a5dab;
|
||||||
|
text-decoration: none"
|
||||||
|
href="https://element.private.coffee/#/#private.coffee:private.coffee">#private.coffee:private.coffee</a> - General support for our services
|
||||||
|
</li>
|
||||||
|
<li style="padding: 8px 0;">
|
||||||
|
<a style="color: #1a5dab;
|
||||||
|
text-decoration: none"
|
||||||
|
href="https://element.private.coffee/#/#matrix:private.coffee">#matrix:private.coffee</a> - Support for our Matrix server
|
||||||
|
</li>
|
||||||
|
<li style="padding: 8px 0;">
|
||||||
|
<a style="color: #1a5dab;
|
||||||
|
text-decoration: none"
|
||||||
|
href="https://element.private.coffee/#/#coffeebreak:private.coffee">#coffeebreak:private.coffee</a> - ☕ Coffee Break ☕ - our off-topic room
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr>
|
||||||
|
<p>Private.coffee operates a collection of services that respect your privacy, here are some others:</p>
|
||||||
|
<ul style="list-style: none; padding: 0;">
|
||||||
|
{% for service in services.services %}
|
||||||
|
{% if not service.exclude_from_simple %}
|
||||||
|
<li style="padding: 8px 0;">
|
||||||
|
<a style="color: #1a5dab;
|
||||||
|
text-decoration: none"
|
||||||
|
href="{{ service.url }}">{{ service.name }}</a> - {{ service.short_description }}
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
For hosting inquiries for privacy-related, social, or wholesome projects, <a href="mailto:support@private.coffee"
|
||||||
|
style="color: #1a5dab;
|
||||||
|
text-decoration: none">get in touch</a>!
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,79 +1,6 @@
|
||||||
<!DOCTYPE html>
|
{% extends "base.html" %}
|
||||||
<html data-bs-theme="light" lang="en">
|
{% block title %}Terms of Service{% endblock %}
|
||||||
<!-- This file was created as part of the Private.coffee project
|
{% block content %}
|
||||||
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=1731570852" />
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="assets/css/theme/plain.css?v=1731570852" />
|
|
||||||
</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="/">
|
|
||||||
<div id="smallLogoContainer"></div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col d-flex">
|
|
||||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
|
||||||
<p class="mb-0"
|
|
||||||
style="line-height: 1.2rem;
|
|
||||||
color: var(--bs-tertiary-color)">
|
|
||||||
<span class="ps-2 fancy-text-primary"><span style="color: rgb(35, 35, 35)">Private.coffee</span></span>
|
|
||||||
<br class="that-br" />
|
|
||||||
<span class="ps-2 slogan">Empowering Privacy with Open Source</span>
|
|
||||||
</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="navbar" id="navcol-1">
|
|
||||||
<ul class="navbar-nav mx-auto">
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link active" href="/index.html">Home</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="https://status.private.coffee/">Status</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<a class="btn btn-primary shadow navbar-btn"
|
|
||||||
role="button"
|
|
||||||
href="/membership.html">JOIN & SUPPORT</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="text-center mb-5">
|
<div class="text-center mb-5">
|
||||||
<h1 class="special-header fancy-text-primary">Terms of Service</h1>
|
<h1 class="special-header fancy-text-primary">Terms of Service</h1>
|
||||||
|
@ -230,61 +157,4 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock %}
|
||||||
<footer class="bg-primary-gradient">
|
|
||||||
<div class="container py-4 py-lg-5">
|
|
||||||
<div class="row justify-content-center">
|
|
||||||
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column">
|
|
||||||
<h3 class="fs-6 fw-bold">Legal Stuff</h3>
|
|
||||||
<ul class="list-unstyled">
|
|
||||||
<li>
|
|
||||||
<a href="/legal.html">Legal Notice</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/privacy.html">Privacy Notice</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/terms.html">Terms of Service</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column"></div>
|
|
||||||
<div class="col-lg-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
|
|
||||||
<div class="fw-bold d-flex align-items-center mb-2">
|
|
||||||
<span class="bs-icon-sm bs-icon-circle bs-icon-primary d-flex justify-content-center align-items-center bs-icon me-2"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span><span>Private.coffee</span>
|
|
||||||
</div>
|
|
||||||
<p class="text-muted">
|
|
||||||
Private.coffee is a privacy-focused non-profit association,
|
|
||||||
dedicated to supporting privacy and digital sovereignty.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr />
|
|
||||||
<div class="text-muted d-flex justify-content-between align-items-center pt-3">
|
|
||||||
<p class="mb-0">Made with ❤️ and ☕ by Private.coffee</p>
|
|
||||||
<p class="mb-0">
|
|
||||||
<a href="https://git.private.coffee/privatecoffee/privatecoffee-website">
|
|
||||||
<img src="https://shields.private.coffee/gitea/last-commit/privatecoffee/privatecoffee-website?gitea_url=https://git.private.coffee&logo=forgejo" />
|
|
||||||
</a>
|
|
||||||
<a href="https://pride.coffee"><svg xmlns="http://www.w3.org/2000/svg" width="135" height="20" role="img" aria-label="LGBTIQ+">
|
|
||||||
<!-- This file was created as part of the Private.coffee project
|
|
||||||
It is licensed under the MIT license
|
|
||||||
For more information, please visit https://private.coffee -->
|
|
||||||
<title>LGBTIQ+</title>
|
|
||||||
<rect rx="3" width="135" height="20" fill="#555"></rect>
|
|
||||||
<rect x="53" width="82" height="20" fill="#e05d44"></rect>
|
|
||||||
<rect x="66.5" width="68.5" height="20" fill="#fecc00"></rect>
|
|
||||||
<rect x="80" width="55" height="20" fill="#61c354"></rect>
|
|
||||||
<rect x="93.5" width="41.5" height="20" fill="#007ec6"></rect>
|
|
||||||
<rect x="107" width="28" height="20" fill="#744ca1"></rect>
|
|
||||||
<rect x="120.5" width="14.5" height="20" rx="3" ry="3" fill="#8b00ff"></rect>
|
|
||||||
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="8">
|
|
||||||
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
|
|
||||||
</g>
|
|
||||||
</svg></a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
24
templates/transparency.html
Normal file
24
templates/transparency.html
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}Membership / Donations{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container my-5">
|
||||||
|
<div class="text-center mb-5">
|
||||||
|
<h1 class="special-header fancy-text-primary">Transparency</h1>
|
||||||
|
<p class="lead">
|
||||||
|
Private.coffee is funded by its members and donations. We believe in
|
||||||
|
transparency and accountability. Below you can find financial reports for
|
||||||
|
each month since our inception.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% for year, year_data in finances.items() %}
|
||||||
|
{% for month, month_data in year_data.items() %}
|
||||||
|
<div class="card shadow-sm mt-4">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">Transparency Report for {{ month|month_name }} {{ year }}</h5>
|
||||||
|
<div class="table-responsive">{{ month_data|safe }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,299 +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=1731570852" />
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="assets/css/theme/plain.css?v=1731570852" />
|
|
||||||
</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="/">
|
|
||||||
<div id="smallLogoContainer"></div>
|
|
||||||
</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 November 2024</h5>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-transparency">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Category</th>
|
|
||||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €369.43</td><td>+ 0.000434000 BTC</td><td>+ 1.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €80.23</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €237.27</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €80.23</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €237.27</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €212.39</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 1.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow-sm mt-4">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">Transparency Report for October 2024</h5>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-transparency">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Category</th>
|
|
||||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €402.75</td><td>+ 0.000434000 BTC</td><td>+ 1.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €407.65</td><td></td><td></td></tr><tr><td>Miscellaneous*</td><td>+ €0.01</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €440.98</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €407.66</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €440.98</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €369.43</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 1.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><b>Notes:</b></p><ul><li>Miscellaneous: Bank account verification</li></ul></div>
|
|
||||||
</div>
|
|
||||||
</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">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €231.42</td><td>+ 0.000434000 BTC</td><td>+ 1.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €468.11</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €243.46</td><td></td><td></td></tr><tr><td>Bank Fees</td><td>- €53.32</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €468.11</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €296.78</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €402.75</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 1.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow-sm mt-4">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">Transparency Report for 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">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €245.47</td><td>+ 0.000434000 BTC</td><td>+ 1.447661806 XMR</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 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €416.47</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €231.42</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 1.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow-sm mt-4">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">Transparency Report for July 2024</h5>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-transparency">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Category</th>
|
|
||||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €88.04</td><td>+ 0.000434000 BTC</td><td>+ 0.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €422.42</td><td></td><td></td></tr><tr><td>Donations</td><td></td><td></td><td>+ 1.000000000 XMR</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>0.000000000 BTC</b></td><td><b>+ 1.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €264.99</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €245.47</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 1.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow-sm mt-4">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">Transparency Report for June 2024</h5>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-transparency">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Category</th>
|
|
||||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €72.29</td><td>+ 0.000434000 BTC</td><td>+ 0.447661806 XMR</td></tr><tr><td>Membership Fees</td><td>+ €382.42</td><td></td><td></td></tr><tr><td>Server Costs</td><td>- €317.62</td><td></td><td></td></tr><tr><td>Bank Fees</td><td>- €49.05</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €382.42</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €366.67</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €88.04</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 0.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow-sm mt-4">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">Transparency Report for May 2024</h5>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-transparency">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Category</th>
|
|
||||||
<th class="currency-col" scope="col">Euros (€)</th><th class="currency-col" scope="col">Bitcoin (BTC)</th><th class="currency-col" scope="col">Monero (XMR)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>+ €112.33</td><td>0.000000000 BTC</td><td>0.000000000 XMR</td></tr><tr><td>Membership Fees</td><td>+ €390.00</td><td></td><td></td></tr><tr><td>Donations</td><td></td><td>+ 0.000434000 BTC</td><td>+ 0.447661806 XMR</td></tr><tr><td>Server Costs*</td><td>- €430.04</td><td></td><td></td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €390.00</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 0.447661806 XMR</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €430.04</b></td><td><b>0.000000000 BTC</b></td><td><b>0.000000000 XMR</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €72.29</b></td><td><b>+ 0.000434000 BTC</b></td><td><b>+ 0.447661806 XMR</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><b>Notes:</b></p><ul><li>Server Costs: Includes setup costs and two monthly payments for new server</li></ul></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow-sm mt-4">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">Transparency Report for April 2024</h5>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-transparency">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Category</th>
|
|
||||||
<th class="currency-col" scope="col">Euros (€)</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td>Account Balance (start of month)</td><td>€0.00</td></tr><tr><td>Membership Fees</td><td>+ €365.00</td></tr><tr><td>Server Costs</td><td>- €216.57</td></tr><tr><td>Administrative Expenses*</td><td>- €36.10</td></tr><tr class="table-secondary"><td><b>Total Income</b></td><td><b>+ €365.00</b></td></tr><tr class="table-secondary"><td><b>Total Expenses</b></td><td><b>- €252.67</b></td></tr><tr class="table-secondary"><td><b>Account Balance (end of month)</b></td><td><b>+ €112.33</b></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><b>Notes:</b></p><ul><li>Administrative Expenses: Administrative fee for the formation of the association</li></ul></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer class="bg-primary-gradient">
|
|
||||||
<div class="container py-4 py-lg-5">
|
|
||||||
<div class="row justify-content-center">
|
|
||||||
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column">
|
|
||||||
<h3 class="fs-6 fw-bold">Legal Stuff</h3>
|
|
||||||
<ul class="list-unstyled">
|
|
||||||
<li>
|
|
||||||
<a href="/legal.html">Legal Notice</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/privacy.html">Privacy Notice</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/terms.html">Terms of Service</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4 col-md-3 text-center text-lg-start d-flex flex-column"></div>
|
|
||||||
<div class="col-lg-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
|
|
||||||
<div class="fw-bold d-flex align-items-center mb-2">
|
|
||||||
<span class="bs-icon-sm bs-icon-circle bs-icon-primary d-flex justify-content-center align-items-center bs-icon me-2"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M80,56V24a8,8,0,0,1,16,0V56a8,8,0,0,1-16,0Zm40,8a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,120,64Zm32,0a8,8,0,0,0,8-8V24a8,8,0,0,0-16,0V56A8,8,0,0,0,152,64Zm96,56v8a40,40,0,0,1-37.51,39.91,96.59,96.59,0,0,1-27,40.09H208a8,8,0,0,1,0,16H32a8,8,0,0,1,0-16H56.54A96.3,96.3,0,0,1,24,136V88a8,8,0,0,1,8-8H208A40,40,0,0,1,248,120ZM200,96H40v40a80.27,80.27,0,0,0,45.12,72h69.76A80.27,80.27,0,0,0,200,136Zm32,24a24,24,0,0,0-16-22.62V136a95.78,95.78,0,0,1-1.2,15A24,24,0,0,0,232,128Z"></path></svg></span><span>Private.coffee</span>
|
|
||||||
</div>
|
|
||||||
<p class="text-muted">
|
|
||||||
Private.coffee is a privacy-focused non-profit association,
|
|
||||||
dedicated to supporting privacy and digital sovereignty.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr />
|
|
||||||
<div class="text-muted d-flex justify-content-between align-items-center pt-3">
|
|
||||||
<p class="mb-0">Made with ❤️ and ☕ by Private.coffee</p>
|
|
||||||
<p class="mb-0">
|
|
||||||
<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