Compare commits

...

129 commits
static ... main

Author SHA1 Message Date
cabb095028
fix(data): standardize month formatting to two digits
All checks were successful
Build and Deploy Static Site (Pride Theme) / build (push) Successful in 1m10s
Build and Deploy Static Site / build (push) Successful in 58s
Updated the month keys in the `finances.json` file to use a two-digit format. Adjusted the `get_transparency_data` function to accommodate this change by zero-padding single-digit months. This ensures consistency in data representation and prevents potential errors in handling financial data.
2024-10-04 07:33:25 +02:00
2ce269136f
fix: add named endblocks for template consistency
All checks were successful
Build and Deploy Static Site (Pride Theme) / build (push) Successful in 58s
Build and Deploy Static Site / build (push) Successful in 1m0s
Updated templates to use named endblocks for improved clarity and
consistency in the HTML structure. This enhances maintainability
and ensures that closing tags are explicitly associated with their
respective block names, reducing potential confusion.
2024-09-26 19:17:16 +02:00
eabea6e412
fix(finances): correct membership fees amount in EUR
Updated the EUR value of "Membership Fees" from 398.11 to 448.11 in the finances data. This correction ensures accurate financial reporting and avoids discrepancies in future analyses.
2024-09-26 19:16:14 +02:00
9d005f06d8
style(templates): reformat HTML for better readability
All checks were successful
Build and Deploy Static Site (Pride Theme) / build (push) Successful in 56s
Build and Deploy Static Site / build (push) Successful in 1m1s
Tidied up the HTML structure across multiple template files to enhance code readability and maintainability. This involved mainly formatting changes like re-indenting, consolidating meta tags, and simplifying element structures.

No functional changes were made. These changes aim to improve the ease of future edits and reviews.
2024-09-24 14:45:24 +02:00
250daddcc6
feat: add 'membership-rallly' template and enhance matching
All checks were successful
Build and Deploy Static Site (Pride Theme) / build (push) Successful in 55s
Build and Deploy Static Site / build (push) Successful in 56s
Expanded the template matching condition to support templates starting with "membership". Added a new 'membership-rallly' template that extends the base 'membership' template, providing information about the Rallly Pro benefit for logged-in users and encouraging community support through donations.

This change improves the flexibility of template handling and introduces a specialized membership page aimed at enhancing user experience and engagement.
2024-09-24 14:43:17 +02:00
3e1b33c700
fix(finances): update membership fees amount to correct value
All checks were successful
Build and Deploy Static Site (Pride Theme) / build (push) Successful in 57s
Build and Deploy Static Site / build (push) Successful in 58s
Adjusted the membership fees in EUR to reflect the accurate amount.
This change ensures that financial records are consistent and
accurate.
2024-09-24 14:33:27 +02:00
a07fdf170c
fix(styles): centralize logo container styles
All checks were successful
Build and Deploy Static Site (Pride Theme) / build (push) Successful in 59s
Build and Deploy Static Site / build (push) Successful in 58s
Moved repetitive logo container styles to `base.css` for better maintainability and consistency across themes. Previously duplicated styles in individual theme files `plain.css` and `pride.css` are now removed.

This centralization reduces redundancy and ensures consistent styling for logo containers across different themes.
2024-09-24 08:21:20 +02:00
e2d35c7893
feat(build): add theme parameter to static site generator
All checks were successful
Build and Deploy Static Site (Pride Theme) / build (push) Successful in 55s
Build and Deploy Static Site / build (push) Successful in 56s
Included a --theme pride parameter to the generate static site
command in the build workflow. This allows theme customization
during site generation, enhancing site appearance and flexibility.
2024-09-24 08:15:07 +02:00
2d602bdc56
feat: add CI for building and deploying Pride theme site
All checks were successful
Build and Deploy Static Site (Pride Theme) / build (push) Successful in 1m2s
Build and Deploy Static Site / build (push) Successful in 55s
Set up a new GitHub Actions workflow to automate the build and deployment of the static site with the Pride theme on pushes to the main branch. This includes checking out the repository, installing dependencies, generating the site, and deploying to a new 'pages-pride' branch.

Ensures streamlined and consistent deployment aligned with updates.
2024-09-24 08:04:46 +02:00
92238bcfa2
feat: add theme support and refactor assets
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Introduce support for themes by adding a `theme` parameter to the site generation process and as an argument to the main script. Created separate CSS files for different themes and adjusted the structure to accommodate the style changes. Also, updated the use of assets with new SVG images and logos.

Refactored HTML templates to dynamically select the theme and updated path references to images accordingly. Improved the development experience by adding a default "plain" theme and enhancing command-line argument parsing for theme selection.

Closes #7
2024-09-24 08:02:05 +02:00
c64a957bea
feat: add CyberChef service to services.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Introduced CyberChef to the list of available services. CyberChef is a web app for encryption, encoding, compression, and data analysis, offering a versatile range of data manipulation operations directly in the browser.
2024-09-21 17:06:18 +02:00
36f9739ef0
feat(services): add privacy-friendly front-end 'Small'
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m13s
Added a new service 'Small' to the services.json file. 'Small' is a privacy-friendly alternative front-end to Medium, which allows users to browse Medium content without being tracked. This addition enhances the variety of privacy-focused services offered.
2024-09-19 19:26:14 +02:00
2ccd45ff78
feat: update Matrix server registration info
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m0s
Enhanced the long_description to clarify that public registrations are disabled. Users must contact support for account requests. This provides clearer guidance on how to join the service.
2024-09-19 12:04:35 +02:00
15217a63f8
feat: add Scribe to services list
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m4s
Added Scribe as a new service to the JSON data. Scribe is a privacy-friendly alternative front-end to Medium, allowing users to browse Medium without being tracked. This addition enhances the variety of privacy-centric services offered.
2024-09-18 20:56:02 +02:00
9eff1aeed7
fix(data): resolve misplaced Invidious and Piped entries
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m2s
Moved Invidious and Piped services entries to their correct positions in services.json. This ensures consistent parsing and access, which could potentially solve lookup issues or enhance data integrity.
2024-09-18 19:07:10 +02:00
b2792eb38a
feat(services): split Piped and Invidious entries
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m7s
Separated the previously combined "Piped / Invidious" entry into two distinct entries for "Piped" and "Invidious" to better reflect their individual services. Updated URLs, descriptions, and metadata accordingly.
2024-09-18 19:05:57 +02:00
c2c68bfed4
fix(json): exclude "video" service from index and simple views
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Updated the video service's configuration to exclude it from both the index and simple views. This change ensures it is hidden from these sections, as the services are currently blocked by YouTube. Adjustments are targeted to improve user experience or meet specific configuration requirements.
2024-09-18 12:19:30 +02:00
19bded9875
chore: configure VS Code to recognize Jinja templates
All checks were successful
Build and Deploy Static Site / build (push) Successful in 56s
Added a VS Code settings file to automatically associate .html files as Jinja templates. This improves syntax highlighting for users working with Jinja templating in HTML files. Helps streamline the developer experience and prevents misidentification of template files. Resolves issues with highlighting inconsistencies.
2024-09-18 12:17:58 +02:00
01a1a3fa33
fix: update icon for forked repository links
All checks were successful
Build and Deploy Static Site / build (push) Successful in 55s
Replaced "code-fork" icon with "git-branch" icon to better reflect the concept of repository branches and forks. This change improves clarity and visual consistency in the interface.
2024-09-18 09:13:06 +02:00
050a5af45e
feat: add repo URLs for homemade services
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Updated the 'homemade' field in services.json to include repository URLs instead of boolean values for a more precise indication of the project's origins and easier access to source code. This change enhances transparency and usability for users who want to contribute or inspect the source code.
2024-09-18 09:02:41 +02:00
0774b6760d
feat: add support for forked service indicators
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Enhanced the UI to distinguish forked services by adding a new `.fork` class with corresponding SVG styles. Updated HTML template to include links and icons for both homemade and forked services, improving service metadata visibility and user navigation.
2024-09-18 08:59:17 +02:00
7bb761a13e
feat: add fork status to service entries
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Included a new "fork" attribute to multiple service entries in the services.json file to indicate if the service is a fork. This standardizes the data format and improves clarity over the origins of the listed services.
2024-09-18 08:47:02 +02:00
538746adc7
fix(data): correct server costs in finances.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Updated server costs in EUR from -36.67 to -243.46 to accurately reflect current expenditures. This adjustment ensures financial data integrity and prevents discrepancies in budget reporting.
2024-09-14 08:41:34 +02:00
42a4f53c42
fix(finances): correct membership fees amount in JSON
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Updated the 'Membership Fees' amount from EUR 90.69 to EUR 390.69 in the finances data to reflect the accurate financial records. This correction ensures accurate financial reporting.
2024-09-10 12:41:49 +02:00
8012d0febd
chore: update membership fee in EUR
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Adjusted the membership fee from 75 EUR to 90.69 EUR to reflect recent changes in operational costs. This update ensures the financial data remains accurate and up-to-date.
2024-09-10 12:40:15 +02:00
f6e61236b5
feat(icons): update train.svg with non-raw version
All checks were successful
Build and Deploy Static Site / build (push) Successful in 56s
Updated the train icon SVG file to a new design featuring a size of 32x32, black fill, and updated graphical elements. Enhances consistency with other icons.
2024-09-07 20:10:03 +02:00
0469721e44
feat: add QRMaker service with icon
Some checks failed
Build and Deploy Static Site / build (push) Has been cancelled
Added a new service entry for QRMaker, a QR code generator, to the services.json file. Included a new QR code SVG icon for this service. This enhancement provides users with a convenient tool for generating QR codes directly from the application. No significant consequences anticipated.
2024-09-07 20:09:22 +02:00
45b6109969
feat(finances): add server costs to financial data
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Added server cost expenses to the financial records in the JSON file. This update ensures that all operational costs are accurately reflected, providing a clearer picture of the overall financial status. This change is necessary for improved budget tracking and financial reporting.
2024-09-06 21:17:37 +02:00
784fed0097
fix(css): adjust SVG icon size in accordion headers
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m0s
Increased the SVG width to 32px within accordion headers to enhance visual clarity and consistency across the UI. Ensures better user experience by maintaining uniform icon sizes. Addresses style inconsistencies.
2024-09-06 08:48:35 +02:00
bfe7aba83a
feat(services): add httpbin to services.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added httpbin service to the list in services.json for enhanced HTTP request testing capabilities. This new entry allows users to utilize httpbin for testing various HTTP methods and viewing browser-server interactions.
2024-09-06 08:43:01 +02:00
5058562d02
fix: update membership fee in financial data
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m1s
Increased the membership fee in EUR from 25 to 75 to reflect the current income. This change ensures the financial data remains accurate. No functional impact on the application but improves data consistency.
2024-09-02 16:31:57 +02:00
a3e1c325be
feat(finances): add membership fees entry
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m10s
Added a new entry for Membership Fees for September in finances.json. This provides clearer tracking and categorization of income related to membership fees. No other financial data affected.
2024-09-01 17:44:12 +02:00
8ae5ed56ee
docs: update membership fee value in finances.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m0s
Corrected the membership fee value from 382.42 EUR to 402.42 EUR to reflect the most recent financial report. This ensures financial records are accurate and up-to-date.
2024-08-31 08:05:18 +02:00
1f4658beb5
fix: correct file extension from .swg to .svg
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m1s
Renamed the icon file to use the correct .svg extension instead of .swg, ensuring the file is properly recognized and processed by tools and systems that handle SVG files. This change enhances compatibility and prevents potential loading issues.
2024-08-28 15:29:40 +02:00
c2a040400e
feat(services): add Moner.ooo to services list
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Added Moner.ooo, a service for checking Monero/fiat exchange rates, to the services list. This includes a new icon "money-wavy" in assets. Helps users easily access exchange rate information.
2024-08-28 15:26:08 +02:00
c116bce83b
fix(finances): update server costs for accuracy
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Updated the server costs in the financial records to reflect the latest expenses. Ensures accurate financial reporting. No functional code changes made.
2024-08-28 10:37:04 +02:00
d3e77c0090
feat: add Ducks for Ducks service entry
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Added a new service "Ducks for Ducks" to the services list. This privacy-friendly alternative front-end to Geeks for Geeks allows browsing without ads or tracking. Enhances user options for secure and private browsing experiences.
2024-08-27 16:45:05 +02:00
92bc6b27d4
fix(data): update membership fees in finances.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Adjusted the membership fees in finances.json from 332.42 EUR to 382.42 EUR to reflect recent financial changes and ensure data accuracy.
2024-08-23 20:23:37 +02:00
284ed7c015
fix(finances): update membership fee amount
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m6s
Adjusted the Membership Fees EUR amount to reflect the latest financial data. This ensures the budget records remain accurate and up-to-date.
2024-08-23 19:11:36 +02:00
c3c1685bdb
feat: add Travelynx service with train icon
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m1s
Added the new Travelynx service to the services.json file to allow users to log their rail journeys. Introduced a new train icon in SVG format to visually represent this service. This addition enhances the diversity of services offered, catering specifically to users interested in tracking rail journeys in Germany and Europe
2024-08-21 20:03:39 +02:00
aebac22fef
fix: update server costs in finances.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m3s
Adjusted the "Server Costs" in EUR from -229.69 to -339.19
to reflect updated accounting information. This ensures
the financial data is current and accurate.
2024-08-17 16:40:13 +02:00
71f476020c
fix(finances): update server costs in EUR
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m13s
Adjusted the server costs to reflect the significant increase from EUR -84.48 to EUR -229.69 in the finances data. This change ensures the accuracy of our financial records.
2024-08-09 07:19:55 +02:00
8f0946fb9d
fix(data): update server cost in finances.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Updated the EUR value for server costs to reflect the latest expense receipts. This ensures that financial records stay accurate and up-to-date.
2024-08-08 06:54:51 +02:00
7119b790db
fix(data): correct JSON syntax error in services.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Added a missing comma to fix JSON format, preventing potential parsing errors that could affect the loading of service configurations.
2024-08-05 16:53:43 +02:00
50449b80ec
feat(services): add GoogleDonts privacy-friendly font proxy
Some checks failed
Build and Deploy Static Site / build (push) Failing after 57s
Integrated GoogleDonts, a privacy-friendly proxy for Google Fonts, into the services list. This addition allows users to access Google Fonts without tracking, enhancing user privacy.
2024-08-05 16:24:55 +02:00
0c2cbc5027
chore: standardize logo filename for better readability
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Renamed logo file to improve consistency and readability by replacing underscores with hyphens. This change enhances alignment with naming conventions. No functional impact on the application.
2024-08-04 16:45:10 +02:00
4537aebc07
fix(ui): make dropdown button full width
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Updated the dropdown button to occupy full width for better responsiveness and improved UX, particularly on smaller screens. This change ensures a consistent layout regardless of device size.
2024-08-04 16:33:40 +02:00
9e8b54083a
feat: add dynamic timestamp to CSS cache-busting
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m2s
Included a timestamp in the static site generation to dynamically append to the CSS file version parameter. This ensures that users always get the latest CSS changes, reducing cache-related issues.
2024-08-04 16:24:17 +02:00
009ab87552
fix(base.html): prevent CSS caching issues
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Append a version query string to the base.css link to ensure users always load the most recent version of the stylesheet, addressing issues with outdated cached CSS on client browsers.
2024-08-04 16:20:49 +02:00
8b70654fb8
Merge branch 'dev'
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m1s
2024-08-04 16:16:28 +02:00
450afcbe6d
style(base.css): remove unnecessary margin from accordion item
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m0s
Eliminated the margin-bottom from .accordion-item class to improve layout consistency and avoid unwanted spacing issues in the accordion component. This helps in aligning the design more closely with modern UI standards and ensures better visual harmony across different sections.
2024-08-04 15:27:36 +02:00
f0cbf999a8
feat: add new lock-key icon for better visual clarity
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Introduced a new 'lock-key' SVG icon to improve representation of the lock feature in the UI. Updated services.json to reference the new icon, replacing the old 'lock' icon reference. This enhances clarity and user experience by providing a more intuitive graphic.
2024-08-04 13:30:41 +02:00
ccbe1b600d
feat: add consistent vertical spacing to button wrappers
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Added a CSS rule to ensure button elements inside the button-wrapper class have consistent vertical spacing except for the last child. This improves uniformity in the UI layout. Updated corresponding HTML to use the newly styled button-wrapper class for proper spacing and alignment.
2024-08-04 13:30:20 +02:00
2a054a7f78
feat(UI): enhance accordion and icon styling for consistency
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Improved the styling of homemade icons by setting explicit height and
width, ensuring they are consistently sized. Refined the layout of the
accordion header by adding flex display and centering alignment for
better visual alignment. Introduced new icon container styles to
standardize icon presentation and spacing.

These changes aim to provide a more polished and uniform user interface
experience, addressing inconsistencies and enhancing visual clarity.
2024-08-04 13:24:42 +02:00
e623762b15
feat: add new lock-key icon for better visual clarity
Introduced a new 'lock-key' SVG icon to improve representation of the lock feature in the UI. Updated services.json to reference the new icon, replacing the old 'lock' icon reference. This enhances clarity and user experience by providing a more intuitive graphic.
2024-08-04 13:24:30 +02:00
bfcd7ae11f
feat: add tiny descriptions to services
Augmented the services JSON with "tiny_description" field for each service to provide a brief overview. This will enhance the user experience on the index page by displaying concise descriptions alongside service names in the accordion headers.

Improves service discoverability and user interaction by giving quick service context.
2024-08-04 13:10:38 +02:00
7dd217a78e
feat: replace accordion implementation with details/summary
Migrated accordion elements from a Bootstrap-based approach to
using the native HTML <details> and <summary> tags for better
accessibility and reduced reliance on third-party libraries.
Enhanced CSS for the accordion components to style hover effects
and manage open states effectively. Simplified icon handling
within accordion bodies.
2024-08-04 13:02:07 +02:00
ac9286bf7e
feat: add accordion component for services list
Replaced the services list layout with a new accordion component. This allows for a more organized and user-friendly display of services, facilitating better content management and improved user interaction. The CSS was updated to include styles for the accordion structure.
2024-08-04 12:59:43 +02:00
d3d997d552
feat: add FacilMap to services list
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added a new service, FacilMap, to the services.json file. FacilMap is an open-source map editor allowing users to create, edit, and share maps. This inclusion will expand the available tools and services offered, providing users with more map editing options.
2024-08-04 11:55:59 +02:00
2e0ec49b42
feat: update exclusion settings for translation service
Some checks failed
Build and Deploy Static Site / build (push) Has been cancelled
Updated the translation service to exclude it from both the index and simple search results. This change ensures that the translation service doesn't appear in search results, streamlining the search functionality and improving user experience by hiding irrelevant services.
2024-08-04 11:55:07 +02:00
62a07c6bf2
fix(services): avoid duplicate entry for Overleaf
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m0s
Moved the Overleaf service entry to correct its position in the list, avoiding redundant entries. This maintains the integrity and accuracy of the services data.
2024-08-03 18:49:33 +02:00
eaadc59893
feat(icons): add hard-hat icon and new services
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Introduce hard-hat SVG icon and add new services (nocdnbs, nobsdelivr) to services.json. These services provide privacy-friendly proxies to major CDNs (Cloudflare and jsDelivr), enhancing user privacy by avoiding tracking.
2024-08-03 17:27:40 +02:00
7ba14168f3
feat(finances): add server costs for August
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m1s
Included a new entry in August to account for server costs. This update ensures that all recurring expenses are accurately tracked and reflected in the finances data.
2024-08-03 08:24:27 +02:00
af2767377f
fix(data): correct membership fee value in finances.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Adjusted the membership fee from 25 EUR to the correct value of 325 EUR to reflect accurate income. This change ensures financial records are up-to-date.
2024-08-02 09:37:34 +02:00
f507ddbc65
feat(services): update long description for Mastodon
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Expanded the long description of Mastodon in the services.json file to include that registrations are open to everyone on Cuddly Space. Enhances clarity for potential users regarding registration availability.
2024-08-02 07:14:59 +02:00
46ca441a32
feat(finances): add membership fees entry
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m2s
Included a new entry for membership fees with a value of 25 EUR in the finances data structure. This addition tracks new membership fee income, improving financial reporting accuracy.
2024-08-01 11:24:41 +02:00
ff6da86cb6
chore(finances): update membership fees and server costs
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Adjusted the EUR amounts for membership fees and server costs for July, reflecting recent changes in financial data. Ensuring financial records are up-to-date and accurate.
2024-07-30 15:33:48 +02:00
4c851f4ef5
fix(data): update server costs in finances.json
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Updated server costs to reflect the current expense accurately. Ensures financial data remains up-to-date and reflects true expenditures.
2024-07-29 15:57:09 +02:00
de6fbe426f
feat: add Signal bridge to the bridges list
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Added a new bridge entry for Signal to the bridges.json file, enabling integration with Signal messaging service. This expands the supported communication platforms, enhancing user connectivity and options.
2024-07-27 08:43:20 +02:00
c549207976
feat: add OTS service for secure secret sharing
Some checks failed
Build and Deploy Static Site / build (push) Failing after 1m12s
Added OTS - One Time Secrets to the service list to provide a secure means for sharing sensitive information such as passwords and API keys. This service enriches our offerings and meets user requests for enhancing security.
2024-07-26 21:11:57 +02:00
4049fa4953
chore: remove deprecated meta tag for onion location
All checks were successful
Build and Deploy Static Site / build (push) Successful in 2m38s
Eliminates the unused 'onion-location' meta tag from base.html.
This header is now set in the web server instead.
2024-07-25 21:35:57 +02:00
af29b0f3f5
feat: add onion location meta tag for Tor accessibility
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Included a `meta` tag in the base HTML template to provide the onion location for improved access through the Tor network. Enhanced context parameters to support this feature by adding the path generation logic. Updated argument parsing for better readability and consistency.

This change aims to enhance the privacy and accessibility of the site for users connecting via Tor.
2024-07-24 21:29:58 +02:00
1d7f9ca10c
feat(services): add alternative URLs for LibreY
All checks were successful
Build and Deploy Static Site / build (push) Successful in 56s
Enhanced the 'Go to LibreY' service link by adding Tor and I2P
alternative URLs. This provides users with more access options
and supports privacy-centric browsing.
2024-07-24 21:20:52 +02:00
68d6286aed
fix(finances): update server cost in EUR
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Adjusted the server cost from 225.7 to 244.1 EUR to reflect the latest expenses accurately. Ensuring financial data remains up-to-date for correct reporting and budgeting.
2024-07-24 13:04:34 +02:00
6dc3e7b6cf
chore(finances): remove redundant domain names entry
All checks were successful
Build and Deploy Static Site / build (push) Successful in 55s
Removed unused "Domain Names" field from the finances JSON. This streamlines data handling by eliminating unnecessary clutter, improving maintainability.
2024-07-24 10:01:59 +02:00
4f4081fee6
feat(finances): add XMR donations entry to finance records
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Included a new entry for XMR donations under the finance records to track cryptocurrency contributions. This addition ensures transparency and completeness in financial reporting.
2024-07-24 10:00:53 +02:00
f59f677af1
fix(finances): update membership fees to correct value
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m1s
Changed the membership fee amount in finances.json to 402.42 EUR to reflect the accurate amount. This correction ensures the financial records are precise and up-to-date.
2024-07-23 10:29:26 +02:00
440ef9828a
feat: add bridge data and display page for Matrix bots
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Integrated a new "bridges.json" file to list various Matrix bot bridges, including Telegram, WhatsApp, Discord, and more. Updated the main script to load this data and render it on a new "bridges" template. The new "bridges.html" template provides users with a clear and intuitive interface to view available bridges and their respective Matrix IDs.

Improves user experience by providing a dedicated page for bridge information.
2024-07-19 09:49:32 +02:00
5cbe4bacaf
fix: update Piped service status and description
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Updated the status of the Piped service to "NOK" and revised the long description to reflect recent issues with potential Google attacks. This change aims to inform users about the current potential performance and availability issues with using the service.
2024-07-18 17:40:33 +02:00
d1c2e3890b
feat(services): add tldraw to services list
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added tldraw, a collaborative whiteboard service, to the services.json file. This addition enhances the functionality by providing users with a real-time drawing and writing tool. The service is integrated with relevant metadata and links ensuring consistent user accessibility.
2024-07-17 16:29:55 +02:00
04a26c180a
feat: add homemade badge for in-house services
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m1s
Implemented a "homemade" badge to distinguish services developed by Private.coffee from third-party services. Enhanced service data with a "homemade" flag and updated the frontend to display a special icon when this flag is set. This provides users with clear visual feedback, enhancing transparency about service origins.
2024-07-16 13:40:37 +02:00
d0f8ed0d0b
feat: add Wikimore service entry
All checks were successful
Build and Deploy Static Site / build (push) Successful in 56s
Added a new service entry for Wikimore, a privacy-friendly alternative front-end to Wikimedia wikis. Includes main and Tor-accessibility URLs, descriptions, and an icon. Enhances the diversity of privacy-focused services listed.
2024-07-16 10:25:54 +02:00
0374fd3771
fix(data): correct spelling of BreezeWiki service name
All checks were successful
Build and Deploy Static Site / build (push) Successful in 56s
Corrected the spelling of "Breezewiki" to "BreezeWiki" in services.json to ensure consistency with the official branding. Updated all instances including name, short description, long description, and related links.
2024-07-15 18:03:50 +02:00
11dd8b293b
feat(services): add Tor alternative link for Breezewiki
All checks were successful
Build and Deploy Static Site / build (push) Successful in 56s
Enhanced the links array for Breezewiki to include an alternative Tor URL. This provides users with a privacy-focused alternative access point, improving accessibility and privacy.
2024-07-15 17:43:51 +02:00
8c88f71740
feat: enhance SEO with meta tags and add new logo
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Added descriptive meta tags to improve SEO and social media sharing previews. Integrated a new logo and updated the favicon to enhance the site's branding. These updates aim to provide better visibility and user experience.
2024-07-15 17:32:15 +02:00
d0dde89ab2
fix(template): close extra div in navbar
Added a missing closing `div` tag in the navbar section of the base template to ensure proper HTML structure. This prevents potential rendering issues and maintains consistent layout across all pages using this template.
2024-07-15 17:30:41 +02:00
f548aa4c84
feat(services): add Breezewiki as a new privacy-friendly service
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added Breezewiki to the list of services, providing a privacy-friendly alternative front-end to Fandom. This allows users to browse Fandom wikis without ads or tracking, enhancing user privacy.
2024-07-15 12:10:02 +02:00
60211594e0
feat: add Overpass service with custom icon
All checks were successful
Build and Deploy Static Site / build (push) Successful in 59s
Added the Overpass service to the services configuration with a detailed description, status, link, and associated map-trifold icon. This enriches the application's API offerings, providing users access to OpenStreetMap data querying capabilities.
2024-07-13 15:15:33 +02:00
d6e2efc8d4
docs: add license information for icons
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added LICENSE.md to the icons directory to clarify licensing. Files taken from Phosphor Icons are under the MIT License. The custom `rainbow.svg` created by us is also MIT-licensed. This ensures proper attribution and compliance with open-source licensing requirements.
2024-07-13 10:15:19 +02:00
369405a63d
feat(icons): update rainbow.svg to support wider design
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Extended the width of rainbow.svg from 94 to 135 to better accommodate updated design requirements. Added licensing information comment for clarity and compliance. Adjusted positions and dimensions of color blocks to align with the new width. No functional changes introduced.
2024-07-13 10:13:21 +02:00
a9739ef944
fix(finances): update server cost in EUROS
All checks were successful
Build and Deploy Static Site / build (push) Successful in 55s
Increased the server costs under the "EUR" key to reflect the most recent expense update. This ensures that the financial records are accurate and up to date.
2024-07-13 10:00:59 +02:00
4921342f1e
fix: add hyperlink to rainbow icon in footer
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added a hyperlink to the rainbow icon in the footer to enhance user navigation by linking to the pride.coffee website. This improves accessibility and provides users with additional resources related to our mission.
2024-07-11 21:55:17 +02:00
614c1870a8
feat(template): add last commit shield to footer
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Enhanced the footer to display a last commit shield for the project. Provides immediate visibility of the latest commit status, improves transparency, and encourages repository engagement.
2024-07-11 21:53:48 +02:00
8af699e7ba
fix: correct image path in homepage template
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m0s
Adjusted the src attribute of the logo image to remove the leading slash. This change ensures compatibility with relative URL loading, improving resource accessibility in deployed environments.
2024-07-10 09:38:30 +02:00
a684c8b9df
feat: add built-in HTTP server to preview static site
Some checks failed
Build and Deploy Static Site / build (push) Has been cancelled
Introduced a new option `--serve` in `main.py` to provide an HTTP server for previewing the static site. Updated README with usage instructions. This enhancement allows users to quickly view the site on localhost without manually opening the `index.html` file.

Addresses usability improvements for local development.
2024-07-10 09:37:55 +02:00
6f92e5aa8f
feat(services): update Matrix service descriptions and links
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m11s
Updated the long description for the Matrix service to specify "web clients" instead of "Element web client". Added a new link to the Hydrogen client to provide users with more options for connecting to the Matrix server
2024-07-10 08:27:51 +02:00
6ec67f8891
fix(finances): update server cost for accuracy
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Adjusted the server costs in the financial data from -32.72 EUR to -55.87 EUR to better reflect actual expenses. Ensures more accurate reporting and budget tracking.
2024-07-09 07:58:30 +02:00
e17507d547
feat: add books icon and update service icon reference
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added a new 'books' icon SVG file to the asset directory to enhance the icon set. Updated the icon reference in services.json from 'book' to 'books' for better visual representation and icon alignment. This change improves the visual consistency and clarity in the service icons.
2024-07-07 13:16:30 +02:00
8c96c4cd7a
feat: add BiblioReads to services list
Added BiblioReads as a privacy-friendly alternative to Goodreads in the services list. This enables users to access Goodreads data without being tracked and provides an additional resource within the platform.
2024-07-07 13:14:55 +02:00
e9ce71f89b
feat: add FreshRSS service with RSS icon
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added FreshRSS RSS feed reader to services.json, including its metadata and links, and introduced a new RSS icon to the assets directory. This enhancement allows users to access and recognize the FreshRSS service easily.
2024-07-06 19:38:59 +02:00
f452e087a7
feat: add Priviblur service and camera icon
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Introduced the Priviblur service as a privacy-friendly alternative front-end to Tumblr, enhancing user privacy by preventing tracking. Added a new camera SVG icon to support the service's representation. This addition aims to improve the overall service offering and user experience.
2024-07-06 18:14:59 +02:00
0b89af4d7f
feat: add Quetre service and question icon
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added a new service "Quetre" to services.json, providing a privacy-friendly front-end for Quora to enhance user privacy. Introduced a new question icon for this service for better visual representation.
2024-07-06 16:15:34 +02:00
f050096e52
Merge pull request 'Static Page Generator' (#5) from dev into main
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Reviewed-on: #5
2024-07-06 14:06:59 +00:00
18d434ab5b
Merge branch 'main' into dev
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
2024-07-03 13:49:59 +02:00
b3c3c7e1a9
feat: add server costs for July 2024
Included "Server Costs" under membership expenses to track costs more accurately. This adjustment ensures alignment with actual expenses related to membership services.
2024-07-03 13:49:07 +02:00
fa12209b03
Merge branch 'main' into dev
All checks were successful
Build and Deploy Static Site / build (push) Successful in 56s
2024-07-02 09:48:08 +02:00
fc6bf85068
fix(data): correct membership fee amount in finances.json
The membership fee for July was updated to 395 EUR. This adjustment corrects the discrepancy to reflect the accurate fee amount.
2024-07-02 09:27:50 +02:00
36a7b01ffd
fix(styles): refine button margin and dropdown shadow spacing
Adjusted the CSS selector to more accurately apply margins to specific button elements within card bodies, enhancing layout consistency. Corrected minor formatting issue in the dropdown menu's box-shadow property for improved code readability.
2024-07-01 15:35:50 +02:00
2e2327848f
fix(styles): refine button margin and dropdown shadow spacing
All checks were successful
Build and Deploy Static Site / build (push) Successful in 56s
Adjusted the CSS selector to more accurately apply margins to specific button elements within card bodies, enhancing layout consistency. Corrected minor formatting issue in the dropdown menu's box-shadow property for improved code readability.
2024-07-01 15:07:51 +02:00
e5f82fdc41
Merge branch 'main' into dev 2024-07-01 14:56:41 +02:00
a4540c1f41
chore: update .gitignore to include build directory
Added the 'build/' directory to .gitignore to exclude build artifacts from version control. This change helps keep the repository clean by avoiding unnecessary files. No functional code changes were made.
2024-07-01 14:53:33 +02:00
ee2d53a36d
feat: extend asset copying to include data directory
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Expanded the asset copying functionality to also handle the 'data' directory in addition to the 'assets' folder. This ensures that both static assets and data files are included in the output directory, streamlining the build process and ensuring all necessary resources are available in the generated static site.
2024-07-01 12:12:39 +02:00
d57046fa57
Merge branch 'main' into dev 2024-07-01 12:11:05 +02:00
3c5b8ebc33
feat(data): update membership fees for July
Updated the EUR membership fee income from 20 to 45.
2024-07-01 12:10:53 +02:00
5cdb9ad43b
feat: add filter to convert month number to name
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Added a custom filter `month_name` to convert month numbers to their full names in templates. Updated the Transparency Report title to use this filter, enhancing readability and user experience. This change ensures that month names are displayed instead of numeric values, making the report titles clearer and more user-friendly.
2024-07-01 12:06:30 +02:00
feb273a8b0
Merge branch 'main' into dev
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
2024-07-01 11:11:25 +02:00
7e89a67951
fix: include additional transparency data
Modified generate_transparency_table to include more detailed
transparency data by passing an additional boolean argument.
This change helps ensure all relevant data is captured and handled
properly, improving financial data accuracy and reporting.
2024-07-01 11:11:04 +02:00
8e81ba73b2
chore: remove Flask from requirements
All checks were successful
Build and Deploy Static Site / build (push) Successful in 57s
Removed Flask from the requirements.txt file as it is no longer needed for the project dependencies. This helps to streamline the dependency management and reduces potential security vulnerabilities that come with maintaining unnecessary packages.
2024-07-01 10:59:34 +02:00
3219a5019f
Merge branch 'main' into dev
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m0s
2024-07-01 10:51:12 +02:00
4f83a97f17
feat(build-dev): add --dev flag to generate static site
Added the --dev flag to the static site generation command in the build-dev workflow to ensure the development environment configurations are used during the build process. This change aims to align the build process with development-specific settings, enhancing consistency and correctness in the environment used for development builds.
2024-07-01 10:51:01 +02:00
69ef1f7a1a
feat: update README and asset paths for static site generation
All checks were successful
Build and Deploy Static Site / build (push) Successful in 1m0s
Switched the project description from a Flask application to a Jinja2 static website generator. Adjusted asset links in the base template to be relative, enhancing portability and simplifying deployments. These changes aim to better reflect the project's current architecture and usage.
2024-07-01 10:50:00 +02:00
b27ace9cb0
feat(build): add dev flag to static site generation
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Updated the build-dev CI workflow to run the static site generation with a development flag. This ensures the build script runs in the appropriate context for development environments. No issues referenced.
2024-07-01 10:47:28 +02:00
0b0f8bb3b2
fix(build): ensure .gitignore is included in temp site
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
Added copying of .gitignore to the temporary static site location in both development and production build scripts. This prevents unnecessary files from being included in the new orphan branches, ensuring a cleaner and more efficient build process.
2024-07-01 10:37:42 +02:00
1434a3b552
Merge branch 'main' into dev
All checks were successful
Build and Deploy Static Site / build (push) Successful in 58s
2024-07-01 10:34:24 +02:00
1c9e1d6c68
fix(ci): force push to 'pages-dev' branch in build-dev workflow
Changed the force push target from 'pages' to 'pages-dev' to ensure the dev build process does not interfere with the production pages. This helps maintain a clear separation between development and production environments, reducing the risk of unintentional overwrites.
2024-07-01 10:34:16 +02:00
22529bfa65
Some checks failed
Build and Deploy Static Site / build (push) Failing after 58s
2024-07-01 10:31:52 +02:00
9030c527ef
Merge branch 'main' into dev
Some checks failed
Build and Deploy Static Site / build (push) Has been cancelled
2024-07-01 10:28:54 +02:00
ae2742ca58
chore(ci): rename build workflow and update branch targets
Renamed 'build.yml' to 'build-dev.yml' to clarify its purpose for development builds. Updated branch triggers and orphan branch naming to 'dev' and 'pages-dev' respectively to distinguish development deployment processes from production. This enhances workflow clarity and separation of concerns in CI/CD practices.
2024-07-01 10:27:21 +02:00
d337e8a207
feat(ci): automate build and deploy for dev and main branches
Some checks failed
Build and Deploy Static Site / build (push) Failing after 59s
- Added a new GitHub Actions workflow for the development branch to build and deploy the static site.
- Modified the existing workflow to trigger on the main branch instead of the static branch.
- Refactored the main.py script for consistency in string quotation.

The new workflow simplifies deployment processes during development, ensuring seamless and automated integration and testing.
2024-07-01 10:24:24 +02:00
42 changed files with 2039 additions and 1023 deletions

View 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

View 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

View file

@ -3,7 +3,7 @@ name: Build and Deploy Static Site
on:
push:
branches:
- static
- main
jobs:
build:
@ -30,6 +30,7 @@ jobs:
# 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

5
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,5 @@
{
"files.associations": {
"*.html": "jinja-html"
}
}

View file

@ -5,8 +5,9 @@
This is the source code for the [Private.coffee](https://private.coffee)
website.
It is a simple Flask application that generates the HTML for the website based
on the services defined in the `services.json` file.
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
@ -18,7 +19,9 @@ pip install -r requirements.txt
python main.py
```
The website will be available at `http://localhost:9810`.
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

View file

@ -37,6 +37,10 @@
color: #fff;
}
.button-wrapper:not(:last-child) {
margin-bottom: 1rem;
}
.btn-outline-primary {
--bs-btn-color: #f570b9;
--bs-btn-border-color: #f570b9;
@ -81,7 +85,7 @@ h5 {
font-size: x-large;
}
.card-body .btn-primary:not(:first-child) {
.card-body :not(p):not(:first-child):not(.dropdown-content):not(.dropdown-toggle-area) {
margin-top: 10px;
}
@ -119,6 +123,36 @@ h5 {
color: #604c2e;
}
/* Image Styles */
#logoContainer {
background-size: contain;
background-repeat: no-repeat;
max-width: 400px;
max-height: 400px;
width: 80vh;
height: 80vh;
}
#smallLogoContainer {
background-size: contain;
background-repeat: no-repeat;
width: 64px;
height: 64px;
}
.homemade,
.fork {
right: -0.5rem;
height: 1.5rem;
width: 1.5rem;
position: absolute;
}
.homemade svg,
.fork svg {
fill: var(--bs-primary-bg-subtle) !important;
}
.bs-icon.bs-icon-primary svg {
fill: var(--bs-primary-bg-subtle);
}
@ -131,10 +165,6 @@ h5 {
fill: var(--bs-primary-bg-subtle);
}
.bg-pride-gradient {
background: linear-gradient(45deg, #FF7878, #FFC898, #FFF89A, #CDF2CA, #A2CDCD, #D1E8E4, #CAB8FF);
}
/* Responsive Styles */
@media (max-width: 991px) {
p.text-center.special-header {
@ -263,3 +293,52 @@ h5 {
text-decoration: none;
color: black;
}
/* Accordion Styles */
.accordion {
border: 1px solid #ddd;
border-radius: 5px;
}
.accordion-item {
border-bottom: 1px solid #ddd;
}
.accordion-header {
display: flex;
align-items: center;
padding: 1rem;
cursor: pointer;
background-color: #f9f9f9;
font-size: 1.25rem;
font-weight: bold;
border-bottom: 1px solid #ddd;
}
.accordion-header:hover {
background-color: #e9e9e9;
}
.icon-container {
display: flex;
align-items: center;
margin-right: 1rem;
}
.bs-icon {
position: relative;
}
.accordion-body {
padding: 1rem;
display: none;
}
.accordion-item[open] .accordion-body {
display: block;
}
.accordion-header .bs-icon svg {
width: 32px;
}

View file

@ -0,0 +1,7 @@
#logoContainer {
background-image: url(../../img/logo-inv_grad.svg);
}
#smallLogoContainer {
background-image: url(../../img/logo-inv_grad.svg);
}

View file

@ -0,0 +1,11 @@
.bg-primary-gradient {
background: linear-gradient(45deg, #FF7878, #FFC898, #FFF89A, #CDF2CA, #A2CDCD, #D1E8E4, #CAB8FF);
}
#logoContainer {
background-image: url(../../img/logo-white.svg);
}
#smallLogoContainer {
background-image: url(../../img/logo-inv_grad.svg);
}

6
assets/dist/icons/LICENSE.md vendored Normal file
View file

@ -0,0 +1,6 @@
Unless otherwise specified, the files in this directory are taken from
[Phosphor Icons](https://phosphoricons.com/) and are licensed under the
MIT License. For details, please see the Phosphor Icons website.
The file `rainbow.svg` was created by us at [Private.coffee](https://private.coffee)
and is also licensed under the MIT License.

1
assets/dist/icons/books.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M231.65,194.55,198.46,36.75a16,16,0,0,0-19-12.39L132.65,34.42a16.08,16.08,0,0,0-12.3,19l33.19,157.8A16,16,0,0,0,169.16,224a16.25,16.25,0,0,0,3.38-.36l46.81-10.06A16.09,16.09,0,0,0,231.65,194.55ZM136,50.15c0-.06,0-.09,0-.09l46.8-10,3.33,15.87L139.33,66Zm6.62,31.47,46.82-10.05,3.34,15.9L146,97.53Zm6.64,31.57,46.82-10.06,13.3,63.24-46.82,10.06ZM216,197.94l-46.8,10-3.33-15.87L212.67,182,216,197.85C216,197.91,216,197.94,216,197.94ZM104,32H56A16,16,0,0,0,40,48V208a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V48A16,16,0,0,0,104,32ZM56,48h48V64H56Zm0,32h48v96H56Zm48,128H56V192h48v16Z"></path></svg>

After

Width:  |  Height:  |  Size: 700 B

1
assets/dist/icons/camera.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M208,56H180.28L166.65,35.56A8,8,0,0,0,160,32H96a8,8,0,0,0-6.65,3.56L75.71,56H48A24,24,0,0,0,24,80V192a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V80A24,24,0,0,0,208,56Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H80a8,8,0,0,0,6.66-3.56L100.28,48h55.43l13.63,20.44A8,8,0,0,0,176,72h32a8,8,0,0,1,8,8ZM128,88a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,88Zm0,72a28,28,0,1,1,28-28A28,28,0,0,1,128,160Z"></path></svg>

After

Width:  |  Height:  |  Size: 523 B

1
assets/dist/icons/hard-hat.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M224,152V136a96.37,96.37,0,0,0-64-90.51V40a16,16,0,0,0-16-16H112A16,16,0,0,0,96,40v5.49A96.37,96.37,0,0,0,32,136v16a16,16,0,0,0-16,16v24a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V168A16,16,0,0,0,224,152Zm-16-16v16H160V62.67A80.36,80.36,0,0,1,208,136ZM144,40V152H112V40ZM48,136A80.36,80.36,0,0,1,96,62.67V152H48Zm176,56H32V168H224v24Z"></path></svg>

After

Width:  |  Height:  |  Size: 455 B

1
assets/dist/icons/lock-key.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,112a28,28,0,0,0-8,54.83V184a8,8,0,0,0,16,0V166.83A28,28,0,0,0,128,112Zm0,40a12,12,0,1,1,12-12A12,12,0,0,1,128,152Zm80-72H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Z"></path></svg>

After

Width:  |  Height:  |  Size: 417 B

1
assets/dist/icons/map-trifold.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M228.92,49.69a8,8,0,0,0-6.86-1.45L160.93,63.52,99.58,32.84a8,8,0,0,0-5.52-.6l-64,16A8,8,0,0,0,24,56V200a8,8,0,0,0,9.94,7.76l61.13-15.28,61.35,30.68A8.15,8.15,0,0,0,160,224a8,8,0,0,0,1.94-.24l64-16A8,8,0,0,0,232,200V56A8,8,0,0,0,228.92,49.69ZM104,52.94l48,24V203.06l-48-24ZM40,62.25l48-12v127.5l-48,12Zm176,131.5-48,12V78.25l48-12Z"></path></svg>

After

Width:  |  Height:  |  Size: 454 B

1
assets/dist/icons/money-wavy.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M244.24,60a8,8,0,0,0-7.75-.4c-42.93,21-73.59,11.16-106,.78-34-10.89-69.25-22.14-117.95,1.64A8,8,0,0,0,8,69.24V189.17a8,8,0,0,0,11.51,7.19c42.93-21,73.59-11.16,106.05-.78,19.24,6.15,38.84,12.42,61,12.42,17.09,0,35.73-3.72,56.91-14.06a8,8,0,0,0,4.49-7.18V66.83A8,8,0,0,0,244.24,60ZM232,181.67c-40.6,18.17-70.25,8.69-101.56-1.32-19.24-6.15-38.84-12.42-61-12.42a122,122,0,0,0-45.4,9V74.33c40.6-18.17,70.25-8.69,101.56,1.32S189.14,96,232,79.09ZM128,96a32,32,0,1,0,32,32A32,32,0,0,0,128,96Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,128,144ZM56,96v48a8,8,0,0,1-16,0V96a8,8,0,1,1,16,0Zm144,64V112a8,8,0,1,1,16,0v48a8,8,0,1,1-16,0Z"></path></svg>

After

Width:  |  Height:  |  Size: 740 B

1
assets/dist/icons/qr-code.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M104,40H56A16,16,0,0,0,40,56v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V56A16,16,0,0,0,104,40Zm0,64H56V56h48v48Zm0,32H56a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V152A16,16,0,0,0,104,136Zm0,64H56V152h48v48ZM200,40H152a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm0,64H152V56h48v48Zm-64,72V144a8,8,0,0,1,16,0v32a8,8,0,0,1-16,0Zm80-16a8,8,0,0,1-8,8H184v40a8,8,0,0,1-8,8H144a8,8,0,0,1,0-16h24V144a8,8,0,0,1,16,0v8h24A8,8,0,0,1,216,160Zm0,32v16a8,8,0,0,1-16,0V192a8,8,0,0,1,16,0Z"></path></svg>

After

Width:  |  Height:  |  Size: 654 B

1
assets/dist/icons/question.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M140,180a12,12,0,1,1-12-12A12,12,0,0,1,140,180ZM128,72c-22.06,0-40,16.15-40,36v4a8,8,0,0,0,16,0v-4c0-11,10.77-20,24-20s24,9,24,20-10.77,20-24,20a8,8,0,0,0-8,8v8a8,8,0,0,0,16,0v-.72c18.24-3.35,32-17.9,32-35.28C168,88.15,150.06,72,128,72Zm104,56A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>

After

Width:  |  Height:  |  Size: 466 B

View file

@ -1,13 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="94" height="20" role="img" aria-label="LGBTIQ+">
<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="94" height="20" fill="#555"/>
<rect x="37" width="57" height="20" fill="#e05d44"/>
<rect x="46.5" width="47.5" height="20" fill="#fecc00"/>
<rect x="56" width="37" height="20" fill="#61c354"/>
<rect x="65.5" width="27" height="20" fill="#007ec6"/>
<rect x="75" width="17" height="20" fill="#744ca1"/>
<rect x="84.5" width="9.5" height="20" rx="3" ry="3" fill="#8b00ff"/>
<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="18.5" y="15" fill="#fff">LGBTIQ+</text>
<text x="27" y="15" fill="#fff">LGBTIQ+</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 757 B

After

Width:  |  Height:  |  Size: 956 B

1
assets/dist/icons/rss.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M106.91,149.09A71.53,71.53,0,0,1,128,200a8,8,0,0,1-16,0,56,56,0,0,0-56-56,8,8,0,0,1,0-16A71.53,71.53,0,0,1,106.91,149.09ZM56,80a8,8,0,0,0,0,16A104,104,0,0,1,160,200a8,8,0,0,0,16,0A120,120,0,0,0,56,80Zm118.79,1.21A166.9,166.9,0,0,0,56,32a8,8,0,0,0,0,16A151,151,0,0,1,163.48,92.52,151,151,0,0,1,208,200a8,8,0,0,0,16,0A166.9,166.9,0,0,0,174.79,81.21ZM60,184a12,12,0,1,0,12,12A12,12,0,0,0,60,184Z"></path></svg>

After

Width:  |  Height:  |  Size: 516 B

1
assets/dist/icons/train.svg vendored Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M184,24H72A32,32,0,0,0,40,56V184a32,32,0,0,0,32,32h8L65.6,235.2a8,8,0,1,0,12.8,9.6L100,216h56l21.6,28.8a8,8,0,1,0,12.8-9.6L176,216h8a32,32,0,0,0,32-32V56A32,32,0,0,0,184,24ZM56,120V80h64v40Zm80-40h64v40H136ZM72,40H184a16,16,0,0,1,16,16v8H56V56A16,16,0,0,1,72,40ZM184,200H72a16,16,0,0,1-16-16V136H200v48A16,16,0,0,1,184,200ZM96,172a12,12,0,1,1-12-12A12,12,0,0,1,96,172Zm88,0a12,12,0,1,1-12-12A12,12,0,0,1,184,172Z"></path></svg>

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

68
assets/img/logo-white.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

44
data/bridges.json Normal file
View file

@ -0,0 +1,44 @@
{
"bridges": [
{
"name": "Telegram",
"mxid": "@telegrambot:private.coffee"
},
{
"name": "WhatsApp",
"mxid": "@whatsappbot:private.coffee"
},
{
"name": "Signal",
"mxid": "@signalbot:private.coffee"
},
{
"name": "Discord",
"mxid": "@discordbot:private.coffee"
},
{
"name": "Slack",
"mxid": "@slackbot:private.coffee"
},
{
"name": "LinkedIn",
"mxid": "@linkedinbot:private.coffee"
},
{
"name": "GPT-4o",
"mxid": "@gptbot:private.coffee"
},
{
"name": "RSS/Atom feeds",
"mxid": "@rssbot:private.coffee"
},
{
"name": "Instagram",
"mxid": "@instagrambot:private.coffee"
},
{
"name": "Facebook",
"mxid": "@facebookbot:private.coffee"
}
]
}

View file

@ -1,19 +1,18 @@
{
"2024": {
"4": {
"04": {
"Membership Fees": {
"EUR": 365
},
"Server Costs": {
"EUR": -216.57
},
"Domain Names": {},
"Administrative Expenses": {
"EUR": -36.10,
"Notes": "Administrative fee for the formation of the association"
}
},
"5": {
"05": {
"Membership Fees": {
"EUR": 390
},
@ -26,7 +25,7 @@
"Notes": "Includes setup costs and two monthly payments for new server"
}
},
"6": {
"06": {
"Membership Fees": {
"EUR": 382.42
},
@ -37,9 +36,39 @@
"EUR": -49.05
}
},
"7": {
"07": {
"Membership Fees": {
"EUR": 20
"EUR": 422.42
},
"Donations": {
"XMR": 1.0
},
"Server Costs": {
"EUR": -264.99
}
},
"08": {
"Membership Fees": {
"EUR": 402.42
},
"Server Costs": {
"EUR": -416.47
}
},
"09": {
"Membership Fees": {
"EUR": 468.11
},
"Server Costs": {
"EUR": -243.46
},
"Bank Fees": {
"EUR": -53.32
}
},
"10": {
"Membership Fees": {
"EUR": 30.23
}
}
}

View file

@ -3,8 +3,11 @@
{
"name": "Matrix",
"url": "https://element.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "decentralized messaging",
"short_description": "Matrix is an open network for secure, decentralized communication.",
"long_description": "Private.coffee runs a Matrix server. You can use it to chat with other people at Private.coffee or around the world. Use it with a client of your choice, or use our Element web client.",
"long_description": "Private.coffee runs a Matrix server. You can use it to chat with other people at Private.coffee or around the world. Public registrations are currently disabled, send an email to support@private.coffee to request an account.",
"status": "OK",
"links": [
{
@ -16,6 +19,10 @@
"url": "http://element.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion"
}
]
},
{
"name": "Go to Hydrogen",
"url": "https://hydrogen.private.coffee"
}
],
"icon": "matrix-logo",
@ -25,6 +32,9 @@
{
"name": "CryptPad",
"url": "https://cryptpad.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "collaborative document editing",
"short_description": "Private, encrypted, real-time collaborative editor.",
"long_description": "CryptPad is a private, encrypted, zero-knowledge, realtime collaborative editor, similar to Google Docs and Office 365.",
"status": "OK",
@ -38,35 +48,12 @@
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Piped / Invidious",
"url": "https://piped.private.coffee",
"short_description": "Watch YouTube videos without Google tracking.",
"long_description": "Piped and Invidious are alternative front-ends to YouTube. They allow you to watch YouTube videos without Google tracking you.",
"status": "OK",
"links": [
{
"name": "Go to Piped",
"url": "https://piped.private.coffee"
},
{
"name": "Go to Invidious",
"url": "https://invidious.private.coffee",
"alternatives": [
{
"name": "Tor",
"url": "http://invidious.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion"
}
]
}
],
"icon": "video",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Transfer.coffee",
"url": "https://transfer.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/transfer.coffee",
"fork": false,
"tiny_description": "secure direct file transfer",
"short_description": "Transfer files securely using peer-to-peer connections.",
"long_description": "Transfer.coffee allows you to transfer files securely using peer-to-peer connections. Your files are never stored on our servers.",
"status": "OK",
@ -83,6 +70,9 @@
{
"name": "MyIP.Coffee",
"url": "https://myip.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/myip.coffee",
"fork": false,
"tiny_description": "check your IP address",
"short_description": "Check your IP address.",
"long_description": "MyIP.Coffee allows you to check your current IPv4 and IPv6 addresses.",
"status": "OK",
@ -96,11 +86,33 @@
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Overleaf",
"url": "https://overleaf.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "collaborative LaTeX editor",
"short_description": "Overleaf is an online LaTeX editor for writing and sharing documents.",
"long_description": "Overleaf is an online LaTeX editor for writing and sharing documents. It allows you to write documents in LaTeX, and to collaborate with others.",
"status": "OK",
"links": [
{
"name": "Go to Overleaf",
"url": "https://overleaf.private.coffee"
}
],
"icon": "leaf",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Mastodon",
"url": "https://cuddly.space",
"homemade": false,
"fork": false,
"tiny_description": "decentralized social network",
"short_description": "Mastodon is a decentralized social network.",
"long_description": "Mastodon is a decentralized social network. You can use it to post short messages, follow other people, and more.",
"long_description": "Mastodon is a decentralized social network. You can use it to post short messages, follow other people, and more. Registrations are open to everyone on Cuddly Space.",
"status": "OK",
"links": [
{
@ -119,6 +131,9 @@
{
"name": "Forgejo",
"url": "https://git.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "self-hosted Git forge",
"short_description": "Forgejo is our in-house Git forge.",
"long_description": "Forgejo is our in-house Git forge. You can use it to host your Git repositories, and to collaborate with others.",
"status": "OK",
@ -135,6 +150,9 @@
{
"name": "BigBlueButton",
"url": "https://bbb.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "video conferencing",
"short_description": "BigBlueButton is an open-source video conferencing system.",
"long_description": "BigBlueButton is an open-source video conferencing system. You can use it to hold video conferences, webinars, and more.",
"status": "OK",
@ -151,6 +169,9 @@
{
"name": "HedgeDoc",
"url": "https://hedgedoc.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "collaborative markdown editor",
"short_description": "HedgeDoc is an open-source collaborative markdown editor.",
"long_description": "HedgeDoc is an open-source collaborative markdown editor. You can use it to write and edit documents in markdown, and to collaborate with others.",
"status": "OK",
@ -164,9 +185,88 @@
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "FacilMap",
"url": "https://facilmap.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "open-source map editor",
"short_description": "FacilMap is an open-source map editor.",
"long_description": "FacilMap is an open-source map editor. You can use it to create and edit maps, and to share them with others.",
"status": "OK",
"links": [
{
"name": "Go to FacilMap",
"url": "https://facilmap.private.coffee"
}
],
"icon": "map-trifold",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "OTS - One Time Secrets",
"url": "https://ots.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "share secrets securely",
"short_description": "OTS is a service for sharing secrets securely.",
"long_description": "OTS is a service for sharing secrets securely. You can use it to share passwords, API keys, and other sensitive information.",
"status": "OK",
"links": [
{
"name": "Go to OTS",
"url": "https://ots.private.coffee"
}
],
"icon": "lock-key",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "QRMaker",
"url": "https://qrmaker.private.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/QRMaker",
"fork": false,
"tiny_description": "QR code generator",
"short_description": "QRMaker is a service for generating QR codes.",
"long_description": "QRMaker is a service for generating QR codes. You can use it to create QR codes for URLs, text, and more, directly in your browser.",
"status": "OK",
"links": [
{
"name": "Go to QRMaker",
"url": "https://qrmaker.private.coffee"
}
],
"icon": "qr-code",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "FreshRSS",
"url": "https://freshrss.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "RSS feed reader",
"short_description": "FreshRSS is a RSS feed reader.",
"long_description": "FreshRSS is a RSS feed reader. You can use it to subscribe to RSS feeds and read the latest articles from your favorite websites.",
"status": "OK",
"links": [
{
"name": "Go to FreshRSS",
"url": "https://freshrss.private.coffee"
}
],
"icon": "rss",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "redlib",
"url": "https://redlib.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free Reddit",
"short_description": "redlib is a privacy-friendly alternative front-end to Reddit.",
"long_description": "redlib is a privacy-friendly alternative front-end to Reddit. It allows you to browse Reddit without being tracked.",
"status": "OK",
@ -180,9 +280,50 @@
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "CyberChef",
"url": "https://cyberchef.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "Web app for encryption and encoding",
"short_description": "CyberChef is a web app for encryption, encoding, compression, and data analysis.",
"long_description": "CyberChef is a web app for encryption, encoding, compression, and data analysis. It allows you to perform a wide range of operations on your data within your browser.",
"status": "OK",
"links": [
{
"name": "Go to CyberChef",
"url": "https://cyberchef.private.coffee"
}
],
"icon": "lock-key",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Travelynx",
"url": "https://traveling.coffee",
"homemade": false,
"fork": false,
"tiny_description": "rail journey logger (German)",
"short_description": "Travelynx is a service for logging your rail journeys. (German)",
"long_description": "Travelynx is a service for logging your rail journeys, primarily for Germany and surrounding Europe. You can use it to keep track of the trains you've taken, and to view statistics about your trips.",
"status": "OK",
"links": [
{
"name": "Go to Travelynx",
"url": "https://traveling.coffee"
}
],
"icon": "train",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "AllTube",
"url": "https://alltube.private.coffee",
"homemade": false,
"fork": "https://git.private.coffee/PrivateCoffee/alltube",
"tiny_description": "universal video downloader",
"short_description": "Download videos from YouTube, Vimeo, and more.",
"long_description": "AllTube is a video downloader powered by yt-dlp. It allows you to download videos from YouTube, Vimeo, and many other sites. You can also stream the download through our server for extra privacy.",
"status": "OK",
@ -196,9 +337,56 @@
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Invidious",
"url": "https://invidious.private.coffee",
"homemade": false,
"fork": "https://git.private.coffee/PrivateCoffee/invidious",
"tiny_description": "tracking-free YouTube",
"short_description": "Watch YouTube videos without Google tracking.",
"long_description": "Invidious is an alternative front-end to YouTube. Unfortunately, it is under attack from Google, and is mostly unusable at the moment.",
"status": "NOK",
"links": [
{
"name": "Go to Invidious",
"url": "https://invidious.private.coffee",
"alternatives": [
{
"name": "Tor",
"url": "http://invidious.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion"
}
]
}
],
"icon": "video",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Piped",
"url": "https://piped.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free YouTube",
"short_description": "Watch YouTube videos without Google tracking.",
"long_description": "Piped is an alternative front-end to YouTube. Unfortunately, it is under attack from Google, and is mostly unusable at the moment.",
"status": "NOK",
"links": [
{
"name": "Go to Piped",
"url": "https://piped.private.coffee"
}
],
"icon": "video",
"exclude_from_index": true,
"exclude_from_simple": true
},
{
"name": "Structables",
"url": "https://structables.private.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/structables",
"fork": false,
"tiny_description": "tracking-free Instructables",
"short_description": "Browse Instructables without being tracked.",
"long_description": "Structables allows you to browse Instructables without being tracked.",
"status": "OK",
@ -212,9 +400,144 @@
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Quetre",
"url": "https://quetre.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free Quora",
"short_description": "Quetre is a privacy-friendly alternative front-end to Quora.",
"long_description": "Quetre is a privacy-friendly alternative front-end to Quora. It allows you to browse Quora without being tracked or having to log in.",
"status": "OK",
"links": [
{
"name": "Go to Quetre",
"url": "https://quetre.private.coffee",
"alternatives": [
{
"name": "Tor",
"url": "http://quetre.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion"
}
]
}
],
"icon": "question",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Wikimore",
"url": "https://wikimore.private.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/wikimore",
"fork": false,
"tiny_description": "censorship-free Wikipedia",
"short_description": "Wikimore is a privacy-friendly alternative front-end to Wikimedia wikis.",
"long_description": "Wikimore is a privacy-friendly alternative front-end to Wikipedia and other Wikimedia wikis.",
"status": "OK",
"links": [
{
"name": "Go to Wikimore",
"url": "https://wikimore.private.coffee",
"alternatives": [
{
"name": "Tor",
"url": "http://wikimore.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion"
}
]
}
],
"icon": "books",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Priviblur",
"url": "https://priviblur.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free Tumblr",
"short_description": "Priviblur is a privacy-friendly alternative front-end to Tumblr.",
"long_description": "Priviblur is a privacy-friendly alternative front-end to Tumblr. It allows you to browse Tumblr without being tracked.",
"status": "OK",
"links": [
{
"name": "Go to Priviblur",
"url": "https://priviblur.private.coffee",
"alternatives": [
{
"name": "Tor",
"url": "http://priviblur.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion"
}
]
}
],
"icon": "camera",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "BiblioReads",
"url": "https://biblioreads.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free Goodreads",
"short_description": "BiblioReads is a privacy-friendly alternative front-end to Goodreads.",
"long_description": "BiblioReads is a privacy-friendly alternative front-end to Goodreads. It allows you to browse Goodreads without being tracked.",
"status": "OK",
"links": [
{
"name": "Go to BiblioReads",
"url": "https://biblioreads.private.coffee"
}
],
"icon": "books",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Small",
"url": "https://small.private.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/small",
"fork": false,
"tiny_description": "tracking-free Medium",
"short_description": "Small is a privacy-friendly alternative front-end to Medium.",
"long_description": "Small is a privacy-friendly alternative front-end to Medium. It allows you to browse Medium without being tracked.",
"status": "OK",
"links": [
{
"name": "Go to Small",
"url": "https://small.private.coffee"
}
],
"icon": "pencil-ruler",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Scribe",
"url": "https://scribe.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free Medium",
"short_description": "Scribe is a privacy-friendly alternative front-end to Medium.",
"long_description": "Scribe is a privacy-friendly alternative front-end to Medium. It allows you to browse Medium without being tracked.",
"status": "OK",
"links": [
{
"name": "Go to Scribe",
"url": "https://scribe.private.coffee"
}
],
"icon": "pencil-ruler",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "LibreTranslate",
"url": "https://translate.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "self-hosted translation",
"short_description": "LibreTranslate is a self-hosted translation service powered by Argos Translate.",
"long_description": "LibreTranslate is a self-hosted translation service powered by Argos Translate. It allows you to translate text between many languages.",
"status": "OK",
@ -225,13 +548,16 @@
}
],
"icon": "translate",
"exclude_from_index": false,
"exclude_from_simple": false
"exclude_from_index": true,
"exclude_from_simple": true
},
{
"name": "wishthis",
"url": "https://wishthis.private.coffee",
"short_description": "wishthis is a service for creating wishlists.",
"homemade": false,
"fork": false,
"tiny_description": "create and share wishlists",
"short_description": "wishthis is a service for creating and sharing wishlists.",
"long_description": "wishthis is a service for creating wishlists. You can use it to create wishlists for yourself, or to share them with others.",
"status": "OK",
"links": [
@ -244,9 +570,56 @@
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "BreezeWiki",
"url": "https://breezewiki.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free Fandom",
"short_description": "BreezeWiki is a privacy-friendly alternative front-end to Fandom.",
"long_description": "BreezeWiki is a privacy-friendly alternative front-end to Fandom. It allows you to browse Fandom wikis without ads or tracking.",
"status": "OK",
"links": [
{
"name": "Go to BreezeWiki",
"url": "https://breezewiki.private.coffee",
"alternatives": [
{
"name": "Tor",
"url": "http://breezewiki.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion"
}
]
}
],
"icon": "books",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Ducks for Ducks",
"url": "https://ducksforducks.private.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/ducksforducks",
"fork": false,
"tiny_description": "a private front-end to Geeks for Geeks",
"short_description": "Ducks for Ducks is a privacy-friendly alternative front-end to Geeks for Geeks.",
"long_description": "Ducks for Ducks is a privacy-friendly alternative front-end to Geeks for Geeks. It allows you to browse Geeks for Geeks without ads or tracking.",
"status": "OK",
"links": [
{
"name": "Go to Ducks for Ducks",
"url": "https://ducksforducks.private.coffee"
}
],
"icon": "books",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "NocoDB",
"url": "https://nocodb.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "Airtable alternative",
"short_description": "NocoDB is a self-hosted alternative to Airtable.",
"long_description": "NocoDB is a self-hosted alternative to Airtable. It allows you to create databases and tables, and to view and edit them in a spreadsheet-like interface. (Note: If you are unable to create tables upon registration, simply wait a minute or two, log out and then log in again. Note that your email address will be visible to all registered users!)",
"status": "OK",
@ -263,6 +636,9 @@
{
"name": "Penpot",
"url": "https://penpot.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "open-source design platform",
"short_description": "Penpot is an open-source design and prototyping platform.",
"long_description": "Penpot is an open-source design and prototyping platform. It allows you to create designs and prototypes, and to collaborate with others.",
"status": "OK",
@ -273,12 +649,34 @@
}
],
"icon": "pencil-ruler",
"exclude_from_index": true,
"exclude_from_simple": true
},
{
"name": "tldraw",
"url": "https://tldraw.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "collaborative whiteboard",
"short_description": "tldraw is a collaborative whiteboard.",
"long_description": "tldraw is a collaborative whiteboard. You can use it to draw and write with others in real-time.",
"status": "OK",
"links": [
{
"name": "Go to tldraw",
"url": "https://tldraw.private.coffee"
}
],
"icon": "pencil-ruler",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "YOURLS",
"url": "https://pcof.fi",
"homemade": false,
"fork": false,
"tiny_description": "URL shortener",
"short_description": "URL shortener for creating handy links.",
"long_description": "Use our URL shortener at pcof.fi to turn long, complicated URLs into something more handy.",
"status": "OK",
@ -295,6 +693,9 @@
{
"name": "Rallly",
"url": "https://rallly.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "collaborative scheduling (Doodle)",
"short_description": "Rallly is a free collaborative scheduling service for voting and polls.",
"long_description": "Rallly is a free collaborative scheduling service. It allows you to create polls and vote on them, similar to Doodle. Pro features are enabled for free after signing in.",
"status": "OK",
@ -311,38 +712,38 @@
{
"name": "LibreY",
"url": "https://librey.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "search engine",
"short_description": "Privacy-friendly metasearch engine.",
"long_description": "LibreY is an open-source, privacy-friendly metasearch engine. It allows you to search for web, image, video, torrents, and more, and it can also search onion sites.",
"status": "OK",
"links": [
{
"name": "Go to LibreY",
"url": "https://librey.private.coffee"
"url": "https://librey.private.coffee",
"alternatives": [
{
"name": "Tor",
"url": "http://librey.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion"
},
{
"name": "I2P",
"url": "http://xna5ydrj54ncvujz3f4c6y5i547hjwywygnr4uz6shz3f62suxwq.b32.i2p"
}
]
}
],
"icon": "magnifying-glass",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Overleaf",
"url": "https://overleaf.private.coffee",
"short_description": "Overleaf is an online LaTeX editor for writing and sharing documents.",
"long_description": "Overleaf is an online LaTeX editor for writing and sharing documents. It allows you to write documents in LaTeX, and to collaborate with others.",
"status": "OK",
"links": [
{
"name": "Go to Overleaf",
"url": "https://overleaf.private.coffee"
}
],
"icon": "leaf",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "GotHub",
"url": "https://gothub.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free GitHub",
"short_description": "Alternative GitHub interface that respects privacy.",
"long_description": "Gothub is an alternative GitHub interface that respects your privacy. It is currently in alpha, but you can browse and download repositories, and you can also clone them using git+https (although the text on the main page would disagree).",
"status": "OK",
@ -359,6 +760,9 @@
{
"name": "Binternet",
"url": "https://binternet.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "tracking-free Pinterest",
"short_description": "Binternet is a privacy-friendly alternative front-end to Pinterest.",
"long_description": "Binternet is a privacy-friendly alternative front-end to Pinterest. It allows you to browse Pinterest without being tracked.",
"status": "OK",
@ -371,6 +775,120 @@
"icon": "images",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Moner.ooo",
"url": "https://monerooo.private.coffee",
"homemade": false,
"fork": "https://git.private.coffee/kumi/moner.ooo",
"tiny_description": "Monero/fiat exchange rates",
"short_description": "Moner.ooo is a service for checking Monero/fiat exchange rates.",
"long_description": "Moner.ooo is a service for checking Monero/fiat exchange rates. It allows you to see the current exchange rates for Monero in various fiat currencies.",
"status": "OK",
"links": [
{
"name": "Go to Moner.ooo",
"url": "https://monerooo.private.coffee"
}
],
"icon": "money-wavy",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "httpbin",
"url": "https://httpbin.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "HTTP request testing service",
"short_description": "httpbin is a service for testing HTTP requests.",
"long_description": "httpbin is a service for testing HTTP requests. You can use it to see what your browser sends to a server, and to test various HTTP methods.",
"status": "OK",
"links": [
{
"name": "Go to httpbin",
"url": "https://httpbin.private.coffee"
}
],
"icon": "network",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "Overpass",
"url": "https://overpass.private.coffee",
"homemade": false,
"fork": false,
"tiny_description": "OpenStreetMap API",
"short_description": "Overpass is an API for OpenStreetMap.",
"long_description": "Overpass is an API for OpenStreetMap. You can use it to query OpenStreetMap data, and to get the results in various formats.",
"status": "OK",
"links": [
{
"name": "Go to Overpass",
"url": "https://overpass.private.coffee"
}
],
"icon": "map-trifold",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "GoogleDonts",
"url": "https://googledonts.private.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/googledonts",
"fork": false,
"tiny_description": "privacy-friendly Google Fonts proxy",
"short_description": "GoogleDonts is a privacy-friendly proxy to Google Fonts.",
"long_description": "GoogleDonts is a privacy-friendly proxy to Google Fonts. It allows you to use Google Fonts without being tracked by Google.",
"status": "OK",
"links": [
{
"name": "Go to GoogleDonts",
"url": "https://googledonts.private.coffee"
}
],
"icon": "hard-hat",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "nocdnbs",
"url": "https://nocdnbs.private.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/nocdnbs",
"fork": false,
"tiny_description": "privacy-friendly cdnjs proxy",
"short_description": "nocdnbs is a privacy-friendly proxy to cdnjs.cloudflare.com",
"long_description": "nocdnbs is a privacy-friendly proxy to cdnjs.cloudflare.com. It allows you to use the cdnjs.cloudflare.com library without being tracked by Cloudflare.",
"status": "OK",
"links": [
{
"name": "Go to nocdnbs",
"url": "https://nocdnbs.private.coffee"
}
],
"icon": "hard-hat",
"exclude_from_index": false,
"exclude_from_simple": false
},
{
"name": "nobsdelivr",
"url": "https://nobsdelivr.private.coffee",
"homemade": "https://git.private.coffee/PrivateCoffee/nobsdelivr",
"fork": false,
"tiny_description": "privacy-friendly jsDelivr proxy",
"short_description": "nobsdelivr is a privacy-friendly proxy to cdn.jsdelivr.net",
"long_description": "nobsdelivr is a privacy-friendly proxy to cdn.jsdelivr.net. It allows you to use the cdn.jsdelivr.net library without being tracked by jsDelivr.",
"status": "OK",
"links": [
{
"name": "Go to nobsdelivr",
"url": "https://nobsdelivr.private.coffee"
}
],
"icon": "hard-hat",
"exclude_from_index": false,
"exclude_from_simple": false
}
]
}

View file

@ -30,12 +30,12 @@ def get_transparency_data(data, year=None, month=None, allow_current=False):
month = max(data[year].keys())
year = str(year)
month = str(month)
month = str(month).zfill(2)
if (
not allow_current
and year == str(datetime.now().year)
and month == str(datetime.now().month)
and month == str(datetime.now().month).zfill(2)
):
try:
month = max([m for m in data[year].keys() if m != str(datetime.now().month)])

111
main.py
View file

@ -1,10 +1,13 @@
from jinja2 import Environment, FileSystemLoader, TemplateNotFound
import json
import pathlib
import os
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 (
@ -13,37 +16,60 @@ from helpers.finances import (
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'))
env = Environment(loader=FileSystemLoader("templates"))
# Set up the output directory for static files
output_dir = pathlib.Path('build')
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"
icon_path = pathlib.Path("assets") / f"dist/icons/{icon_name}.svg"
try:
with open(icon_path, 'r', encoding='utf-8') as file:
with open(icon_path, "r", encoding="utf-8") as file:
file_content = file.read()
except FileNotFoundError:
file_content = ''
file_content = ""
return file_content
env.filters['icon'] = icon
env.filters["icon"] = icon
# Filter for rendering a month name from a number
def month_name(month_number):
return datetime.date(1900, int(month_number), 1).strftime("%B")
env.filters["month_name"] = month_name
def render_template_to_file(template_name, output_name, **kwargs):
try:
template = env.get_template(template_name)
output_path = output_dir / output_name
with open(output_path, 'w', encoding='utf-8') as f:
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):
def generate_static_site(development_mode=False, theme="plain"):
# Common context
kwargs = {}
kwargs = {
"timestamp": int(datetime.datetime.now().timestamp()),
"theme": theme,
}
if development_mode:
kwargs.update(
{
@ -61,27 +87,41 @@ def generate_static_site(development_mode=False):
(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'):
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 == "membership":
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)
get_transparency_data(
finances, finances_year, finances_month, allow_current
)
context.update({
)
context.update(
{
"finances": finances_table,
"finances_period": finances_period_str,
})
}
)
if template_name == "transparency":
finance_data = {}
@ -90,11 +130,13 @@ def generate_static_site(development_mode=False):
if year not in finance_data:
finance_data[year] = {}
finance_data[year][month] = generate_transparency_table(
get_transparency_data(finances, year, month)
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)
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"]
@ -108,21 +150,40 @@ def generate_static_site(development_mode=False):
response += f'privatecoffee_balance{{currency="{currency}"}} {balance}\n'
metrics_path = output_dir / "metrics.txt"
with open(metrics_path, 'w', encoding='utf-8') as f:
with open(metrics_path, "w", encoding="utf-8") as f:
f.write(response)
# Copy static assets
assets_src = pathlib.Path('assets')
assets_dst = output_dir / 'assets'
if assets_dst.exists():
shutil.rmtree(assets_dst)
shutil.copytree(assets_src, assets_dst)
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)
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()

View file

@ -1,2 +1 @@
flask
jinja2

View file

@ -3,52 +3,73 @@
<!-- This file was created as part of the Private.coffee project
It is licensed under the MIT license
For more information, please visit https://private.coffee -->
<head>
<meta charset="utf8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
/>
<title>{% block title %}{% endblock %} - Private.coffee</title>
<link rel="stylesheet" href="/assets/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="/assets/css/base.css" />
<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>
{% block title %}{% endblock title %}
- Private.coffee</title>
<link rel="stylesheet" href="assets/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="assets/css/base.css?v={{ timestamp }}" />
<link rel="stylesheet"
href="assets/css/theme/{{ theme }}.css?v={{ timestamp }}" />
</head>
<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">
<div class="container">
<div class="row d-lg-flex align-items-lg-center">
<div class="col p-0">
<a href="/"
><img src="/assets/img/logo-inv_grad.svg" style="height: 60px"
/></a>
<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 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 &amp; SUPPORT</a>
<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 &amp; SUPPORT</a>
</div>
</div>
</nav>
{% if warning %}{{ warning|safe }}{% endif %}
@ -56,40 +77,41 @@
<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"
>
<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>
<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="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"
>{{ "coffee" | icon | safe }}</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>
<p class="text-muted">
Private.coffee is a privacy-focused non-profit association, dedicated
to supporting privacy and digital sovereignty.
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"
>
<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">{{ "rainbow" | icon | safe }}</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">{{ "rainbow" | icon | safe }}</a>
</p>
</div>
</div>
</footer>
</body>

29
templates/bridges.html Normal file
View 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>

View file

@ -1,4 +1,6 @@
{% extends "base.html" %} {% block title %}Home{% endblock %} {% block content
{% 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">
@ -7,9 +9,12 @@
<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>
<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 class="col-12 col-lg-10 mx-auto justify-content-center d-flex"><img class="mx-auto" src="/assets/img/logo-inv_grad.svg" style="max-width: 400px;width: 80vw;"></div>
</div>
</div>
</header>
@ -25,52 +30,56 @@
</div>
</div>
<div class="py-5 p-lg-5">
<div
class="row row-cols-1 row-cols-md-2 row-cols-lg-3 mx-auto"
style="max-width: 1200px"
>
{% for service in services.services %} {% if not
<div class="accordion">
{% for service in services.services %}
{% if not
service.exclude_from_index %}
<div class="col mb-5">
<div class="card shadow-sm">
<div class="card-body px-4 py-5 px-md-5">
<details class="accordion-item">
<summary class="accordion-header">
{% if service.icon %}
<div
class="bs-icon-lg d-flex justify-content-center align-items-center mb-3 bs-icon"
style="top: 1rem; right: 1rem; position: absolute"
>
{{ service.icon | icon | safe }}
</div>
<div class="bs-icon-lg d-flex justify-content-center align-items-center bs-icon"
title="{{ service.name }}">{{ service.icon | icon | safe }}</div>
{% endif %}
<h5 class="fw-bold card-title">{{ service.name }}</h5>
<p class="text-muted card-text mb-4">
{{ service.long_description }}
</p>
{% for link in service.links %} {% if link.alternatives %}
<div class="dropdown">
<div class="btn btn-primary shadow">
<a class="main-link" href="{{ link.url }}">
{{ link.name }}
{{ 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">&#9660;</div>
</div>
<div class="dropdown-content">
{% for alternative in link.alternatives %}
<a href="{{ alternative.url }}">{{ alternative.name }}</a>
{% endfor %}
{% for alternative in link.alternatives %}<a href="{{ alternative.url }}">{{ alternative.name }}</a>{% endfor %}
</div>
</div>
{% else %}
<a
class="btn btn-primary shadow w-100 text-center"
href="{{ link.url }}"
>{{ link.name }}</a
>
{% endif %} {% endfor %}
<a class="button-wrapper btn btn-primary shadow w-100 text-center"
href="{{ link.url }}">{{ link.name }}</a>
{% endif %}
{% endfor %}
</div>
</div>
</div>
{% endif %} {% endfor %}
</details>
{% endif %}
{% endfor %}
</div>
</div>
</div>
@ -96,29 +105,17 @@
<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
>
<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
>
<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>
@ -135,16 +132,10 @@
</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="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"
>
<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">
@ -156,25 +147,16 @@
</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="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"
>
<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
>
<a href="https://matrix.pcof.fi/#/#private.coffee:private.coffee">#private.coffee:private.coffee</a>
</p>
</div>
</div>
@ -183,4 +165,4 @@
</div>
</div>
</section>
{% endblock %}
{% endblock content %}

View file

@ -1,13 +1,11 @@
{% extends "base.html" %}
{% block title %}Legal Notice{% endblock %}
{% 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>
<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">
@ -18,17 +16,21 @@
</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 &dash; Verein zur Förderung von Privatsphäre und
digitaler Souver&auml;nit&auml;t<br />
c/o Klaus-Uwe Mitterer<br />
Gartengasse 22/7/3<br />
8010 Graz<br />
Austria<br />
digitaler Souver&auml;nit&auml;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>
@ -38,4 +40,4 @@
</div>
</div>
</section>
{% endblock %}
{% endblock content %}

View 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 %}

View file

@ -1,4 +1,7 @@
{% extends "base.html" %} {% block title %}Membership / Donations{% endblock %}
{% extends "base.html" %}
{% block title %}
Membership / Donations
{% endblock title %}
{% block content %}
<div class="container my-5">
<div class="text-center mb-5">
@ -10,7 +13,7 @@
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">
@ -22,16 +25,11 @@
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>
<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">
@ -41,13 +39,18 @@
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>
<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">
@ -62,9 +65,7 @@
</p>
<p class="card-text">
<b>Monero (XMR):</b>
<code
>487Ny4iBk2pKGJwjyYrumFD8xFmrS6jCSXNA8e5EvVJ49GyS54CRDVz514MBnXgNT1EioKYiagHs33sLzUAFj8i3Pwg3AMS</code
>
<code>487Ny4iBk2pKGJwjyYrumFD8xFmrS6jCSXNA8e5EvVJ49GyS54CRDVz514MBnXgNT1EioKYiagHs33sLzUAFj8i3Pwg3AMS</code>
</p>
<p class="card-text">
<b>Ethereum (ETH):</b> <code>Coming soon&trade;</code>
@ -77,7 +78,6 @@
</div>
</div>
</div>
<div class="card shadow-sm mt-4">
<div class="card-body">
<h5 class="card-title">Transparency Report for {{ finances_period }}</h5>
@ -94,30 +94,22 @@
</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
>
<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
>.
<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
>
<a href="https://matrix.pcof.fi/#/#private.coffee:private.coffee">Matrix</a>
for more information.
</p>
</div>
</div>
</div>
{% endblock %}
{% endblock content %}

View file

@ -1,4 +1,5 @@
{% extends "base.html" %} {% block title %}Privacy Policy{% endblock %}
{% extends "base.html" %}
{% block title %}Privacy Policy{% endblock %}
{% block content %}
<div class="container">
<div class="text-center mb-5">
@ -23,11 +24,16 @@
<p>The data controller for private.coffee is:</p>
<address>
Private.coffee &dash; Verein zur Förderung von Privatsphäre und digitaler
Souver&auml;nit&auml;t<br />
c/o Klaus-Uwe Mitterer<br />
Gartengasse 22/7/3<br />
8010 Graz<br />
Austria<br />
Souver&auml;nit&auml;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>
@ -71,9 +77,7 @@
<li>Providing support to you</li>
<li>Processing donations and memberships</li>
</ul>
<p>
All of those are what is called "legitimate interests" in legal speak.
</p>
<p>All of those are what is called "legitimate interests" in legal speak.</p>
<p>
We do not use your data for any other purposes, including marketing,
advertising, or tracking, we do not share your data with third parties
@ -153,10 +157,7 @@
If you are not satisfied with our response, or believe that we are
processing your data in a way that is not compliant with the law, you have
the right to lodge a complaint with the supervisory authority in your
country. In Austria, this is the Austrian Data Protection Authority (<a
href="https://www.dsb.gv.at/"
>https://www.dsb.gv.at/</a
>). However, we like to think of ourselves as nice people and will try to
country. In Austria, this is the Austrian Data Protection Authority (<a href="https://www.dsb.gv.at/">https://www.dsb.gv.at/</a>). However, we like to think of ourselves as nice people and will try to
help you out directly, and are always open to suggestions for improvement,
so please do get in touch with us if you have any questions or concerns.
</p>

View file

@ -1,6 +1,5 @@
<div class="alert alert-warning text-center" role="alert">
This is a development version of the Private.coffee website. For the live
version, please visit
<a href="https://private.coffee" class="alert-link">https://private.coffee</a
>.
<a href="https://private.coffee" class="alert-link">https://private.coffee</a>.
</div>

View file

@ -6,25 +6,55 @@
<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;">
<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>
<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>
<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>
<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>

View file

@ -15,11 +15,16 @@
<p>The website private.coffee is run by:</p>
<address>
Private.coffee &dash; Verein zur Förderung von Privatsphäre und digitaler
Souver&auml;nit&auml;t<br />
c/o Klaus-Uwe Mitterer<br />
Gartengasse 22/7/3<br />
8010 Graz<br />
Austria<br />
Souver&auml;nit&auml;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>

View file

@ -1,4 +1,5 @@
{% extends "base.html" %} {% block title %}Membership / Donations{% endblock %}
{% extends "base.html" %}
{% block title %}Membership / Donations{% endblock %}
{% block content %}
<div class="container my-5">
<div class="text-center mb-5">
@ -9,17 +10,15 @@
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 }}/{{ year }}</h5>
<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 %}