diff --git a/website/.gitignore b/website/.gitignore index 1b99195..e4a3044 100644 --- a/website/.gitignore +++ b/website/.gitignore @@ -1,3 +1,4 @@ api api_dist/ +build/ manual/ diff --git a/website/Makefile b/website/Makefile index 667b470..95aad40 100644 --- a/website/Makefile +++ b/website/Makefile @@ -3,23 +3,20 @@ CROSS_PREFIX=raco cross --version ${CROSS_VERSION} --target x86_64-linux .PHONY: serve serve: - python -m http.server + raco chief start .PHONY: deploy -deploy: atom.xml manual/index.html - rsync \ - --exclude Makefile \ - --exclude api \ - --exclude api.rkt \ - --exclude api_dist \ - --exclude feed.rkt \ - -avh . franz:~/www/ +deploy: atom.xml build/index.html manual/index.html + rsync -avh build/ franz:~/www/ .PHONY: deploy_api deploy_api: api_dist/bin/api rsync -avh api_dist/ franz:~/api/ ssh racksnaps "sudo -S systemctl restart franz-api" +build/%.html: pages/%.rkt + racket build.rkt + manual/index.html: ../manual/*.scrbl raco scribble --html --dest manual +m ../manual/index.scrbl diff --git a/website/Procfile b/website/Procfile new file mode 100644 index 0000000..dfaab39 --- /dev/null +++ b/website/Procfile @@ -0,0 +1,2 @@ +build: racket main.rkt +server: python -m http.server -d build diff --git a/website/favicon.png b/website/assets/favicon.png similarity index 100% rename from website/favicon.png rename to website/assets/favicon.png diff --git a/website/screen.css b/website/assets/screen.css similarity index 100% rename from website/screen.css rename to website/assets/screen.css diff --git a/website/atom.xml b/website/atom.xml index 9fd4adf..f18b663 100644 --- a/website/atom.xml +++ b/website/atom.xml @@ -1,4 +1,4 @@ -Franz: Native macOS Kafka Clienthttps://franz.defn.ioFranz Releasesen-USSun, 03 Dec 2023 17:16:15 +02002023.12.03 (Version 1.5, Build 1)https://franz.defn.io/releases/Franz%201.5.0001.universal.dmghttps://franz.defn.io/releases/Franz%201.5.0001.universal.dmgSun, 03 Dec 2023 00:00:00 +0200<h2>Added</h2><ul><li>Improvements to Lua error reporting.</li><li>Jump to Line in the Scripting Window.</li><li>Support for creating, updating and deleting schemas.</li></ul><h2>Fixed</h2><ul><li>Double &amp; triple click to select words in the Scripting Window on +Franz: Native macOS Kafka Clienthttps://franz.defn.ioFranz Releasesen-USWed, 03 Jan 2024 17:11:16 +02002024.01.15 (Version 1.6, Build 1)https://franz.defn.io/releases/Franz%201.6.0001.universal.dmghttps://franz.defn.io/releases/Franz%201.6.0001.universal.dmgMon, 15 Jan 2024 00:00:00 +0200<h2>Added</h2><ul><li>The Timestamp Lua class.</li></ul><h2>Changed</h2><ul><li>Improved record read throughput &amp; reduced memory utilization.</li></ul><h2>Fixed</h2><ul><li>macOS: Jump Popover timestamps' seconds components are truncated.</li></ul>2023.12.03 (Version 1.5, Build 1)https://franz.defn.io/releases/Franz%201.5.0001.universal.dmghttps://franz.defn.io/releases/Franz%201.5.0001.universal.dmgSun, 03 Dec 2023 00:00:00 +0200<h2>Added</h2><ul><li>Improvements to Lua error reporting.</li><li>Jump to Line in the Scripting Window.</li><li>Support for creating, updating and deleting schemas.</li></ul><h2>Fixed</h2><ul><li>Double &amp; triple click to select words in the Scripting Window on Windows and Linux.</li><li>Partition starvation issue when jumping to old offsets.</li></ul>2023.11.12 (Version 1.4, Build 1)https://franz.defn.io/releases/Franz%201.4.0001.universal.dmghttps://franz.defn.io/releases/Franz%201.4.0001.universal.dmgSun, 12 Nov 2023 00:00:00 +0200<h2>Added</h2><ul><li>Documentation for many new Lua functions.</li><li>Improved Lua script error reporting output.</li><li>Initial support for rendering data from Lua scripts.</li></ul><h2>Fixed</h2><ul><li>A crash during update on macOS.</li><li>Changelog dark-mode compatibility on macOS.</li><li>Improved robustness in the face of errors.</li></ul>2023.10.30 (Version 1.3, Build 1)https://franz.defn.io/releases/Franz%201.3.0001.universal.dmghttps://franz.defn.io/releases/Franz%201.3.0001.universal.dmgMon, 30 Oct 2023 00:00:00 +0200<h2>Fixed</h2><ul><li>SSL Certs can be provided without associated SSL Keys. This makes it possible to provide custom CA certs without associated keys.</li><li>Updates are now checked on boot on Linux and Windows when enabled.</li></ul>2023.10.15 (Version 1.2, Build 1)https://franz.defn.io/releases/Franz%201.2.0001.universal.dmghttps://franz.defn.io/releases/Franz%201.2.0001.universal.dmgSun, 15 Oct 2023 00:00:00 +0300<h2>Added</h2><ul><li>Franz for Windows BETA release.</li><li>Support for looking up broker and topic config docs.</li><li>Support for updating broker and topic configs.</li></ul><h2>Fixed</h2><ul><li>A memory leak.</li></ul>2023.09.21 (Version 1.1, Build 1)https://franz.defn.io/releases/Franz%201.1.0001.universal.dmghttps://franz.defn.io/releases/Franz%201.1.0001.universal.dmgThu, 21 Sep 2023 00:00:00 +0300<h2>Added</h2><ul><li>Support for running scripts on already-loaded data from the Scripting Window.</li><li>Support for connecting to Kafka via an HTTP proxy.</li></ul><h2>Changed</h2><ul><li>Franz now requires macOS 13+.</li><li>The Jump Popover defaults to "recent" instead of "latest".</li></ul>2023.08.30 (Version 1.0, Build 8)https://franz.defn.io/releases/Franz%201.0.0008.universal.dmghttps://franz.defn.io/releases/Franz%201.0.0008.universal.dmgWed, 30 Aug 2023 00:00:00 +0300<h2>Added</h2><ul><li>Support for providing custom SSL keys and certificates.</li><li>Topic partition replication information to the Topic Detail view.</li></ul><h2>Changed</h2><ul><li>Group offset reset menu items are disabled for non-empty groups.</li></ul><h2>Fixed</h2><ul><li>Broker metadata loading for topics whose leader nodes are diff --git a/website/build.rkt b/website/build.rkt new file mode 100644 index 0000000..1597373 --- /dev/null +++ b/website/build.rkt @@ -0,0 +1,37 @@ +#lang racket/base + +(require racket/file + racket/path + racket/runtime-path + xml) + +(provide + build) + +(define-runtime-path assets-dir "assets") +(define-runtime-path atom.xml "atom.xml") +(define-runtime-path build-dir "build") +(define-runtime-path pages-dir "pages") + +(define (build) + (delete-directory/files build-dir #:must-exist? #f) + (make-directory* build-dir) + (copy-directory/files assets-dir (build-path build-dir "assets")) + (copy-file atom.xml (build-path build-dir "atom.xml")) + (for ([p (in-directory pages-dir)] + #:unless (regexp-match? #rx#"^\\.#" (file-name-from-path p)) + #:when (equal? (path-get-extension p) #".rkt")) + (define-values (_dir name _is-dir?) + (split-path p)) + (define target-path + (build-path build-dir (path-replace-extension name #".html"))) + (define xexpr + ((dynamic-require `(file ,(path->string p)) 'render))) + (call-with-output-file target-path + (lambda (out) + (displayln "" out) + (parameterize ([current-unescaped-tags html-unescaped-tags]) + (write-xexpr xexpr out)))))) + +(module+ main + (build)) diff --git a/website/buy.html b/website/buy.html deleted file mode 100644 index f6c8515..0000000 --- a/website/buy.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - Franz: License & Pricing - - - -
-
-
-
- - - -

Franz

-

License & Pricing

-
-
-
-
- -
-
-
-
-

Commercial Licenses

-

- If you are a company with employees that use Franz, this - is the license for you. Commercial licenses are - perpetual and transferrable within your organization, - but each license may only be used on one device at a - time. Commercial licenses cost $79, including VAT. - -
-
-

- - Purchase a Commercial License - -
-

-
-
-

Personal Licenses

-

- If you are an indivdual paying for Franz out of pocket, - then this is the license for you. Personal licenses are - non-transferrable, and may be activated on up to three - of your personal devices. Personal licenses cost $49, - including VAT. -

- -
-
- - Purchase a Personal License - -
-
- -

- Discounts for students are also available. Please - email bogdan@defn.io - if you would like a discount. -

-
- -

- If you prefer, you can instead purchase the macOS version - of Franz from the Mac App Store. - Note that Mac App Store licenses cannot be used on other - platforms. -

-
-
-
-
- - - - - - - diff --git a/website/index.html b/website/index.html deleted file mode 100644 index 100ffa8..0000000 --- a/website/index.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - Franz: Native macOS and Windows Desktop Client for Apache Kafka - - - - - - - - - - - - - - - - - - -
-
-
-
- a screenshot of the welcome window -
-
- - - -

Franz

-

Native macOS and Windows Desktop Client for Apache Kafka

- -
-
- -
-
- - - Download - - - Purchase a License - - -
- -
-
-
-
-
-
-
- -
-
-
-
-

Explore Topics

-

- Browse through Kafka topics and records. Intelligently - stream data to debug issues and publish new data - directly to your topics. -

-
-
- a screenshot of the topic records table -
-
-
-
- -
-
-
-
- a screenshot of a consumer group -
-
-

Manage Groups

-

- Quickly check the state of your consumer groups and - manage consumer offsets and group membership. -

-
-
-
-
- -
-
-
-
-

Connect to MSK and Red Panda

-

- Compatible with alternative implementations like Amazon - Managed Kafka IAM and Red Panda out of the box. -

-
-
- a screenshot of the New Connection window -
-
-
-
- -
-
-
-
- a screenshot of a Lua script decoding Apache Avro data -
-
-

Filter & Process Data

-

- Filter and process the data in your topics using a - full Lua - programming environment with support for decoding JSON, - Apache Avro, MessagePack and other formats. -

-
-
-
-
- -
-
-
-
-

Visualize Your Data

-

- Leverage the Lua programming environment to aggregate and - visualize data from your topics. -

-
-
- a screenshot of candlestick graphs visualizing financial candle data on a topic -
-
-
-
- - - - - - diff --git a/website/info.rkt b/website/info.rkt new file mode 100644 index 0000000..e7bb87a --- /dev/null +++ b/website/info.rkt @@ -0,0 +1,7 @@ +#lang info + +(define collection "franzdefnio") +(define deps + '("base" + "commonmark-lib" + "koyo-lib")) diff --git a/website/license.html b/website/license.html deleted file mode 100644 index c67e8a7..0000000 --- a/website/license.html +++ /dev/null @@ -1,398 +0,0 @@ - - - - - - - Franz: License Agreement - - - -
-
-
-
- - - -

Franz

-

License Agreement

-
-
-
-
- -
-
-

Last Updated: December 1st, 2022

-
- -

- This Agreement is a legal agreement for the licensed use of - the Franz application ("Franz") between you, either an - individual or as an authorized representative of a legal - entity ("you") and CLEARTYPE SRL, a limited liability - company established and existing under the laws of Romania - ("CLEARTYPE"). By downloading, installing, copying or - otherwise using all or any portion of Franz you agree to be - bound by the terms and conditions of this Agreement. If you - do not agree to this Agreement, you are not authorized or - licensed to use Franz. -

-
- -

- Franz, together with all materials included in or - distributed through it, is licensed, not sold, to you by - CLEARTYPE. CLEARTYPE reserves all rights not expressly - granted to you within this Agreement. -

-
- -

LICENSE GRANT

-

- Subject to the terms and conditions of this Agreement and - your payment of the required license fee, CLEARTYPE grants - to you a limited, non-exclusive, non-transferable (except as - expressly permitted in this Agreement) right and license - (during the term of this Agreement to install, activate, and - use this version of Franz for your personal use or internal - business purposes ("License") either (a) as one installed - instance of Franz on one device, or (b) installed on up to - three (3) different devices for your use on no more than one - device at a time. This License does not allow multiple - users to use Franz on multiple computers unless a separate - license has been purchased for each user. This License will - apply to all updates to the application, if any, made - generally available by CLEARTYPE without charge, provided, - however, that upon downloading and installing an update to - the Franz application, your right to use prior versions of - Franz will terminate and earlier versions may no longer be - used. This License will remain in effect unless and until - this Agreement is either terminated according to its terms - or superseded by a new agreement between the parties. -

-
- -

- This License to use Franz is limited to the current major - release of Franz. CLEARTYPE will at its sole discretion - decide when a version of Franz will be considered a new - major release that requires a new purchase or upgrade - license. CLEARTYPE reserves the right to change the terms - of this Agreement in any future major or minor release of - Franz. If you do not agree to accept the changes made in - the Agreement, you may not use the new release of Franz but - your License under this Agreement to your existing version - of Franz will not be affected. -

-
- -

- Our order process is conducted by our online reseller - Paddle.com. Paddle.com is the Merchant of Record for all - our orders. Paddle provides all customer service inquiries - and handles returns. -

-
- -

COPYRIGHT AND RESTRICTIONS

-

- Copyright and other intellectual, industrial and/or - proprietary rights in Franz are owned by CLEARTYPE or its - licensors. You agree not to modify, adapt, translate, - reverse engineer, decompile, disassemble, or otherwise - attempt to reveal the inner workings or modify the - functionality of Franz except where explicitly allowed in - the terms of this Agreement or as allowed by applicable law - without CLEARTYPE's consent. You agree not to remove any - label indicating that Franz is the subject of copyright and - other intellectual, or proprietary rights of CLEARTYPE - and/or third parties. You may not redistribute or - sublicense Franz or any part thereof. -

-
- -

ADDITIONAL SERVICES

-

- Fees may apply for additional services and products offered - by CLEARTYPE and others, including, but not limited to, - services that integrate with Franz or extend the - functionality of Franz. -

-
- -

HEALTH WARNING

-

- If you or anyone in your family has experienced symptoms - linked to an epileptic condition (e.g. a seizure or loss of - awareness), immediately consult your physician before using - Franz. If you experience dizziness, altered vision, eye or - muscle twitching, involuntary movements, loss of awareness, - disorientation, and/or convulsions, stop using Franz - immediately and consult your physician. -

-
- -

LIMITED WARRANTY; DISCLAIMER

-

- CLEARTYPE warrants to you that during the first ninety (90) - days following your initial download of a licensed version - of Franz (the "Warranty Period"), it will operate in - substantial compliance with the documentation CLEARTYPE - provides with Franz when used on devices meeting the - specified minimum system requirements. As your sole and - exclusive remedy for any breach of this limited warranty - that you report to Opener during the Warranty Period, - CLEARTYPE will, at its option, either (i) provide an update - that corrects any reported non-compliance or provides a - reasonable work-around, or (ii) refund to you the purchase - price paid for the Franz license. -

-
-

- EXCEPT AS EXPRESSLY PROVIDED HEREIN, CLEARTYPE MAKES NO - OTHER WARRANTY, EXPRESS OR IMPLIED, REGARDING FRANZ AND - DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, TITLE, OR FITNESS - FOR A PARTICULAR PURPOSE. -

-
- -

LIMITATION OF LIABILITY

-

- To the maximum extent permitted by applicable law, YOU AGREE - THAT CLEARTYPE WILL NOT BE liable to you or to any third - party for any compensatory, SPECIAL, INDIRECT, PUNITIVE, - CONSEQUENTIAL, OR INCIDENTAL DAMAGES (INCLUDING LOST - PROFITS, LOST DATA OR DOWNTIME COSTS), ARISING OUT OF THIS - AGREEMENT, WHETHER BASED IN WARRANTY, CONTRACT, TORT - (INCLUDING NEGLIGENCE) OR OTHER LEGAL THEORY, AND WHETHER OR - NOT FORESEEABLE, AND WHETHER OR NOT ANY LIMITATION SHALL - FAIL OF ITS ESSENTIAL PURPOSE. IN NO EVENT WILL THE TOTAL - LIABILITY OF CLEARTYPE to you ARISING OUT OF or related to - THIS AGREEMENT EXCEED THE TOTAL purchase price you paid - under this agreement. Some jurisdictions do not allow the - exclusion of certain warranties or conditions or the - limitation or exclusion of liability for loss or damage - caused by negligence, breach of contract or breach of - implied terms, or incidental or consequential damages. - Accordingly, only the limitations in herein which are lawful - in your jurisdiction will apply to you and CLEARTYPE's - liability will be limited to the maximum extent permitted by - law. -

-
- -

PERSONAL INFORMATION

-

- CLEARTYPE may render this Agreement null and void if it - finds that the personal information you submitted during - online activation or when buying Franz is incorrect, - inaccurate or outdated. It is your sole responsibility to - keep CLEARTYPE informed of any changes in your personal - information. To do so, contact CLEARTYPE through the - appropriate sections of franz.defn.io or, where possible, - from within Franz itself. CLEARTYPE may require you to - verify any changes to personal information. -

-
-

- CLEARTYPE may use your personal information to validate your - personal license rights, to contact you with information - related to Franz and, if you acquired your Franz license - through a reseller, to communicate with said reseller - regarding your purchase. CLEARTYPE may share your - information with its licensors within reason. -

-
- -

PRIVACY

-

- CLEARTYPE will not sell your personal information to third - parties. You acknowledge your receipt of and agreement to - CLEARTYPE's Privacy Policy applicable to the Franz - application and our websites. -

-
- -

ONLINE ACTIVATION

-

- The Franz Software requires online activation. If you do not - activate your copy of Franz, all of or part of the - functionality of your copy of Franz will disable - automatically 30 days after you first run it. CLEARTYPE may - at its sole discretion decide to adjust the exact technical - conditions under which Franz copies that have not been - activated cease to work. -

-
-

- You are required to submit personal information during - online activation. You need an active, functional internet - connection to activate your copy of Franz. Your licensed - use of Franz is bound to the device(s) you used to complete - activation. You may need to reactivate your copy of Franz - after replacing the logic board or otherwise changing the - hardware configuration of your computer or device. You may - need to contact CLEARTYPE to complete reactivation. -

-
- -

THIRD PARTY SOFTWARE LICENSES

-

- Franz may make use of third-party software. Notwithstanding - the foregoing, use of some third party materials included in - Franz Software may be subject to other terms and conditions. - The official copyright notices and specific license - conditions of this third-party software are to be found via - the Manual of Franz or can be emailed to you upon request. - You hereby agree to the terms and conditions for such - third-party software. -

-
- -

TERM & TERMINATION

-

- This Agreement is effective until terminated by you for any - reason upon notice to CLEARTYPE, or until termination by - CLEARTYPE for a material breach of the terms and conditions - of this Agreement on your part. Upon any termination of - this Agreement, you must cease all use of Franz and delete - all copies of Franz that are in your possession. -

-
- -

ENTIRE AGREEMENT

-

- This Agreement is the entire agreement between you and - CLEARTYPE relating to Franz and supersedes all prior oral or - written communications and representations with respect to - licensed use of Franz or any other subject matter covered by - this Agreement. -

-
- -

SEVERANCE

-

- If any of the provisions of this Agreement is held to be - void, unenforceable or illegal, the other provisions shall - continue in full force and effect. The affected provision - will be construed as limited to the extent necessary to be - consistent with and fully enforceable under the applicable - law. -

-
- -

EXPORT CONTROLS

-

- You agree not to export, reexport or use Franz except as - explicitly authorized by United States law and the laws of - the jurisdiction in which you obtained your Franz License. - If you use Franz in the United States, you may not export or - re-export Franz to any U.S. embargoed country or to anyone - on the U.S. Treasury Department's list of Specially - Designated Nationals or U.S. Department of Commerce's Denied - Persons List or Entity List. By using Franz, you represent - and warrant that you are not located in any such country or - on any such list. You also agree that you will not use - Franz for any purposes prohibited by applicable law. -

-
- -

U.S. GOVERNMENT RIGHTS

-

- The Licensed Software is commercial computer software as - described in DFARS 252.227-7014(a) (1) and FAR 2.101. If - acquired by or on behalf of any the Department of Defense or - any component thereof, the U.S. Government acquires this - commercial computer software and/or commercial computer - software documentation subject to the terms of this - Agreement as specified in DFARS 227.7202-3, Rights in - Commercial Computer Software or Commercial Computer Software - Documentation, as applicable. If acquired by or on behalf of - any civilian agency, the U.S. Government acquires this - commercial computer software and/or commercial computer - software documentation subject to the terms of this - Agreement as specified in FAR 12.212, Computer Software. -

-
- -

ASSIGNMENT

-

- Neither party may assign any of its rights under this - Agreement without the other party's prior written consent, - provided that CLEARTYPE may assign this Agreement in whole - to an affiliate or other entity acquiring all or - substantially all of the CLEARTYPE's business or of the - Franz application, provided that such entity expressly - assumes the assigning party's obligations under this - Agreement. This Agreement will be binding upon successors - and assigns. -

-
- -

APPLICABLE LAW

-

- This Agreement is governed by Romanian law. The parties - disclaim the application of the UN Convention on Contracts - for the International Sale of Goods. You agree that - CLEARTYPE SRL, at its sole discretion, may elect to bring - legal action regarding any dispute arising from or in - connection with this Agreement before the courts of - Cluj-Napoca, Romania, or in any court in any country which - may have jurisdiction and you herewith irrevocably and - unconditionally submit to the exclusive jurisdiction of the - courts chosen by CLEARTYPE. -

-
- -

CONTACT

-

- If you have any questions concerning this Agreement or need - to contact us, please contact CLEARTYPE through the - appropriate sections of franz.defn.io or send us an email at - bogdan@defn.io. -

-
-
-
- - - - diff --git a/website/main.rkt b/website/main.rkt new file mode 100644 index 0000000..ba611aa --- /dev/null +++ b/website/main.rkt @@ -0,0 +1,56 @@ +#lang racket/base + +(require racket/path + racket/runtime-path + racket/system) + +(define-runtime-path build.rkt "build.rkt") +(define-runtime-path pages-dir "pages") +(define-runtime-path template.rkt "template.rkt") + +(define racket + (find-executable-path "racket")) + +(define (build reason) + (eprintf "Rebuilding (~a)...~n" reason) + (system* racket build.rkt)) + +(define (something-changed-evt) + (apply choice-evt + (map + (λ (path) + (define change-evt + (filesystem-change-evt path)) + (nack-guard-evt + (lambda (nack-evt) + (thread + (lambda () + (sync nack-evt) + (filesystem-change-evt-cancel change-evt))) + (handle-evt + change-evt + (λ (_evt) path))))) + (list* + build.rkt + template.rkt + (for/list ([p (in-directory pages-dir)] + #:unless (regexp-match? #rx#"^\\.#" (file-name-from-path p))) + p))))) + +(define (main) + (with-handlers ([exn:break? void]) + (build "initial") + (let loop () + (sync/enable-break + (handle-evt + (filesystem-change-evt pages-dir) + (lambda (_evt) + (loop))) + (handle-evt + (something-changed-evt) + (lambda (changed-path) + (build (file-name-from-path changed-path)) + (loop))))))) + +(module+ main + (main)) diff --git a/website/pages/buy.rkt b/website/pages/buy.rkt new file mode 100644 index 0000000..f830132 --- /dev/null +++ b/website/pages/buy.rkt @@ -0,0 +1,85 @@ +#lang racket/base + +(require "../template.rkt") + +(provide + render) + +(define (render) + (apply + template + #:title "License & Pricing" + (haml + (header "License & Pricing") + (:section.feature.alt + (.container + (.row.align-top + (.col + (:h1.title "Commercial Licenses") + (:p + #<xexprs + (call-with-input-file license.md + read-document))) + (apply + append + (for/list ([e (in-list xexprs)]) + (match e + [`(h1 ,title) + `((br) (h1 ([class "title"]), title))] + [`(p ,content) + `((br) (p ,content))] + [e (list e)])))) diff --git a/website/pages/privacy.md b/website/pages/privacy.md new file mode 100644 index 0000000..48865c9 --- /dev/null +++ b/website/pages/privacy.md @@ -0,0 +1,329 @@ +This privacy policy ("Policy") describes how CLEARTYPE SRL ("CLEARTYPE", +"we", "us", or "our") protects and uses the personally identifiable +information ("Personal Information") and other information we collect +or that you provide related to your use of the "Franz" application +("Franz Application") and any of its related products and services +(collectively, "Services"). It also describes the choices available +to you regarding our use of your Personal Information and how you can +access and update this information. + +You acknowledge that you have read this Policy and agree to all its +terms and conditions. By accessing and using the Franz Application and +Services you agree to be bound by this Policy. If you do not agree to +abide by the terms of this Policy, you are not authorized to access or +use the Franz Application and Services. + +# Data We Collect Automatically + +When you download and use the Franz Application, we collect information +automatically from your system in order to confirm the technical +requirements needed to activate the Services, including: + +* License Key +* Operating System Version + +# Personal Information We May Collect That You Provide to Us + +You may access and use the Franz Application and Services without +telling us who you are or revealing any information by which someone +could identify you as a particular individual. + +# Information that May Be Collected or Processed by Our Third Party-Service Providers + +We do not sell your Personal Information to third parties. Depending on +the requested Services or as necessary to complete any transaction or +provide any Services you have requested, we may share your information +with our trusted third party service providers that work with us, +any other affiliates and subsidiaries we rely upon to assist in the +operation of the Franz Application and Services available to you. We do +not share Personal Information with unaffiliated third parties. These +third-party service providers are not authorized to use or disclose +your information except as necessary to perform services on our behalf +or comply with legal requirements. These third parties are given on +that Personal Information they need order to perform their designated +functions. + +Every service partner we engage with is either located in the European +Economic Area (“EEA”) or participates in the EU-U.S. Privacy Shield +program. The services provided, location, and the privacy policies of +each third-party provider are listed below. + +# Website Hosting + +Our website and any information you submit through our website is +hosted and processed by our service partner Hetzner Online GmbH. +https://www.hetzner.com/legal/privacy-policy/ + +# Payment Processing + +If you choose to purchase available Services, the information +collected and process includes your name, e-mail address, IP address, +billing address, phone number, payment account information, and other +information about you submitted to verify who you are or to work to +prevent fraud. This payment information and details will be received +and processed securely by our payment processor, Paddle.com Inc. +https://www.paddle.com/legal/privacy + +### Use and processing of collected information + +In order to make the Franz Application and Services available to you, or +to meet a legal obligation, we need to collect and use certain Personal +Information. If you do not provide the information that we request, we +may not be able to provide you with the requested products or services. +Any of the information we collect from you may be used for the following +purposes: + +* Create and manage user accounts +* Deliver products or services +* Improve products and services +* Respond to inquiries and offer support +* Enforce our terms and conditions and policies +* Respond to legal requests and prevent harm +* Maintain and operate the Franz Application and Services +* Provide you with newsletters and marketing information if you opt to receive such materials + +Processing your Personal Information depends on how you interact with +the Franz Application and Services, where you are located in the world +and if one of the following applies: (i) if you have given your consent +for one or more specific purposes; this, however, does not apply, +whenever the processing of Personal Information in a certain manner is +subject to and prohibited by the California Consumer Privacy Act or +European General Data Protection Regulation (“GDPR”); (ii) if provision +of information is necessary related to entering into and performing an +agreement with you; (iii) processing is necessary for compliance with a +legal obligation; or (iv) if processing is necessary for the purposes of +the legitimate interests pursued by us or by a third party. + +Note that under some legislation we may be allowed to process +information until you object to such processing (by opting out), without +having to rely on consent or any other of the following legal bases +described in this policy. In any case, we will be happy to clarify the +specific legal basis that applies to the processing, and in particular +whether the provision of Personal Information is a statutory or +contractual requirement, or a requirement necessary to enter into a +contract. + +### "Do Not Track" Settings + +Please note that our website may not recognize or take action in +response to Do Not Track ("DNT") signals from web browser settings. +At this time, there is no universally accepted standard for what +a company should do when a DNT signal is detected. In the event a +final standard is established, we will assess how to appropriately +respond to these signals. For more detailed information about +cookies, Do-Not-Track and other tracking technologies, please visit +http://www.youronlinechoices.com. + +### Disclosure of Information + +We will disclose any Personal Information we collect, use or receive +if required or permitted by law, such as to comply with a subpoena, or +similar legal process, and when we believe in good faith that disclosure +is necessary to protect our rights, protect your safety or the safety of +others, investigate fraud, or respond to a government request. + +In the event we go through a business transition, such as a merger or +acquisition by another company, or sale of all or a portion of our +assets related to the Franz Application, your user account, and Personal +Information will likely be among the assets transferred. + +### Retention of Information + +We will retain and use your Personal Information for the period +necessary to comply with our legal obligations, resolve disputes, and +enforce our agreements unless a longer retention period is required or +permitted by law. We may use any anonymized or aggregated data derived +from or incorporating your Personal Information after you update or +delete it, but not in a manner that would identify you personally. Once +the retention period expires, Personal Information shall be deleted. +Therefore, the right to access, the right to erasure, the right to +rectification and the right to data portability cannot be enforced after +the expiration of the retention period. + +### Transfer of information + +Depending on your location, data transfers may involve transferring +and storing your information in a country other than your own. You are +entitled to learn about the legal basis of information transfers to a +country outside the European Union or to any international organization +governed by public international law or set up by two or more countries, +such as the UN, and about the security measures taken by us to safeguard +your information. If any such transfer takes place, you can find out +more by checking the relevant sections of this Policy or inquire with us +using the information provided in the contact section. + +### Your Rights + +You may exercise certain rights regarding your information processed +by us. In particular, you have the right to do the following: (i) you +have the right to withdraw consent where you have previously given +your consent to the processing of your information; (ii) you have the +right to object to the processing of your information if the processing +is carried out on a legal basis other than consent; (iii) you have +the right to learn if information is being processed by us, obtain +disclosure regarding certain aspects of the processing and obtain a +copy of the information undergoing processing; (iv) you have the right +to verify the accuracy of your information and ask for it to be updated +or corrected; (v) you have the right, under certain circumstances, to +restrict the processing of your information, in which case, we will not +process your information for any purpose other than storing it; (vi) you +have the right, under certain circumstances, to obtain the erasure of +your Personal Information from us; (vii) you have the right to receive +your information in a structured, commonly used and machine readable +format and, if technically feasible, to have it transmitted to another +controller without any hindrance. This provision is applicable provided +that your information is processed by automated means and that the +processing is based on your consent, on a contract which you are part of +or on pre-contractual obligations thereof. + +### Data protection rights under GDPR + +If you are a resident of the European Economic Area (EEA), you have +certain data protection rights and CLEARTYPE aims to take reasonable +steps to allow you to correct, amend, delete, or limit the use of +your Personal Information. If you wish to be informed what Personal +Information we hold about you and if you want it to be removed from +our systems, please contact us. In certain circumstances, you have the +following data protection rights: + +* You have the right to request access to your Personal Information + that we store and have the ability to access your Personal + Information. +* You have the right to request that we correct any Personal + Information you believe is inaccurate. You also have the right to + request us to complete the Personal Information you believe is + incomplete. +* You have the right to request the erase your Personal Information + under certain conditions of this Policy. +* You have the right to object to our processing of your Personal + Information. +* You have the right to seek restrictions on the processing of your + Personal Information. When you restrict the processing of your + Personal Information, we may store it but will not process it + further. +* You have the right to be provided with a copy of the information we + have on you in a structured, machine-readable and commonly used + format. +* You also have the right to withdraw your consent at any time for + uses where we required and relied your consent to process your + Personal Information. + +You have the right to complain to a Data Protection Authority about our +collection and use of your Personal Information. For more information, +please contact your local data protection authority in the European +Economic Area (EEA). + +### California Privacy Rights + +In addition to the rights as explained in this Policy, California +residents who provide Personal Information (as defined in the statute) +to obtain products or services for personal, family, or household use +are entitled to request and obtain from us, once a calendar year, +information about the Personal Information we shared, if any, with +other businesses for marketing uses. If applicable, this information +would include the categories of Personal Information and the names +and addresses of those businesses, if any, with which we shared such +personal information for the immediately prior calendar year (e.g., +requests made in the current year will receive information about the +prior year). To obtain this information please contact us at the email +address below. + +### How to Exercise Your Rights + +Any requests to exercise your rights can be directed to CLEARTYPE +through the contact details provided below in this document. Please note +that we may ask you to verify your identity before responding to such +requests. Your request must provide sufficient information that allows +us to verify that you are the person you are claiming to be or that +you are the authorized representative of such person. You must include +sufficient details to allow us to properly understand the request and +respond to it. We cannot respond to your request or provide you with +Personal Information unless we first verify your identity or authority +to make such a request and confirm that the Personal Information relates +to you. + +### Privacy of children + +We do not knowingly collect any Personal Information from children +under the age of 18. If you are under the age of 18, please do not +submit any Personal Information through the Franz Application and +Services. We encourage parents and legal guardians to monitor their +children's Internet usage and to help enforce this Policy by instructing +their children never to provide Personal Information through the Franz +Application and Services without their permission. If you have reason +to believe that a child under the age of 18 has provided Personal +Information to us through the Franz Application and Services, please +contact us. You must also be at least 16 years of age to consent to +the processing of your Personal Information in your country (in some +countries we may allow your parent or guardian to do so on your behalf). + +### Email marketing + +We offer electronic newsletters to which you may voluntarily subscribe +at any time. We are committed to keeping your e-mail address +confidential and will not disclose your email address to any third +parties except as allowed in the information use and processing section +or for the purposes of utilizing a third party provider to send such +emails. We will maintain the information sent via e-mail in accordance +with applicable laws and regulations. + +In compliance with the U.S. CAN-SPAM Act, all e-mails sent from us will +clearly state who the e-mail is from and provide clear information +on how to contact the sender. You may choose to stop receiving our +newsletter or marketing emails by following the unsubscribe instructions +included in these emails or by contacting us. However, you may continue +to receive essential transactional emails related to your account. + +### Information security + +We secure information you provide on computer servers in a controlled, +secure environment, protected from unauthorized access, use, or +disclosure. We maintain reasonable administrative, technical, and +physical safeguards in an effort to protect against unauthorized +access, use, modification, and disclosure of Personal Information, +however, no data transmission over the Internet or wireless network can +be guaranteed as secure. Therefore, while we strive to protect your +Personal Information, you acknowledge that (i) there are security and +privacy limitations of the Internet which are beyond our control; (ii) +the security, integrity, and privacy of any and all information and data +exchanged between you and the Franz Application and Services cannot be +guaranteed; and (iii) any such information and data may be viewed or +tampered with in transit by a third party, despite best efforts. + +### Data breach + +In the event we become aware that the security of the Franz Application +and Services has been compromised or users Personal Information has been +disclosed to unrelated third parties as a result of external activity, +including, but not limited to, security attacks or fraud, we reserve +the right to take reasonably appropriate measures, including, but not +limited to, investigation and reporting, as well as notification to and +cooperation with law enforcement authorities. In the event of a data +breach, we will make reasonable efforts to notify affected individuals +if we believe that there is a reasonable risk of harm to the user as a +result of the breach or if notice is otherwise required by law. + +### Changes and amendments + +We reserve the right to modify this Policy or its terms relating to the +Franz Application and Services from time to time in our discretion and +will notify you of any material changes to the way in which we treat +Personal Information. When we do, we will post a notification in the +Franz Application. We may also provide notice to you in other ways in +our discretion, such as through contact information you have provided. +Any updated version of this Policy will be effective immediately +upon the posting of the revised Policy unless otherwise specified. +Your continued use of the Franz Application and Services after the +effective date of the revised Policy (or such other act specified at +that time) will constitute your consent to those changes. However, +we will not, without your consent, use your Personal Information in +a manner materially different than what was stated at the time your +Personal Information was collected. + +### Contacting Us + +If you would like to contact us to understand more about this Policy or +wish to contact us concerning any matter relating to individual rights +and your Personal Information, you may send an email to bogdan@defn.io +or write to us at CLEARTYPE SRL, 111 Transilvaniei St., 515200 Aiud, +Romania. diff --git a/website/pages/privacy.rkt b/website/pages/privacy.rkt new file mode 100644 index 0000000..ae2d04f --- /dev/null +++ b/website/pages/privacy.rkt @@ -0,0 +1,36 @@ +#lang racket/base + +(require commonmark + racket/match + racket/runtime-path + "../template.rkt") + +(provide + render) + +(define-runtime-path privacy.md "privacy.md") + +(define (render) + (apply + template + #:title "Privacy Policy" + (haml + (header "Privacy Policy") + (:section + (.container + (:p "Last Updated: December 1st, 2022") + ,@(privacy-policy)))))) + +(define (privacy-policy) + (define xexprs + (document->xexprs + (call-with-input-file privacy.md + read-document))) + (apply + append + (for/list ([e (in-list xexprs)]) + (match e + [`(h1 ,title) `((br) (h1 ([class "title"]), title))] + [`(h3 ,title) `((br) (h3 ,title))] + [`(p ,content) `((br) (p ,content))] + [e (list e)])))) diff --git a/website/privacy.html b/website/privacy.html index fc2d8f2..16d1805 100644 --- a/website/privacy.html +++ b/website/privacy.html @@ -279,27 +279,13 @@

Data protection rights under GDPR

following data protection rights:

    -
  • You have the right to request access to your Personal - Information that we store and have the ability to access - your Personal Information.
  • -
  • You have the right to request that we correct any - Personal Information you believe is inaccurate. You also - have the right to request us to complete the Personal - Information you believe is incomplete.
  • -
  • You have the right to request the erase your Personal - Information under certain conditions of this Policy.
  • -
  • You have the right to object to our processing of your - Personal Information.
  • -
  • You have the right to seek restrictions on the - processing of your Personal Information. When you restrict - the processing of your Personal Information, we may store it - but will not process it further.
  • -
  • You have the right to be provided with a copy of the - information we have on you in a structured, machine-readable - and commonly used format.
  • -
  • You also have the right to withdraw your consent at any - time for uses where we required and relied your consent to - process your Personal Information.
  • +
  • You have the right to request access to your Personal Information that we store and have the ability to access your Personal Information.
  • +
  • You have the right to request that we correct any Personal Information you believe is inaccurate. You also have the right to request us to complete the Personal Information you believe is incomplete.
  • +
  • You have the right to request the erase your Personal Information under certain conditions of this Policy.
  • +
  • You have the right to object to our processing of your Personal Information.
  • +
  • You have the right to seek restrictions on the processing of your Personal Information. When you restrict the processing of your Personal Information, we may store it but will not process it further.
  • +
  • You have the right to be provided with a copy of the information we have on you in a structured, machine-readable and commonly used format.
  • +
  • You also have the right to withdraw your consent at any time for uses where we required and relied your consent to process your Personal Information.

You have the right to complain to a Data Protection diff --git a/website/template.rkt b/website/template.rkt new file mode 100644 index 0000000..55dd5cb --- /dev/null +++ b/website/template.rkt @@ -0,0 +1,99 @@ +#lang racket/base + +(require koyo/haml + racket/date + racket/match) + +(provide + (all-from-out koyo/haml) + template + header + logo) + +(define (template #:title title + #:description [description #f] + . content) + (let ([title (format "Franz: ~a" title)]) + (haml + (:html + ([:lang "en-US"]) + (:head + (:meta ([:charset "utf-8"])) + (:meta ([:name "viewport"] [:content "width=device-width, initial-scale=1"])) + (:link ([:rel "icon"] [:type "image/png"] [:href "/assets/favicon.png"])) + (:title title) + (:link ([:rel "stylesheet"] [:type "text/css"] [:href "/assets/screen.css"])) + ,@(if description + (haml + (:meta ([:name "description"] + [:content description])) + ,@(open-graph title description)) + null)) + (:body + ,@content + (:section.footer + (.container + (:ul.footer__links + (footer-link "/" "Home") + (footer-link "/buy.html" "Pricing") + (footer-link "/manual/" "Manual") + (footer-link "/license.html" "License") + (footer-link "/privacy.html" "Privacy") + (footer-link "/atom.xml" '((type "application/rss+xml")) "RSS Feed") + (footer-link "https://www.youtube.com/channel/UCtVE9Z4cqIaAUIDaU7dFvJg/" "YouTube") + (footer-link "https://hachyderm.io/@franz_app" '((rel "me")) "Mastodon") + (footer-link "mailto:bogdan@defn.io?subject=Franz" "Contact Me")) + (:p.footer__copyright + © (format " ~a CLEARTYPE SRL" (date-year (current-date))))))))))) + +(define (header subtitle) + (haml + (.hero + (.container + (.row.prefer-left + (.col.hero__info + (logo) + (:h1.title "Franz") + (:h1.subtitle subtitle))))))) + +(define (logo) + (haml + (:a + ([:href "https://franz.defn.io"]) + (:img.logo + ([:alt "the Franz logo"] + [:src "/assets/logo.png"]))))) + +(define (open-graph title description) + (define props + `((og:url "https://franz.defn.io") + (og:type "website") + (og:title ,title) + (og:description ,description) + (og:image "https://franz.defn.io/assets/og-hero.png") + (twitter:card "summary_large_image") + (twitter:domain "franz.defn.io") + (twitter:url "https://franz.defn.io") + (twitter:title ,title) + (twitter:description ,description) + (twitter:image ,"https://franz.defn.io/assets/og-hero.png"))) + (for/list ([prop (in-list props)]) + (match-define (list property content) prop) + (define prop-attr + (case property + [(twitter:card twitter:title twitter:description twitter:image) 'name] + [else 'property])) + `(meta + ([,prop-attr ,(symbol->string property)] + [content ,content])))) + +(define footer-link + (case-lambda + [(uri label) + (haml + (:li.footer__link + (:a ([:href uri]) label)))] + [(uri attrs label) + `(li + ([class "footer__link"]) + (a ([href ,uri] ,@attrs) ,label))]))