From a6f45aa5597192fbb0867b3199169ccdd350bf8a Mon Sep 17 00:00:00 2001 From: "Gerald M. Souders Jr" Date: Sun, 7 Dec 2025 02:35:58 +0900 Subject: [PATCH 1/6] feat(privacy): add privacy policy Add privacy policy page to the website. Still needs contact information. --- src/app/(privacy)/privacy/default.tsx | 3 + src/app/(privacy)/privacy/layout.module.css | 6 + src/app/(privacy)/privacy/layout.tsx | 9 + src/app/(privacy)/privacy/page.module.css | 0 src/app/(privacy)/privacy/page.tsx | 8 + src/components/landing/Footer.tsx | 5 +- .../privacy/PrivacyPolicy.module.css | 26 ++ src/components/privacy/PrivacyPolicy.tsx | 266 ++++++++++++++++++ 8 files changed, 322 insertions(+), 1 deletion(-) create mode 100644 src/app/(privacy)/privacy/default.tsx create mode 100644 src/app/(privacy)/privacy/layout.module.css create mode 100644 src/app/(privacy)/privacy/layout.tsx create mode 100644 src/app/(privacy)/privacy/page.module.css create mode 100644 src/app/(privacy)/privacy/page.tsx create mode 100644 src/components/privacy/PrivacyPolicy.module.css create mode 100644 src/components/privacy/PrivacyPolicy.tsx diff --git a/src/app/(privacy)/privacy/default.tsx b/src/app/(privacy)/privacy/default.tsx new file mode 100644 index 0000000..6ddf1b7 --- /dev/null +++ b/src/app/(privacy)/privacy/default.tsx @@ -0,0 +1,3 @@ +export default function Default() { + return null; +} diff --git a/src/app/(privacy)/privacy/layout.module.css b/src/app/(privacy)/privacy/layout.module.css new file mode 100644 index 0000000..0ea8bd5 --- /dev/null +++ b/src/app/(privacy)/privacy/layout.module.css @@ -0,0 +1,6 @@ +.main { + padding: 0.5rem; + display: grid; + grid-template-columns: 100%; + justify-items: center; +} diff --git a/src/app/(privacy)/privacy/layout.tsx b/src/app/(privacy)/privacy/layout.tsx new file mode 100644 index 0000000..95c81db --- /dev/null +++ b/src/app/(privacy)/privacy/layout.tsx @@ -0,0 +1,9 @@ +import styles from "./layout.module.css"; + +export default function PrivacyPageLayout({ + children, +}: { + children: React.ReactNode; +}) { + return
{children}
; +} diff --git a/src/app/(privacy)/privacy/page.module.css b/src/app/(privacy)/privacy/page.module.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/(privacy)/privacy/page.tsx b/src/app/(privacy)/privacy/page.tsx new file mode 100644 index 0000000..6fc8d63 --- /dev/null +++ b/src/app/(privacy)/privacy/page.tsx @@ -0,0 +1,8 @@ +import React from "react"; +import PrivacyPolicy from "@/components/privacy/PrivacyPolicy"; + +function PrivacyPage() { + return ; +} + +export default PrivacyPage; diff --git a/src/components/landing/Footer.tsx b/src/components/landing/Footer.tsx index 6c199ab..295f23e 100644 --- a/src/components/landing/Footer.tsx +++ b/src/components/landing/Footer.tsx @@ -20,8 +20,11 @@ const Footer = () => { > PDF SOURCE MATERIAL + + PRIVACY POLICY + diff --git a/src/components/privacy/PrivacyPolicy.module.css b/src/components/privacy/PrivacyPolicy.module.css new file mode 100644 index 0000000..ab4df4d --- /dev/null +++ b/src/components/privacy/PrivacyPolicy.module.css @@ -0,0 +1,26 @@ +.privacyPolicy { + max-width: 37.5rem; + display: flex; + flex-direction: column; + gap: 1rem; +} + +.orderedList, +.unorderedList, +.listitem { + list-style-type: revert; + list-style-position: revert; + margin: revert; + padding: revert; +} + +.listitem > section > p, +.listitem > * { + line-height: 1.5; +} + +.orderedList { + display: flex; + flex-direction: column; + gap: 1rem; +} diff --git a/src/components/privacy/PrivacyPolicy.tsx b/src/components/privacy/PrivacyPolicy.tsx new file mode 100644 index 0000000..02809f8 --- /dev/null +++ b/src/components/privacy/PrivacyPolicy.tsx @@ -0,0 +1,266 @@ +import Link from "next/link"; +import React from "react"; +import styles from "./PrivacyPolicy.module.css"; + +const lastUpdatedDate = "December 8th, 2025"; +const mainGooglePrivacyPolicy = "https://policies.google.com/privacy"; +const otherGooglePrivacyPolicy = + "https://policies.google.com/technologies/partner-sites"; + +export default function PrivacyPolicy() { + return ( +
+

Rep Yourself - Privacy Policy

+
+

+ last updated: +

+
+
    +
  1. +
    +
    Introduction
    +

    + Welcome to Rep Yourself! Our commitment is to help you achieve + your fitness goals. To improve your experience, our app uses + anonymous analytics to understand how its features are used. This + Privacy Policy explains what data is collected, why it's + collected, and how you can control it. Your privacy and trust are + our top priorities. +

    +
    +
  2. +
  3. +
    +
    What Information We Collect
    +

    + Rep Yourself collects anonymous, non-personal data to help us + improve the app. We do not collect personal information like your + name or email, and we do not track or store the specific number of + reps or sets you perform in your workouts. The anonymous + information we collect falls into two categories: +

    +
      +
    • + App Usage Information: + We log key events to understand how you interact with the app. + This includes actions like starting a new program, choosing a + grip type on Day 3, starting or skipping a workout, and viewing + your workout history. +
    • +
    • + Diagnostic Information: + To keep the app running smoothly, we collect data about + technical events. This includes tracking when a data migration + from the old app fails and the general reason for the failure, + such as an invalid file format. We also note whether permissions + for features like notifications are granted or denied. +
    • +
    +
    +
  4. +
  5. +
    +
    How We Use This Information
    +

    + We use this anonymous and aggregated data for one purpose: to make + Rep Yourself a better app. +

    +
      +
    • + To Improve Features: + By seeing which features are used most and where users might be + having trouble, we can focus our efforts on making the app more + intuitive and effective. For example, if we notice many users + skip a particular workout, we can investigate if it needs to be + adjusted. +
    • +
    • + To Fix Bugs: + Diagnostic information helps us quickly identify, diagnose, and + fix bugs and crashes. Seeing patterns in migration errors, for + instance, allows us to make the process more reliable for + everyone. +
    • +
    • + To Make Better Decisions: + Understanding how the app is used helps us make informed + decisions about what new features to build and which to improve, + ensuring we spend our time on what matters most to our users. +
    • +
    +
    +
  6. +
  7. +
    +
    Third-Party Services & Data Sharing
    +

    + To provide our services and to understand how our app is used, Rep + Yourself relies on third-party services that may collect + information from your device. We do not share your data with any + third parties other than those listed below, which are essential + for the app's functionality and improvement. +

    +
      +
    • + Firebase Analytics (a Google Service) +

      + We use Firebase Analytics to collect the anonymous usage and + diagnostic data described in this policy. This service helps + us understand user behavior, identify popular features, and + diagnose bugs. The data sent to Firebase is aggregated and + does not personally identify you. +

      +

      + As Firebase is a Google product, its use is governed by + Google's privacy practices. We strongly encourage you to + review their policies to understand how they handle data. +

      +
        +
      • + Google Privacy Policy: + + {mainGooglePrivacyPolicy} + +
      • +
      • + + How Google uses information from sites or apps that use + our services:{" "} + + + {otherGooglePrivacyPolicy} + +
      • +
      +
    • +
    +
    +
  8. +
  9. +
    +
    Your Choices and How to Opt-Out
    +

    + You are in full control of your data. You can choose to disable + the collection of anonymous usage data at any time. To do so, + please navigate to the Settings screen within the Rep Yourself app + and turn off the "Share anonymous usage data" toggle. This will + stop any future data from being sent. +

    +
    +
  10. +
  11. +
    +
    Your Rights Under GDPR
    +

    + If you are a resident of the European Economic Area (EEA), you + have certain data protection rights under the General Data + Protection Regulation (GDPR). Rep Yourself is committed to + upholding these rights. While our app collects only anonymous and + non-personal usage data, we recognize your rights to: +

    +
      +
    • + + The right to access, update, or delete the information we have + on you.{" "} + + Since the data we collect is anonymous, we cannot identify and + retrieve data for a specific person. However, you can + effectively delete your data by resetting the app's advertising + ID or by using the "Reset Program" function, which deletes all + locally stored workout history. +
    • +
    • + The right of rectification. If you believe any + data is inaccurate, you have the right to have it rectified. +
    • +
    • + The right to object. You have the right to + object to our processing of your data. You can exercise this + right by disabling analytics collection in the app's Settings + screen. +
    • +
    • + The right of portability. You have the right to + be provided with a copy of your data in a structured, + machine-readable format. Your workout history can be exported + from the app for this purpose. +
    • +
    • + The right to withdraw consent. You have the + right to withdraw your consent at any time where Rep Yourself + relied on your consent to process your information. You can do + this by toggling off analytics in the Settings screen. +
    • +
    +
    +
  12. +
  13. +
    +
    Your California Privacy Rights (CCPA/CPRA)
    +

    + If you are a California resident, you have specific rights under the + California Consumer Privacy Act (CCPA) and the California Privacy + Rights Act (CPRA). +

    +
      +
    • + Right to Know and Access: You have the right to + know what categories of information we collect and the purposes + for which we use it. This is outlined in the "Information We + Collect" and "How We Use This Information" sections of this + policy. +
    • +
    • + Right to Opt-Out of Sale or Sharing: Rep Yourself + does not sell or share your personal information with third + parties for cross-context behavioral advertising. As such, there + is no "sale" or "sharing" to opt out of. We only share anonymous + data with our analytics provider, Google, for the sole purpose of + improving our own app. +
    • +
    • + + Right to Limit Use of Sensitive Personal Information:{" "} + + We do not collect "Sensitive Personal Information" as defined by + California law. +
    • +
    • + Right to Deletion: You have the right to request + the deletion of your information. This can be accomplished by + using the "Reset Program" function in the app's settings, which + will permanently delete all your stored workout data. +
    • +
    • + Non-Discrimination: We will not discriminate + against you for exercising any of your CCPA/CPRA rights. +
    • +
    +
  14. +
  15. +
    +
    Changes to This Privacy Policy
    +

    + I may update our Privacy Policy from time to time. Thus, you are + advised to review this page periodically for any changes. I will + notify you of any changes by posting the new Privacy Policy on + this page. These changes are effective immediately after they are + posted on this page. +

    +
    +
  16. +
  17. +
    +
    Contact
    +

    + If you have any questions or suggestions about the Privacy Policy, + do not hesitate to contact me. +

    +
    +
  18. +
+
+ ); +} From 79aef6a149ebe9eff9ce75ac493dfab77786c853 Mon Sep 17 00:00:00 2001 From: "Gerald M. Souders Jr" Date: Sun, 7 Dec 2025 09:48:26 +0900 Subject: [PATCH 2/6] feat(privacy): add contact detail --- src/components/privacy/PrivacyPolicy.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/privacy/PrivacyPolicy.tsx b/src/components/privacy/PrivacyPolicy.tsx index 02809f8..b1fe52d 100644 --- a/src/components/privacy/PrivacyPolicy.tsx +++ b/src/components/privacy/PrivacyPolicy.tsx @@ -6,6 +6,7 @@ const lastUpdatedDate = "December 8th, 2025"; const mainGooglePrivacyPolicy = "https://policies.google.com/privacy"; const otherGooglePrivacyPolicy = "https://policies.google.com/technologies/partner-sites"; +const emailAddress = "repyourself.privacy@gmail.com"; export default function PrivacyPolicy() { return ( @@ -103,7 +104,7 @@ export default function PrivacyPolicy() {

  • - Firebase Analytics (a Google Service) + Firebase Analytics (a Google Service)

    We use Firebase Analytics to collect the anonymous usage and diagnostic data described in this policy. This service helps @@ -258,6 +259,7 @@ export default function PrivacyPolicy() { If you have any questions or suggestions about the Privacy Policy, do not hesitate to contact me.

    +

    {emailAddress}

  • From 0ad347b7f8ced9d51ac8849323aa8c212b60e849 Mon Sep 17 00:00:00 2001 From: "Gerald M. Souders Jr" Date: Sun, 7 Dec 2025 10:09:27 +0900 Subject: [PATCH 3/6] fix(privacy): remove unescaped characters --- src/components/privacy/PrivacyPolicy.tsx | 41 ++++++++++++------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/components/privacy/PrivacyPolicy.tsx b/src/components/privacy/PrivacyPolicy.tsx index b1fe52d..c3a348e 100644 --- a/src/components/privacy/PrivacyPolicy.tsx +++ b/src/components/privacy/PrivacyPolicy.tsx @@ -25,7 +25,7 @@ export default function PrivacyPolicy() { Welcome to Rep Yourself! Our commitment is to help you achieve your fitness goals. To improve your experience, our app uses anonymous analytics to understand how its features are used. This - Privacy Policy explains what data is collected, why it's + Privacy Policy explains what data is collected, why it is collected, and how you can control it. Your privacy and trust are our top priorities.

    @@ -100,7 +100,7 @@ export default function PrivacyPolicy() { Yourself relies on third-party services that may collect information from your device. We do not share your data with any third parties other than those listed below, which are essential - for the app's functionality and improvement. + for the app`&apos`s functionality and improvement.

    • @@ -114,7 +114,7 @@ export default function PrivacyPolicy() {

      As Firebase is a Google product, its use is governed by - Google's privacy practices. We strongly encourage you to + Google`&apos`s privacy practices. We strongly encourage you to review their policies to understand how they handle data.

        @@ -145,8 +145,8 @@ export default function PrivacyPolicy() { You are in full control of your data. You can choose to disable the collection of anonymous usage data at any time. To do so, please navigate to the Settings screen within the Rep Yourself app - and turn off the "Share anonymous usage data" toggle. This will - stop any future data from being sent. + and turn off the `"`Share anonymous usage data`"` toggle. + This will stop any future data from being sent.

        @@ -168,9 +168,9 @@ export default function PrivacyPolicy() { Since the data we collect is anonymous, we cannot identify and retrieve data for a specific person. However, you can - effectively delete your data by resetting the app's advertising - ID or by using the "Reset Program" function, which deletes all - locally stored workout history. + effectively delete your data by resetting the app`&apos`s + advertising ID or by using the `"`Reset Program`"` + function, which deletes all locally stored workout history.
      • The right of rectification. If you believe any @@ -179,8 +179,8 @@ export default function PrivacyPolicy() {
      • The right to object. You have the right to object to our processing of your data. You can exercise this - right by disabling analytics collection in the app's Settings - screen. + right by disabling analytics collection in the app`&apos`s + Settings screen.
      • The right of portability. You have the right to @@ -209,30 +209,31 @@ export default function PrivacyPolicy() {
      • Right to Know and Access: You have the right to know what categories of information we collect and the purposes - for which we use it. This is outlined in the "Information We - Collect" and "How We Use This Information" sections of this - policy. + for which we use it. This is outlined in the `"`Information We + Collect`"` and `"`How We Use This Information`"` + sections of this policy.
      • Right to Opt-Out of Sale or Sharing: Rep Yourself does not sell or share your personal information with third parties for cross-context behavioral advertising. As such, there - is no "sale" or "sharing" to opt out of. We only share anonymous - data with our analytics provider, Google, for the sole purpose of - improving our own app. + is no `"`sale`"` or `"`sharing`"` to opt out of. + We only share anonymous data with our analytics provider, Google, + for the sole purpose of improving our own app.
      • Right to Limit Use of Sensitive Personal Information:{" "} - We do not collect "Sensitive Personal Information" as defined by - California law. + We do not collect `"`Sensitive Personal Information`"` as + defined by California law.
      • Right to Deletion: You have the right to request the deletion of your information. This can be accomplished by - using the "Reset Program" function in the app's settings, which - will permanently delete all your stored workout data. + using the `"`Reset Program`"` function in the app`&apos`s + settings, which will permanently delete all your stored workout + data.
      • Non-Discrimination: We will not discriminate From 9cdba3bed1fbdc9baeb56d13959793fa004d7c91 Mon Sep 17 00:00:00 2001 From: "Gerald M. Souders Jr" Date: Sun, 7 Dec 2025 13:28:28 +0900 Subject: [PATCH 4/6] fix(privacy): mobile responsive --- .../privacy/PrivacyPolicy.module.css | 1 + src/components/privacy/PrivacyPolicy.tsx | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/components/privacy/PrivacyPolicy.module.css b/src/components/privacy/PrivacyPolicy.module.css index ab4df4d..4bf9ff6 100644 --- a/src/components/privacy/PrivacyPolicy.module.css +++ b/src/components/privacy/PrivacyPolicy.module.css @@ -1,4 +1,5 @@ .privacyPolicy { + width: 100%; max-width: 37.5rem; display: flex; flex-direction: column; diff --git a/src/components/privacy/PrivacyPolicy.tsx b/src/components/privacy/PrivacyPolicy.tsx index c3a348e..e9bb1fb 100644 --- a/src/components/privacy/PrivacyPolicy.tsx +++ b/src/components/privacy/PrivacyPolicy.tsx @@ -20,7 +20,7 @@ export default function PrivacyPolicy() {
        1. -
          Introduction
          + Introduction

          Welcome to Rep Yourself! Our commitment is to help you achieve your fitness goals. To improve your experience, our app uses @@ -33,7 +33,7 @@ export default function PrivacyPolicy() {

        2. -
          What Information We Collect
          + What Information We Collect

          Rep Yourself collects anonymous, non-personal data to help us improve the app. We do not collect personal information like your @@ -62,7 +62,7 @@ export default function PrivacyPolicy() {

        3. -
          How We Use This Information
          + How We Use This Information

          We use this anonymous and aggregated data for one purpose: to make Rep Yourself a better app. @@ -94,7 +94,7 @@ export default function PrivacyPolicy() {

        4. -
          Third-Party Services & Data Sharing
          + Third-Party Services & Data Sharing

          To provide our services and to understand how our app is used, Rep Yourself relies on third-party services that may collect @@ -140,7 +140,7 @@ export default function PrivacyPolicy() {

        5. -
          Your Choices and How to Opt-Out
          + Your Choices and How to Opt-Out

          You are in full control of your data. You can choose to disable the collection of anonymous usage data at any time. To do so, @@ -152,7 +152,7 @@ export default function PrivacyPolicy() {

        6. -
          Your Rights Under GDPR
          + Your Rights Under GDPR

          If you are a resident of the European Economic Area (EEA), you have certain data protection rights under the General Data @@ -199,7 +199,7 @@ export default function PrivacyPolicy() {

        7. -
          Your California Privacy Rights (CCPA/CPRA)
          + Your California Privacy Rights (CCPA/CPRA)

          If you are a California resident, you have specific rights under the California Consumer Privacy Act (CCPA) and the California Privacy @@ -243,7 +243,7 @@ export default function PrivacyPolicy() {

        8. -
          Changes to This Privacy Policy
          + Changes to This Privacy Policy

          I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. I will @@ -255,7 +255,7 @@ export default function PrivacyPolicy() {

        9. -
          Contact
          + Contact

          If you have any questions or suggestions about the Privacy Policy, do not hesitate to contact me. From 757ec29cbffdf3e55a699bca6fec445448d111ab Mon Sep 17 00:00:00 2001 From: "Gerald M. Souders Jr" Date: Sun, 7 Dec 2025 18:13:39 +0900 Subject: [PATCH 5/6] fix(privacy): add word-wrap --- src/app/(privacy)/privacy/layout.module.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/(privacy)/privacy/layout.module.css b/src/app/(privacy)/privacy/layout.module.css index 0ea8bd5..4c28076 100644 --- a/src/app/(privacy)/privacy/layout.module.css +++ b/src/app/(privacy)/privacy/layout.module.css @@ -3,4 +3,5 @@ display: grid; grid-template-columns: 100%; justify-items: center; + word-wrap: break-word; } From 5f4a5f13b1aedba31672fb056340eeba00c9b48e Mon Sep 17 00:00:00 2001 From: "Gerald M. Souders Jr" Date: Sun, 7 Dec 2025 19:06:38 +0900 Subject: [PATCH 6/6] fix(privacy): correct escaped characters --- src/components/privacy/PrivacyPolicy.tsx | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/privacy/PrivacyPolicy.tsx b/src/components/privacy/PrivacyPolicy.tsx index e9bb1fb..e2a291d 100644 --- a/src/components/privacy/PrivacyPolicy.tsx +++ b/src/components/privacy/PrivacyPolicy.tsx @@ -100,7 +100,7 @@ export default function PrivacyPolicy() { Yourself relies on third-party services that may collect information from your device. We do not share your data with any third parties other than those listed below, which are essential - for the app`&apos`s functionality and improvement. + for the app&asos;s functionality and improvement.

          • @@ -114,7 +114,7 @@ export default function PrivacyPolicy() {

            As Firebase is a Google product, its use is governed by - Google`&apos`s privacy practices. We strongly encourage you to + Google's privacy practices. We strongly encourage you to review their policies to understand how they handle data.

              @@ -145,7 +145,7 @@ export default function PrivacyPolicy() { You are in full control of your data. You can choose to disable the collection of anonymous usage data at any time. To do so, please navigate to the Settings screen within the Rep Yourself app - and turn off the `"`Share anonymous usage data`"` toggle. + and turn off the "Share anonymous usage data" toggle. This will stop any future data from being sent.

          @@ -168,8 +168,8 @@ export default function PrivacyPolicy() { Since the data we collect is anonymous, we cannot identify and retrieve data for a specific person. However, you can - effectively delete your data by resetting the app`&apos`s - advertising ID or by using the `"`Reset Program`"` + effectively delete your data by resetting the app's + advertising ID or by using the "Reset Program" function, which deletes all locally stored workout history.
        10. @@ -179,7 +179,7 @@ export default function PrivacyPolicy() {
        11. The right to object. You have the right to object to our processing of your data. You can exercise this - right by disabling analytics collection in the app`&apos`s + right by disabling analytics collection in the app's Settings screen.
        12. @@ -209,29 +209,29 @@ export default function PrivacyPolicy() {
        13. Right to Know and Access: You have the right to know what categories of information we collect and the purposes - for which we use it. This is outlined in the `"`Information We - Collect`"` and `"`How We Use This Information`"` - sections of this policy. + for which we use it. This is outlined in the "Information We + Collect" and "How We Use This Information" sections + of this policy.
        14. Right to Opt-Out of Sale or Sharing: Rep Yourself does not sell or share your personal information with third parties for cross-context behavioral advertising. As such, there - is no `"`sale`"` or `"`sharing`"` to opt out of. - We only share anonymous data with our analytics provider, Google, - for the sole purpose of improving our own app. + is no "sale" or "sharing" to opt out of. We + only share anonymous data with our analytics provider, Google, for + the sole purpose of improving our own app.
        15. Right to Limit Use of Sensitive Personal Information:{" "} - We do not collect `"`Sensitive Personal Information`"` as + We do not collect "Sensitive Personal Information" as defined by California law.
        16. Right to Deletion: You have the right to request the deletion of your information. This can be accomplished by - using the `"`Reset Program`"` function in the app`&apos`s + using the "Reset Program" function in the app's settings, which will permanently delete all your stored workout data.