From f8dad5b2c40e6b68a8b9abd68c073adb13776140 Mon Sep 17 00:00:00 2001 From: Owen Gretzinger Date: Sun, 13 Jul 2025 01:02:55 -0400 Subject: [PATCH] feat: add Privacy Policy and Terms of Service --- landing-page/app/components/footer.tsx | 2 +- landing-page/app/components/hero.tsx | 2 +- landing-page/app/privacy/page.tsx | 153 +++++++++++++++++++ landing-page/app/terms/page.tsx | 202 +++++++++++++++++++++++++ meetingnotes/Views/SettingsView.swift | 12 +- 5 files changed, 368 insertions(+), 3 deletions(-) create mode 100644 landing-page/app/privacy/page.tsx create mode 100644 landing-page/app/terms/page.tsx diff --git a/landing-page/app/components/footer.tsx b/landing-page/app/components/footer.tsx index c51c363..e200ac4 100644 --- a/landing-page/app/components/footer.tsx +++ b/landing-page/app/components/footer.tsx @@ -141,7 +141,7 @@ export default function Footer() {
  • Contact diff --git a/landing-page/app/components/hero.tsx b/landing-page/app/components/hero.tsx index a784439..f665e42 100644 --- a/landing-page/app/components/hero.tsx +++ b/landing-page/app/components/hero.tsx @@ -19,7 +19,7 @@ export default function Hero() {

    - Just you and your OpenAI API key. Go crazy. + Just you and your OpenAI API key.
    Go crazy.

    diff --git a/landing-page/app/privacy/page.tsx b/landing-page/app/privacy/page.tsx new file mode 100644 index 0000000..b85e1ab --- /dev/null +++ b/landing-page/app/privacy/page.tsx @@ -0,0 +1,153 @@ +export default function PrivacyPolicy() { + return ( +
    +
    +

    Privacy Policy

    +

    + Effective Date: {new Date().toLocaleDateString()} +

    + +
    +
    +

    1. Introduction

    +

    + Welcome to Meetingnotes ("we," "our," or "us"). This Privacy Policy explains how we collect, use, and protect your information when you use our free, open-source AI meeting notetaker application for macOS. +

    +

    + Meetingnotes is developed by Owen Gretzinger, an individual developer based in Burlington, Ontario, Canada. +

    +
    + +
    +

    2. Information We Collect

    + +

    2.1 Audio Data

    +

    + Meetingnotes captures audio from your device's microphone and system audio during meetings. This audio data is processed locally on your device and is sent to OpenAI's services for transcription and AI summary generation. +

    + +

    2.2 Meeting Data

    +

    + All meeting transcripts, AI-generated summaries, and related meeting data are stored locally on your device. We do not have access to this data, and it is never stored on our servers or any cloud service we control. +

    + +

    2.3 Usage Analytics

    +

    + We collect anonymous usage data through PostHog, which may include: +

    +
      +
    • App installations and opens
    • +
    • Number of meetings created
    • +
    • Device and operating system information
    • +
    • App version information
    • +
    • Other anonymous usage metrics
    • +
    +

    + This data is completely anonymous and cannot be used to identify individual users. +

    +
    + +
    +

    3. How We Use Your Information

    + +

    3.1 Audio Processing

    +

    + Audio data is sent to OpenAI's Speech-to-Text (STT) API for transcription. The resulting transcript is then sent to OpenAI's language models for AI summary generation. According to OpenAI's data usage policy, they may securely retain API inputs and outputs for up to 30 days to identify abuse. +

    + +

    3.2 Analytics

    +

    + Anonymous usage data is used to understand how the app is being used and to improve the product. This data helps us make informed decisions about feature development and app improvements. +

    +
    + +
    +

    4. Data Sharing and Third Parties

    + +

    4.1 OpenAI

    +

    + Audio recordings and transcripts are sent to OpenAI for processing. OpenAI's handling of this data is governed by their privacy policy and terms of service. OpenAI may retain data for up to 30 days for abuse detection purposes. +

    +

    + For more information about OpenAI's data handling practices, please refer to their{" "} + + Data Controls in the OpenAI Platform + {" "} + documentation. +

    + +

    4.2 PostHog

    +

    + Anonymous usage data is sent to PostHog for analytics purposes. PostHog's handling of this data is governed by their privacy policy. +

    + +

    4.3 Sparkle

    +

    + We use Sparkle for automatic app updates. Sparkle may collect anonymous update-related data as described in their privacy policy. +

    +
    + +
    +

    5. Data Security

    +

    + We implement appropriate technical and organizational security measures to protect your information. However, no method of transmission over the internet or electronic storage is 100% secure. +

    +

    + Since the app is open source, you can inspect the code to verify how your data is handled. The source code is available on GitHub. +

    +
    + +
    +

    6. Your Rights

    +

    + Since all meeting data is stored locally on your device, you have complete control over this data. You can: +

    +
      +
    • Delete any meeting data directly from the app
    • +
    • Uninstall the app to remove all local data
    • +
    • Disable analytics in the app settings (if available)
    • +
    +
    + +
    +

    7. Children's Privacy

    +

    + Our app is not intended for use by children under 13. We do not knowingly collect personal information from children under 13. +

    +
    + +
    +

    8. International Data Transfers

    +

    + When you use our app, your audio data may be transferred to and processed by OpenAI, which may be located in different countries. This transfer is necessary for the app's functionality. +

    +
    + +
    +

    9. Changes to This Privacy Policy

    +

    + We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the new Privacy Policy on this page and updating the "Effective Date" above. +

    +
    + +
    +

    10. Contact Information

    +

    + If you have any questions about this Privacy Policy, please contact us at: +

    +

    + Owen Gretzinger
    + Burlington, Ontario, Canada
    + Email: owengretzinger@gmail.com +

    +
    +
    +
    +
    + ); +} \ No newline at end of file diff --git a/landing-page/app/terms/page.tsx b/landing-page/app/terms/page.tsx new file mode 100644 index 0000000..c0a74de --- /dev/null +++ b/landing-page/app/terms/page.tsx @@ -0,0 +1,202 @@ +export default function TermsOfService() { + return ( +
    +
    +

    Terms of Service

    +

    + Effective Date: {new Date().toLocaleDateString()} +

    + +
    +
    +

    1. Acceptance of Terms

    +

    + By downloading, installing, or using Meetingnotes ("the App"), you agree to be bound by these Terms of Service ("Terms"). If you do not agree to these Terms, do not use the App. +

    +

    + These Terms constitute a legal agreement between you and Owen Gretzinger ("we," "us," or "our"), the developer of Meetingnotes, located in Burlington, Ontario, Canada. +

    +
    + +
    +

    2. Description of Service

    +

    + Meetingnotes is a free, open-source AI meeting notetaker application for macOS that: +

    +
      +
    • Captures audio from your device's microphone and system audio
    • +
    • Transcribes meetings using AI technology
    • +
    • Generates enhanced AI summaries of meetings
    • +
    • Stores all data locally on your device
    • +
    +

    + The App is provided "as is" and we make no warranties about its availability, functionality, or suitability for any particular purpose. +

    +
    + +
    +

    3. User Responsibilities

    + +

    3.1 Consent and Recording Laws

    +

    + IMPORTANT: You are solely responsible for ensuring that you have proper consent from all participants before recording any meeting or conversation. You must comply with all applicable laws regarding audio recording in your jurisdiction, including but not limited to: +

    +
      +
    • Obtaining explicit consent from all participants
    • +
    • Complying with one-party or two-party consent laws
    • +
    • Following workplace policies regarding meeting recordings
    • +
    • Respecting privacy rights of all participants
    • +
    +

    + We are not responsible for any legal consequences resulting from your use of the App without proper consent or in violation of applicable laws. +

    + +

    3.2 Appropriate Use

    +

    + You agree to use the App only for lawful purposes and in accordance with these Terms. You will not: +

    +
      +
    • Use the App to record conversations without proper consent
    • +
    • Use the App for any illegal or unauthorized purpose
    • +
    • Attempt to reverse engineer, modify, or distribute the App (except as permitted by the open source license)
    • +
    • Use the App in a manner that could harm, disable, or impair the service
    • +
    +
    + +
    +

    4. AI and Technology Limitations

    + +

    4.1 AI Accuracy Disclaimer

    +

    + The App uses artificial intelligence for transcription and summary generation. AI-generated content may contain errors, inaccuracies, or misinterpretations. You acknowledge that: +

    +
      +
    • Transcriptions may not be 100% accurate
    • +
    • AI summaries are interpretations and may miss important details
    • +
    • You should review and verify all AI-generated content
    • +
    • The App should not be relied upon for critical decisions without verification
    • +
    + +

    4.2 Third-Party Services

    +

    + The App relies on third-party services (OpenAI) for AI processing. We are not responsible for the availability, accuracy, or performance of these third-party services. +

    +
    + +
    +

    5. Open Source License

    +

    + Meetingnotes is released under the LGPL-3.0 License. The source code is available on GitHub, and you may inspect, modify, and distribute the code in accordance with the terms of this license. +

    +

    + While the App is open source, these Terms of Service still apply to your use of the compiled application. +

    +
    + +
    +

    6. Privacy and Data

    +

    + Your privacy is important to us. Please review our Privacy Policy, which explains how we collect, use, and protect your information. By using the App, you agree to the collection and use of information as described in our Privacy Policy. +

    +
    + +
    +

    7. Limitation of Liability

    +

    + TO THE MAXIMUM EXTENT PERMITTED BY LAW, WE SHALL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO: +

    +
      +
    • Loss of data or information
    • +
    • Legal consequences from unauthorized recordings
    • +
    • Damages resulting from AI inaccuracies
    • +
    • Business interruption or loss of profits
    • +
    • Any other damages arising from your use of the App
    • +
    +

    + OUR TOTAL LIABILITY SHALL NOT EXCEED THE AMOUNT YOU PAID FOR THE APP (WHICH IS ZERO, AS THE APP IS FREE). +

    +
    + +
    +

    8. Disclaimer of Warranties

    +

    + THE APP IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT ANY WARRANTIES OF ANY KIND, INCLUDING BUT NOT LIMITED TO: +

    +
      +
    • Warranties of merchantability or fitness for a particular purpose
    • +
    • Warranties that the App will be uninterrupted or error-free
    • +
    • Warranties regarding the accuracy of AI-generated content
    • +
    • Warranties that the App will meet your specific requirements
    • +
    +
    + +
    +

    9. Indemnification

    +

    + You agree to indemnify and hold us harmless from any claims, damages, or expenses arising from: +

    +
      +
    • Your use of the App without proper consent
    • +
    • Your violation of any applicable laws or regulations
    • +
    • Your breach of these Terms
    • +
    • Any unauthorized recordings made using the App
    • +
    +
    + +
    +

    10. Updates and Modifications

    +

    + We may update the App from time to time to improve functionality, fix bugs, or add new features. The App uses Sparkle for automatic updates. You can disable automatic updates in your system settings if preferred. +

    +

    + We may also modify these Terms from time to time. Material changes will be posted on our website, and continued use of the App after such changes constitutes acceptance of the new Terms. +

    +
    + +
    +

    11. Termination

    +

    + You may stop using the App at any time by uninstalling it from your device. These Terms will remain in effect until terminated. +

    +

    + We may terminate your right to use the App if you violate these Terms, though we have no obligation to monitor your use of the App. +

    +
    + +
    +

    12. Governing Law

    +

    + These Terms are governed by the laws of Ontario, Canada, without regard to conflict of law principles. Any disputes arising from these Terms or your use of the App will be resolved in the courts of Ontario, Canada. +

    +
    + +
    +

    13. Severability

    +

    + If any provision of these Terms is found to be unenforceable, the remaining provisions will continue to be valid and enforceable. +

    +
    + +
    +

    14. Contact Information

    +

    + If you have any questions about these Terms, please contact us at: +

    +

    + Owen Gretzinger
    + Burlington, Ontario, Canada
    + Email: owengretzinger@gmail.com +

    +
    + +
    +

    15. Acknowledgment

    +

    + By using Meetingnotes, you acknowledge that you have read, understood, and agree to be bound by these Terms of Service. +

    +
    +
    +
    +
    + ); +} \ No newline at end of file diff --git a/meetingnotes/Views/SettingsView.swift b/meetingnotes/Views/SettingsView.swift index 6c451a1..b091dca 100644 --- a/meetingnotes/Views/SettingsView.swift +++ b/meetingnotes/Views/SettingsView.swift @@ -97,7 +97,7 @@ struct SettingsView: View { } - // GitHub Link Section + // About Section VStack(alignment: .leading, spacing: 8) { Text("About") .font(.headline) @@ -112,6 +112,16 @@ struct SettingsView: View { Link("https://meetingnotes.owengretzinger.com", destination: URL(string: "https://meetingnotes.owengretzinger.com")!) .foregroundColor(.blue) + + // Link to Privacy Policy + Link("Privacy Policy", + destination: URL(string: "https://meetingnotes.owengretzinger.com/privacy")!) + .foregroundColor(.blue) + + // Link to Terms of Service + Link("Terms of Service", + destination: URL(string: "https://meetingnotes.owengretzinger.com/terms")!) + .foregroundColor(.blue) } // Save button